diff --git a/Gemfile b/Gemfile index 80c0e1c2a..cbeade2a3 100644 --- a/Gemfile +++ b/Gemfile @@ -50,10 +50,10 @@ gem 'elasticsearch-model' gem 'elasticsearch-rails' #rails 3.2.22.2 bug - gem "test-unit", "~>3.0" + gem "test-unit", "~>3.0" ### profile - gem 'oneapm_rpm' + gem 'oneapm_rpm' group :development do gem 'grape-swagger' diff --git a/app/api/mobile/apis/courses.rb b/app/api/mobile/apis/courses.rb index cbf8f4986..dd5525fae 100644 --- a/app/api/mobile/apis/courses.rb +++ b/app/api/mobile/apis/courses.rb @@ -118,6 +118,8 @@ module Mobile roles_ids << "10" end + go_course_group = 0 + if roles_ids.length <= 0 {status:-1,message:"请至少选择一个角色"} else @@ -125,7 +127,9 @@ module Mobile status = cs.join_course_roles({role: roles_ids, openid: params[:openid], invite_code: params[:invite_code]}, current_user) { status: status[:state], - message:CoursesService::JoinCourseError.message(status[:state]) + message:CoursesService::JoinCourseError.message(status[:state]), + go_coursegroup_flag:status[:go_coursegroup_flag], + course_id:status[:course_id] } end end @@ -750,6 +754,47 @@ module Mobile end out.merge(message: message) end + + desc '获取分班列表' + params do + requires :id, type: Integer + requires :token, type:String + end + get 'course_groups/:id' do + begin + authenticate! + course = Course.find(params[:id]) + groups = [] + groups = course.course_groups if course.course_groups + present :data,groups + present :status,0 + rescue + present :status,-1 + end + end + + desc "加入分班" + params do + requires :id, type: Integer + requires :token, type: String + requires :course_group_id, type: Integer + end + post 'join_coursegroup' do + begin + authenticate! + member = Member.where(:course_id => params[:id], :user_id => current_user.id).first + + raise "你还不是该班级的学生!" unless member + + member.course_group_id = params[:course_group_id].to_i + member.save + present :status,0 + rescue Exception=>e + present :message,e.message + present :status,-1 + end + end + end end end diff --git a/app/api/mobile/entities/course.rb b/app/api/mobile/entities/course.rb index 30a5a6cc9..9bf1cc1f6 100644 --- a/app/api/mobile/entities/course.rb +++ b/app/api/mobile/entities/course.rb @@ -19,6 +19,8 @@ module Mobile (format_time(c[field]) if (c.is_a?(Hash) && c.key?(field))) || (format_time(c.send(field)) if c.respond_to?(field)) elsif field == :member_count ::Course===c ? c.members.count : 0 + elsif field == :syllabus_title + c.syllabus.nil? ? "":c.syllabus.title else (c[field] if (c.is_a?(Hash) && c.key?(field))) || (c.send(field) if c.respond_to?(field)) end @@ -38,6 +40,7 @@ module Mobile course_expose :lft course_expose :location course_expose :name + course_expose :syllabus_title course_expose :open_student # course_expose :password course_expose :rgt diff --git a/app/api/mobile/entities/user.rb b/app/api/mobile/entities/user.rb index 30a2a7edd..09ef6a599 100644 --- a/app/api/mobile/entities/user.rb +++ b/app/api/mobile/entities/user.rb @@ -36,6 +36,8 @@ module Mobile u.lastname when :mail u.mail + when :is_me + defined? u.is_me ? u.is_me : 0 end end end @@ -77,6 +79,8 @@ module Mobile user_expose :name + user_expose :is_me + end end diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index e542d1e1d..403119e20 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -894,12 +894,15 @@ class CoursesController < ApplicationController # return # end #更新创建课程消息状态 - create_course_messages = @course.course_messages.where("user_id =? and course_message_type =? and course_id =? and viewed =?", User.current.id, 'Course', @course.id, 0) - create_course_messages.update_all(:viewed => true) + course_request_messages = CourseMessage.where(:user_id => User.current.id, :course_id => @course.id, :course_message_type => ["CourseRequestDealResult", "Course"], :viewed => false) + course_request_messages.update_all(:viewed => true) + + # create_course_messages = @course.course_messages.where("user_id =? and course_message_type =? and course_id =? and viewed =?", User.current.id, 'Course', @course.id, 0) + # create_course_messages.update_all(:viewed => true) #更新申请结果反馈消息的状态 - course_request_messages = CourseMessage.where("user_id =? and course_id =? and course_message_type =? and viewed =?", User.current.id, @course.id, 'CourseRequestDealResult', false) - course_request_messages.update_all(:viewed => true) + # course_request_messages = CourseMessage.where("user_id =? and course_id =? and course_message_type =? and viewed =?", User.current.id, @course.id, 'CourseRequestDealResult', false) + # course_request_messages.update_all(:viewed => true) course_activities = @course.course_activities @canShowRealName = User.current.member_of_course? @course diff --git a/app/controllers/homework_common_controller.rb b/app/controllers/homework_common_controller.rb index 6704f7401..b8c6a4a0a 100644 --- a/app/controllers/homework_common_controller.rb +++ b/app/controllers/homework_common_controller.rb @@ -85,7 +85,16 @@ class HomeworkCommonController < ApplicationController homework_detail_manual = @homework.homework_detail_manual || HomeworkDetailManual.new @homework.end_time = params[:homework_common][:end_time] || Time.now @homework.course_id = params[:course_id] - anonymous = params[:homework_common][:anonymous_comment] ? params[:homework_common][:anonymous_comment].to_i : 0 + if params[:homework_type] && params[:homework_type].to_i != @homework.homework_type + if @homework.homework_type == 2 + @homework.homework_detail_programing.destroy if @homework.homework_detail_programing + @homework.homework_tests.destroy_all + elsif @homework.homework_type == 3 + @homework.homework_detail_group.destroy if @homework.homework_detail_group + end + end + @homework.homework_type = params[:homework_type].to_i || @homework.homework_type + anonymous = params[:homework_common][:anonymous_comment] ? params[:homework_common][:anonymous_comment].to_i : 1 if anonymous != @homework.anonymous_comment if anonymous == 1 homework_detail_manual.ta_proportion = @homework.homework_type == 1 ? 1.0 : 0.4 @@ -111,7 +120,7 @@ class HomeworkCommonController < ApplicationController if @homework.homework_type == 2 @homework.homework_detail_programing ||= HomeworkDetailPrograming.new @homework_detail_programing = @homework.homework_detail_programing - @homework_detail_programing.language = params[:language_type].to_i + @homework_detail_programing.language = params[:language_type].to_i if params[:language_type] if anonymous != @homework.anonymous_comment if anonymous == 1 @homework_detail_programing.ta_proportion = 0.6 @@ -120,8 +129,8 @@ class HomeworkCommonController < ApplicationController end end - @homework.homework_tests.delete_all - inputs = params[:program][:input] + @homework.homework_tests.delete_all if params[:program] + inputs = params[:program][:input] if params[:program] if Array === inputs inputs.each_with_index do |val, i| @homework.homework_tests << HomeworkTest.new( @@ -136,12 +145,12 @@ class HomeworkCommonController < ApplicationController if @homework.homework_type == 3 @homework.homework_detail_group ||= HomeworkDetailGroup.new @homework_detail_group = @homework.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 + @homework_detail_group.min_num = params[:min_num].to_i if params[:min_num] + @homework_detail_group.max_num = params[:max_num].to_i if params[:max_num] + @homework_detail_group.base_on_project = params[:base_on_project].to_i if params[:base_on_project] end - @homework.anonymous_comment = params[:homework_common][:anonymous_comment] ? params[:homework_common][:anonymous_comment].to_i : 0 + @homework.anonymous_comment = params[:homework_common][:anonymous_comment] ? params[:homework_common][:anonymous_comment].to_i : 1 if @homework.save homework_detail_manual.save if homework_detail_manual @homework_detail_programing.save if @homework_detail_programing diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index b97699058..6fb2868bc 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -132,16 +132,13 @@ class IssuesController < ApplicationController User.current.at_messages.unviewed('Journal', j.id).each {|x| x.viewed!} end - # 缺陷状态更新 - query_journals = @issue.journals - query_journals.each do |query_journal| - query_journal.forge_messages.each do |f| - if User.current.id == f.user_id - f.update_attributes(:viewed => true) - end - end - end - # end + # 缺陷状态消息更新 + query_journals_ids = @issue.journals.map{|journal| journal.id} + if query_journals_ids.length > 0 + query_journals = ForgeMessage.where("user_id =? and forge_message_type =? and forge_message_id in (#{query_journals_ids.join(",")})", User.current.id, "Journal") + query_journals.update_all(:viewed => true) + end + @jour_reply = Journal.new @journals = @issue.journals.includes(:user, :details).reorder("#{Journal.table_name}.id ASC").all @journals.each_with_index {|j,i| j.indice = i+1} @@ -183,6 +180,7 @@ class IssuesController < ApplicationController end end + # 用户发布新issue def create call_hook(:controller_issues_new_before_save, { :params => params, :issue => @issue }) @issue.save_attachments(params[:attachments] || (params[:issue] && params[:issue][:uploads])) @@ -225,6 +223,7 @@ class IssuesController < ApplicationController end def edit + # 修改实例变量的值 return unless update_issue_from_params respond_to do |format| @@ -233,6 +232,7 @@ class IssuesController < ApplicationController end end + # 用户编辑更改issue def update if params[:issue_detail] issue = Issue.find(params[:id]) @@ -240,6 +240,7 @@ class IssuesController < ApplicationController @saved = update_user_issue_detail(issue, params) return else + # 修改实例变量的值 return unless update_issue_from_params @issue.save_attachments(params[:attachments] || (params[:issue] && params[:issue][:uploads])) saved = false @@ -575,6 +576,7 @@ class IssuesController < ApplicationController @time_entry = TimeEntry.new(:issue => @issue, :project => @issue.project) @time_entry.attributes = params[:time_entry] + # 更新issue状态时,journal表产生记录,返回@current_journal @issue.init_journal(User.current) issue_attributes = params[:issue] diff --git a/app/controllers/org_member_controller.rb b/app/controllers/org_member_controller.rb index 2eaa790cd..a01956f56 100644 --- a/app/controllers/org_member_controller.rb +++ b/app/controllers/org_member_controller.rb @@ -8,18 +8,33 @@ class OrgMemberController < ApplicationController end end + # 组织子成员,及其分页 + def org_member_paging + @organization = Organization.find(params[:org]) + + if User.current.admin? || User.current.admin_of_org?(@organization) + @members = OrgMember.where(:organization_id => @organization.id).all.sort + @members = paginateHelper @members, 20 + respond_to do |format| + format.js + end + end + end + def create - @org = Organization.find(params[:org]) + @organization = Organization.find(params[:org]) if params[:membership].nil? @fail_hint = l(:label_blank_user_lists_for_org) else member_ids = params[:membership][:user_ids] role_id = params[:orgRole] member_ids.each do |user_id| - member = OrgMember.create(:user_id=>user_id, :created_at => Time.now) - @org.org_members << member + member = OrgMember.create(:user_id => user_id, :created_at => Time.now) + @organization.org_members << member OrgMemberRole.create(:org_member_id => member.id, :role_id => role_id) end + @members = (@organization.org_members).sort + @members = paginateHelper @members, 20 end respond_to do |format| format.js @@ -32,7 +47,11 @@ class OrgMemberController < ApplicationController @member_role = @member.org_member_roles[0] @member_role.role_id = params[:org_member][:role_ids][0] @member_role.save - @org = @member.organization + @organization = @member.organization + # 成员编辑角色后分页 + @members = (@organization.org_members).sort + @members = paginateHelper @members, 20 + respond_to do |format| format.js end @@ -44,8 +63,10 @@ class OrgMemberController < ApplicationController def destroy member = OrgMember.find(params[:id]) - @org = member.organization + @organization = member.organization member.destroy + @members = (@organization.org_members).sort + @members = paginateHelper @members, 20 respond_to do |format| format.js end diff --git a/app/controllers/organizations_controller.rb b/app/controllers/organizations_controller.rb index b36ef592d..2b31cae13 100644 --- a/app/controllers/organizations_controller.rb +++ b/app/controllers/organizations_controller.rb @@ -88,7 +88,7 @@ class OrganizationsController < ApplicationController shield_project_ids = ShieldActivity.where("container_type='Organization' and container_id=#{@organization.id} and shield_type='Project'").map(&:shield_id) shield_course_ids = ShieldActivity.where("container_type='Organization' and container_id=#{@organization.id} and shield_type='Course'").map(&:shield_id) project_ids = (@organization.projects.map(&:id) - shield_project_ids) << 0 - course_ids = (@organization.courses.map(&:id) - shield_course_ids) << 0 + course_ids = (@organization.courses.not_deleted.map(&:id) - shield_course_ids) << 0 course_types = "('Message','News','HomeworkCommon','Poll','Course')" @project_acts = get_project_activities_org @organization, project_ids @course_acts = get_course_activities_org @organization, course_ids @@ -140,7 +140,7 @@ class OrganizationsController < ApplicationController shield_project_ids = ShieldActivity.where("container_type='Organization' and container_id=#{@organization.id} and shield_type='Project'").map(&:shield_id) shield_course_ids = ShieldActivity.where("container_type='Organization' and container_id=#{@organization.id} and shield_type='Course'").map(&:shield_id) project_ids = (@organization.projects.map(&:id)-shield_project_ids) << 0 - course_ids = (@organization.courses.map(&:id)-shield_course_ids) << 0 + course_ids = (@organization.courses.not_deleted.map(&:id)-shield_course_ids) << 0 course_types = "('Message','News','HomeworkCommon','Poll','Course')" case params[:type] when nil @@ -421,6 +421,8 @@ class OrganizationsController < ApplicationController @organization = Organization.find(params[:id]) if User.current.admin? || User.current.admin_of_org?(@organization) + @members = OrgMember.where(:organization_id => @organization.id).all.sort + @members = paginateHelper @members, 20 else render_403 end @@ -451,10 +453,11 @@ class OrganizationsController < ApplicationController def members if @organization.is_public? || User.current.admin? || User.current.member_of_org?(@organization) - @members = OrgMember.where("organization_id =?", @organization.id) + @members = OrgMember.where(:organization_id => @organization.id).all.sort else render_403 end + @members = paginateHelper @members, 20 end def more_org_projects diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 5dcf493ee..8d4c09ded 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -580,6 +580,7 @@ class ProjectsController < ApplicationController end end @members = paginateHelper @members + end def update_message_status(user, project) diff --git a/app/controllers/quality_analysis_controller.rb b/app/controllers/quality_analysis_controller.rb index 365889640..4e522ec73 100644 --- a/app/controllers/quality_analysis_controller.rb +++ b/app/controllers/quality_analysis_controller.rb @@ -252,7 +252,7 @@ class QualityAnalysisController < ApplicationController unresolved_issue_count = JSON.parse(unresolved_issues)["total"].to_i all_issues = open(@sonar_address + "/api/issues/search?projectKeys=#{@resource_id}&authors=#{email}").read all_issue_count = JSON.parse(all_issues)["total"].to_i - ratio = (changes == 0 ? 0 : format("%0.4f",unresolved_issue_count.to_f/changes.to_f)) + ratio = ((changes == 0 || all_issue_count == 0) ? 0 : format("%0.4f",all_issue_count.to_f/changes.to_f)) @user_quality_infos << {:email => email, :changes => changes, :unresolved_issue_count => unresolved_issue_count, :ratio => ratio, :all_issue_count => all_issue_count} end diff --git a/app/controllers/student_work_controller.rb b/app/controllers/student_work_controller.rb index 64f85b5db..f6a97e66c 100644 --- a/app/controllers/student_work_controller.rb +++ b/app/controllers/student_work_controller.rb @@ -338,41 +338,17 @@ class StudentWorkController < ApplicationController end def index - # 作业消息状态更新 - @homework.course_messages.each do |homework_message| - if User.current.id == homework_message.user_id && homework_message.viewed == 0 - homework_message.update_attributes(:viewed => true) if homework_message.viewed == 0 - end - end - - #修改作品提示消息更新 - student_work_messages = CourseMessage.where("user_id =? and course_id =? and course_message_type =? and viewed =?", User.current.id, @homework.course, StudentWork.name, 0) - student_work_messages.each do |message| - message.update_attribute(:viewed, true) - end - + # 作业消息状态更新? + homeworkcommon_messages = CourseMessage.where(:user_id => User.current.id, :viewed => 0, :course_message_id => @homework.id, :course_message_type => "HomeWorkCommon") + homeworkcommon_messages.update_all(:viewed => true) + studentwork_messages = CourseMessage.where(:user_id => User.current.id, :viewed => 0, :course_id => @homework.course, :course_message_type => "StudentWork") + studentwork_messages.update_all(:viewed => true) # 作品打分消息状态更新 studentworks_scores = CourseMessage.where("user_id =? and course_id =? and course_message_type =? and viewed =?", User.current.id, @homework.course, "StudentWorksScore", 0) - studentworks_scores.each do |studentworks_score| - studentworks_score.update_attributes(:viewed => true) if studentworks_score.viewed == 0 - end + studentworks_scores.update_all(:viewed => true) # 作品评论消息状态更新 journals_for_teacher = CourseMessage.where("user_id =? and course_id =? and course_message_type =? and viewed =?", User.current.id, @homework.course, "JournalsForMessage", 0) - journals_for_teacher.each do |journal_for_teacher| - journal_for_teacher.update_attributes(:viewed => true) - end - #不能参与作业匿评消息状态更新 - no_evaluation = CourseMessage.where("user_id =? and course_id =? and course_message_type =? and viewed =? and status =?", User.current.id, @homework.course, "StudentWork", 0, 0) - no_evaluation.update_all(:viewed => true) - # 作品留言 - # 消息end - #设置作业对应的forge_messages表的viewed字段 - query_student_work = @homework.course_messages - query_student_work.each do |query| - if User.current.id == query.user_id - query.update_attributes(:viewed => true) - end - end + journals_for_teacher.update_all(:viewed => true) ################################################################################################################## @order,@b_sort,@name,@group = params[:order] || "score",params[:sort] || "desc",params[:name].to_s.strip || "",params[:group] @homework_commons = @course.homework_commons.where("publish_time <= ?",Time.now.strftime("%Y-%m-%d")).order("created_at desc") @@ -410,11 +386,11 @@ class StudentWorkController < ApplicationController #开放作品 || 老师 || 超级管理员 || 禁用匿评&&作业截止&&已提交作品 显示所有列表 if (@homework.is_open == 1 && @course.is_public == 1) || (@homework.is_open == 1 && @course.is_public == 0 && User.current.member_of_course?(@course)) || @is_teacher || User.current.admin? || (User.current.member_of_course?(@course) && @homework.anonymous_comment == 1 && Time.parse(@homework.end_time.to_s).strftime("%Y-%m-%d") < Time.now.strftime("%Y-%m-%d") && !@homework.student_works.has_committed.where(:user_id => User.current.id).empty?) if @order == 'lastname' - @stundet_works = search_homework_member @homework.student_works.select("student_works.*,student_works.work_score as score").joins(:user).where("users.id in #{student_in_group}").order("CONVERT(lastname USING gbk) COLLATE gbk_chinese_ci #{@b_sort}, login #{@b_sort}"),@name + @stundet_works = search_homework_member @homework.student_works.no_copy.select("student_works.*,student_works.work_score as score").joins(:user).where("users.id in #{student_in_group}").order("CONVERT(lastname USING gbk) COLLATE gbk_chinese_ci #{@b_sort}, login #{@b_sort}"),@name elsif @order == 'student_id' - @stundet_works = search_homework_member @homework.student_works.select("student_works.*,student_works.work_score as score").joins(:user).where("users.id in #{student_in_group}").joins("join user_extensions on student_works.user_id = user_extensions.user_id").order("#{@order} #{@b_sort}"),@name + @stundet_works = search_homework_member @homework.student_works.no_copy.select("student_works.*,student_works.work_score as score").joins(:user).where("users.id in #{student_in_group}").joins("join user_extensions on student_works.user_id = user_extensions.user_id").order("#{@order} #{@b_sort}"),@name else - @stundet_works = search_homework_member @homework.student_works.select("student_works.*,student_works.work_score as score").joins(:user).where("users.id in #{student_in_group}").order("#{@order} #{@b_sort}"),@name + @stundet_works = search_homework_member @homework.student_works.no_copy.select("student_works.*,student_works.work_score as score").joins(:user).where("users.id in #{student_in_group}").order("#{@order} #{@b_sort}"),@name end @show_all = true elsif User.current.member_of_course?(@course) @@ -476,11 +452,11 @@ class StudentWorkController < ApplicationController else if (@homework.is_open == 1 &&@course.is_public == 1) || (@homework.is_open == 1 && @course.is_public == 0 && User.current.member_of_course?(@course)) || @is_teacher || User.current.admin? || (User.current.member_of_course?(@course) && @homework.anonymous_comment == 1 && Time.parse(@homework.end_time.to_s).strftime("%Y-%m-%d") < Time.now.strftime("%Y-%m-%d") && !@homework.student_works.has_committed.where(:user_id => User.current.id).empty?) if @order == 'lastname' - @stundet_works = search_homework_member @homework.student_works.select("student_works.*,student_works.work_score as score").joins(:user).order("CONVERT(lastname USING gbk) COLLATE gbk_chinese_ci #{@b_sort}, login #{@b_sort}"),@name + @stundet_works = search_homework_member @homework.student_works.no_copy.select("student_works.*,student_works.work_score as score").joins(:user).order("CONVERT(lastname USING gbk) COLLATE gbk_chinese_ci #{@b_sort}, login #{@b_sort}"),@name elsif @order == 'student_id' - @stundet_works = search_homework_member @homework.student_works.select("student_works.*,student_works.work_score as score").joins("join user_extensions on student_works.user_id = user_extensions.user_id").order("#{@order} #{@b_sort}"),@name + @stundet_works = search_homework_member @homework.student_works.no_copy.select("student_works.*,student_works.work_score as score").joins("join user_extensions on student_works.user_id = user_extensions.user_id").order("#{@order} #{@b_sort}"),@name else - @stundet_works = search_homework_member @homework.student_works.select("student_works.*,student_works.work_score as score").order("#{@order} #{@b_sort}"),@name + @stundet_works = search_homework_member @homework.student_works.no_copy.select("student_works.*,student_works.work_score as score").includes(:user => {:user_extensions => []}, :project => {}, :student_works_scores => {}).order("#{@order} #{@b_sort}"),@name end @show_all = true elsif User.current.member_of_course?(@course) @@ -571,7 +547,7 @@ class StudentWorkController < ApplicationController @student_work = StudentWork.new #end respond_to do |format| - format.html{ render :layout => "new_base_user"} + format.html{ render :layout => "base_courses"} end end @@ -613,33 +589,21 @@ class StudentWorkController < ApplicationController student_work.work_status = 1 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 + if @homework.homework_type == 3 + if @homework.homework_detail_group.base_on_project == 1 + @student_work_project.student_work_id = student_work.id + @student_work_project.save + elsif @homework.homework_detail_group.base_on_project == 0 + stu_project = StudentWorkProject.new(:homework_common_id => @homework.id, :student_work_id => student_work.id, :project_id => student_work.project_id, :user_id => student_work.user_id, :is_leader => 1) 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 + for i in 1 .. members.count-1 + stu_work = StudentWork.new(:name => student_work.name, :description => student_work.description,:user_id =>members[i].to_i, :homework_common_id => @homework.id,:project_id => student_work.project_id, :late_penalty => student_work.late_penalty,:work_status => 3, :commit_time => student_work.commit_time) + if stu_work.save + stu_project = StudentWorkProject.new(:homework_common_id => @homework.id, :student_work_id => student_work.id, :project_id => stu_work.project_id == 0 ? -1 : stu_work.project_id, :user_id => members[i].to_i, :is_leader => 0) + stu_project.save end - stu_project.save end end @homework.update_column(:updated_at, Time.now) @@ -669,7 +633,7 @@ class StudentWorkController < ApplicationController render_403 else respond_to do |format| - format.html{ render :layout => "new_base_user"} + format.html{ render :layout => "base_courses"} end end end @@ -687,20 +651,17 @@ class StudentWorkController < ApplicationController if @homework.homework_type == 3 @student_work_project = @homework.student_work_projects.where("user_id=?",User.current.id).first student_work_projects = @homework.student_work_projects.where("student_work_id=? and is_leader =?",@work.id,0) + user_ids = student_work_projects.empty? ? "(-1)" : "(" + student_work_projects.map{|stu|stu.user_id}.join(",") + ")" + student_works = @homework.student_works.where("user_id in #{user_ids}") + student_works.delete_all student_work_projects.delete_all 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 = @work.id - if @homework.homework_detail_group.base_on_project == 1 - stu_project.project_id = @student_work_project.project_id - else @homework.homework_detail_group.base_on_project == 0 - stu_project.project_id = -1 + stu_work = StudentWork.new(:name => @work.name, :description => @work.description,:user_id=> members[i].to_i, :homework_common_id => @homework.id, :project_id => @work.project_id, :late_penalty => @work.late_penalty,:work_status => 3, :commit_time => @work.commit_time) + if stu_work.save + stu_project = StudentWorkProject.new(:homework_common_id => @homework.id, :student_work_id => @work.id, :project_id => stu_work.project_id == 0 ? -1 : stu_work.project_id, :user_id => members[i].to_i, :is_leader => 0) + stu_project.save end - stu_project.user_id = members[i].to_i - stu_project.is_leader = 0 - stu_project.save end end @@ -735,26 +696,25 @@ class StudentWorkController < ApplicationController def destroy if @homework.homework_type == 3 - if @work.destroy - if @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_detail_group.base_on_project == 0 - @work.student_work_projects.each do |pro2| - pro2.destroy - end - end + pros = @work.student_work_projects.where("is_leader = 0") + user_ids = pros.empty? ? "(-1)" : "(" + pros.map{|stu|stu.user_id}.join(",") + ")" + student_works = @homework.student_works.where("user_id in #{user_ids}") + student_works.delete_all + pros.delete_all + + project = @work.student_work_projects.where("is_leader = 1").first + if @homework.homework_detail_group.base_on_project == 1 + project.update_attributes(:student_work_id => nil) + else + project.destroy end + @work.destroy else @work.attachments.destroy_all @work.student_works_scores.destroy_all @work.course_messages.destroy_all @work.student_work_tests.destroy_all - @work.update_attributes(:work_status => 0, :name => "#{@homework.name}的作品提交", :description => nil, :late_penalty => 0, :commit_time => nil,:final_score => nil,:teacher_score => nil,:student_score => nil,:teaching_asistant_score => nil,:system_score => 0,:work_score => nil) + @work.update_attributes(:work_status => 0, :name => "#{@homework.name}的作品提交", :description => nil, :late_penalty => 0, :commit_time => nil,:final_score => nil,:teacher_score => nil,:student_score => nil,:teaching_asistant_score => nil,:system_score => 0,:work_score => nil, :project_id => 0) @work.update_column("work_score",nil) end respond_to do |format| @@ -786,22 +746,21 @@ class StudentWorkController < ApplicationController def retry_work if @homework.homework_type == 3 - if @work.destroy - if @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_detail_group.base_on_project == 0 - @work.student_work_projects.each do |pro2| - pro2.destroy - end - end + pros = @work.student_work_projects.where("is_leader = 0") + user_ids = pros.empty? ? "(-1)" : "(" + pros.map{|stu|stu.user_id}.join(",") + ")" + student_works = @homework.student_works.where("user_id in #{user_ids}") + student_works.delete_all + pros.delete_all + + project = @work.student_work_projects.where("is_leader = 1").first + if @homework.homework_detail_group.base_on_project == 1 + project.update_attributes(:student_work_id => nil) + else + project.destroy end - elsif @homework.homework_type == 1 - @work.update_attributes(:work_status => 0, :name => "#{@homework.name}的作品提交", :description => nil, :late_penalty => 0, :commit_time => nil) + @work.destroy + else + @work.update_attributes(:work_status => 0, :name => "#{@homework.name}的作品提交", :description => nil, :late_penalty => 0, :commit_time => nil, :project_id => 0) @work.attachments.destroy_all @work.course_messages.destroy_all end @@ -861,17 +820,29 @@ class StudentWorkController < ApplicationController render_attachment_warning_if_needed(@new_score) if @new_score.save + if @homework.homework_type == 3 + @is_group_leader = !@work.student_work_projects.empty? + end case @new_score.reviewer_role when 1 #教师评分:最后一个教师评分为最终评分 @work.teacher_score = @new_score.score + if @is_group_leader + add_score_to_member @work, @homework, 1, 'teacher_score', @new_score.score + end when 2 #教辅评分 教辅评分显示平均分 #@work.teaching_asistant_score = @work.student_works_scores.where(:reviewer_role => 2).average(:score).try(:round, 2).to_f ts_score = StudentWorksScore.find_by_sql("SELECT AVG(score) AS score FROM (SELECT * FROM (SELECT * FROM student_works_scores WHERE student_work_id = #{@work.id} AND reviewer_role = 2 AND score IS NOT NULL ORDER BY created_at DESC) AS t GROUP BY user_id) AS a") @work.teaching_asistant_score = ts_score.first.score.nil? ? nil : ts_score.first.score.try(:round, 2).to_f + if @is_group_leader + add_score_to_member @work, @homework, 2, 'teaching_asistant_score', @work.teaching_asistant_score + end when 3 #学生评分 学生评分显示平均分 #@work.student_score = @work.student_works_scores.where(:reviewer_role => 3).average(:score).try(:round, 2).to_f stu_score = StudentWorksScore.find_by_sql("SELECT AVG(score) AS score FROM (SELECT * FROM (SELECT * FROM student_works_scores WHERE student_work_id = #{@work.id} AND reviewer_role = 3 ORDER BY created_at DESC) AS t GROUP BY user_id) AS a") @work.student_score = stu_score.first.score.try(:round, 2).to_f + if @is_group_leader + add_score_to_member @work, @homework, 3, 'student_score', @work.student_score + end end @homework.update_column('updated_at', Time.now) update_course_activity(@homework.class,@homework.id) @@ -1096,9 +1067,13 @@ class StudentWorkController < ApplicationController #创建作业的关联项目 def student_work_project + @work = @homework.student_works.where("user_id = #{User.current.id} and work_status = 0").first + if @work + @work.update_column('project_id', params[:projectName].to_i) + end @project = StudentWorkProject.new @project.homework_common_id = @homework.id - @project.project_id = (Project.find params[:projectName].to_i).id + @project.project_id = params[:projectName].to_i @project.user_id = User.current.id @project.is_leader = 1 if @project.save @@ -1139,7 +1114,7 @@ class StudentWorkController < ApplicationController end all_students = User.where("id in #{all_student_ids}") student_work_id = @homework.student_work_projects.where("user_id=? and student_work_id is not null",User.current.id).first.nil? ? -1 : @homework.student_work_projects.where("user_id=?",User.current.id).first.student_work_id - @commit_student_ids = @homework.student_work_projects.where("student_work_id != #{student_work_id}").map{|student| student.user_id} + @commit_student_ids = @homework.student_works.where("id != #{student_work_id}").map{|student| student.user_id} @users = searchstudent_by_name all_students,name respond_to do |format| format.js @@ -1147,6 +1122,10 @@ class StudentWorkController < ApplicationController end def cancel_relate_project + @work = @homework.student_works.where("user_id = #{User.current.id} and work_status = 0").first + if @work + @work.update_column('project_id', 0) + end 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 diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 8e729b083..2a91b75ae 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1052,7 +1052,7 @@ class UsersController < ApplicationController else homework.publish_time = params[:homework_common][:publish_time] end - homework.anonymous_comment = params[:homework_common][:anonymous_comment] ? params[:homework_common][:anonymous_comment] : 0 + homework.anonymous_comment = params[:homework_common][:anonymous_comment] ? params[:homework_common][:anonymous_comment].to_i : 1 homework.homework_type = params[:homework_type].to_i || 1 homework.late_penalty = 10 homework.teacher_priority = 1 @@ -1691,9 +1691,12 @@ class UsersController < ApplicationController when "current_user" container_type = 'Principal' act_type = 'Principal' + when "all" + container_type = 'all' + act_type = 'all' end end - if container_type != '' && act_type != '' + if container_type != '' && container_type != 'all' if container_type == 'Course' sql = "container_type = '#{container_type}' and container_id in #{user_course_ids} and act_type = '#{act_type}'" elsif container_type == 'Project' @@ -1704,74 +1707,24 @@ class UsersController < ApplicationController sql = "user_id = #{@user.id} and ((container_type = 'Project' and container_id in #{user_project_ids} and act_type in #{project_types}) or (container_type = 'Course' and container_id in #{user_course_ids} and act_type in #{course_types}))" end if User.current != @user - sql += "and user_id = #{@user.id}" + sql += " and user_id = #{@user.id}" end else if User.current != @user blog_ids = "("+@user.blog.id.to_s+")" - sql = "user_id = #{@user.id} and((container_type = 'Project' and container_id in #{user_project_ids} and act_type in #{project_types})" + - "or (container_type = 'Course' and container_id in #{user_course_ids} and act_type in #{course_types}) "+ - "or (container_type = 'Principal' and act_type= '#{principal_types}' and container_id = #{@user.id}) " + - "or (container_type = 'Blog' and act_type= 'BlogComment' and container_id in #{blog_ids}))" else blog_ids = "("+@user.blog.id.to_s+","+((User.watched_by(@user.id).count == 0 )? '0' :User.watched_by(@user.id).map{|u| u.blog.id}.join(','))+")" - sql = "(container_type = 'Project' and container_id in #{user_project_ids} and act_type in #{project_types})" + - "or (container_type = 'Course' and container_id in #{user_course_ids} and act_type in #{course_types}) "+ - "or (container_type = 'Principal' and act_type= '#{principal_types}' and container_id = #{@user.id}) " + - "or (container_type = 'Blog' and act_type= 'BlogComment' and container_id in #{blog_ids})" + end + sql = "(container_type = 'Project' and container_id in #{user_project_ids} and act_type in #{project_types})" + + "or (container_type = 'Course' and container_id in #{user_course_ids} and act_type in #{course_types}) "+ + "or (container_type = 'Principal' and act_type= '#{principal_types}' and container_id = #{@user.id}) " + + "or (container_type = 'Blog' and act_type= 'BlogComment' and container_id in #{blog_ids})" + if container_type != 'all' && User.current != @user + sql = "user_id = #{@user.id} and(" + sql + ")" end end + @user_activities = UserActivity.where("#{sql}").order('updated_at desc').limit(10).offset(@page * 10) - # if params[:type].present? - # case params[:type] - # when "course_homework" - # @user_activities = UserActivity.where("container_type = 'Course' and container_id in #{user_course_ids} and act_type = 'HomeworkCommon'").order('updated_at desc').limit(10).offset(@page * 10) - # when "course_news" - # @user_activities = UserActivity.where("container_type = 'Course' and container_id in #{user_course_ids} and act_type = 'News'").order('updated_at desc').limit(10).offset(@page * 10) - # when "course_message" - # @user_activities = UserActivity.where("container_type = 'Course' and container_id in #{user_course_ids} and act_type = 'Message'").order('updated_at desc').limit(10).offset(@page * 10) - # when "course_poll" - # @user_activities = UserActivity.where("container_type = 'Course' and container_id in #{user_course_ids} and act_type = 'Poll'").order('updated_at desc').limit(10).offset(@page * 10) - # when "course_journals" - # @user_activities = UserActivity.where("container_type = 'Course' and container_id in #{user_course_ids} and act_type = 'JournalsForMessage'").order('updated_at desc').limit(10).offset(@page * 10) - # when "project_issue" - # @user_activities = UserActivity.where("container_type = 'Project' and container_id in #{user_project_ids} and act_type = 'Issue'").order('updated_at desc').limit(10).offset(@page * 10) - # when "project_message" - # @user_activities = UserActivity.where("container_type = 'Project' and container_id in #{user_project_ids} and act_type = 'Message'").order('updated_at desc').limit(10).offset(@page * 10) - # when "user_journals" - # @user_activities = UserActivity.where("container_type = 'Principal' and act_type= 'JournalsForMessage' and container_id = #{@user.id}").order('updated_at desc').limit(10).offset(@page * 10) - # when "current_user" - # @user_activities = UserActivity.where("user_id = #{@user.id} and ((container_type = 'Project' and container_id in #{user_project_ids} and act_type in #{project_types}) or (container_type = 'Course' and container_id in #{user_course_ids} and act_type in #{course_types}))").order('updated_at desc').limit(10).offset(@page * 10) - # else - # if @user == User.current - # blog_ids = "("+@user.blog.id.to_s+","+((User.watched_by(@user.id).count == 0 )? '0' :User.watched_by(@user.id).map{|u| u.blog.id}.join(','))+")" - # else - # blog_ids = "("+@user.blog.id.to_s+")" - # end - # @user_activities = UserActivity.where("(container_type = 'Project' and container_id in #{user_project_ids} and act_type in #{project_types})" + - # "or (container_type = 'Course' and container_id in #{user_course_ids} and act_type in #{course_types}) "+ - # "or (container_type = 'Principal' and act_type= '#{principal_types}' and container_id = #{@user.id}) " + - # "or (container_type = 'Blog' and act_type= 'BlogComment' and container_id in #{blog_ids})").order('updated_at desc').limit(10).offset(@page * 10) - # end - # else - # # @user_activities = UserActivity.where("(container_type = 'Project' and container_id in #{user_project_ids} and act_type in #{project_types}) or (container_type = 'Course' and container_id in #{user_course_ids} and act_type in #{course_types})or (container_type = 'Principal' and act_type= '#{principal_types}' and container_id = #{@user.id})").order('updated_at desc').limit(10).offset(@page * 10) - # # blog_ids = "("+@user.blog.id.to_s+","+((User.watched_by(@user.id).count == 0 )? '0' :User.watched_by(@user.id).map{|u| u.blog.id}.join(','))+")" - # # 减少数据库交互 - # if @user == User.current - # watched_user_ids = User.watched_by(@user.id).count == 0 ? " " : ("," + User.watched_by(@user.id).map{|u| u.id.to_s }.join(',')) - # user_ids = "(" + @user.id.to_s + watched_user_ids + ")" - # else - # user_ids = "(" + @user.id.to_s + ")" - # end - # watched_user_blog_ids = Blog.select("id").where("author_id in #{user_ids}") - # blog_ids = watched_user_blog_ids.empty? ? "(-1)" : "(" + watched_user_blog_ids.map { |blog| blog.id}.join(",") + ")" - # - # @user_activities = UserActivity.where("(container_type = 'Project' and container_id in #{user_project_ids} and act_type in #{project_types})" + - # "or (container_type = 'Course' and container_id in #{user_course_ids} and act_type in #{course_types}) "+ - # "or (container_type = 'Principal' and act_type= '#{principal_types}' and container_id = #{@user.id}) " + - # "or (container_type = 'Blog' and act_type= 'BlogComment' and container_id in #{blog_ids})").order('updated_at desc').limit(10).offset(@page * 10) - # end - # @user_activities = paginateHelper @user_activities,500 @type = params[:type] respond_to do |format| format.js @@ -2677,7 +2630,8 @@ class UsersController < ApplicationController project_ids.each do |project_id| project = Project.find(project_id) if project.news.map(&:id).exclude?(news.id) - message = Message.create(:board_id => project.boards.first.id, :subject => news.title, :content => news.description, :author_id => User.current.id) + # message = Message.create(:board_id => project.boards.first.id, :subject => news.title, :content => news.description, :author_id => User.current.id) + message = News.create(:project_id => project.id, :title => news.title, :summary => news.summary, :description => news.description, :author_id => User.current.id, :created_on => Time.now ) # record forward to table forwards if new record is valid if message.valid? news.forwards << Forward.new(:to_type => message.class.name, :to_id => message.id) @@ -3515,11 +3469,15 @@ class UsersController < ApplicationController @order, @c_sort, @type, @list_type = 1, 2, 1, 1 #limit = 5 - @my_projects = @user.projects.visible.where("projects.user_id = #{@user.id}").select("projects.*,(SELECT MAX(updated_at) FROM `forge_activities` WHERE forge_activities.project_id = projects.id) AS updatetime").order("updatetime DESC") + # 用户的所有项目 + # @my_projects = @user.projects.visible.where("projects.user_id = #{@user.id}").select("projects.*,(SELECT MAX(updated_at) FROM `forge_activities` WHERE forge_activities.project_id = projects.id) AS updatetime").order("updatetime DESC") + @my_projects = @user.projects.where("projects.user_id = #{@user.id}").select("projects.*,(SELECT MAX(updated_at) FROM `forge_activities` WHERE forge_activities.project_id = projects.id) AS updatetime").order("updatetime DESC") @my_projects_count = @my_projects.count - @my_joined_projects = @user.projects.visible.where("projects.user_id != #{@user.id}").select("projects.*,(SELECT MAX(updated_at) FROM `forge_activities` WHERE forge_activities.project_id = projects.id) AS updatetime").order("updatetime DESC") + #@my_joined_projects = @user.projects.visible.where("projects.user_id != #{@user.id}").select("projects.*,(SELECT MAX(updated_at) FROM `forge_activities` WHERE forge_activities.project_id = projects.id) AS updatetime").order("updatetime DESC") + @my_joined_projects = @user.projects.where("projects.user_id != #{@user.id}").select("projects.*,(SELECT MAX(updated_at) FROM `forge_activities` WHERE forge_activities.project_id = projects.id) AS updatetime").order("updatetime DESC") @my_joined_projects_count = @my_joined_projects.count + respond_to do |format| format.html {render :layout => 'new_base_user'} end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 3c125a185..d3b28fb20 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -345,7 +345,11 @@ module ApplicationHelper def link_to_isuue_user(user, options={}) if user.is_a?(User) - name = h(user.name(options[:format])) + if options[:format] + name = h(user.name(options[:format])) + else + name = h(user.show_name) + end link_to name, {:controller=> 'users', :action => 'show', id: user.id, host: Setting.host_user}, :class => "pro_info_p" else h(user.to_s) @@ -417,13 +421,13 @@ module ApplicationHelper end # status_id:3、已解决 5、已关闭 if issue.status_id == 3 - s = link_to text, issue_path(issue), :class => "text_line_s", :title => title + s = link_to text, issue_path(issue), :class => "text_line_s fl", :title => title elsif issue.status_id == 5 - s = link_to text, issue_path(issue), :class => "text_line_s del_line", :title => title + s = link_to text, issue_path(issue), :class => "text_line_s del_line fl", :title => title else - s = link_to text, issue_path(issue), :class => "c_blue", :title => title + s = link_to text, issue_path(issue), :class => "c_blue fl", :title => title end - s << h(": #{subject}") if subject + s << h(": #{subject}".html_safe) if subject s = h("#{issue.project} - ") + s if options[:project] s end @@ -652,7 +656,7 @@ module ApplicationHelper s << watcher_link(@project, User.current)#, ['whiteButton']) s << "" end - s << (render :partial => 'projects/project', :locals => {:project => project}).to_s + s << (render :partial => 'projects/tracker_project', :locals => {:project => project}).to_s else s << (render :partial => 'projects/course', :locals => {:project => project}).to_s end @@ -832,9 +836,15 @@ module ApplicationHelper atts.count > 0 ? true :false end - # 必须是项目成,项目必须提交过代码 + # 如果Pull Request数量为0就显示在更多中 + def allow_show_pull_request project + g = Gitlab.client + count = g.merge_requests(project.gpid).count + end + + # 必须是项目成员,项目必须提交过代码 def allow_pull_request project - return false if project.gpid.nil? + return 0 if project.gpid.nil? g = Gitlab.client count = g.user_static(project.gpid, :rev => "master").count count @@ -915,6 +925,12 @@ module ApplicationHelper s.html_safe end + # 计算Pull Request的请求数目 + def pull_request_count project + g = Gitlab.client + g.merge_requests(project.gpid).count + end + #项目成员列表复选框生成 def project_member_check_box_tags_ex name, principals s = '' @@ -972,7 +988,7 @@ module ApplicationHelper groups = '' collection.sort.each do |element| selected_attribute = ' selected="selected"' if option_value_selected?(element, selected) - (element.is_a?(Group) ? groups : s) << %() + (element.is_a?(Group) ? groups : s) << %() end unless groups.empty? s << %() @@ -3420,6 +3436,43 @@ def get_hw_index(hw,is_teacher) return index end +def get_hw_status homework_common + str = "" + if homework_common.homework_detail_manual + if homework_common.homework_detail_manual.comment_status == 0 && homework_common.publish_time.nil? + str += '挂起' + elsif homework_common.homework_detail_manual.comment_status == 0 + str += '未发布' + elsif homework_common.homework_detail_manual.comment_status == 1 + if homework_common.anonymous_comment == 0 + str += '未开启匿评' + else + str += '匿评已禁用' + end + if Time.parse(homework_common.end_time.to_s).strftime("%Y-%m-%d") >= Time.now.strftime("%Y-%m-%d") + str += '作品提交中' + elsif Time.parse(homework_common.end_time.to_s).strftime("%Y-%m-%d") < Time.now.strftime("%Y-%m-%d") + str += '作品补交中' + end + elsif homework_common.homework_detail_manual.comment_status == 2 + if homework_common.anonymous_comment == 0 + str += '匿评中' + else + str += '匿评已禁用' + end + str += '教师评阅中' + elsif homework_common.homework_detail_manual.comment_status == 3 + if homework_common.anonymous_comment == 0 + str += '匿评已结束' + else + str += '匿评已禁用' + end + str += '教师评阅中' + end + end + str +end + def get_group_member_names work result = "" unless work.nil? @@ -3478,3 +3531,21 @@ def get_forge_act_message(act, type) format_time(forge_act.nil? ? act.created_on : forge_act.try(:updated_at)) end +#作业类型 +def homework_type_option + type = [] + option1 = [] + option1 << "普通作业" + option1 << 1 + option2 = [] + option2 << "编程作业" + option2 << 2 + option3 = [] + option3 << "分组作业" + option3 << 3 + type << option1 + type << option2 + type << option3 + type +end + diff --git a/app/helpers/courses_helper.rb b/app/helpers/courses_helper.rb index b3e946f95..f119e0e69 100644 --- a/app/helpers/courses_helper.rb +++ b/app/helpers/courses_helper.rb @@ -63,6 +63,7 @@ module CoursesHelper # searchTeacherAndAssistant(project).count end + # 统计数目 def show_nav?(count) count == 0 ? true : false end @@ -192,18 +193,6 @@ module CoursesHelper # garble count # end - def homework_type_option - type = [] - option1 = [] - option2 = [] - option1 << l(:label_task_submit_form_accessory) - option1 << 1 - option2 << l(:label_task_submit_form_project) - option2 << 2 - type << option1 - type << option2 - end - def proportion_option type = [] i = 0 @@ -807,11 +796,12 @@ module CoursesHelper link.html_safe end + # 可以查看到资源库的资源 def visable_attachemnts_incourse course return[] unless course result = [] course.attachments.each do |attachment| - if (attachment.is_public? && attachment.is_publish == 1) ||User.current == attachment.author ||User.current.allowed_to?(:as_teacher,course)|| (User.current.member_of_course?(course) && attachment.is_publish == 1) || User.current.admin? + if attachment.is_public? && attachment.is_publish == 1 || User.current == attachment.author || User.current.allowed_to?(:as_teacher,course) || (User.current.member_of_course?(course) && attachment.is_publish == 1) || User.current.admin? result << attachment end end diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb index b161e29e9..5a124849f 100644 --- a/app/helpers/issues_helper.rb +++ b/app/helpers/issues_helper.rb @@ -111,9 +111,9 @@ module IssuesHelper def principals_options_for_isuue_list(project) if User.current.member_of?(project) - project.members.includes(:user).order("lower(users.login)").map{|c| [c.name, c.user_id]}.unshift(["<< #{l(:label_me)} >>", User.current.id]).unshift(["指派给", 0]) + project.members.includes(:user).order("lower(users.login)").map{|c| [User.find(c.user_id).show_name, c.user_id]}.unshift(["<< #{l(:label_me)} >>", User.current.id]).unshift(["指派给", 0]) else - project.members.includes(:user).order("lower(users.login)").map{|c| [c.name, c.user_id]}.unshift(["指派给", 0]) + project.members.includes(:user).order("lower(users.login)").map{|c| [User.find(c.user_id).show_name, c.user_id]}.unshift(["指派给", 0]) end end diff --git a/app/helpers/org_member_helper.rb b/app/helpers/org_member_helper.rb index 8e7d1e2ef..e9fbd3967 100644 --- a/app/helpers/org_member_helper.rb +++ b/app/helpers/org_member_helper.rb @@ -1,5 +1,6 @@ module OrgMemberHelper include ApplicationHelper + def find_user_not_in_current_org_by_name org if params[:q] && params[:q].lstrip.rstrip != "" scope = Principal.active.sorted.not_member_of_org(org).like(params[:q]) diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index afc6cb1d9..88be249a1 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -224,19 +224,6 @@ module ProjectsHelper def get_projects_by_tag(tag_name) Project.tagged_with(tag_name).order('updated_on desc') end - - # added by fq - def homework_type_option - type = [] - option1 = [] - option2 = [] - option1 << l(:label_task_submit_form_accessory) - option1 << 1 - option2 << l(:label_task_submit_form_project) - option2 << 2 - type << option1 - type << option2 - end #是否启动互评下拉框 def is_evaluation_option diff --git a/app/helpers/student_work_helper.rb b/app/helpers/student_work_helper.rb index 2ecb5516f..63344fa1a 100644 --- a/app/helpers/student_work_helper.rb +++ b/app/helpers/student_work_helper.rb @@ -158,4 +158,20 @@ module StudentWorkHelper end return status end + + def group_student_works student_work, homework + pros = student_work.student_work_projects.where("is_leader = 0") + user_ids = pros.empty? ? "(-1)" : "(" + pros.map{|stu|stu.user_id}.join(",") + ")" + student_works = homework.student_works.where("user_id in #{user_ids}") + return student_works + end + + def add_score_to_member student_work, homework, role, score_type, score + student_works = group_student_works student_work, homework + student_works.each do |st_work| + if st_work.student_works_scores.where("reviewer_role = #{role} and score is not null").empty? + st_work.update_attribute("#{score_type}", score) + end + end + end end \ No newline at end of file diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb index 398fb8510..bc52b0002 100644 --- a/app/helpers/users_helper.rb +++ b/app/helpers/users_helper.rb @@ -162,17 +162,17 @@ module UsersHelper end def current_time_and_term_resource course - str = "" + str = course.syllabus.title + " · " term = cur_course_term_resource name = course.name if (course.time == course.end_time && course.term == course.end_term) || (course.end_term.nil? && course.end_time.nil?) || course.time > Time.now.year - str = name + "(" + course.time.to_s + course.term.to_s + ")" + str = str + name + "(" + course.time.to_s + course.term.to_s + ")" elsif course.time == Time.now.year && set_term_value(cur_course_term) <= set_term_value(course.term) - str = name + "(" + course.time.to_s + course.term.to_s + ")" + str = str + name + "(" + course.time.to_s + course.term.to_s + ")" elsif course.end_time < Time.now.year || (course.end_time == Time.now.year && set_term_value(cur_course_term) >= set_term_value(course.term)) - str = name + "(" + course.end_time.to_s + course.end_term.to_s + ")" + str = str + name + "(" + course.end_time.to_s + course.end_term.to_s + ")" else - str = name + "(" + Time.now.year.to_s + cur_course_term_resource.to_s + ")" + str = str + name + "(" + Time.now.year.to_s + cur_course_term_resource.to_s + ")" end str end diff --git a/app/models/issue.rb b/app/models/issue.rb index 4cfea1f43..222a4f4e2 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -757,6 +757,7 @@ class Issue < ActiveRecord::Base end end +# 更新issue时,判断更新之前当前是否有自动更新的评论 def init_journal(user, notes = "") @current_journal ||= Journal.new(:journalized => self, :user => user, :notes => notes) if new_record? @@ -1454,8 +1455,18 @@ class Issue < ActiveRecord::Base end # Callback on file attachment + # 在执行issue模块前 执行:当附件被添加时,产生评论 + # 第一次创建issue时,@current_journal为nil,评论不产生 + # 当附件名称重名时,也不产生评论 + # 当更新isuue时,第一次上传的附件的已经存在,则不更新次附件评论 def attachment_added(obj) - if @current_journal && @current_journal.user_id == obj.author_id && JournalDetail.find_all_by_value(obj.filename).count == 0 + + # 找出该issue评论表中,附件重名的个数 + jor = Journal.where(:journalized_id => self.id) + jor_ids = jor.empty? ? "(-1)" : "(" + jor.map{|detail| detail.id}.join(",") + ")" + jor_details_count = JournalDetail.where("journal_id in #{jor_ids} and value = '#{obj.filename}'").count + + if @current_journal && @current_journal.user_id == obj.author_id && jor_details_count == 0 && self.attachments.find_all_by_filename(obj.filename).count == 0 @current_journal.details << JournalDetail.new(:property => 'attachment', :prop_key => obj.id, :value => obj.filename) end diff --git a/app/models/news.rb b/app/models/news.rb index 0e83a39f8..58bbc40ac 100644 --- a/app/models/news.rb +++ b/app/models/news.rb @@ -62,7 +62,7 @@ class News < ActiveRecord::Base :author_key => :author_id acts_as_watchable - after_create :act_as_activity,:act_as_forge_activity, :act_as_course_activity, :add_author_as_watcher, :send_mail, :add_news_count, :act_as_student_score, :act_as_system_message, :delay_news_send + after_create :act_as_forge_activity, :act_as_course_activity, :add_author_as_watcher, :send_mail, :add_news_count, :act_as_student_score, :act_as_system_message, :delay_news_send after_update :update_activity after_destroy :delete_kindeditor_assets, :decrease_news_count, :delete_org_activities, :down_course_score @@ -140,19 +140,13 @@ class News < ActiveRecord::Base Watcher.create(:watchable => self, :user => author) end - ## fq - def act_as_activity - self.acts << Activity.new(:user_id => self.author_id) - end - # Time 2015-02-27 15:48:17 # Author lizanle # Description 公用表中也要记录 def act_as_forge_activity # 如果是project为空,那么是课程相关的,不需要保存 if self.project - self.forge_acts << ForgeActivity.new(:user_id => self.author_id, - :project_id => self.project.id) + self.forge_acts << ForgeActivity.new(:user_id => self.author_id, :project_id => self.project.id) end end @@ -198,7 +192,7 @@ class News < ActiveRecord::Base def contain_news_message self.course.members.each do |m| if m.user_id != self.author_id - self.course_messages << CourseMessage.new(:user_id => user_id, :course_id => container_id, :viewed => false) + self.course_messages << CourseMessage.new(:user_id => m.user_id, :course_id => self.course_id, :viewed => false) end end end diff --git a/app/models/student_work.rb b/app/models/student_work.rb index 183570081..a3f692341 100644 --- a/app/models/student_work.rb +++ b/app/models/student_work.rb @@ -1,4 +1,4 @@ -#学生提交作品表 +#学生提交作品表 #work_status :0 未提交 1 已提交 2 迟交 3 分组作品复制的组员作品 class StudentWork < ActiveRecord::Base attr_accessible :name, :description, :homework_common_id, :user_id, :final_score, :teacher_score, :student_score, :teaching_asistant_score, :system_score, :work_score, :project_id, :is_test, :simi_id, :simi_value, :work_status, :commit_time @@ -13,7 +13,8 @@ class StudentWork < ActiveRecord::Base has_many :course_messages, :class_name =>'CourseMessage', :as => :course_message, :dependent => :destroy has_many :attachments, :dependent => :destroy - scope :has_committed, lambda{where("work_status != 0")} + scope :has_committed, lambda{where("work_status != 0 and work_status != 3")} + scope :no_copy, lambda{where("work_status != 3")} before_destroy :delete_praise before_save :set_program_score, :set_src @@ -31,7 +32,7 @@ class StudentWork < ActiveRecord::Base private def set_program_score - if homework_common.is_program_homework? #编程作业,学生提交作品后计算系统得分 + if self.homework_common.is_program_homework? #编程作业,学生提交作品后计算系统得分 #根据最后一次测试计算得分 unless last_test self.system_score = 0 diff --git a/app/services/courses_service.rb b/app/services/courses_service.rb index 5add9979d..2c0506d1e 100644 --- a/app/services/courses_service.rb +++ b/app/services/courses_service.rb @@ -115,7 +115,7 @@ class CoursesService role_name: m.roles.first.name, name: m.user.show_name, roles_id: role_ids.include?(7) ? 7 : (role_ids.include?(9) ? 9 : 10 ), - :brief_introduction => m.user.user_extensions.brief_introduction,:realname=>m.user.realname} + :brief_introduction => m.user.user_extensions.brief_introduction,:realname=>m.user.realname,:is_me => current_user.id == m.user.id ? 1:0 } # end end @@ -565,6 +565,8 @@ class CoursesService #多个角色加入课程 def join_course_roles params,current_user course = Course.find_by_invite_code(params[:invite_code]) if params[:invite_code] + go_coursegroup_flag = 0 + course_id = 0 @state = 10 if course @@ -621,6 +623,8 @@ class CoursesService course.members << members StudentsForCourse.create(:student_id => current_user.id, :course_id => course.id) @state = 0 + go_coursegroup_flag = 1 if course.course_groups + course_id = course.id send_wechat_join_class_notice current_user,course,10,0 else is_stu = false @@ -630,6 +634,8 @@ class CoursesService course.members << members StudentsForCourse.create(:student_id => current_user.id, :course_id =>course.id) is_stu = true + go_coursegroup_flag = 1 if course.course_groups + course_id = course.id send_wechat_join_class_notice current_user,course,10,0 end #如果已经发送过消息了,那么就要给个提示 @@ -674,7 +680,7 @@ class CoursesService else @state = 4 end - {:state => @state,:course => course} + {:state => @state,:course => course,:go_coursegroup_flag => go_coursegroup_flag,:course_id=>course_id} end diff --git a/app/views/admin/leave_messages.html.erb b/app/views/admin/leave_messages.html.erb index 986823faa..a9acba903 100644 --- a/app/views/admin/leave_messages.html.erb +++ b/app/views/admin/leave_messages.html.erb @@ -62,9 +62,9 @@
暂无评分
+ <% end %> diff --git a/app/views/student_work/_student_work_list.html.erb b/app/views/student_work/_student_work_list.html.erb index e05df2892..73f37602b 100644 --- a/app/views/student_work/_student_work_list.html.erb +++ b/app/views/student_work/_student_work_list.html.erb @@ -36,11 +36,19 @@