diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 6387a97a4..cbf2c30bb 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -418,6 +418,8 @@ class ApplicationController < ActionController::Base
@project = Project.find(params[:project_id])
elsif params[:course_id]
@course = Course.find(params[:course_id])
+ elsif params[:org_subfield_id]
+ @org_subfield = OrgSubfield.find(params[:org_subfield_id])
end
rescue ActiveRecord::RecordNotFound
render_404
diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb
index 37182dbcf..d371ed4cb 100644
--- a/app/controllers/attachments_controller.rb
+++ b/app/controllers/attachments_controller.rb
@@ -240,6 +240,8 @@ class AttachmentsController < ApplicationController
format.html { redirect_to_referer_or respond_path(@attachment.container) }
elsif !@attachment.container.nil? && @attachment.container.is_a?(PhoneAppVersion)
format.html { redirect_to_referer_or mobile_version_path }
+ elsif !@attachment.container.nil? && @attachment.container.is_a?(OrgSubfield)
+ format.html {redirect_to_referer_or org_subfield_files_path(@attachment.container)}
else
if @project.nil?
format.html { redirect_to_referer_or forum_memo_path(@attachment.container.forum, @attachment.container) }
diff --git a/app/controllers/exercise_controller.rb b/app/controllers/exercise_controller.rb
index a99ab32ec..2a75d0580 100644
--- a/app/controllers/exercise_controller.rb
+++ b/app/controllers/exercise_controller.rb
@@ -18,13 +18,13 @@ class ExerciseController < ApplicationController
end_exercises.each do |exercise|
exercise.update_column('exercise_status', 3)
end
- if @course.is_public == 0 && !User.current.member_of_course?(@course)
+ if @course.is_public == 0 && !(User.current.member_of_course?(@course)||User.current.admin?)
render_403
return
end
remove_invalid_exercise(@course)
@is_teacher = User.current.allowed_to?(:as_teacher,@course)
- if @is_teacher
+ if @is_teacher || User.current.admin?
exercises = @course.exercises.order("created_at asc")
else
exercises = @course.exercises.where(:exercise_status => 2).order("created_at asc")
@@ -48,13 +48,13 @@ class ExerciseController < ApplicationController
end_exercises.each do |exercise|
exercise.update_column('exercise_status', 3)
end
- unless User.current.member_of_course?(@course)
+ unless User.current.member_of_course?(@course) || User.current.admin?
render_403
return
end
@exercise = Exercise.find params[:id]
@is_teacher = User.current.allowed_to?(:as_teacher,@course) || User.current.admin?
- if @exercise.exercise_status != 2 && (!User.current.allowed_to?(:as_teacher,@course) || User.current.admin?)
+ if @exercise.exercise_status != 2 && (!(User.current.allowed_to?(:as_teacher,@course) || User.current.admin?))
render_403
return
end
diff --git a/app/controllers/files_controller.rb b/app/controllers/files_controller.rb
index c894680a6..328446fbb 100644
--- a/app/controllers/files_controller.rb
+++ b/app/controllers/files_controller.rb
@@ -299,6 +299,10 @@ class FilesController < ApplicationController
render :layout => 'base_courses'
elsif params[:org_subfield_id]
@container_type = 2
+ @organization = Organization.find(params[:organization_id])
+ @containers = [ OrgSubfield.includes(:attachments).reorder(sort).find(@org_subfield.id)]
+ show_attachments @containers
+ render :layout => 'base_org'
# @subfield = params[:org_subfield_id]
end
@@ -424,8 +428,39 @@ class FilesController < ApplicationController
redirect_to course_files_url(@course)
}
end
- end
+ elsif @org_subfield
+ @addTag=false
+ # if params[:in_org_subfield_toolbar]
+ # @in_org_subfield_toolbar = params[:in_org_subfield_toolbar]
+ # end
+ attachments = Attachment.attach_filesex(@org_subfield, params[:attachments], params[:org_subfield_attachment_type])
+ # if !attachments.empty? && !attachments[:files].blank? && Setting.notified_events.include?('file_added')
+ # Mailer.run.attachments_added(attachments[:files])
+ # end
+
+ # TODO: 临时用 nyan
+ sort_init 'created_on', 'desc'
+ sort_update 'created_on' => "#{Attachment.table_name}.created_on",
+ 'filename' => "#{Attachment.table_name}.filename",
+ 'size' => "#{Attachment.table_name}.filesize",
+ 'downloads' => "#{Attachment.table_name}.downloads"
+
+ @containers = [OrgSubfield.includes(:attachments).reorder("#{Attachment.table_name}.created_on DESC").find(@org_subfield.id)] #modify by Long Jun
+ # @containers += @org_subfield.versions.includes(:attachments).reorder("#{Attachment.table_name}.created_on DESC").all.sort
+
+ show_attachments @containers
+
+ @attachtype = 0
+ @contenttype = 0
+
+ respond_to do |format|
+ format.js
+ format.html {
+ redirect_to org_subfield_files_url(@org_subfield)
+ }
+ end
+ end
end
end
diff --git a/app/controllers/homework_common_controller.rb b/app/controllers/homework_common_controller.rb
index 67499655f..a8d6dfe8f 100644
--- a/app/controllers/homework_common_controller.rb
+++ b/app/controllers/homework_common_controller.rb
@@ -126,14 +126,33 @@ class HomeworkCommonController < ApplicationController
if @homework_detail_manual.comment_status == 1
student_works = @homework.student_works
if student_works && student_works.size >= 2
- student_works.each_with_index do |work, index|
- user = work.user
- n = @homework_detail_manual.evaluation_num
- n = n < student_works.size ? n : student_works.size - 1
- assigned_homeworks = get_assigned_homeworks(student_works, n, index)
- assigned_homeworks.each do |h|
- student_works_evaluation_distributions = StudentWorksEvaluationDistribution.new(user_id: user.id, student_work_id: h.id)
- student_works_evaluation_distributions.save
+ if @homework.homework_type == 3
+ student_work_projects = @homework.student_work_projects.where("student_work_id is not null")
+ student_work_projects.each_with_index do |pro_work, pro_index|
+ n = @homework_detail_manual.evaluation_num
+ n = n < student_works.size ? n : student_works.size - 1
+ work_index = -1
+ student_works.each_with_index do |stu_work, stu_index|
+ if stu_work.id.to_i == pro_work.student_work_id.to_i
+ work_index = stu_index
+ end
+ end
+ assigned_homeworks = get_assigned_homeworks(student_works, n, work_index)
+ assigned_homeworks.each do |h|
+ student_works_evaluation_distributions = StudentWorksEvaluationDistribution.new(user_id: pro_work.user_id, student_work_id: h.id)
+ student_works_evaluation_distributions.save
+ end
+ end
+ else
+ student_works.each_with_index do |work, index|
+ user = work.user
+ n = @homework_detail_manual.evaluation_num
+ n = n < student_works.size ? n : student_works.size - 1
+ assigned_homeworks = get_assigned_homeworks(student_works, n, index)
+ assigned_homeworks.each do |h|
+ student_works_evaluation_distributions = StudentWorksEvaluationDistribution.new(user_id: user.id, student_work_id: h.id)
+ student_works_evaluation_distributions.save
+ end
end
end
@homework_detail_manual.update_column('comment_status', 2)
@@ -143,7 +162,8 @@ class HomeworkCommonController < ApplicationController
Mailer.send_mail_anonymous_comment_open(@homework).deliver
else
@statue = 2
- end
+
+ end
else
@statue = 3
end
@@ -277,6 +297,7 @@ class HomeworkCommonController < ApplicationController
@homework = HomeworkCommon.find params[:id]
@homework_detail_manual = @homework.homework_detail_manual
@homework_detail_programing = @homework.homework_detail_programing
+ @homework_detail_group = @homework.homework_detail_group
@course = @homework.course
rescue
render_404
diff --git a/app/controllers/my_controller.rb b/app/controllers/my_controller.rb
index 977a77569..0883b3799 100644
--- a/app/controllers/my_controller.rb
+++ b/app/controllers/my_controller.rb
@@ -129,7 +129,7 @@ class MyController < ApplicationController
@user.safe_attributes = params[:user]
@user.pref.attributes = params[:pref]
@user.pref[:no_self_notified] = (params[:no_self_notified] == '1')
- @user.login = params[:login]
+ #@user.login = params[:login]
unless @user.user_extensions.nil?
if @user.user_extensions.identity == 2
@user.firstname = params[:enterprise_name]
diff --git a/app/controllers/org_subfields_controller.rb b/app/controllers/org_subfields_controller.rb
index 00b88fdaa..1dc7885fe 100644
--- a/app/controllers/org_subfields_controller.rb
+++ b/app/controllers/org_subfields_controller.rb
@@ -17,4 +17,8 @@ class OrgSubfieldsController < ApplicationController
@organization = Organization.find(@subfield.organization_id)
@subfield.update_attributes(:name => params[:name])
end
+
+ def show
+
+ end
end
diff --git a/app/controllers/student_work_controller.rb b/app/controllers/student_work_controller.rb
index 77868c689..f79646ade 100644
--- a/app/controllers/student_work_controller.rb
+++ b/app/controllers/student_work_controller.rb
@@ -3,7 +3,7 @@ class StudentWorkController < ApplicationController
include StudentWorkHelper
require 'bigdecimal'
require "base64"
- before_filter :find_homework, :only => [:new, :index, :create, :student_work_absence_penalty, :absence_penalty_list, :evaluation_list, :program_test,:set_score_rule,:forbidden_anonymous_comment,:delete_work]
+ before_filter :find_homework, :only => [:new, :index, :create, :student_work_absence_penalty, :absence_penalty_list, :evaluation_list, :program_test,:set_score_rule,:forbidden_anonymous_comment,:delete_work,:new_student_work_project,:student_work_project,:cancel_relate_project,:search_course_students]
before_filter :find_work, :only => [:edit, :update, :show, :destroy, :add_score, :praise_student_work,:retry_work,:revise_attachment]
before_filter :member_of_course, :only => [:index, :new, :create, :show, :add_score, :praise_student_work]
before_filter :author_of_work, :only => [:edit, :update, :destroy]
@@ -95,12 +95,27 @@ class StudentWorkController < ApplicationController
@stundet_works = search_homework_member @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").joins(:user).where("users.id in #{student_in_group}").order("#{@order} #{@b_sort}"),@name
@show_all = true
elsif @homework.homework_detail_manual.comment_status == 1 #学生 && 未开启匿评 只看到自己的
- @stundet_works = @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").where(:user_id => User.current.id)
+ if @homework.homework_type == 3
+ pro = @homework.student_work_projects.where(:user_id => User.current.id).first
+ @stundet_works = @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").where(:id => pro.student_work_id)
+ else
+ @stundet_works = @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").where(:user_id => User.current.id)
+ end
elsif @homework.homework_detail_manual.comment_status == 2 #学生 && 开启匿评 看到匿评列表
- my_work = @homework.student_works.where(:user_id => User.current.id)
+ if @homework.homework_type == 3
+ pro = @homework.student_work_projects.where(:user_id => User.current.id).first
+ my_work = @homework.student_works.where(:id => pro.student_work_id)
+ else
+ my_work = @homework.student_works.where(:user_id => User.current.id)
+ end
@stundet_works = my_work + User.current.student_works_evaluation_distributions.map(&:student_work).select { |work| work.homework_common_id == @homework.id}
elsif @homework.homework_detail_manual.comment_status == 3 #学生 && 关闭匿评 未提交作品之前列表为空,提交了作品看到所有的
- my_work = @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").where(:user_id => User.current.id)
+ if @homework.homework_type == 3
+ pro = @homework.student_work_projects.where(:user_id => User.current.id).first
+ my_work = @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").where(:id => pro.student_work_id)
+ else
+ my_work = @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").where(:user_id => User.current.id)
+ end
if my_work.empty?
@stundet_works = []
else
@@ -116,12 +131,27 @@ class StudentWorkController < ApplicationController
@stundet_works = search_homework_member @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").order("#{@order} #{@b_sort}"),@name
@show_all = true
elsif @homework.homework_detail_manual.comment_status == 1 #学生 && 未开启匿评 只看到自己的
- @stundet_works = @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").where(:user_id => User.current.id)
+ if @homework.homework_type == 3
+ pro = @homework.student_work_projects.where(:user_id => User.current.id).first
+ @stundet_works = @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").where(:id => pro.student_work_id)
+ else
+ @stundet_works = @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").where(:user_id => User.current.id)
+ end
elsif @homework.homework_detail_manual.comment_status == 2 #学生 && 开启匿评 看到匿评列表
- my_work = @homework.student_works.where(:user_id => User.current.id)
+ if @homework.homework_type == 3
+ pro = @homework.student_work_projects.where(:user_id => User.current.id).first
+ my_work = @homework.student_works.where(:id => pro.student_work_id)
+ else
+ my_work = @homework.student_works.where(:user_id => User.current.id)
+ end
@stundet_works = my_work + User.current.student_works_evaluation_distributions.map(&:student_work).select { |work| work.homework_common_id == @homework.id}
elsif @homework.homework_detail_manual.comment_status == 3 #学生 && 关闭匿评 未提交作品之前列表为空,提交了作品看到所有的
- my_work = @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").where(:user_id => User.current.id)
+ if @homework.homework_type == 3
+ pro = @homework.student_work_projects.where(:user_id => User.current.id).first
+ my_work = @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").where(:id => pro.student_work_id)
+ else
+ my_work = @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").where(:user_id => User.current.id)
+ end
if my_work.empty?
@stundet_works = []
else
@@ -190,6 +220,10 @@ class StudentWorkController < ApplicationController
student_work.user_id = User.current.id
student_work.save_attachments(params[:attachments])
render_attachment_warning_if_needed(student_work)
+ if @homework.homework_type == 3 && @homework.homework_detail_group.base_on_project == 1
+ @student_work_project = @homework.student_work_projects.where("user_id = #{User.current.id}").first
+ student_work.project_id = @student_work_project.project_id
+ end
#提交作品时,计算是否迟交
if Time.parse(@homework.end_time.to_s).strftime("%Y-%m-%d") < Time.parse(Time.now.to_s).strftime("%Y-%m-%d")
student_work.late_penalty = @homework.late_penalty
@@ -197,6 +231,35 @@ class StudentWorkController < ApplicationController
student_work.late_penalty = 0
end
if student_work.save
+ if @homework.homework_type == 3 && @homework.homework_detail_group.base_on_project == 1
+ @student_work_project.student_work_id = student_work.id
+ @student_work_project.save
+ members = params[:group_member_ids].split(',')
+ for i in 1 .. members.count-1
+ stu_project = StudentWorkProject.new
+ stu_project.homework_common_id = @homework.id
+ stu_project.student_work_id = student_work.id
+ stu_project.project_id = @student_work_project.project_id
+ stu_project.user_id = members[i].to_i
+ stu_project.is_leader = 0
+ stu_project.save
+ end
+ elsif @homework.homework_type == 3 && @homework.homework_detail_group.base_on_project == 0
+ members = params[:group_member_ids].split(',')
+ for i in 0 .. members.count-1
+ stu_project = StudentWorkProject.new
+ stu_project.homework_common_id = @homework.id
+ stu_project.student_work_id = student_work.id
+ stu_project.project_id = -1
+ stu_project.user_id = members[i].to_i
+ if i == 0
+ stu_project.is_leader = 1
+ else
+ stu_project.is_leader = 0
+ end
+ stu_project.save
+ end
+ end
course_activity = CourseActivity.where("course_act_type='HomeworkCommon' and course_act_id =#{@homework.id}").first
if course_activity
course_activity.updated_at = Time.now
@@ -276,6 +339,18 @@ class StudentWorkController < ApplicationController
def destroy
if @work.destroy
+ if @homework.homework_type == 3 && @homework.homework_detail_group.base_on_project == 1
+ pros = @work.student_work_projects.where("is_leader = 0")
+ pros.each do |pro|
+ pro.destroy
+ end
+ project = @work.student_work_projects.where("is_leader = 1").first
+ project.update_attributes(:student_work_id => nil)
+ elsif @homework.homework_type == 3 && @homework.homework_detail_group.base_on_project == 0
+ @work.student_work_projects.each do |pro2|
+ pro2.destroy
+ end
+ end
respond_to do |format|
format.html {
redirect_to student_work_index_url(:homework => @homework.id)
@@ -288,12 +363,36 @@ class StudentWorkController < ApplicationController
@work = StudentWork.where("user_id =? and homework_common_id =?", User.current.id, @homework.id).first
if @work
@work.destroy
+ if @homework.homework_type == 3 && @homework.homework_detail_group.base_on_project == 1
+ pros = @work.student_work_projects.where("is_leader = 0")
+ pros.each do |pro|
+ pro.destroy
+ end
+ project = @work.student_work_projects.where("is_leader = 1").first
+ project.update_attributes(:student_work_id => nil)
+ elsif @homework.homework_type == 3 && @homework.homework_detail_group.base_on_project == 0
+ @work.student_work_projects.each do |pro2|
+ pro2.destroy
+ end
+ end
end
redirect_to user_homeworks_user_path(User.current.id)
end
def retry_work
if @work.destroy
+ if @homework.homework_type == 3 && @homework.homework_detail_group.base_on_project == 1
+ pros = @work.student_work_projects.where("is_leader = 0")
+ pros.each do |pro|
+ pro.destroy
+ end
+ project = @work.student_work_projects.where("is_leader = 1").first
+ project.update_attributes(:student_work_id => nil)
+ elsif @homework.homework_type == 3 && @homework.homework_detail_group.base_on_project == 0
+ @work.student_work_projects.each do |pro2|
+ pro2.destroy
+ end
+ end
@student_work = StudentWork.new
respond_to do |format|
format.js
@@ -540,7 +639,89 @@ class StudentWorkController < ApplicationController
end
end
+ def new_student_work_project
+ @user_activity_id = params[:user_activity_id].to_i
+ @is_in_course = params[:is_in_course].to_i
+ @course_activity = params[:course_activity].to_i
+ respond_to do |format|
+ format.js
+ end
+ end
+
+ #创建作业的关联项目
+ def student_work_project
+ @project = StudentWorkProject.new
+ @project.homework_common_id = @homework.id
+ @project.project_id = (Project.find params[:projectName].to_i).id
+ @project.user_id = User.current.id
+ @project.is_leader = 1
+ if @project.save
+ @user_activity_id = params[:user_activity_id].to_i
+ @is_in_course = params[:is_in_course].to_i
+ @course_activity = params[:course_activity].to_i
+ respond_to do |format|
+ format.js
+ end
+ end
+
+ end
+
+ #查找学生创建的项目列表
+ def search_user_projects
+ condition = '%%'
+ if !params[:name].nil?
+ condition = "%#{params[:name].strip}%".gsub(" ","")
+ end
+ @project_ids = Project.where("user_id = #{User.current.id} and name like '#{condition}'")
+ @first = params[:first].to_i
+ respond_to do |format|
+ format.js
+ end
+ end
+
+ #查找课程的学生
+ def search_course_students
+ name = ""
+ unless params[:name].nil?
+ name = params[:name]
+ end
+ all_student_ids = "(" + @homework.course.student.map{|student| student.student_id}.join(",") + ")"
+ all_students = User.where("id in #{all_student_ids}")
+ @users = searchstudent_by_name all_students,name
+ respond_to do |format|
+ format.js
+ end
+ end
+
+ def cancel_relate_project
+ relate_pro = StudentWorkProject.where("user_id = #{User.current.id} and homework_common_id = #{@homework.id}").first
+ if relate_pro.destroy
+ @user_activity_id = params[:user_activity_id].to_i
+ @is_in_course = params[:is_in_course].to_i
+ @course_activity = params[:course_activity].to_i
+ respond_to do |format|
+ format.js
+ end
+ end
+ end
+
private
+ def searchstudent_by_name users, name
+ mems = []
+ if name != ""
+ name = name.to_s.downcase
+ users.each do |m|
+ username = m.lastname.to_s.downcase + m.firstname.to_s.downcase
+ if(m.login.to_s.downcase.include?(name) || m.user_extensions[:student_id].to_s.downcase.include?(name) || username.include?(name))
+ mems << m
+ end
+ end
+ else
+ mems = users
+ end
+ mems
+ end
+
def hsd_committed_work?(user, homework)
sw = StudentWork.where("user_id =? and homework_common_id =?", user, homework).first
sw.nil? ? result = false : result = true
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index 834009d71..b6d336547 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -551,12 +551,21 @@ class UsersController < ApplicationController
)
end
end
+ end
+ #分组作业
+ if homework.homework_type == 3
+ homework_detail_group = HomeworkDetailGroup.new
+ homework.homework_detail_group = homework_detail_group
+ homework_detail_group.min_num = params[:min_num].to_i
+ homework_detail_group.max_num = params[:max_num].to_i
+ homework_detail_group.base_on_project = params[:base_on_project].to_i
end
if homework.save
homework_detail_manual.save if homework_detail_manual
homework_detail_programing.save if homework_detail_programing
+ homework_detail_group.save if homework_detail_group
if params[:is_in_course] == "1"
redirect_to homework_common_index_path(:course => homework.course_id)
diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb
index 815a44839..1508fc871 100644
--- a/app/controllers/welcome_controller.rb
+++ b/app/controllers/welcome_controller.rb
@@ -161,7 +161,7 @@ class WelcomeController < ApplicationController
query: @name,
type:"most_fields",
operator: "or",
- fields: ['login', 'firstname','lastname','name','description^0.5','filename']
+ fields: ['login', 'firstname','lastname','name','description^0.5','filename','subject','content^0.5']
}
},
highlight: {
@@ -173,10 +173,12 @@ class WelcomeController < ApplicationController
lastname: {},
name:{},
description:{},
- filename:{}
+ filename:{},
+ subject:{},
+ content:{}
}
}
- },[User,Course,Attachment,Project] ).page(params[:page] || 1).per(20).results
+ },[User,Course,Attachment,Project,Memo] ).page(params[:page] || 1).per(20).results
when 'user'
@users = User.search(@name).page(params[:page] || 1).per(20)
when 'project'
@@ -185,6 +187,8 @@ class WelcomeController < ApplicationController
@courses = Course.search(@name).page(params[:page] || 1).per(20).results
when 'attachment'
@attachments = Attachment.search(@name).page(params[:page] || 1).per(20).results
+ when 'memo'
+ @memos = Memo.search(@name).page(params[:page] || 1).per(20).results
else
@alls = Elasticsearch::Model.search({
query: {
@@ -192,7 +196,7 @@ class WelcomeController < ApplicationController
query: @name,
type:"most_fields",
operator: "or",
- fields: ['login', 'firstname','lastname','name','description^0.5','filename']
+ fields: ['login', 'firstname','lastname','name','description^0.5','filename','subject','content^0.5']
}
},
highlight: {
@@ -204,10 +208,12 @@ class WelcomeController < ApplicationController
lastname: {},
name:{},
description:{},
- filename:{}
+ filename:{},
+ subject:{},
+ content:{}
}
}
- },[User,Course,Attachment,Project] ).page(params[:page] || 1).per(20).results
+ },[User,Course,Attachment,Project,Memo] ).page(params[:page] || 1).per(20).results
end
@@ -216,13 +222,14 @@ class WelcomeController < ApplicationController
@course_count = Course.search(@name).results.total
@attach_count = Attachment.search(@name).results.total
@project_count = Project.search(@name).results.total
+ @memo_count = Memo.search(@name).results.total
@total_count = Elasticsearch::Model.search({
query: {
multi_match: {
query: @name,
type:"most_fields",
operator: "or",
- fields: ['login', 'firstname','lastname','name','description^0.5','filename']
+ fields: ['login', 'firstname','lastname','name','description^0.5','filename','subject','content^0.5']
}
},
highlight: {
@@ -234,10 +241,12 @@ class WelcomeController < ApplicationController
lastname: {},
name:{},
description:{},
- filename:{}
+ filename:{},
+ subject:{},
+ content:{}
}
}
- },[User,Course,Attachment,Project] ).results.total
+ },[User,Course,Attachment,Project,Memo] ).results.total
# search_type = params[:search_type].to_sym unless search_condition.blank?
# search_by = params[:search_by]
#
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 46a20dd4c..8f4679c67 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -2435,10 +2435,19 @@ module ApplicationHelper
link_to "作品(#{homework.student_works.count})",student_work_index_path(:homework => homework.id),:class => "c_blue"
else #学生显示提交作品、修改作品等按钮
work = cur_user_works_for_homework homework
+ project = cur_user_projects_for_homework homework
if work.nil? && Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") >= Time.now.strftime("%Y-%m-%d")
- link_to "提交作品(#{homework.student_works.count})", new_student_work_path(:homework => homework.id),:class => 'c_blue'
+ if homework.homework_type ==3 && project.nil? && homework.homework_detail_group.base_on_project == 1
+ link_to "提交作品(#{homework.student_works.count})","javascript:void(0)", :class => 'c_grey',:style=>"cursor:not-allowed",:title => '请先关联项目再提交作品'
+ else
+ link_to "提交作品(#{homework.student_works.count})", new_student_work_path(:homework => homework.id),:class => 'c_blue'
+ end
elsif work.nil? && Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") < Time.now.strftime("%Y-%m-%d")
- link_to "补交作品(#{homework.student_works.count})", new_student_work_path(:homework => homework.id),:class => 'c_red'
+ if homework.homework_type ==3 && project.nil? && homework.homework_detail_group.base_on_project == 1
+ link_to "补交作品(#{homework.student_works.count})","javascript:void(0)", :class => 'c_grey',:style=>"cursor:not-allowed",:title => '请先关联项目再补交作品'
+ else
+ link_to "补交作品(#{homework.student_works.count})", new_student_work_path(:homework => homework.id),:class => 'c_red'
+ end
else
if homework.homework_detail_manual && homework.homework_detail_manual.comment_status == 2 #匿评作业,且作业状态不是在开启匿评之前
link_to "作品匿评", student_work_index_path(:homework => homework.id), :class => 'c_blue', :title => "开启匿评后不可修改作品"
@@ -2459,6 +2468,24 @@ module ApplicationHelper
end
+ def relate_project homework,is_teacher,is_in_course,user_activity_id,course_activity
+ if User.current.member_of_course?(homework.course)
+ if is_teacher
+ #link_to "已关联(#{homework.student_work_projects.count})",student_work_index_path(:homework => homework.id),:class => "c_blue"
+ else
+ projects = cur_user_projects_for_homework homework
+ works = cur_user_works_for_homework homework
+ if works.nil? && projects.nil?
+ link_to "关联项目",new_student_work_project_student_work_index_path(:homework => homework.id,:is_in_course=>is_in_course,:user_activity_id=>user_activity_id,:course_activity=>course_activity),remote: true,:class=> 'c_blue', :title=> '请选择分组作业关联的项目'
+ elsif works.nil?
+ link_to "取消关联",cancel_relate_project_student_work_index_path(:homework => homework.id,:is_in_course=>is_in_course,:user_activity_id=>user_activity_id,:course_activity=>course_activity), :confirm => "您确定要取消关联吗?", remote: true,:class => "c_blue", :title=> '取消关联项目'
+ else
+ #link_to "已关联(#{homework.student_work_projects.count})",student_work_index_path(:homework => homework.id),:class => "c_blue"
+ end
+ end
+ end
+ end
+
def student_anonymous_comment homework
if homework.homework_detail_manual
case homework.homework_detail_manual.comment_status
@@ -2474,7 +2501,20 @@ module ApplicationHelper
#获取当前用户在指定作业下提交的作业的集合
def cur_user_works_for_homework homework
- homework.student_works.where("user_id = ?",User.current).first
+ work = homework.student_works.where("user_id = ?",User.current).first
+ if homework.homework_type == 3
+ pro = homework.student_work_projects.where("user_id = #{User.current.id}").first
+ if pro.nil? || pro.student_work_id == "" || pro.student_work_id.nil?
+ work = nil
+ else
+ work = StudentWork.find pro.student_work_id
+ end
+ end
+ work
+ end
+ #获取当前用户在指定作业下关联的项目的集合
+ def cur_user_projects_for_homework homework
+ homework.student_work_projects.where("user_id = ?",User.current).first
end
def file_preview_tag(file, html_options={})
diff --git a/app/helpers/files_helper.rb b/app/helpers/files_helper.rb
index 9a1765ddc..cf9cbcc32 100644
--- a/app/helpers/files_helper.rb
+++ b/app/helpers/files_helper.rb
@@ -113,7 +113,8 @@ module FilesHelper
if attachment.is_public? ||
(attachment.container_type == "Project" && User.current.member_of?(attachment.project)) ||
(attachment.container_type == "Course" && User.current.member_of_course?(Course.find(attachment.container_id)))||
- attachment.author_id == User.current.id
+ attachment.author_id == User.current.id ||
+ attachment.container_type == "OrgSubfield"
result << attachment
end
end
diff --git a/app/models/attachment.rb b/app/models/attachment.rb
index 999cefdaa..ad5655b02 100644
--- a/app/models/attachment.rb
+++ b/app/models/attachment.rb
@@ -22,6 +22,7 @@ class Attachment < ActiveRecord::Base
belongs_to :container, :polymorphic => true
belongs_to :project, foreign_key: 'container_id', conditions: "attachments.container_type = 'Project'"
belongs_to :course, foreign_key: 'container_id', conditions: "attachments.container_type = 'Course'"
+ belongs_to :org_subfield, foreign_key: 'container_id', conditions: "attachements.container_type = 'OrgSubfield'"
belongs_to :softapplication, foreign_key: 'container_id', conditions: "attachments.container_type = 'Softapplication'"
belongs_to :author, :class_name => "User", :foreign_key => "author_id"
belongs_to :attachmentstype, :foreign_key => "attachtype",:primary_key => "id"
@@ -46,7 +47,7 @@ class Attachment < ActiveRecord::Base
settings index: { number_of_shards: 5 } do
mappings dynamic: 'false' do
indexes :filename, analyzer: 'smartcn',index_options: 'offsets'
- indexes :downloads, analyzer: 'smartcn',index_options: 'offsets'
+ indexes :downloads, index:"not_analyzed",index_options: 'offsets'
end
end
diff --git a/app/models/course.rb b/app/models/course.rb
index ee26d1d54..0194a2a9d 100644
--- a/app/models/course.rb
+++ b/app/models/course.rb
@@ -16,7 +16,7 @@ class Course < ActiveRecord::Base
mappings dynamic: 'false' do
indexes :name, analyzer: 'smartcn',index_options: 'offsets'
indexes :description, analyzer: 'smartcn',index_options: 'offsets'
- indexes :updated_at, analyzer: 'smartcn',index_options: 'offsets',type:"date"
+ indexes :updated_at, index:"not_analyzed",type:"date"
end
end
diff --git a/app/models/homework_common.rb b/app/models/homework_common.rb
index 8d421a98f..0ad667bd1 100644
--- a/app/models/homework_common.rb
+++ b/app/models/homework_common.rb
@@ -9,6 +9,8 @@ class HomeworkCommon < ActiveRecord::Base
belongs_to :user
has_one :homework_detail_manual, :dependent => :destroy
has_one :homework_detail_programing, :dependent => :destroy
+ has_one :homework_detail_group, :dependent => :destroy
+ has_many :student_work_projects, :dependent => :destroy
has_many :homework_tests, :dependent => :destroy
has_many :student_works, :dependent => :destroy, :conditions => "is_test=0"
has_many :student_works_evaluation_distributions, :through => :student_works #一个作业的分配的匿评列表
@@ -74,6 +76,10 @@ class HomeworkCommon < ActiveRecord::Base
self.homework_type == 2 && self.homework_detail_programing
end
+ def is_group_homework?
+ self.homework_type == 3 && self.homework_detail_group
+ end
+
###添加回复
def self.add_homework_jour(user, notes, id , options = {})
homework = HomeworkCommon.find(id)
diff --git a/app/models/homework_detail_group.rb b/app/models/homework_detail_group.rb
new file mode 100644
index 000000000..0a9cb5fe2
--- /dev/null
+++ b/app/models/homework_detail_group.rb
@@ -0,0 +1,4 @@
+class HomeworkDetailGroup < ActiveRecord::Base
+ belongs_to :homework_common
+ attr_accessible :base_on_project, :homework_common_id, :max_num, :min_num
+end
diff --git a/app/models/memo.rb b/app/models/memo.rb
index 7c4fbdcf1..2ead1cbb6 100644
--- a/app/models/memo.rb
+++ b/app/models/memo.rb
@@ -1,7 +1,9 @@
+require 'elasticsearch/model'
class Memo < ActiveRecord::Base
include Redmine::SafeAttributes
include UserScoreHelper
include ApplicationHelper
+ include Elasticsearch::Model
belongs_to :forum
has_many_kindeditor_assets :assets, :dependent => :destroy
belongs_to :author, :class_name => "User", :foreign_key => 'author_id'
@@ -12,6 +14,18 @@ class Memo < ActiveRecord::Base
validates_length_of :content, maximum: 30000
validate :cannot_reply_to_locked_topic, :on => :create
+
+ #elasticsearch kaminari init
+ Kaminari::Hooks.init
+ Elasticsearch::Model::Response::Response.__send__ :include, Elasticsearch::Model::Response::Pagination::Kaminari
+ settings index: { number_of_shards: 5 } do
+ mappings dynamic: 'false' do
+ indexes :subject, analyzer: 'smartcn',index_options: 'offsets'
+ indexes :content, analyzer: 'smartcn',index_options: 'offsets'
+ indexes :updated_at,index:"not_analyzed" ,type:'date'
+ end
+ end
+
acts_as_tree :counter_cache => :replies_count, :order => "#{Memo.table_name}.created_at ASC"
acts_as_attachable
has_many :user_score_details, :class_name => 'UserScoreDetails',:as => :score_changeable_obj
@@ -47,9 +61,9 @@ class Memo < ActiveRecord::Base
"parent_id",
"replies_count"
- after_create :add_author_as_watcher, :reset_counters!, :send_mail, :send_message
- # after_update :update_memos_forum
- after_destroy :reset_counters!,:delete_kindeditor_assets#,:down_user_score -- 公共区发帖暂不计入得分
+ after_create :add_author_as_watcher, :reset_counters!, :send_mail, :send_message,:create_memo_ealasticsearch_index
+ after_update :update_memo_ealasticsearch_index
+ after_destroy :reset_counters!,:delete_kindeditor_assets,:delete_memo_ealasticsearch_index#,:down_user_score -- 公共区发帖暂不计入得分,
# after_create :send_notification
# after_save :plusParentAndForum
# after_destroy :minusParentAndForum
@@ -57,6 +71,36 @@ class Memo < ActiveRecord::Base
# scope :visible, lambda { |*args|
# includes(:forum => ).where()
# }
+ scope :indexable,lambda {
+ where('parent_id is null')
+ }
+
+ def self.search(query)
+ __elasticsearch__.search(
+ {
+ query: {
+ multi_match: {
+ query: query,
+ type:"most_fields",
+ operator: "or",
+ fields: ['subject','content^0.5']
+ }
+ },
+ sort: {
+ _score:{order: "desc" },
+ updated_at:{order: "desc" }
+ },
+ highlight: {
+ pre_tags: [''],
+ post_tags: [' '],
+ fields: {
+ subject: {},
+ content: {}
+ }
+ }
+ }
+ )
+ end
def send_mail
Mailer.run.forum_message_added(self) if Setting.notified_events.include?('forum_message_added')
@@ -203,6 +247,22 @@ class Memo < ActiveRecord::Base
# Author lizanle
# Description 从硬盘上删除资源
def delete_kindeditor_assets
- delete_kindeditor_assets_from_disk self.id,OwnerTypeHelper::MEMO
+ delete_kindeditor_assets_from_disk self.id,OwnerTypeHelper::MEMO
+ end
+
+ def create_memo_ealasticsearch_index
+ if self.parent_id.nil?
+ self.__elasticsearch__.index_document
+ end
+ end
+ def update_memo_ealasticsearch_index
+ if self.parent_id.nil?
+ self.__elasticsearch__.update_document
+ end
+ end
+ def delete_memo_ealasticsearch_index
+ if self.parent_id.nil?
+ self.__elasticsearch__.delete_document
+ end
end
end
diff --git a/app/models/org_subfield.rb b/app/models/org_subfield.rb
index efe9699c3..f95bb3eba 100644
--- a/app/models/org_subfield.rb
+++ b/app/models/org_subfield.rb
@@ -1,4 +1,9 @@
class OrgSubfield < ActiveRecord::Base
belongs_to :organization, :foreign_key => :organization_id
has_many :org_document_comments, :dependent => :destroy
+ has_many :files
+ acts_as_attachable
+
+ def project
+ end
end
\ No newline at end of file
diff --git a/app/models/project.rb b/app/models/project.rb
index ff546e098..cd4036810 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -39,10 +39,11 @@ class Project < ActiveRecord::Base
mappings dynamic: 'false' do
indexes :name, analyzer: 'smartcn',index_options: 'offsets'
indexes :description, analyzer: 'smartcn',index_options: 'offsets'
- indexes :updated_on, analyzer: 'smartcn',index_options: 'offsets', type:'date'
+ indexes :updated_on, index:"not_analyzed", type:'date'
end
end
+ has_many :student_work_projects,:dependent => :destroy
has_many :student_works
has_many :time_entry_activities
has_many :members, :include => [:principal, :roles], :conditions => "#{Principal.table_name}.type='User' AND #{Principal.table_name}.status=#{Principal::STATUS_ACTIVE}"
@@ -86,6 +87,7 @@ class Project < ActiveRecord::Base
# end
#ADDED BY NIE
+ has_one :project_score, :dependent => :destroy
has_many :project_infos, :dependent => :destroy
has_one :project_status, :class_name => "ProjectStatus", :dependent => :destroy
has_many :user_grades, :class_name => "UserGrade", :dependent => :destroy
diff --git a/app/models/student_work.rb b/app/models/student_work.rb
index 884f4a089..c6e2a6584 100644
--- a/app/models/student_work.rb
+++ b/app/models/student_work.rb
@@ -4,6 +4,7 @@ class StudentWork < ActiveRecord::Base
belongs_to :homework_common
belongs_to :user
+ has_many :student_work_projects
has_many :student_works_evaluation_distributions, :dependent => :destroy
has_many :student_works_scores, :dependent => :destroy
belongs_to :project
diff --git a/app/models/student_work_project.rb b/app/models/student_work_project.rb
new file mode 100644
index 000000000..676071817
--- /dev/null
+++ b/app/models/student_work_project.rb
@@ -0,0 +1,7 @@
+class StudentWorkProject < ActiveRecord::Base
+ # attr_accessible :title, :body
+ belongs_to :homework_common
+ belongs_to :student_work
+ belongs_to :project
+ belongs_to :user
+end
diff --git a/app/models/user.rb b/app/models/user.rb
index b9d9de029..6e6d58f86 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -35,7 +35,7 @@ class User < Principal
indexes :login, analyzer: 'smartcn',index_options: 'offsets'
indexes :firstname, analyzer: 'smartcn',index_options: 'offsets'
indexes :lastname, analyzer: 'smartcn',index_options: 'offsets'
- indexes :last_login_on, analyzer: 'smartcn',index_options: 'offsets',type: 'date'
+ indexes :last_login_on, index:"not_analyzed",type: 'date'
end
end
@@ -107,6 +107,7 @@ class User < Principal
has_many :student_works, :dependent => :destroy
has_many :student_works_evaluation_distributions, :dependent => :destroy
has_many :student_works_scores, :dependent => :destroy
+ has_many :student_work_projects, :dependent => :destroy
#end
has_and_belongs_to_many :groups, :after_add => Proc.new {|user, group| group.user_added(user)},
diff --git a/app/views/files/_attachement_list.html.erb b/app/views/files/_attachement_list.html.erb
index 25cc7f68a..a9d399511 100644
--- a/app/views/files/_attachement_list.html.erb
+++ b/app/views/files/_attachement_list.html.erb
@@ -20,6 +20,25 @@
:lebel_file_uploding => l(:lebel_file_uploding),
:delete_all_files => l(:text_are_you_sure_all)
} %>
+<% elsif @project %>
+ <%= file_field_tag 'attachments[dummy][file]',
+ :id => '_file',
+ :class => ie8? ? '':'file_selector',
+ :multiple => true,
+ :onchange => 'addInputFiles(this);',
+ :style => ie8? ? '': 'display:none',
+ :data => {
+ :max_file_size => Setting.attachment_max_size.to_i.kilobytes,
+ :max_file_size_message => l(:error_attachment_too_big, :max_size => number_to_human_size(Setting.attachment_max_size.to_i.kilobytes)),
+ :max_concurrent_uploads => Redmine::Configuration['max_concurrent_ajax_uploads'].to_i,
+ :upload_path => uploads_path(:format => 'js'),
+ :description_placeholder => l(:label_optional_description),
+ :field_is_public => l(:field_is_public),
+ :are_you_sure => l(:text_are_you_sure),
+ :file_count => l(:label_file_count),
+ :lebel_file_uploding => l(:lebel_file_uploding),
+ :delete_all_files => l(:text_are_you_sure_all)
+ } %>
<% else %>
<%= file_field_tag 'attachments[dummy][file]',
:id => '_file',
diff --git a/app/views/files/_org_subfield_list.html.erb b/app/views/files/_org_subfield_list.html.erb
new file mode 100644
index 000000000..a8aa13458
--- /dev/null
+++ b/app/views/files/_org_subfield_list.html.erb
@@ -0,0 +1,56 @@
+<% delete_allowed = User.current.admin? %>
+
+
共有 <%= all_attachments.count%> 个资源
+
+ <% if order == "asc" %>
+ 按 <%= link_to "时间",params.merge(:sort=>"created_on:desc"),:class => "f_b c_grey",:remote => @is_remote %><%= render partial: 'files/arrow_show',locals: { sort: sort,order:order,current:"created_on"} %> /
+ <%= link_to "下载次数",params.merge(:sort=>"downloads:desc"),:class => "f_b c_grey",:remote => @is_remote %><%= render partial: 'files/arrow_show',locals: { sort: sort,order:order,current:"downloads"} %> /
+ <%= link_to "引用次数",params.merge(:sort=>"quotes:desc"),:class => "f_b c_grey",:remote => @is_remote %><%= render partial: 'files/arrow_show',locals: { sort: sort,order:order,current:"quotes"} %> 排序
+ <% else %>
+ 按 <%= link_to "时间",params.merge(:sort=>"created_on:asc"),:class => "f_b c_grey" ,:remote => @is_remote %><%= render partial: 'files/arrow_show',locals: { sort: sort,order:order,current:"created_on"} %> /
+ <%= link_to "下载次数",params.merge(:sort=>"downloads:asc"),:class => "f_b c_grey",:remote => @is_remote %><%= render partial: 'files/arrow_show',locals: { sort: sort,order:order,current:"downloads"} %> /
+ <%= link_to "引用次数",params.merge(:sort=>"quotes:asc"),:class => "f_b c_grey",:remote => @is_remote %><%= render partial: 'files/arrow_show',locals: { sort: sort,order:order,current:"quotes"} %> 排序
+ <% end %>
+
+
+
+
+
+
+
+
+
+
+ <% org_subfield_attachments.each do |file| %>
+ <% if 1 %>
+
+
+ <%= link_to truncate(file.filename,length: 35, omission: '...'),
+ download_named_attachment_path(file.id, file.filename),
+ :title => file.filename+"\n"+file.description.to_s, :style => "overflow: hidden; white-space: nowrap;text-overflow: ellipsis;",:class => "c_dblue f_14 f_b f_l" %>
+ <% if User.current.logged? %>
+ <%= file_preview_tag(file, class: 'f_l re_open', style:'text-align: center;') %>
+ <% end %>
+
+
+
+
文件大小:<%= number_to_human_size(file.filesize) %>
+ <%= link_to( l(:button_delete), attachment_path(file),
+ :data => {:confirm => l(:text_are_you_sure)}, :method => :delete,:class => "f_r re_de") if (delete_allowed || User.current.id == file.author_id) && file.container_id == @org_subfield.id && file.container_type == "OrgSubfield"%>
+
<%= time_tag(file.created_on).html_safe %><%= l(:label_bids_published_ago) %> | 下载<%= file.downloads %> | 引用<%= file.quotes.nil? ? 0:file.quotes %>
+
+
+
+
+
+
+
+
+
+ <% end %>
+ <% end %>
+
+
+ <%= pagination_links_full @obj_pages, @obj_count, :per_page_links => false, :remote => @is_remote, :flag => true%>
+
+
diff --git a/app/views/files/_subfield_files.html.erb b/app/views/files/_subfield_files.html.erb
new file mode 100644
index 000000000..ea408c7a6
--- /dev/null
+++ b/app/views/files/_subfield_files.html.erb
@@ -0,0 +1,97 @@
+<%= stylesheet_link_tag 'courses' %>
+
+
+
+
+
+ <%= form_tag( search_org_subfield_files_path(@org_subfield), method: 'get',:class => "re_search f_l",:remote=>true) do %>
+ <%= text_field_tag 'name', params[:name], name: "name", :class => 're_schbox',:style=>"padding: 0px"%>
+ <%= submit_tag "栏目内搜索", :class => "re_schbtn b_lblue",:name => "inorg_subfield",:id => "inorg_subfield", :onmouseover => "presscss('inorg_subfield')",:onmouseout =>"buttoncss()" %>
+ <%= submit_tag "全站搜索", :class => "re_schbtn b_lblue",:name => "insite",:id => "insite",:onmouseover => "presscss('insite')",:onmouseout =>"buttoncss()" %>
+ <% end %>
+ <%# if is_org_subfield_teacher(User.current,@org_subfield) || (@org_subfield.publish_resource==1 && User.current.member_of_org_subfield?(@org_subfield) ) %>
+
+
+ 上传:
+ 课件 |
+ 软件 |
+ 媒体 |
+ 代码 |
+ 论文 |
+ 其他
+
+ <%# end %>
+
+
+
+
+ <%= render :partial => 'org_subfield_list',:locals => {org_subfield: @org_subfield,all_attachments: @all_attachments,sort:@sort,order:@order,org_subfield_attachments:@obj_attachments} %>
+
+
+
+
+<% html_title(l(:label_attachment_plural)) -%>
\ No newline at end of file
diff --git a/app/views/files/_subfield_files_list.html.erb b/app/views/files/_subfield_files_list.html.erb
new file mode 100644
index 000000000..d762743ad
--- /dev/null
+++ b/app/views/files/_subfield_files_list.html.erb
@@ -0,0 +1,55 @@
+<% delete_allowed = User.current.admin? %>
+
+
共有 <%= all_attachments.count%> 个资源
+
+ <% if order == "asc" %>
+ 按 <%= link_to "时间",params.merge(:sort=>"created_on:desc"),:class => "f_b c_grey",:remote => @is_remote %><%= render partial: 'files/arrow_show',locals: { sort: sort,order:order,current:"created_on"} %> /
+ <%= link_to "下载次数",params.merge(:sort=>"downloads:desc"),:class => "f_b c_grey",:remote => @is_remote %><%= render partial: 'files/arrow_show',locals: { sort: sort,order:order,current:"downloads"} %> /
+ <%= link_to "引用次数",params.merge(:sort=>"quotes:desc"),:class => "f_b c_grey",:remote => @is_remote %><%= render partial: 'files/arrow_show',locals: { sort: sort,order:order,current:"quotes"} %> 排序
+ <% else %>
+ 按 <%= link_to "时间",params.merge(:sort=>"created_on:asc"),:class => "f_b c_grey" ,:remote => @is_remote %><%= render partial: 'files/arrow_show',locals: { sort: sort,order:order,current:"created_on"} %> /
+ <%= link_to "下载次数",params.merge(:sort=>"downloads:asc"),:class => "f_b c_grey",:remote => @is_remote %><%= render partial: 'files/arrow_show',locals: { sort: sort,order:order,current:"downloads"} %> /
+ <%= link_to "引用次数",params.merge(:sort=>"quotes:asc"),:class => "f_b c_grey",:remote => @is_remote %><%= render partial: 'files/arrow_show',locals: { sort: sort,order:order,current:"quotes"} %> 排序
+ <% end %>
+
+
+
+
+
+ <%= render :partial => "files/tag_yun", :locals => {:tag_list => @tag_list,:course => course,:tag_name => @tag_name}%>
+
+
+
+
+ <% curse_attachments.each do |file| %>
+ <% if file.is_public? || User.current.admin? %>
+
+
+ <%= link_to truncate(file.filename,length: 35, omission: '...'),
+ download_named_attachment_path(file.id, file.filename),
+ :title => file.filename+"\n"+file.description.to_s, :style => "overflow: hidden; white-space: nowrap;text-overflow: ellipsis;",:class => "c_dblue f_14 f_b f_l" %>
+
+
+
+
文件大小:<%= number_to_human_size(file.filesize) %>
+ <%= link_to( l(:button_delete), attachment_path(file),
+ :data => {:confirm => l(:text_are_you_sure)}, :method => :delete,:class => "f_r re_de") if (delete_allowed || User.current.id == file.author_id) && file.container_id == @org_subfield.id && file.container_type == "OrgSubfield"%>
+
<%= time_tag(file.created_on).html_safe %><%= l(:label_bids_published_ago) %> | 下载<%= file.downloads %> | 引用<%= file.quotes.nil? ? 0:file.quotes %>
+
+
+
+
+ <%= render :partial => 'tags/tag_new', :locals => {:obj => file, :object_flag => "6",:tag_name => @tag_name} %>
+ <%= render :partial => 'tags/tag_add', :locals => {:obj => file, :object_flag => "6",:tag_name => @tag_name} %>
+
+
+
+ <% else %>
+
<%= file.filename %>是私有资源
+ <% end %>
+ <% end %>
+
+
+ <%= pagination_links_full @obj_pages, @obj_count, :per_page_links => false, :remote => @is_remote, :flag => true%>
+
+
diff --git a/app/views/files/_upload_subfield_file.html.erb b/app/views/files/_upload_subfield_file.html.erb
new file mode 100644
index 000000000..c3ca72ecd
--- /dev/null
+++ b/app/views/files/_upload_subfield_file.html.erb
@@ -0,0 +1,31 @@
+
+
+
+
<%= l(:label_upload_files)%>
+
+ <%= error_messages_for 'attachment' %>
+
<%= l(:label_file_upload_error_messages)%>
+
+ <%= form_tag(org_subfield_files_path(org_subfield), :multipart => true,:remote => !ie8?,:name=>"upload_form") do %>
+
+
+
+ <%= render :partial => 'files/attachement_list',:locals => {:org_subfield => org_subfield} %>
+
+
<%= l(:button_cancel)%>
+
<%= l(:button_confirm)%>
+ <% end %>
+
+
+
+ <% content_for :header_tags do %>
+ <%= javascript_include_tag 'attachments' %>
+ <% end %>
+
+
+
\ No newline at end of file
diff --git a/app/views/files/create.js.erb b/app/views/files/create.js.erb
index 9de7aa042..4d8bb26ca 100644
--- a/app/views/files/create.js.erb
+++ b/app/views/files/create.js.erb
@@ -52,6 +52,17 @@ $('#upload_file_div').slideToggle('slow');
setTimeout( function(){div.remove();},3000)
<% end %>
<%end%>
+ <% elsif @org_subfield %>
+ hideModal();
+ $("#resource_list").html('<%= j(render partial: "subfield_files" ,locals: {org_subfield: @org_subfield}) %>');
+// $("#courses_files_count_info").html("<%#= @all_attachments.count%>");
+// $("#courses_files_count_nav").html("(<%#= @all_attachments.count%>)")
+ // 添加文件上传成功提示,
+ <% unless params[:attachments].nil? %>
+ var div = $('文件上传成功!
');
+ $("#org_subfield_list").prepend(div);
+ setTimeout( function(){div.remove();},3000)
+ <% end %>
<% end %>
<% end %>
$(document).ready(img_thumbnails);
diff --git a/app/views/files/index.html.erb b/app/views/files/index.html.erb
index 3dad88868..dff20a20b 100644
--- a/app/views/files/index.html.erb
+++ b/app/views/files/index.html.erb
@@ -1,8 +1,10 @@
- <% if @isproject %>
+ <% if @container_type == 0 %>
<%= render :partial => 'project_file_new', locals: {project: @project} %>
- <% else %>
+ <% elsif @container_type == 1 %>
<%= render :partial => 'course_file', locals: {course: @course} %>
+ <% elsif @container_type == 2 %>
+ <%= render :partial => 'files/subfield_files', locals: {org_subfield: @org_subfield} %>
<% end %>
diff --git a/app/views/homework_common/index.html.erb b/app/views/homework_common/index.html.erb
index 3b3877228..010bc8ec9 100644
--- a/app/views/homework_common/index.html.erb
+++ b/app/views/homework_common/index.html.erb
@@ -4,7 +4,7 @@
$("#homework_publish_time").val("");
$("#homework_end_time").val("");
$("#course_id").val($("#option_select").val());
- $("#homework_attachments").html("<%= escape_javascript(render :partial => 'users/user_homework_attachment', :locals => { :container => HomeworkCommon.new,:has_program => true })%>");
+ $("#homework_attachments").html("<%= escape_javascript(render :partial => 'users/user_homework_attachment', :locals => { :container => HomeworkCommon.new,:has_program => true,:has_group => true})%>");
homework_description_editor.html("");
$("#homework_editor").toggle();
}
diff --git a/app/views/my/account.html.erb b/app/views/my/account.html.erb
index dc9ee10b6..94f62638e 100644
--- a/app/views/my/account.html.erb
+++ b/app/views/my/account.html.erb
@@ -30,7 +30,7 @@
- <%= f.text_field :login,:no_label=>true, :required => true, :nh_required=>"1", :name => "login",:class=>"w210"%>
+ <%= f.text_field :login,:no_label=>true, :required => true, :nh_required=>"1",:disabled=>'disabled', :name => "login",:class=>"w210"%>
<%= f.text_field :mail,:no_label=>true, :required => true,:nh_required=>"1",:class=>"w210"%>
diff --git a/app/views/news/_project_form.html.erb b/app/views/news/_project_form.html.erb
index 269420bfe..81012e749 100644
--- a/app/views/news/_project_form.html.erb
+++ b/app/views/news/_project_form.html.erb
@@ -1,18 +1,19 @@
<%= javascript_include_tag "/assets/kindeditor/kindeditor",'/assets/kindeditor/pasteimg' %>
- * <%= l(:field_title) %> :
-
+ * <%= l(:field_title) %> :
+
+
<% if is_new %>
<%= hidden_field_tag :asset_id,params[:asset_id],:required => false,:style => 'display:none' %>
* <%= l(:field_description) %> :
- <%= f.kindeditor :description,:width=>'91%',:editor_id=>'project_news_description_editor' %>
+ <%= f.kindeditor :description,:width=>'90%',:editor_id=>'project_news_description_editor' %>
<% else %>
* <%= l(:field_description) %> :
- <%= f.kindeditor :description,:width=>'91%', :editor_id=>'project_news_description_editor', :owner_id => @news.id, :owner_type => OwnerTypeHelper::NEWS %>
+ <%= f.kindeditor :description,:width=>'90%', :editor_id=>'project_news_description_editor', :owner_id => @news.id, :owner_type => OwnerTypeHelper::NEWS %>
<% end %>
diff --git a/app/views/org_subfields/_resource.html.erb b/app/views/org_subfields/_resource.html.erb
new file mode 100644
index 000000000..3cce9748f
--- /dev/null
+++ b/app/views/org_subfields/_resource.html.erb
@@ -0,0 +1,96 @@
+
+
+
+
+
+ <%= form_tag( search_course_files_path(@course), method: 'get',:class => "re_search f_l",:remote=>true) do %>
+ <%= text_field_tag 'name', params[:name], name: "name", :class => 're_schbox',:style=>"padding: 0px"%>
+ <%= submit_tag "课内搜索", :class => "re_schbtn b_lblue",:name => "incourse",:id => "incourse", :onmouseover => "presscss('incourse')",:onmouseout =>"buttoncss()" %>
+ <%= submit_tag "全站搜索", :class => "re_schbtn b_lblue",:name => "insite",:id => "insite",:onmouseover => "presscss('insite')",:onmouseout =>"buttoncss()" %>
+ <% end %>
+ <% if is_course_teacher(User.current,@course) || (@course.publish_resource==1 && User.current.member_of_course?(@course) ) %>
+
+
+ 上传:
+ 课件 |
+ 软件 |
+ 媒体 |
+ 代码 |
+ 论文 |
+ 其他
+
+ <% end %>
+
+
+
+
+ <%= render :partial => 'course_list',:locals => {course: @course,all_attachments: @all_attachments,sort:@sort,order:@order,curse_attachments:@obj_attachments} %>
+
+
+
+
+<% html_title(l(:label_attachment_plural)) -%>
\ No newline at end of file
diff --git a/app/views/organizations/_org_left_subfield_list.html.erb b/app/views/organizations/_org_left_subfield_list.html.erb
index 57ea46658..367c23843 100644
--- a/app/views/organizations/_org_left_subfield_list.html.erb
+++ b/app/views/organizations/_org_left_subfield_list.html.erb
@@ -29,7 +29,8 @@
<%= link_to "#{field.name}", organization_path(organization, :org_subfield_id => field.id), :class => "homepageMenuText" %>
<%=link_to "", new_organization_org_document_comment_path(organization, :field_id => field.id), :method => "get", :class => "homepageMenuSetting fr", :title => "发布帖子"%>
<% else %>
- <%#= link_to "#{field.name}", org_subfield_files_path(field), :class => "homepageMenuText" %>
+ <%#= link_to "#{field.name}", org_subfield_files_path(field, :organization_id => organization.id), :class => "homepageMenuText" %>
+
<% end %>
-
-
- <%= student_work.user.show_name%>
-
-
- <%= student_work.user.user_extensions.nil? ? "--" : student_work.user.user_extensions.student_id%>
-
-
+ <% if @homework.homework_type != 3 %>
+
+
+ <%= student_work.user.show_name%>
+
+
+ <%= student_work.user.user_extensions.nil? ? "--" : student_work.user.user_extensions.student_id%>
+
+
+ <% elsif @homework.homework_type == 3 && @homework.homework_detail_group.base_on_project == 1 %>
+
+
+ <%= student_work.project.name %>
+
+
+ <% end %>
diff --git a/app/views/student_work/_evaluation_work.html.erb b/app/views/student_work/_evaluation_work.html.erb
index e336b0282..58f611b55 100644
--- a/app/views/student_work/_evaluation_work.html.erb
+++ b/app/views/student_work/_evaluation_work.html.erb
@@ -1,6 +1,11 @@
- <% is_my_work = student_work.user == User.current%>
+ <% if @homework.homework_type != 3 %>
+ <% is_my_work = student_work.user == User.current%>
+ <% else %>
+ <% pro = @homework.student_work_projects.where(:user_id => User.current.id).first %>
+ <% is_my_work = pro && pro.student_work_id == student_work.id%>
+ <% end %>
<% if is_my_work%>
@@ -14,14 +19,22 @@
-
-
- <%= student_work.user.show_name%>
-
-
- <%= student_work.user.user_extensions.nil? ? "--" : student_work.user.user_extensions.student_id%>
-
-
+ <% if @homework.homework_type != 3 %>
+
+
+ <%= student_work.user.show_name%>
+
+
+ <%= student_work.user.user_extensions.nil? ? "--" : student_work.user.user_extensions.student_id%>
+
+
+ <% elsif @homework.homework_type == 3 && @homework.homework_detail_group.base_on_project == 1 %>
+
+
+ <%= student_work.project.name %>
+
+
+ <% end %>
<% else%>
@@ -33,14 +46,22 @@
-
+ <% if @homework.homework_type != 3 %>
+
+ <% elsif @homework.homework_type == 3 && @homework.homework_detail_group.base_on_project == 1 %>
+
+ <% end %>
<% end%>
diff --git a/app/views/student_work/_relate_project.html.erb b/app/views/student_work/_relate_project.html.erb
new file mode 100644
index 000000000..43f59c9c9
--- /dev/null
+++ b/app/views/student_work/_relate_project.html.erb
@@ -0,0 +1,58 @@
+
+
关联项目
+
+ <%=form_tag url_for(:controller=>'student_work',:action=>'student_work_project',:homework=>@homework.id,:user_activity_id=>@user_activity_id,:is_in_course=>@is_in_course,:course_activity =>@course_activity),:id =>'student_work_relate_project',:class=>'resourcesSearchBox',:remote => true do %>
+
+
+
您当前尚未参与任何项目,请先加入项目再关联。
+
+
+
+
+
+ <% end %>
+
+
\ No newline at end of file
diff --git a/app/views/student_work/_show.html.erb b/app/views/student_work/_show.html.erb
index 993b0f2aa..801c252cb 100644
--- a/app/views/student_work/_show.html.erb
+++ b/app/views/student_work/_show.html.erb
@@ -1,5 +1,12 @@
+ <% is_teacher = User.current.allowed_to?(:as_teacher, @homework.course) || User.current.admin? %>
+ <% if @homework.homework_type != 3 %>
+ <% is_my_work = work.user == User.current%>
+ <% else %>
+ <% pro = @homework.student_work_projects.where(:user_id => User.current.id).first %>
+ <% is_my_work = pro && pro.student_work_id == work.id%>
+ <% end %>
上交时间:
@@ -15,7 +22,7 @@
<%= link_to "",edit_student_work_path(work),:class => "pic_edit",:title => "修改"%>
<% end%>
- <% if @homework.homework_detail_manual.comment_status == 3 && work.user != User.current%>
+ <% if @homework.homework_detail_manual.comment_status == 3 && !is_my_work %>
<%= render :partial => 'student_work_praise' %>
@@ -25,11 +32,24 @@
- <% if work.project%>
-
- 关联项目:
- <%= link_to( work.project.name, project_path(work.project.id), :class => "linkBlue" )%>
+ <% if @homework.homework_type == 3 && work.student_work_projects && (@homework.homework_detail_manual.comment_status != 2 || is_my_work || is_teacher ) %>
+
+
+ 参与人员:
+ <%= link_to(work.user.show_name+"(组长)", user_path(work.user.id), :class => "linkBlue" )%>
+ <% members = work.student_work_projects.where("is_leader = 0") %>
+ <% members.each do |member| if !members.empty? %>
+ 、<%=link_to((User.find member.user_id).show_name, user_path(member.user.id), :class => "linkBlue" ) %>
+ <% end %>
+ <% end %>
+ <% if @homework.homework_detail_group.base_on_project == 1 %>
+
+ 关联项目:
+ <%= link_to( work.project.name, project_path(work.project.id), :class => "linkBlue" )%>
+ (综合评分:<%=work.project.project_score.score.to_i %> )
+
+ <% end %>
<% end%>
@@ -52,7 +72,7 @@
- <% if @is_teacher || (@homework.homework_detail_manual.comment_status == 2 && work.user != User.current)%>
+ <% if @is_teacher || (@homework.homework_detail_manual.comment_status == 2 && !is_my_work)%>
<%= render :partial => 'add_score',:locals => {:work => work,:score => score}%>
diff --git a/app/views/student_work/_student_work_list.html.erb b/app/views/student_work/_student_work_list.html.erb
index e9b056c84..5598092e9 100644
--- a/app/views/student_work/_student_work_list.html.erb
+++ b/app/views/student_work/_student_work_list.html.erb
@@ -40,12 +40,17 @@
<% end%>
- <% if student_work.user == User.current && !@is_evaluation %>
+ <% if @homework.homework_type != 3 && student_work.user == User.current && !@is_evaluation %>
<% if @homework.homework_type == 2%>
<%=render :partial => 'programing_work_show', :locals=> {:work => student_work, :score =>student_work_score(student_work,User.current),:student_work_scores => student_work.student_works_scores.order("updated_at desc")} %>
<% else %>
<%=render :partial => 'show' , :locals=> {:work => student_work, :score =>student_work_score(student_work,User.current),:student_work_scores => student_work.student_works_scores.order("updated_at desc")} %>
<% end %>
+ <% elsif @homework.homework_type == 3 %>
+ <% pro = @homework.student_work_projects.where(:user_id => User.current.id).first %>
+ <% if pro && pro.student_work_id == student_work.id && !@is_evaluation %>
+ <%=render :partial => 'show' , :locals=> {:work => student_work, :score =>student_work_score(student_work,User.current),:student_work_scores => student_work.student_works_scores.order("updated_at desc")} %>
+ <% end %>
<% end %>
diff --git a/app/views/student_work/cancel_relate_project.js.erb b/app/views/student_work/cancel_relate_project.js.erb
new file mode 100644
index 000000000..3aa853a00
--- /dev/null
+++ b/app/views/student_work/cancel_relate_project.js.erb
@@ -0,0 +1,7 @@
+<% if @user_activity_id != -1 %>
+$("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_homework', :locals => {:activity => @homework,:user_activity_id =>@user_activity_id,:course_activity => @course_activity}) %>");
+init_activity_KindEditor_data(<%= @user_activity_id%>,"","87%");
+<% else%>
+$("#homework_common_<%= @homework.id %>").replaceWith("<%= escape_javascript(render :partial => 'users/user_homework_detail', :locals => {:homework_common => @homework,:is_in_course => @is_in_course}) %>");
+init_activity_KindEditor_data(<%= @homework.id%>,"","87%");
+<% end %>
\ No newline at end of file
diff --git a/app/views/student_work/edit.html.erb b/app/views/student_work/edit.html.erb
index d506b5542..bfdf8c316 100644
--- a/app/views/student_work/edit.html.erb
+++ b/app/views/student_work/edit.html.erb
@@ -48,7 +48,7 @@
- <%= render :partial => 'users/user_homework_attachment', :locals => {:container => @work, :has_program=>false} %>
+ <%= render :partial => 'users/user_homework_attachment', :locals => {:container => @work, :has_program=>false,:has_group=>false} %>
diff --git a/app/views/student_work/new.html.erb b/app/views/student_work/new.html.erb
index ee0dd7e9b..c3a61d4c8 100644
--- a/app/views/student_work/new.html.erb
+++ b/app/views/student_work/new.html.erb
@@ -34,6 +34,44 @@
)
}
}
+ // 添加组成员
+ function show_group_member() {
+ $('#ajax-modal').html('<%= escape_javascript(render :partial => 'student_work/choose_group_member',:locals => {:homework=>@homework}) %>');
+ showModal('ajax-modal', '528px');
+ $('#ajax-modal').siblings().remove();
+ $('#ajax-modal').parent().css("top","").css("left","");
+ $('#ajax-modal').parent().addClass("addMemberCP");
+ }
+ // 关联项目
+ function show_project() {
+ $('#ajax-modal').html('<%= escape_javascript(render :partial => 'student_work/relate_project',:locals => {:homework=>@homework}) %>');
+ showModal('ajax-modal', '320px');
+ $('#ajax-modal').siblings().remove();
+ $('#ajax-modal').parent().css("top","").css("left","");
+ $('#ajax-modal').parent().addClass("groupPopUp");
+ }
+ // 作品校验
+ function popupRegex(){
+ if(regexStudentWorkName()&®exStudentWorkDescription())
+ {
+ if($("#group_member_ids").length > 0) {
+ if(regexStudentWorkMember(parseInt($.trim($("#min_num_member").html())),parseInt($.trim($("#max_num_member").html())))) {
+ $('#ajax-modal').html("
");
+ showModal('ajax-modal', '500px');
+ $('#ajax-modal').siblings().remove();
+ $('#ajax-modal').parent().css("top","").css("left","");
+ $('#ajax-modal').parent().addClass("anonymos");
+ }
+ } else {
+ $('#ajax-modal').html("
");
+ showModal('ajax-modal', '500px');
+ $('#ajax-modal').siblings().remove();
+ $('#ajax-modal').parent().css("top","").css("left","");
+ $('#ajax-modal').parent().addClass("anonymos");
+ }
+ }
+ }
+
-
+ <% if @homework.homework_type == 3 %>
+
<%=@homework.homework_detail_group.min_num %>
+
<%=@homework.homework_detail_group.max_num %>
+ <%=hidden_field_tag 'group_member_ids', params[:group_member_ids], :value=>User.current.id %>
+ <% end %>
<%= f.text_field "name", :required => true, :size => 60, :class => "InputBox W700", :maxlength => 200, :placeholder => "请简洁的概括作品的功能或特性", :onkeyup => "regexStudentWorkName();" %>
@@ -95,20 +137,29 @@
- <%= render :partial => 'users/user_homework_attachment', :locals => {:container => @student_work, :has_program=>false} %>
+ <%= render :partial => 'users/user_homework_attachment', :locals => {:container => @student_work, :has_program=>false,:has_group=>false} %>
+
+
+
+
-
-
+ <% if @homework.homework_type == 3 %>
+
+ <% end %>
-
- <%= select_tag :project_id, options_for_select(user_projects_option, @student_work.project_id), {:class => "InputBox W680 fl"} %>
+
+
+
提交
@@ -118,16 +169,4 @@
<% end%>
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/views/student_work/new_student_work_project.js.erb b/app/views/student_work/new_student_work_project.js.erb
new file mode 100644
index 000000000..51df45f13
--- /dev/null
+++ b/app/views/student_work/new_student_work_project.js.erb
@@ -0,0 +1,5 @@
+$('#ajax-modal').html('<%= escape_javascript(render :partial => 'student_work/relate_project') %>');
+showModal('ajax-modal', '320px');
+$('#ajax-modal').siblings().remove();
+$('#ajax-modal').parent().css("top","").css("left","");
+$('#ajax-modal').parent().addClass("groupPopUp");
\ No newline at end of file
diff --git a/app/views/student_work/retry_work.js.erb b/app/views/student_work/retry_work.js.erb
index c5fca76d4..c6f354875 100644
--- a/app/views/student_work/retry_work.js.erb
+++ b/app/views/student_work/retry_work.js.erb
@@ -1,2 +1,2 @@
hideModal('#popbox02');
-$("#homework_attachments").html("<%= escape_javascript(render :partial => 'users/user_homework_attachment', :locals => {:container => @student_work, :has_program=>false})%>");
\ No newline at end of file
+$("#homework_attachments").html("<%= escape_javascript(render :partial => 'users/user_homework_attachment', :locals => {:container => @student_work, :has_program=>false,:has_group=>false})%>");
\ No newline at end of file
diff --git a/app/views/student_work/search_course_students.js.erb b/app/views/student_work/search_course_students.js.erb
new file mode 100644
index 000000000..fb595e51f
--- /dev/null
+++ b/app/views/student_work/search_course_students.js.erb
@@ -0,0 +1,33 @@
+$("#all_students_list").empty();
+<% @users.each do |user|%>
+ var link = " <%=user.show_name %>";
+ <% unless user.user_extensions.student_id == "" %>
+ link += "(<%=user.user_extensions.student_id %>)";
+ <% end %>
+ link += " ";
+ $("#all_students_list").append(link);
+
+ var str = "";
+ var lists = $("#choose_students_list li");
+ if(lists.length > 0) {
+ for(var i=0; i
+ if (str.indexOf(<%=user.id.to_s %>) < 0) {
+ $("#student_<%=user.id %>").one("click",function choose_student() {
+ var li = "
+ li += " onclick='delete_student(<%=user.id %>);'";
+ <% end %>
+ li += ">" + $("#student_<%=user.id %>").html()+" ";
+ $("#choose_students_list").append(li);
+ });
+ }
+ <% end %>
+<% end %>
\ No newline at end of file
diff --git a/app/views/student_work/search_user_projects.js.erb b/app/views/student_work/search_user_projects.js.erb
new file mode 100644
index 000000000..7751821a5
--- /dev/null
+++ b/app/views/student_work/search_user_projects.js.erb
@@ -0,0 +1,9 @@
+<% if @first == 1 && @project_ids.empty? %>
+ $("#no_search_result").show();
+<% else %>
+ $("#search_project_list").html("");
+ <% @project_ids.each do |project|%>
+ link = " <%=project.name %> ";
+ $("#search_project_list").append(link );
+ <% end %>
+<% end %>
\ No newline at end of file
diff --git a/app/views/student_work/student_work_project.js.erb b/app/views/student_work/student_work_project.js.erb
new file mode 100644
index 000000000..405dccca4
--- /dev/null
+++ b/app/views/student_work/student_work_project.js.erb
@@ -0,0 +1,8 @@
+hideModal("#popbox02");
+<% if @user_activity_id != -1 %>
+ $("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_homework', :locals => {:activity => @homework,:user_activity_id =>@user_activity_id,:course_activity => @course_activity}) %>");
+ init_activity_KindEditor_data(<%= @user_activity_id%>,"","87%");
+<% else%>
+ $("#homework_common_<%= @homework.id %>").replaceWith("<%= escape_javascript(render :partial => 'users/user_homework_detail', :locals => {:homework_common => @homework,:is_in_course => @is_in_course}) %>");
+ init_activity_KindEditor_data(<%= @homework.id%>,"","87%");
+<% end %>
\ No newline at end of file
diff --git a/app/views/users/_course_homework.html.erb b/app/views/users/_course_homework.html.erb
index 309b8b95a..b38a17bea 100644
--- a/app/views/users/_course_homework.html.erb
+++ b/app/views/users/_course_homework.html.erb
@@ -44,7 +44,27 @@
教师评阅中
<% end%>
<% end%>
+
+ <% if activity.homework_type == 3 && activity.homework_detail_group.base_on_project == 1%>
+ 系统提示:该作业要求各组长<%=link_to "创建项目", new_project_path(:host=>Setting.host_name),:class=>"c_red",:title=>"新建项目",:style=>"text-decoration:underline;"%>,组成员加入项目,然后由组长关联项目。谢谢配合!
+ <% elsif activity.homework_type == 3 && activity.homework_detail_group.base_on_project == 0%>
+ 系统提示:该作业要求各组长提交作品,提交作品时请添加组成员。谢谢配合!
+ <% end %>
+ <% if activity.homework_type == 3 && !is_teacher && activity.homework_detail_group.base_on_project == 1 %>
+ <% projects = cur_user_projects_for_homework activity %>
+ <% works = cur_user_works_for_homework activity %>
+ <% if works.nil? && projects.nil? %>
+
+ <%=link_to "关联项目",new_student_work_project_student_work_index_path(:homework => activity.id,:is_in_course=>-1,:user_activity_id=>user_activity_id,:course_activity=>course_activity),remote: true,:class=> 'c_blue', :title=> '请选择分组作业关联的项目' %>
+ <%#= relate_project(activity,is_teacher,-1,user_activity_id,course_activity) %>
+
+ <% elsif works.nil? %>
+
+ <%=link_to "取消关联",cancel_relate_project_student_work_index_path(:homework => activity.id,:is_in_course=>-1,:user_activity_id=>user_activity_id,:course_activity=>course_activity), :confirm => "您确定要取消关联吗?", remote: true,:class => "c_blue", :title=> '取消关联项目' %>
+
+ <% end %>
+ <% end %>
<% is_teacher = User.current.allowed_to?(:as_teacher,activity.course) %>
<%= user_for_homework_common activity,is_teacher %>
@@ -77,6 +97,26 @@
<%= render :partial => 'student_work/work_attachments', :locals => {:attachments => activity.attachments} %>
+ <% if activity.homework_type == 3 && !activity.student_work_projects.empty? && activity.homework_detail_group.base_on_project == 1 %>
+
+
+
+ 已关联项目:
+
+ <% activity.student_work_projects.where("is_leader = 1").each do |pro| %>
+
+ <% project = Project.find pro.project_id || User.current.member_of?(project) || User.current.admin? %>
+ <% if project.is_public || project.user_id == User.current.id %>
+ <%= link_to image_tag(url_to_avatar(project),:width=>"40",:height => "40",:class => "borderRadius"),project_path(project.id,:host=>Setting.host_name),:alt =>"项目头像" %>
+ <% else %>
+ <%= image_tag(url_to_avatar(project),:width=>"40",:height => "40",:class => "borderRadius") %>
+ <% end %>
+
<%=project.project_score.score.to_i %>
+
+ <% end %>
+
+ <% end %>
+
<% if is_teacher%>
<% comment_status = activity.homework_detail_manual.comment_status %>
diff --git a/app/views/users/_user_group_attr.html.erb b/app/views/users/_user_group_attr.html.erb
new file mode 100644
index 000000000..aa8166a04
--- /dev/null
+++ b/app/views/users/_user_group_attr.html.erb
@@ -0,0 +1,31 @@
+
分组设置
+
+
+ 每组最小人数:
+ 人
+
+
+ 每组最大人数:
+ 人
+
+
+
+
+ 是否基于项目实施
+
+
提醒:勾选后各小组必须在Trustie平台创建项目,教师可随时观察平台对各小组最新进展的实时统计。
+
+
+
+
+
\ No newline at end of file
diff --git a/app/views/users/_user_homework_attachment.html.erb b/app/views/users/_user_homework_attachment.html.erb
index 24d37ae63..7aefbd0b0 100644
--- a/app/views/users/_user_homework_attachment.html.erb
+++ b/app/views/users/_user_homework_attachment.html.erb
@@ -43,16 +43,38 @@
:lebel_file_uploding => l(:lebel_file_uploding),
:delete_all_files => l(:text_are_you_sure_all)
} %>
+
+
+
+
+ <% if @homework && @homework.homework_type == 3 %>
+
+ 合作成员:<%=User.current.show_name %>(组长)
+
+
+ <% end %>
+
+
+ <% if @homework %>
+ <% unless @homework.student_work_projects.where("user_id = #{User.current.id}").empty? %>
+ <% project = Project.find @homework.student_work_projects.where("user_id = #{User.current.id}").first.project_id %>
+ 关联项目:<%=project.name %>
+ <% end %>
+ <% end %>
+
-
上传附件
- <%= link_to "资源库",{:controller => 'users',:action=>'user_import_resource',:id=>User.current.id,:homework_id=>container.id},:class => "FilesBtn fl mt3 mr20",:remote => true%>
+
上传附件
+ <%= link_to "资源库",{:controller => 'users',:action=>'user_import_resource',:id=>User.current.id,:homework_id=>container.id},:class => "FilesBtn fl mt3 mr15",:title=>"请从资源库中选择文件作为作品的附件",:remote => true%>
<% if defined?(has_program) && has_program %>
-
编程
-
+
编程
+
+ <% end %>
+ <% if defined?(has_group) && has_group %>
+
分组
<% end %>
diff --git a/app/views/users/_user_homework_detail.html.erb b/app/views/users/_user_homework_detail.html.erb
index 5bf406c59..57fe57c07 100644
--- a/app/views/users/_user_homework_detail.html.erb
+++ b/app/views/users/_user_homework_detail.html.erb
@@ -44,8 +44,25 @@
教师评阅中
<% end%>
<% end%>
-
+
+ <% if homework_common.homework_type == 3%>
+
系统提示:该作业要求各组长<%=link_to "创建项目", new_project_path(:host=>Setting.host_name),:class=>"c_red",:title=>"新建项目",:style=>"text-decoration:underline;"%>,组成员加入项目,然后由组长关联项目。谢谢配合!
+ <% end %>
+ <% if homework_common.homework_type == 3 && !is_teacher && homework_common.homework_detail_group.base_on_project == 1%>
+ <% projects = cur_user_projects_for_homework homework_common %>
+ <% works = cur_user_works_for_homework homework_common %>
+ <% if works.nil? && projects.nil? %>
+
+ <%=link_to "关联项目",new_student_work_project_student_work_index_path(:homework => homework_common.id,:is_in_course=>is_in_course,:user_activity_id=>-1,:course_activity=>-1),remote: true,:class=> 'c_blue', :title=> '请选择分组作业关联的项目' %>
+ <%#= relate_project(activity,is_teacher,-1,user_activity_id,course_activity) %>
+
+ <% elsif works.nil? %>
+
+ <%=link_to "取消关联",cancel_relate_project_student_work_index_path(:homework => homework_common.id,:is_in_course=>is_in_course,:user_activity_id=>-1,:course_activity=>-1), :confirm => "您确定要取消关联吗?", remote: true,:class => "c_blue", :title=> '取消关联项目' %>
+
+ <% end %>
+ <% end %>
<%= user_for_homework_common homework_common,is_teacher %>
@@ -82,6 +99,26 @@
<%= render :partial => 'student_work/work_attachments', :locals => {:attachments => homework_common.attachments} %>
+ <% if homework_common.homework_type == 3 && !homework_common.student_work_projects.empty? && homework_common.homework_detail_group.base_on_project == 1 %>
+
+
+
+ 已关联项目:
+
+ <% homework_common.student_work_projects.where("is_leader = 1").each do |pro| %>
+
+ <% project = Project.find pro.project_id %>
+ <% if project.is_public == 1 || User.current.member_of?(project) || User.current.admin? %>
+ <%=link_to image_tag(url_to_avatar(project),:width=>"40",:height => "40",:class => "borderRadius"),project_path(project.id,:host=>Setting.host_name) %>
+ <% else %>
+ <%= image_tag(url_to_avatar(project),:width=>"40",:height => "40",:class => "borderRadius") %>
+ <% end %>
+
<%=project.project_score.score.to_i %>
+
+ <% end %>
+
+ <% end %>
+
<% if is_teacher%>
<% comment_status = homework_common.homework_detail_manual.comment_status%>
diff --git a/app/views/users/_user_homework_form.html.erb b/app/views/users/_user_homework_form.html.erb
index cfc098645..40c8ac5bd 100644
--- a/app/views/users/_user_homework_form.html.erb
+++ b/app/views/users/_user_homework_form.html.erb
@@ -4,6 +4,9 @@
<% end %>
@@ -54,7 +57,7 @@
- <%= render :partial => 'users/user_homework_attachment', :locals => {:container => homework, :has_program=>!(edit_mode && homework.homework_type == 1)} %>
+ <%= render :partial => 'users/user_homework_attachment', :locals => {:container => homework, :has_program=>!(edit_mode && homework.homework_type != 2), :has_group=>!(edit_mode && homework.homework_type != 3)} %>
@@ -97,7 +100,18 @@
-
+
+
+
+
\ No newline at end of file
diff --git a/app/views/users/_user_message_course.html.erb b/app/views/users/_user_message_course.html.erb
index 640f98b1f..1ca8f5e1a 100644
--- a/app/views/users/_user_message_course.html.erb
+++ b/app/views/users/_user_message_course.html.erb
@@ -45,12 +45,12 @@
<% if !User.current.allowed_to?(:as_teacher, ma.course_message.course) && cur_user_works_for_homework(ma.course_message).nil? %>
- <%= link_to "作业题目:" + ma.course_message.name, new_student_work_path(:homework => ma.course_message.id),
+ <%= link_to "作业标题:" + ma.course_message.name, new_student_work_path(:homework => ma.course_message.id),
:class =>"#{ma.viewed == 0 ? "newsBlack" : "newsGrey"}",
:onmouseover =>"message_titile_show($(this),event)",
:onmouseout => "message_titile_hide($(this))" %>
<% else %>
- <%= link_to "作业题目:" + ma.course_message.name, student_work_index_path(:homework => ma.course_message.id),
+ <%= link_to "作业标题:" + ma.course_message.name, student_work_index_path(:homework => ma.course_message.id),
:class => "#{ma.viewed == 0 ? "newsBlack" : "newsGrey"}",
:onmouseover => "message_titile_show($(this),event)",
:onmouseout => "message_titile_hide($(this))" %>
@@ -103,7 +103,7 @@
user_path(ma.course_message.user), :class => "newsBlue homepageNewsPublisher", :title => "#{ma.course_message.user.lastname + ma.course_message.user.firstname}老师" %>
">发布的作业:
- <%= link_to "作业题目:" + ma.course_message.name, student_work_index_path(:homework => ma.course_message.id),
+ <%= link_to "作业标题:" + ma.course_message.name, student_work_index_path(:homework => ma.course_message.id),
:class => "#{ma.viewed == 0 ? "newsBlack" : "newsGrey"}",
:onmouseover => "message_titile_show($(this),event)",
:onmouseout => "message_titile_hide($(this))" %>
@@ -142,7 +142,7 @@
">启动了作业匿评:
- <%= link_to "作业题目:" + ma.course_message.name, student_work_index_path(:homework => ma.course_message.id), :class => "#{ma.viewed == 0 ? "newsBlack" : "newsGrey"}",
+ <%= link_to "作业标题:" + ma.course_message.name, student_work_index_path(:homework => ma.course_message.id), :class => "#{ma.viewed == 0 ? "newsBlack" : "newsGrey"}",
:onmouseover => "message_titile_show($(this),event)",
:onmouseout => "message_titile_hide($(this))" %>
@@ -173,19 +173,25 @@
<%=link_to ma.course_message.user.lastname + ma.course_message.user.firstname + "老师",
user_path(ma.course_message.user), :class => "newsBlue homepageNewsPublisher" %>
">关闭了作业匿评:
- <%= link_to "作业题目:" + ma.course_message.name, student_work_index_path(:homework => ma.course_message.id), :class =>"#{ma.viewed == 0 ? "newsBlack" : "newsGrey"}",
+ <%= link_to "作业标题:" + ma.course_message.name, student_work_index_path(:homework => ma.course_message.id), :class =>"#{ma.viewed == 0 ? "newsBlack" : "newsGrey"}",
:onmouseover =>"message_titile_show($(this),event)",
:onmouseout => "message_titile_hide($(this))"%>
<%= User.current.lastname + User.current.firstname %><%= User.current.allowed_to?(:as_teacher,ma.course_message.course) ? '老师':'同学'%>您好!
- <%= User.current.eql?(ma.course_message.user)?"您":(ma.course_message.user.lastname + ma.course_message.user.firstname+"老师") %>关闭了匿评,作业详情如下:
+ 该作业已经被关闭了匿评。作业信息如下:
课程名称:<%= ma.course_message.course.name %>(<%= ma.course_message.course.time.to_s + '年'+ ma.course_message.course.term %>)
作业标题:<%= ma.course_message.name %>
+
+
注:缺省情况下,系统将在作业提交截止日期后14天自动关闭匿评。
+
+ <% if User.current.allowed_to?(:as_teacher,ma.course_message.course)%>
+
祝您的教学活动高效、顺利、愉快!
+ <% end %>
<%= time_tag(ma.created_at).html_safe %>
@@ -202,7 +208,7 @@
">启动作业匿评失败
- <%= link_to "作业题目:" + ma.course_message.name, student_work_index_path(:homework => ma.course_message.id), :class => "#{ma.viewed == 0 ? "newsBlack" : "newsGrey"}",
+ <%= link_to truncate(ma.course_message.name,:length=>25)+'(失败原因:提交作品的人数低于2人)', student_work_index_path(:homework => ma.course_message.id), :class => "#{ma.viewed == 0 ? "c_red" : "newsGrey "}",
:onmouseover => "message_titile_show($(this),event)",
:onmouseout => "message_titile_hide($(this))" %>
@@ -213,7 +219,6 @@
- 失败原因:提交作品的人数低于2人
课程名称:<%= ma.course_message.course.name %>(<%= ma.course_message.course.time.to_s + '年' + ma.course_message.course.term %>)
作业标题:<%= ma.course_message.name %>
提交截止:<%= ma.course_message.end_time%> 23:59
@@ -385,7 +390,7 @@
">发布的作业:
- <%= link_to "作业题目:" + ma.course_message.homework_common.name, student_work_index_path(:homework => ma.course_message.homework_common_id),
+ <%= link_to "作业标题:" + ma.course_message.homework_common.name, student_work_index_path(:homework => ma.course_message.homework_common_id),
:class => "#{ma.viewed==0 ? "newsBlack" : "newsGrey"}",
:onmouseover => "message_titile_show($(this),event)",
:onmouseout => "message_titile_hide($(this))" %>
diff --git a/app/views/users/search_user_course.js.erb b/app/views/users/search_user_course.js.erb
index 60ddd6d9c..2a0c98cad 100644
--- a/app/views/users/search_user_course.js.erb
+++ b/app/views/users/search_user_course.js.erb
@@ -15,4 +15,6 @@ $('#ajax-modal').siblings().remove();
$('#ajax-modal').before(" ");
$('#ajax-modal').parent().css("top","").css("left","");
$('#ajax-modal').parent().addClass("popbox").addClass("resourceUploadPopup");
-$('#ajax-modal').css("padding-left","16px").css("padding-bottom","16px");
\ No newline at end of file
+$('#ajax-modal').css("padding-left","16px").css("padding-bottom","16px");
+var val = $("#search_course_input").val();
+$("#search_course_input").val("").focus().val(val);
diff --git a/app/views/users/search_user_project.js.erb b/app/views/users/search_user_project.js.erb
index 26a0f265c..f38d9edc8 100644
--- a/app/views/users/search_user_project.js.erb
+++ b/app/views/users/search_user_project.js.erb
@@ -12,3 +12,6 @@ $('#ajax-modal').before(" 'users/user_homework_attachment', :locals => { :container => HomeworkCommon.new,:has_program => true })%>");
+ $("#homework_attachments").html("<%= escape_javascript(render :partial => 'users/user_homework_attachment', :locals => { :container => HomeworkCommon.new,:has_program => true,:has_group => true })%>");
homework_description_editor.html("");
$("#homework_editor").toggle();
}
diff --git a/app/views/users/user_resource.html.erb b/app/views/users/user_resource.html.erb
index a6d8d18c7..ae17eb733 100644
--- a/app/views/users/user_resource.html.erb
+++ b/app/views/users/user_resource.html.erb
@@ -361,12 +361,11 @@
if(user_id === '<%= User.current.id%>') {
res_name = line.children().eq(1).children().attr('title');
res_link = line.children().eq(1).html();
- line.children().eq(1).html('<%= form_tag(url_for(:controller => 'users',:action => 'rename_resource',:method => 'post',:remote=>true,:id=>@user.id),:id=>"res_name_form" ) do%>' +
+ line.children().eq(1).html(
' '+
- '<% end %>');
+ '"/> ');
$("#res_name").focus();
$("html,body").animate({scrollTop:$("#res_name").offset().top},1000)
}else{
@@ -382,6 +381,8 @@
return str.slice(0, i + 1);
}
+
+
//恢复编辑状态到链接状态
//如果当前是编辑状态,任何的不在输入框里的单击右键事件都需要将编辑状态变回链接状态
//如果是编辑状态,且做了修改,那么久要进行修改,并且将修改值经过处理替换到页面显示
@@ -395,22 +396,22 @@
if( name && name != res_name.trim()){
if(confirm('确定修改为 '+name)){
- $.post(
- '<%=rename_resource_user_path(@user) %>',
- "res_name="+$('#res_name').val()+"&res_id="+$("#res_id").val(),
- function (data){
- if(data != 'fail'){//修改成功,那么将链接恢复,并且将链接的显示内容改变。链接可以不变
+ $.ajax({
+ url: '<%=rename_resource_user_path(@user) %>'+ "?res_name="+$('#res_name').val() + "&res_id=" + $("#res_id").val(),
+ type:'get',
+ success:function (data)
+ {
+ if (data != 'fail') {//修改成功,那么将链接恢复,并且将链接的显示内容改变。链接可以不变
last_line.children().eq(1).html(res_link);
- last_line.children().eq(1).children().attr('title',name);
- last_line.children().eq(1).children().attr('href',data);
- last_line.children().eq(1).children().html(name.length > 17? name.substring(0,17)+'...' : name);
- }else{
+ last_line.children().eq(1).children().attr('title', name);
+ last_line.children().eq(1).children().attr('href', data);
+ last_line.children().eq(1).children().html(name.length > 17 ? name.substring(0, 17) + '...' : name);
+ } else {
last_line.children().eq(1).html(res_link);
res_link = null; //如果修改失败,恢复之后将res_link置空
}
- },
- 'text'
- );
+ }
+ } );
}else{
last_line.children().eq(1).html(res_link);
res_link = null; //如果没有做修改,恢复之后将res_link置空
diff --git a/app/views/users/user_select_homework.js.erb b/app/views/users/user_select_homework.js.erb
index 1d9cc8d70..cd94a6816 100644
--- a/app/views/users/user_select_homework.js.erb
+++ b/app/views/users/user_select_homework.js.erb
@@ -5,7 +5,7 @@ $("#homework_end_time").val("<%= @homework.end_time%>");
<% if @select_course == "0"%>
$("#course_id").val("<%= @homework.course_id%>");
<% end%>
-$("#homework_attachments").html("<%= escape_javascript(render :partial => 'users/user_homework_attachment', :locals => { :container => @homework,:has_program => true })%>");
+$("#homework_attachments").html("<%= escape_javascript(render :partial => 'users/user_homework_attachment', :locals => { :container => @homework,:has_program => true,:has_group => true })%>");
homework_description_editor.html("<%= escape_javascript(@homework.description.html_safe)%>");
$("#BluePopupBox").html("<%=escape_javascript( render :partial => 'users/user_programing_attr', :locals => {:edit_mode => true, :homework => @homework})%>");
//$("input[name='homework_type']").val("<%#= @homework.homework_type%>");
diff --git a/app/views/welcome/_search_all_results.html.erb b/app/views/welcome/_search_all_results.html.erb
index 014c6b487..34ef9a8eb 100644
--- a/app/views/welcome/_search_all_results.html.erb
+++ b/app/views/welcome/_search_all_results.html.erb
@@ -72,6 +72,22 @@
+ <% when 'memo'%>
+
<%end %>
<% end %>
+
+
+
diff --git a/app/views/welcome/search.js.erb b/app/views/welcome/search.js.erb
index c53c5d219..5cb446896 100644
--- a/app/views/welcome/search.js.erb
+++ b/app/views/welcome/search.js.erb
@@ -9,5 +9,7 @@ $("#searchContent_3").html('<%= escape_javascript(render :partial => 'search_cou
$("#searchContent_5").html('<%= escape_javascript(render :partial => 'search_project_results',:locals => {:projects=>@projects})%>');
<% when 'attachment'%>
$("#searchContent_4").html('<%= escape_javascript(render :partial => 'search_attachment_results',:locals => {:attachments=>@attachments})%>');
+<% when 'memo'%>
+$("#searchContent_6").html('<%= escape_javascript(render :partial => 'search_memo_results',:locals => {:memos=>@memos})%>');
<%else%>
<%end %>
\ No newline at end of file
diff --git a/config/routes.rb b/config/routes.rb
index 8bb530857..52fa393ad 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -72,7 +72,17 @@ RedmineApp::Application.routes.draw do
end
resources :org_subfields do
-
+ resources :files, :only => [:index, :new, :create] do
+ collection do
+ match "getattachtype", :via => [:get, :post]
+ match "search",:via => [:post,:get]
+ match "searchone4reload",:via => [:post,:get]
+ match "search_tag_attachment", :via => [:post,:get]
+ end
+ member do
+ match "quote_resource_show", :via => [:get]
+ end
+ end
end
resources :org_document_comments do
@@ -219,6 +229,11 @@ RedmineApp::Application.routes.draw do
end
collection do
post 'add_score_reply'
+ post 'student_work_project'
+ get 'new_student_work_project'
+ get 'search_user_projects'
+ get 'search_course_students'
+ get 'cancel_relate_project'
get 'delete_work'
get 'destroy_score_reply'
get 'student_work_absence_penalty'
@@ -485,7 +500,7 @@ RedmineApp::Application.routes.draw do
post "add_exist_file_to_course"
post "add_exist_file_to_project"
get 'resource_preview'
- post 'rename_resource'
+ get 'rename_resource'
get 'search_user_project'
get 'user_resource_type'
get 'user_ref_resource_search'
diff --git a/db/migrate/20151202064455_create_homework_detail_groups.rb b/db/migrate/20151202064455_create_homework_detail_groups.rb
new file mode 100644
index 000000000..a77e50f01
--- /dev/null
+++ b/db/migrate/20151202064455_create_homework_detail_groups.rb
@@ -0,0 +1,14 @@
+class CreateHomeworkDetailGroups < ActiveRecord::Migration
+ def change
+ create_table :homework_detail_groups do |t|
+ t.integer :homework_common_id
+ t.integer :min_num
+ t.integer :max_num
+ t.integer :base_on_project
+ t.references :homework_common
+
+ t.timestamps
+ end
+ add_index :homework_detail_groups, :homework_common_id
+ end
+end
diff --git a/db/migrate/20151208025236_create_student_work_projects.rb b/db/migrate/20151208025236_create_student_work_projects.rb
new file mode 100644
index 000000000..134823377
--- /dev/null
+++ b/db/migrate/20151208025236_create_student_work_projects.rb
@@ -0,0 +1,13 @@
+class CreateStudentWorkProjects < ActiveRecord::Migration
+ def change
+ create_table :student_work_projects do |t|
+ t.integer :homework_common_id
+ t.integer :student_work_id
+ t.integer :project_id
+ t.integer :user_id
+ t.integer :is_leader
+
+ t.timestamps
+ end
+ end
+end
diff --git a/db/migrate/20151208032013_add_index_to_student_work_project.rb b/db/migrate/20151208032013_add_index_to_student_work_project.rb
new file mode 100644
index 000000000..b55c313ff
--- /dev/null
+++ b/db/migrate/20151208032013_add_index_to_student_work_project.rb
@@ -0,0 +1,8 @@
+class AddIndexToStudentWorkProject < ActiveRecord::Migration
+ def change
+ add_index :student_work_projects, :homework_common_id
+ add_index :student_work_projects, :user_id
+ add_index :student_work_projects, :project_id
+ add_index :student_work_projects, :student_work_id
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 91a9fbb5d..17e613acb 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -745,6 +745,17 @@ ActiveRecord::Schema.define(:version => 20151209085942) do
add_index "homework_commons", ["course_id", "id"], :name => "index_homework_commons_on_course_id_and_id"
+ create_table "homework_detail_groups", :force => true do |t|
+ t.integer "homework_common_id"
+ t.integer "min_num"
+ t.integer "max_num"
+ t.integer "base_on_project"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ add_index "homework_detail_groups", ["homework_common_id"], :name => "index_homework_detail_groups_on_homework_common_id"
+
create_table "homework_detail_manuals", :force => true do |t|
t.float "ta_proportion"
t.integer "comment_status"
@@ -1500,6 +1511,21 @@ ActiveRecord::Schema.define(:version => 20151209085942) do
t.integer "project_id"
end
+ create_table "student_work_projects", :force => true do |t|
+ t.integer "homework_common_id"
+ t.integer "student_work_id"
+ t.integer "project_id"
+ t.integer "user_id"
+ t.integer "is_leader"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ add_index "student_work_projects", ["homework_common_id"], :name => "index_student_work_projects_on_homework_common_id"
+ add_index "student_work_projects", ["project_id"], :name => "index_student_work_projects_on_project_id"
+ add_index "student_work_projects", ["student_work_id"], :name => "index_student_work_projects_on_student_work_id"
+ add_index "student_work_projects", ["user_id"], :name => "index_student_work_projects_on_user_id"
+
create_table "student_work_tests", :force => true do |t|
t.integer "student_work_id"
t.datetime "created_at", :null => false
diff --git a/lib/tasks/elasticsearch_batch_op.rake b/lib/tasks/elasticsearch_batch_op.rake
index fb2c638bc..91c2ddff9 100644
--- a/lib/tasks/elasticsearch_batch_op.rake
+++ b/lib/tasks/elasticsearch_batch_op.rake
@@ -28,4 +28,11 @@ namespace :importer do
ENV['BATCH']='1000'
Rake::Task["elasticsearch:import:model"].invoke
end
+ task :importmemo do
+ ENV['CLASS']='Memo'
+ ENV['SCOPE']='indexable'
+ ENV['FORCE']='y'
+ ENV['BATCH']='1000'
+ Rake::Task["elasticsearch:import:model"].invoke
+ end
end
\ No newline at end of file
diff --git a/lib/tasks/homework_evaluation.rake b/lib/tasks/homework_evaluation.rake
index 84082eb9b..585d91737 100644
--- a/lib/tasks/homework_evaluation.rake
+++ b/lib/tasks/homework_evaluation.rake
@@ -14,14 +14,33 @@ namespace :homework_evaluation do
if homework_common.anonymous_comment == 0 && homework_detail_manual.comment_status == 1 #新建状态才可开启匿评
student_works = homework_common.student_works
if student_works && student_works.size >= 2
- student_works.each_with_index do |work, index|
- user = work.user
- n = homework_detail_manual.evaluation_num
- n = n < student_works.size ? n : student_works.size - 1
- assigned_homeworks = get_assigned_homeworks(student_works, n, index)
- assigned_homeworks.each do |h|
- student_works_evaluation_distributions = StudentWorksEvaluationDistribution.new(user_id: user.id, student_work_id: h.id)
- student_works_evaluation_distributions.save
+ if homework_common.homework_type == 3
+ student_work_projects = homework_common.student_work_projects.where("student_work_id is not null")
+ student_work_projects.each_with_index do |pro_work, pro_index|
+ n = homework_detail_manual.evaluation_num
+ n = n < student_works.size ? n : student_works.size - 1
+ work_index = -1
+ student_works.each_with_index do |stu_work, stu_index|
+ if stu_work.id.to_i == pro_work.student_work_id.to_i
+ work_index = stu_index
+ end
+ end
+ assigned_homeworks = get_assigned_homeworks(student_works, n, work_index)
+ assigned_homeworks.each do |h|
+ student_works_evaluation_distributions = StudentWorksEvaluationDistribution.new(user_id: pro_work.user_id, student_work_id: h.id)
+ student_works_evaluation_distributions.save
+ end
+ end
+ else
+ student_works.each_with_index do |work, index|
+ user = work.user
+ n = homework_detail_manual.evaluation_num
+ n = n < student_works.size ? n : student_works.size - 1
+ assigned_homeworks = get_assigned_homeworks(student_works, n, index)
+ assigned_homeworks.each do |h|
+ student_works_evaluation_distributions = StudentWorksEvaluationDistribution.new(user_id: user.id, student_work_id: h.id)
+ student_works_evaluation_distributions.save
+ end
end
end
homework_detail_manual.update_column('comment_status', 2)
diff --git a/public/images/course/proRelated.png b/public/images/course/proRelated.png
new file mode 100644
index 000000000..2cc1252cc
Binary files /dev/null and b/public/images/course/proRelated.png differ
diff --git a/public/javascripts/course.js b/public/javascripts/course.js
index 97e20a5a8..b3618cda4 100644
--- a/public/javascripts/course.js
+++ b/public/javascripts/course.js
@@ -960,13 +960,31 @@ function regexStudentWorkDescription()
}
}
+function regexStudentWorkMember(min, max) {
+ var members = $.trim($("#group_member_ids").val()).split(',');
+ if ( min <= members.length && members.length <= max ){
+ $("#student_work_group_textarea").text("");
+ return true;
+ } else {
+ $("#student_work_group_textarea").text("合作成员人数应为:"+min+"-"+max+"人");
+ return false;
+ }
+}
+
//提交新建作品
function new_student_work()
{
if(regexStudentWorkName()&®exStudentWorkDescription())
{
- $("#new_student_work").submit();
- $("#ajax-indicator").hide();
+ if($("#group_member_ids").length > 0) {
+ if(regexStudentWorkMember(parseInt($.trim($("#min_num_member").html())),parseInt($.trim($("#max_num_member").html())))) {
+ $("#new_student_work").submit();
+ $("#ajax-indicator").hide();
+ }
+ } else {
+ $("#new_student_work").submit();
+ $("#ajax-indicator").hide();
+ }
}
}
@@ -1369,4 +1387,4 @@ function submit_course_feedback() {
$("#course_feedback_new").submit();
var flag = true
}
-}
\ No newline at end of file
+}
diff --git a/public/javascripts/homework.js b/public/javascripts/homework.js
index 468548179..373cce51c 100644
--- a/public/javascripts/homework.js
+++ b/public/javascripts/homework.js
@@ -124,7 +124,6 @@ $(function(){
$('#textarea_input_test').focus();
});
-
var saveProgramAnswers = function() {
var test_numbers = 0;
var valid = true;
@@ -198,6 +197,68 @@ $(function(){
$(this).parent('.mt10').remove();
});
+ //分组作业
+ $("#GroupPopupBox").dialog({
+ modal: true,
+ autoOpen: false,
+ dialogClass: 'BluePopupBox',
+ minWidth: 290
+ });
+
+ $('a.groupBtn').live('click', function(){
+ $("#GroupPopupBox").dialog("open");
+ $(".ui-dialog-titlebar").hide();
+ $("a.popClose").on('click', function(){
+ $("#GroupPopupBox" ).dialog("close");
+ });
+ $("#cancel_group").on('click', function(){
+ $("#GroupPopupBox" ).dialog("close");
+ });
+ $('#min_num').focus();
+ });
+
+ var saveGroupAttr = function() {
+ var valid = true;
+ var base_on_project = 0;
+ var min = $.trim($("#min_num").val());
+ var max = $.trim($("#max_num").val());
+ if(min.length <= 0) {
+ $("#min_num").focus();
+ valid = false;
+ return false;
+ }
+ if(max.length <= 0) {
+ $("#max_num").focus();
+ valid = false;
+ return false;
+ }
+ if ($("#base_on_project").is(":checked")) {
+ base_on_project = 1;
+ }
+ if (valid) {
+ $("input[name=homework_type]").val(3);
+ $('span.group_detail_info').text('分组人数:'+min+'-'+max+' 人');
+ //保存js值
+ var data = {
+ base_on_project: base_on_project,
+ min_num: min,
+ max_num: max
+ };
+ //构建到form中
+ $('.group-input').remove();
+ var html=bt('t:group-input-list',data);
+ $("input[name=homework_type]").after(html);
+ }
+ return valid;
+ };
+
+ $("#GroupPopupBox a.group_btn").live('click', function(){
+ if(saveGroupAttr()){
+ if($( "#GroupPopupBox" ).dialog( "isOpen" )){
+ $("#GroupPopupBox").dialog( "close" );
+ }
+ }
+ });
//代码编辑器
if (typeof CodeMirror != "undefined") {
diff --git a/public/javascripts/new_user.js b/public/javascripts/new_user.js
index a0647b592..d375a90ee 100644
--- a/public/javascripts/new_user.js
+++ b/public/javascripts/new_user.js
@@ -251,8 +251,15 @@ function new_student_work()
{
if(regexStudentWorkName()&®exStudentWorkDescription())
{
- $("#new_student_work").submit();
- $("#ajax-indicator").hide();
+ if($("#group_member_ids").length > 0) {
+ if(regexStudentWorkMember(parseInt($.trim($("#min_num_member").html())),parseInt($.trim($("#max_num_member").html())))) {
+ $("#new_student_work").submit();
+ $("#ajax-indicator").hide();
+ }
+ } else {
+ $("#new_student_work").submit();
+ $("#ajax-indicator").hide();
+ }
}
}
@@ -298,12 +305,36 @@ function regexStudentWorkDescription()
}
}
+function regexStudentWorkMember(min, max) {
+ var members = $.trim($("#group_member_ids").val()).split(',');
+ if ( min <= members.length && members.length <= max ){
+ $("#student_work_group_textarea").text("");
+ return true;
+ } else {
+ $("#student_work_group_textarea").text("合作成员人数应为:"+min+"-"+max+"人");
+ return false;
+ }
+}
+
//学生作品
function show_project()
{
$("#about_project").slideToggle();
}
+//添加分组成员
+function show_group_member(){
+ $("#chooseGroupMember").dialog("open");
+ $(".ui-dialog-titlebar").hide();
+ $("a.popClose").on('click', function(){
+ $("#chooseGroupMember" ).dialog("close");
+ });
+ $("#cancel_add").on('click', function(){
+ $("#chooseGroupMember" ).dialog("close");
+ });
+ //$('#min_num').focus();
+}
+
//textarea自适应高度 纯js写的 有浏览器判断
/**
* 文本框根据输入内容自适应高度
diff --git a/public/stylesheets/courses.css b/public/stylesheets/courses.css
index 54e550426..31e327449 100644
--- a/public/stylesheets/courses.css
+++ b/public/stylesheets/courses.css
@@ -1182,21 +1182,32 @@ a:hover.testBtn{background: url(/images/course/hwork_icon.png) -81px -5px no-rep
a.groupBtn{ background: url(/images/course/hwork_icon.png) -2px -61px no-repeat !important; height:20px; display:block; padding-left:20px; color:#888888; -moz-transition :all 0s linear 0s; -webkit-transition :all 0s linear 0s; -o-transition:all 0s linear 0s; transition:all 0s linear 0s;}
a:hover.groupBtn{background: url(/images/course/hwork_icon.png) -80px -61px no-repeat !important; color:#3598db; -moz-transition :all 0s linear 0s; -webkit-transition :all 0s linear 0s; -o-transition:all 0s linear 0s; transition:all 0s linear 0s;}
.markInput { outline:none; border:1px solid #e6e6e6; height:30px; width:50px; color:#3d3c3c; margin-right:5px; text-align:center; padding-left:0px;}
-.groupPopUp {width:290px; height:auto; padding:15px; background-color:#ffffff; z-index:1000; position:relative;}
+.groupPopUp {border:3px solid #269ac9; width:290px; height:auto; padding:15px; background-color:#ffffff; position:fixed !important;left:50%;top:50%;margin:-100px 0 0 -150px; -moz-border-radius:5px;}
.popClose {background:url(/images/resource_icon_list.png) 0px -40px no-repeat; width:20px; height:20px; display:inline-block; position: absolute; z-index: 1000; right:2px; top:3px;}
a.memberBtn{ background: url(/images/course/hwork_icon.png) -7px -90px no-repeat !important; height:20px; display:block; padding-left:20px; color:#888888; -moz-transition :all 0s linear 0s; -webkit-transition :all 0s linear 0s; -o-transition:all 0s linear 0s; transition:all 0s linear 0s;}
a:hover.memberBtn{background: url(/images/course/hwork_icon.png) -80px -90px no-repeat !important; color:#3598db; -moz-transition :all 0s linear 0s; -webkit-transition :all 0s linear 0s; -o-transition:all 0s linear 0s; transition:all 0s linear 0s;}
.addMemberC {float:left; max-height:150px; margin-bottom:10px; overflow:auto; overflow-x:hidden; width:227px; background-color:#f1f1f1; min-height:150px; padding-top:10px;}
.addMemberC li {padding-left:10px; line-height:18px;}
.addMemberC li:hover {cursor:pointer; background-color:#cccccc;}
-.addMemberCP {width:514px; height:auto; border:3px solid #269ac9; padding-left:16px; padding-bottom:16px; background-color:#ffffff; position:absolute; z-index:1000;}
+.addMemberCP {width:514px; height:auto; border:3px solid #269ac9; padding-left:16px; padding-bottom:16px; background-color:#ffffff; position:fixed !important;left:50%;top:50%;margin:-100px 0 0 -150px; -moz-border-radius:5px;}
.rightArrow {margin:50px 15px 0px 15px; float:left;}
.relateText {font-size:16px; color:#269ac9; line-height:16px; padding-top:20px; display:inline-block; font-weight: bold;}
-
+.maxHeight100 {max-height:100px; overflow-x:hidden; overflow-y:auto;}
.resubAtt {border-top:1px solid #dddddd; position:relative; margin-top:15px;}
.resubTitle {position:absolute; top:-10px; left:5px; background-color:#ffffff; display:block; font-weight:bold; padding:0px 2px;}
a.blueCir{ display:inline-block; padding:2px 5px; background-color:#ffffff;border:1px solid #3598db; color:#3598db; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px;}
a:hover.blueCir{ background:#3598db; color:#fff;}
+.proList {background-color:#eaeaea; padding:5px 10px; display:block; max-width:655px; float:left;}
+
+.borderRadius {border-radius:5px;}
+.maxHeight100 {max-height:100px; overflow-x:hidden; overflow-y:auto;}
+.proRelateWrap {width:38px; height:38px; border:1px solid #cecece; border-radius:3px; background-color:#f1f1f1;}
+.mt7 {margin-top:7px;}
+.ml7 {margin-left:7px;}
+.tac {text-align:center;}
+.proHelp {background:url(/images/course/hwork_icon.png) -5px -124px no-repeat; display:inline-block; width:15px; height:15px; display:inline-block;}
+.hworkPrName {width:110px; max-width:110px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis; float:left; height:18px; line-height:18px; font-size:12px; color:#888888; text-align:center;}
+.mr150 {margin-right:150px;}
/*上传资源弹窗*/
.resourceUploadPopup {width:400px; height:auto; border:3px solid #269ac9 !important; padding-left:16px; padding-bottom:16px; background-color:#ffffff; position:absolute; top:50%; left:50%; margin-left:-200px; z-index:1000;}
@@ -1213,4 +1224,8 @@ a.uploadIcon {background:url(images/resource_icon_list.png) 8px -60px no-repeat;
.uploadKeyword {margin-bottom:10px; outline:none; border:1px solid #e6e6e6; height:30px; width:280px;}
.mb10 {margin-bottom: 10px}
.mb15 {margin-bottom: 15px}
-div.disable_link {background-color: #c1c1c1 !important;}
\ No newline at end of file
+div.disable_link {background-color: #c1c1c1 !important;}
+
+/*新课程资源库*/
+.reCon{ margin:5px; width:710px;}
+.reTop{width:710px; height:40px; background:#eaeaea; padding:5px;}
diff --git a/public/stylesheets/new_user.css b/public/stylesheets/new_user.css
index a9edee92d..0ed4df627 100644
--- a/public/stylesheets/new_user.css
+++ b/public/stylesheets/new_user.css
@@ -1355,13 +1355,29 @@ a:hover.testBtn{background: url(/images/course/hwork_icon.png) -81px -5px no-rep
a.groupBtn{ background: url(/images/course/hwork_icon.png) -2px -61px no-repeat !important; height:20px; display:block; padding-left:20px; color:#888888; -moz-transition :all 0s linear 0s; -webkit-transition :all 0s linear 0s; -o-transition:all 0s linear 0s; transition:all 0s linear 0s;}
a:hover.groupBtn{background: url(/images/course/hwork_icon.png) -80px -61px no-repeat !important; color:#3598db; -moz-transition :all 0s linear 0s; -webkit-transition :all 0s linear 0s; -o-transition:all 0s linear 0s; transition:all 0s linear 0s;}
.markInput { outline:none; border:1px solid #e6e6e6; height:30px; width:50px; color:#3d3c3c; margin-right:5px; text-align:center; padding-left:0px;}
-.groupPopUp {width:290px; height:auto; padding:15px; background-color:#ffffff; z-index:1000; position:relative;}
+.groupPopUp {border:3px solid #269ac9; width:290px; height:auto; padding:15px; background-color:#ffffff;position:fixed !important;left:50%;top:50%;margin:-100px 0 0 -150px; -moz-border-radius:5px;}
.popClose {background:url(/images/resource_icon_list.png) 0px -40px no-repeat; width:20px; height:20px; display:inline-block; position: absolute; z-index: 1000; right:2px; top:3px;}
a.memberBtn{ background: url(/images/course/hwork_icon.png) -7px -90px no-repeat !important; height:20px; display:block; padding-left:20px; color:#888888; -moz-transition :all 0s linear 0s; -webkit-transition :all 0s linear 0s; -o-transition:all 0s linear 0s; transition:all 0s linear 0s;}
a:hover.memberBtn{background: url(/images/course/hwork_icon.png) -80px -90px no-repeat !important; color:#3598db; -moz-transition :all 0s linear 0s; -webkit-transition :all 0s linear 0s; -o-transition:all 0s linear 0s; transition:all 0s linear 0s;}
.addMemberC {float:left; max-height:150px; margin-bottom:10px; overflow:auto; overflow-x:hidden; width:227px; background-color:#f1f1f1; min-height:150px; padding-top:10px;}
.addMemberC li {padding-left:10px; line-height:18px;}
.addMemberC li:hover {cursor:pointer; background-color:#cccccc;}
-.addMemberCP {width:514px; height:auto; border:3px solid #269ac9; padding-left:16px; padding-bottom:16px; background-color:#ffffff; position:absolute; z-index:1000;}
+.addMemberCP {width:514px; height:auto; border:3px solid #269ac9; padding-left:16px; padding-bottom:16px; background-color:#ffffff; position:fixed !important;left:50%;top:50%;margin:-100px 0 0 -150px; -moz-border-radius:5px;}
.rightArrow {margin:50px 15px 0px 15px; float:left;}
.relateText {font-size:16px; color:#269ac9; line-height:16px; padding-top:20px; display:inline-block; font-weight: bold;}
+.maxHeight100 {max-height:100px; overflow-x:hidden; overflow-y:auto;}
+.resubAtt {border-top:1px solid #dddddd; position:relative; margin-top:15px;}
+.resubTitle {position:absolute; top:-10px; left:5px; background-color:#ffffff; display:block; font-weight:bold; padding:0px 2px;}
+a.blueCir{ display:inline-block; padding:2px 5px; background-color:#ffffff;border:1px solid #3598db; color:#3598db; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px;}
+a:hover.blueCir{ background:#3598db; color:#fff;}
+.proList {background-color:#eaeaea; padding:5px 10px; display:block; max-width:655px; float:left;}
+
+.borderRadius {border-radius:5px;}
+.maxHeight100 {max-height:100px; overflow-x:hidden; overflow-y:auto;}
+.proRelateWrap {width:38px; height:38px; border:1px solid #cecece; border-radius:3px; background-color:#f1f1f1;}
+.mt7 {margin-top:7px;}
+.ml7 {margin-left:7px;}
+.tac {text-align:center;}
+.proHelp {background:url(/images/course/hwork_icon.png) -5px -124px no-repeat; display:inline-block; width:15px; height:15px; display:inline-block;}
+.hworkPrName {width:110px; max-width:110px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis; float:left; height:18px; line-height:18px; font-size:12px; color:#888888; text-align:center;}
+.mr150 {margin-right:150px;}
diff --git a/public/stylesheets/org.css b/public/stylesheets/org.css
index c46cfc6e2..584f1bafa 100644
--- a/public/stylesheets/org.css
+++ b/public/stylesheets/org.css
@@ -70,4 +70,17 @@ a.linkGrey8:hover {color:#585858;}
.org_login_list{ border:1px solid #eaeaea; background:#fff; padding-left:10px; padding-bottom:10px; padding-top:8px; width:60px; left:-53px; position:absolute; z-index:9999; line-height:2; box-shadow: 0px 2px 8px rgba(146, 153, 169, 0.5); margin-top: 30px;}
#orgUserName {max-width:50px; overflow:hidden; white-space: nowrap; text-overflow: ellipsis; display:inline-block;}
-.orgListStatus {width:55px; float:left;}
\ No newline at end of file
+.orgListStatus {width:55px; float:left;}
+.reCon{ margin:5px; width:710px;}
+.retop{width:710px; height:40px; background:#eaeaea; padding:5px;}
+.resources {width:718px; background-color:#ffffff; padding:15px; border:1px solid #dddddd;float: right}
+.re_search{ margin-top:7px; margin-left:5px;}
+.re_search{ margin-top:7px; margin-left:5px;}
+.re_schbox{ width:240px; height:24px; border:1px solid #64bdd9; color:#666666;}
+.re_schbtn{ width:60px; height:26px; color:#fff; margin-right:5px; border:none; margin-left:0px;padding-left: 0px;}
+.b_lblue{ background:#64bdd9;}
+.c_grey{ color:#888888;}
+.re_con{ margin:5px; width:665px;}
+.re_con_top{color:#494949; }
+.re_con_top span{ color:#999999; font-weight:bold;}
+ul.wlist{ float:right; border-bottom:none; height:30px; margin-top:20px; }
\ No newline at end of file
diff --git a/spec/factories/homework_detail_groups.rb b/spec/factories/homework_detail_groups.rb
new file mode 100644
index 000000000..86897c68e
--- /dev/null
+++ b/spec/factories/homework_detail_groups.rb
@@ -0,0 +1,11 @@
+# Read about factories at https://github.com/thoughtbot/factory_girl
+
+FactoryGirl.define do
+ factory :homework_detail_group do
+ homework_common_id 1
+ min_num 1
+ max_num 1
+ base_on_project 1
+ homework_common nil
+ end
+end
diff --git a/spec/factories/student_work_projects.rb b/spec/factories/student_work_projects.rb
new file mode 100644
index 000000000..d6ecb2657
--- /dev/null
+++ b/spec/factories/student_work_projects.rb
@@ -0,0 +1,6 @@
+# Read about factories at https://github.com/thoughtbot/factory_girl
+
+FactoryGirl.define do
+ factory :student_work_project do
+ end
+end
diff --git a/spec/models/homework_detail_group_spec.rb b/spec/models/homework_detail_group_spec.rb
new file mode 100644
index 000000000..2217ad28d
--- /dev/null
+++ b/spec/models/homework_detail_group_spec.rb
@@ -0,0 +1,5 @@
+require 'rails_helper'
+
+RSpec.describe HomeworkDetailGroup, :type => :model do
+ pending "add some examples to (or delete) #{__FILE__}"
+end
diff --git a/spec/models/student_work_project_spec.rb b/spec/models/student_work_project_spec.rb
new file mode 100644
index 000000000..42a65b35e
--- /dev/null
+++ b/spec/models/student_work_project_spec.rb
@@ -0,0 +1,5 @@
+require 'rails_helper'
+
+RSpec.describe StudentWorkProject, :type => :model do
+ pending "add some examples to (or delete) #{__FILE__}"
+end