diff --git a/app/controllers/homework_common_controller.rb b/app/controllers/homework_common_controller.rb index 3234d15c0..b7e4b9efd 100644 --- a/app/controllers/homework_common_controller.rb +++ b/app/controllers/homework_common_controller.rb @@ -82,6 +82,27 @@ class HomeworkCommonController < ApplicationController @homework.publish_time = params[:homework_common][:publish_time] end homework_detail_manual = @homework.homework_detail_manual || HomeworkDetailManual.new + param_end_time = Time.parse(params[:homework_common][:end_time]).strftime("%Y-%m-%d") + homework_end_time = Time.parse(@homework.end_time.to_s).strftime("%Y-%m-%d") + if homework_end_time != param_end_time + if homework_end_time > param_end_time + @homework.student_works.where("work_status = 1").each do |st| + if param_end_time < Time.parse(st.commit_time.to_s).strftime("%Y-%m-%d") + st.late_penalty = @homework.late_penalty + st.work_status = 2 + st.save + end + end + else + @homework.student_works.where("work_status = 2").each do |st| + if param_end_time >= Time.parse(st.commit_time.to_s).strftime("%Y-%m-%d") + st.late_penalty = 0 + st.work_status = 1 + st.save + end + end + end + end @homework.end_time = params[:homework_common][:end_time] || Time.now @homework.course_id = params[:course_id] if params[:homework_type] && params[:homework_type].to_i != @homework.homework_type diff --git a/app/controllers/student_work_controller.rb b/app/controllers/student_work_controller.rb index 7119d7c9f..3c0469e9b 100644 --- a/app/controllers/student_work_controller.rb +++ b/app/controllers/student_work_controller.rb @@ -587,6 +587,14 @@ class StudentWorkController < ApplicationController 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 student_work.work_status = 2 + # 缺评扣分 + if @homework.homework_detail_manual.no_anon_penalty == 0 && @homework.homework_detail_manual.comment_status == 3 && @homework.anonymous_comment == 0 + work_ids = "(" + @homework.student_works.has_committed.map(&:id).join(",") + ")" + all_dis_eva = StudentWorksEvaluationDistribution.where("student_work_id IN #{work_ids}") + has_sw_count = all_dis_eva.select("distinct user_id").count + anon_count = all_dis_eva.count / has_sw_count + student_work.absence_penalty = @homework.homework_detail_manual.absence_penalty * anon_count + end else student_work.late_penalty = 0 student_work.work_status = 1 @@ -987,7 +995,7 @@ class StudentWorkController < ApplicationController end end - no_anon_penalty = params[:no_anon_penalty] ? 1 : 0 + no_anon_penalty = params[:no_anon_penalty] ? 0 : 1 if no_anon_penalty != homework_detail_manual.no_anon_penalty homework_detail_manual.no_anon_penalty = no_anon_penalty if homework_detail_manual.comment_status == 3 #当前作业处于匿评结束状态,修改缺评扣分才会修改每个作品应扣分的值 diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index da7cfd849..93ae61d6a 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1186,10 +1186,18 @@ class UsersController < ApplicationController student_work = StudentWork.where(homework_common_id: homework.id, user_id: User.current.id).first if student_work - #提交作品时,计算是否迟交 + # 提交作品时,计算是否迟交 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 student_work.work_status = 2 + # 缺评扣分 + if homework.homework_detail_manual.no_anon_penalty == 0 && homework.homework_detail_manual.comment_status == 3 && homework.anonymous_comment == 0 + work_ids = "(" + homework.student_works.has_committed.map(&:id).join(",") + ")" + all_dis_eva = StudentWorksEvaluationDistribution.where("student_work_id IN #{work_ids}") + has_sw_count = all_dis_eva.select("distinct user_id").count + anon_count = all_dis_eva.count / has_sw_count + student_work.absence_penalty = homework.homework_detail_manual.absence_penalty * anon_count + end else student_work.late_penalty = 0 student_work.work_status = 1 diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 86c30cadc..4d1979816 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -42,6 +42,11 @@ module ApplicationHelper number > 10000 ? (number.to_f / 1000).round.to_s + "k" : number end + # 判断某个课程是否包含仅对自己可见的作业 + def course_has_score_open_common_homework course + course.homework_commons.select{|hc| hc.score_open == 0}.count > 0 ? true : false + end + # 隐藏项目以外的信息 # return: true 显示,false 不显示 def hidden_unproject_infos diff --git a/app/views/courses/_course_heroes.html.erb b/app/views/courses/_course_heroes.html.erb index bd285f9b0..b6bf0daa0 100644 --- a/app/views/courses/_course_heroes.html.erb +++ b/app/views/courses/_course_heroes.html.erb @@ -15,9 +15,15 @@ <% hero_homework_scores.each do |student_score| %> <% if student_score.score.to_i != 0 %> -
  • <%=link_to image_tag(url_to_avatar(student_score.user), :width => "35", :height => "35", :class=> "rankPortrait"),user_path(student_score.user) %> -

    <%=link_to student_score.user.show_name, user_path(student_score.user), :title => student_score.user.show_name %>

    -

    <%= student_score.score<0 ? 0 : student_score.score.to_i %>

    +
  • <%=link_to image_tag(url_to_avatar(student_score.user), :width => "35", :height => "35", :class=> "rankPortrait"),user_path(student_score.user) %> +

    <%=link_to student_score.user.show_name, user_path(student_score.user), :title => student_score.user.show_name %>

    +

    + <% if !(User.current.allowed_to?(:as_teacher, @course) || User.current.admin?) && User.current.id != student_score.user.id && course_has_score_open_common_homework(@course) %> + <%= "**" %> + <% else %> + <%= student_score.score<0 ? 0 : student_score.score.to_i %> + <% end %> +

  • <% end %> <% end %> diff --git a/app/views/courses/_new_member_list.html.erb b/app/views/courses/_new_member_list.html.erb index ac3c847a9..0e21eeb5d 100644 --- a/app/views/courses/_new_member_list.html.erb +++ b/app/views/courses/_new_member_list.html.erb @@ -86,22 +86,32 @@ <%= user.user_extensions.student_id %> - <%= link_to format("%0.2f", hw_score), { - :action => 'show_member_score', - :member_id => member.id, - :remote => true}, - :class => "" %> + <% if !is_teacher && User.current.id != member.user_id && course_has_score_open_common_homework(@course) %> + ** + <% else %> + <%= link_to format("%0.2f", hw_score), { + :action => 'show_member_score', + :member_id => member.id, + :remote => true}, + :class => "" %> + <% end %> <%= ex_score %> <%= link_to act_score, { - :action => 'show_member_act_score', - :member_id => member.id, - :remote => true}, - :class => '' %> + :action => 'show_member_act_score', + :member_id => member.id, + :remote => true}, + :class => '' %> - <%= format("%0.2f", sum) %> + + <% if !is_teacher && User.current.id != member.user_id && course_has_score_open_common_homework(@course) %> + ** + <% else %> + <%= format("%0.2f", sum) %> + <% end %> +

    diff --git a/app/views/homework_common/_set_score_rule_non_pro.html.erb b/app/views/homework_common/_set_score_rule_non_pro.html.erb index 98f995a60..6afd5f1ee 100644 --- a/app/views/homework_common/_set_score_rule_non_pro.html.erb +++ b/app/views/homework_common/_set_score_rule_non_pro.html.erb @@ -17,8 +17,8 @@

  • - value="<%=homework.homework_detail_manual.no_anon_penalty%>"/> - + value="<%=homework.homework_detail_manual.no_anon_penalty%>"/> +
  • diff --git a/app/views/homework_common/_set_score_rule_pro.html.erb b/app/views/homework_common/_set_score_rule_pro.html.erb index f21c4d614..0a2c01b6f 100644 --- a/app/views/homework_common/_set_score_rule_pro.html.erb +++ b/app/views/homework_common/_set_score_rule_pro.html.erb @@ -17,8 +17,8 @@
  • - value="<%=homework.homework_detail_manual.no_anon_penalty%>"/> - + value="<%=homework.homework_detail_manual.no_anon_penalty%>"/> +
  • diff --git a/app/views/memos/_memo_all_replies.html.erb b/app/views/memos/_memo_all_replies.html.erb index 05ec1c1df..c30b1629a 100644 --- a/app/views/memos/_memo_all_replies.html.erb +++ b/app/views/memos/_memo_all_replies.html.erb @@ -31,7 +31,7 @@ <%= render :partial => 'users/message_contents', :locals => {:comment => reply, :type => 'Memo', :user_activity_id => @memo.id}%>
  • -

    <%= reply.content.gsub(/script/, "script ").html_safe %>

    +

    <%= reply.content.gsub(/\/script/, "script").gsub(/script/, " script").html_safe %>

    diff --git a/app/views/repositories/show.html.erb b/app/views/repositories/show.html.erb index 05b8d40d0..282df48c3 100644 --- a/app/views/repositories/show.html.erb +++ b/app/views/repositories/show.html.erb @@ -27,17 +27,17 @@ <% unless @entries.nil? %> ZIP下载 - <%# if User.current.member_of?(@project) && @project.is_public? %> - <%# if quality_analysis(User.current.try(:login), @repository.id).nil? %> - <%#= link_to "质量分析", quality_analysis_path(:id => @project.id, :repository_id => @repository.identifier, :rev => @rev, :default_branch => @g_default_branch, :type => "1"), :remote => true, :class => "btn_zipdown fr" %> - <%# else %> - <%#= link_to "重新分析", quality_analysis_path(:id => @project.id, :repository_id => @repository.identifier, :rev => @rev, :default_branch => @g_default_branch, :type => "2"), :remote => true, :class => "btn_zipdown fr" %> - <%# end %> - <%# end %> + <% if User.current.member_of?(@project) && @project.is_public? %> + <% if quality_analysis(User.current.try(:login), @repository.id).nil? %> + <%= link_to "质量分析", quality_analysis_path(:id => @project.id, :repository_id => @repository.identifier, :rev => @rev, :default_branch => @g_default_branch, :type => "1"), :remote => true, :class => "btn_zipdown fr" %> + <% else %> + <%= link_to "重新分析", quality_analysis_path(:id => @project.id, :repository_id => @repository.identifier, :rev => @rev, :default_branch => @g_default_branch, :type => "2"), :remote => true, :class => "btn_zipdown fr" %> + <% end %> + <% end %> + <% end %> + <% unless QualityAnalysis.where(:project_id => @project.id).first.nil? %> + <%= link_to "代码分析结果", project_quality_analysis_path(:project_id => @project.id), :class => "btn_zipdown fr" %> <% end %> - <%# unless QualityAnalysis.where(:project_id => @project.id).first.nil? %> - <%#= link_to "代码分析结果", project_quality_analysis_path(:project_id => @project.id), :class => "btn_zipdown fr" %> - <%# end %>
    <%=link_to "代码统计", stats_repository_project_path(:id => @project.id, :repository_id => @repository.identifier, :rev => @rev, :creator => @creator, :default_branch => @g_default_branch ), :class => "fl vl_zip" %> diff --git a/app/views/student_work/_evaluation_un_group_member_work.html.erb b/app/views/student_work/_evaluation_un_group_member_work.html.erb index 257f1070c..709c7749b 100644 --- a/app/views/student_work/_evaluation_un_group_member_work.html.erb +++ b/app/views/student_work/_evaluation_un_group_member_work.html.erb @@ -23,46 +23,48 @@
    - <%= !score_open || st.teacher_score.nil? ? "--" : format("%.1f",st.teacher_score)%> + <%= st.teacher_score.nil? ? "--" : (!score_open ? "**" : format("%.1f",st.teacher_score))%>
    - <%= !score_open || st.teaching_asistant_score.nil? ? "--" : format("%.1f",st.teaching_asistant_score)%> + <%= st.teaching_asistant_score.nil? ? "--" : (!score_open ? "**" : format("%.1f",st.teaching_asistant_score))%>
    <% if @homework.anonymous_comment == 0 %>
    - <% if !score_open || st.student_score.nil? %> + <% if st.student_score.nil? %> <% pro = @homework.student_work_projects.where("user_id = #{st.user_id}").first if pro.nil? || pro.student_work_id == "" || pro.student_work_id.nil? work = st else work = StudentWork.find pro.student_work_id - end %> - <% if !score_open %> - -- - <% elsif @homework.homework_detail_manual.comment_status < 2 %> + end %> + <% if @homework.homework_detail_manual.comment_status < 2 %> 未参与 <% elsif @homework.homework_detail_manual.comment_status == 2 && work.student_works_evaluation_distributions.count != 0 %> 待匿评 <% elsif @homework.homework_detail_manual.comment_status == 3 && work.student_works_evaluation_distributions.count != 0 %> - 未评分 + 无评分 <% else %> 迟交 <% end %> <% else %> - <%= format("%.1f", st.student_score) %> - - (<%= anon_count %>) - -
    - 现共有 -  <%= anon_count %>  - 名学生进行了匿评,平均分为 -  <%= format("%.1f", st.student_score) %> 分。 -
    + <% if !score_open %> + ** + <% else %> + <%= format("%.1f", st.student_score) %> + + (<%= anon_count %>) + +
    + 现共有 +  <%= anon_count %>  + 名学生进行了匿评,平均分为 +  <%= format("%.1f", st.student_score) %> 分。 +
    + <% end %> <% end %>
    @@ -70,7 +72,7 @@
    <% score = st.work_score %>
    - <%= !score_open || score.nil? ? "--" : format("%.1f",score<0 ? 0 : score)%> + <%= score.nil? ? "--" : (!score_open ? "**" : format("%.1f",score<0 ? 0 : score))%> <% unless !score_open || score.nil?%>
    diff --git a/app/views/student_work/_evaluation_un_work.html.erb b/app/views/student_work/_evaluation_un_work.html.erb index ef3f670af..b060e2ddd 100644 --- a/app/views/student_work/_evaluation_un_work.html.erb +++ b/app/views/student_work/_evaluation_un_work.html.erb @@ -53,25 +53,23 @@ <% end %> - <%= !score_open || student_work.teacher_score.nil? ? "--" : format("%.1f",student_work.teacher_score)%> + <%= student_work.teacher_score.nil? ? "--" : (!score_open ? "**" : format("%.1f",student_work.teacher_score))%> - <%= !score_open || student_work.teaching_asistant_score.nil? ? "--" : format("%.1f",student_work.teaching_asistant_score)%> + <%= student_work.teaching_asistant_score.nil? ? "--" : (!score_open ? "**" : format("%.1f",student_work.teaching_asistant_score)) %> <% if @homework.homework_type == 2%> - <%= !score_open || student_work.system_score.nil? ? "--" : format("%.1f",student_work.system_score)%> + <%= student_work.system_score.nil? ? "--" : (!score_open ? "**" : format("%.1f",student_work.system_score))%> <% end%> <% if @homework.anonymous_comment == 0%> - <% if !score_open || student_work.student_score.nil? %> - <% if !score_open %> - -- - <% elsif student_work.work_status != 0 %> + <% if student_work.student_score.nil? %> + <% if student_work.work_status != 0 %> <% if @homework.homework_detail_manual.comment_status < 2 %> 未参与 <% elsif @homework.homework_detail_manual.comment_status >= 2 && student_work.student_works_evaluation_distributions.count == 0 %> @@ -79,24 +77,28 @@ <% elsif @homework.homework_detail_manual.comment_status == 2 && student_work.student_works_evaluation_distributions.count != 0 %> 待匿评 <% elsif @homework.homework_detail_manual.comment_status == 3 && student_work.student_works_evaluation_distributions.count != 0 %> - 未评分 + 无评分 <% end %> <% else %> -- <% end %> <% else %> - <%=format("%.1f",student_work.student_score) %> - - (<%= student_work.student_works_scores.where(:reviewer_role => 3).group_by(&:user_id).count%>) - -
    - - - 现共有 -  <%= student_work.student_works_scores.where(:reviewer_role => 3).group_by(&:user_id).count%>  - 名学生进行了匿评,平均分为 -  <%= format("%.1f",student_work.student_score)%> 分。 -
    + <% if !score_open %> + ** + <% else %> + <%=format("%.1f",student_work.student_score) %> + + (<%= student_work.student_works_scores.where(:reviewer_role => 3).group_by(&:user_id).count%>) + +
    + + + 现共有 +  <%= student_work.student_works_scores.where(:reviewer_role => 3).group_by(&:user_id).count%>  + 名学生进行了匿评,平均分为 +  <%= format("%.1f",student_work.student_score)%> 分。 +
    + <% end %> <% end %> <% end %> @@ -107,7 +109,7 @@ <% score = student_work.respond_to?("score") ? student_work.score : (student_work.final_score || 0) - student_work.absence_penalty - student_work.late_penalty%> <% end %> - <%= !score_open || score.nil? ? "--" : format("%.1f",score<0 ? 0 : score)%> + <%= score.nil? ? "--" : (!score_open ? "**" : format("%.1f",score<0 ? 0 : score))%> <% unless !score_open || score.nil?%>
    diff --git a/app/views/student_work/_evaluation_work.html.erb b/app/views/student_work/_evaluation_work.html.erb index 0e270af9e..43742bf8d 100644 --- a/app/views/student_work/_evaluation_work.html.erb +++ b/app/views/student_work/_evaluation_work.html.erb @@ -81,7 +81,7 @@ <% if @homework.homework_type == 2%> - <%= !score_open || student_work.system_score.nil? ? "--" : format("%.1f",student_work.system_score)%> + <%= student_work.system_score.nil? ? "--" : (!score_open ? "**" : format("%.1f",student_work.system_score))%> <% end%> diff --git a/app/views/student_work/_student_work_score.html.erb b/app/views/student_work/_student_work_score.html.erb index e7c201736..a8facff30 100644 --- a/app/views/student_work/_student_work_score.html.erb +++ b/app/views/student_work/_student_work_score.html.erb @@ -34,7 +34,7 @@
    <% score.journals_for_messages.order("created_on desc").each do |jour|%> - <% show_real_name = @is_teacher || score.reviewer_role != 3 %> + <% show_real_name = @is_teacher || score.reviewer_role != 3 || @homework.homework_detail_manual.comment_status != 2 %> <%= render :partial => 'jour_replay',:locals => {:jour => jour, :show_real_name => show_real_name || jour.user == User.current}%> <% end%>
    diff --git a/app/views/users/_join_course_course_message.html.erb b/app/views/users/_join_course_course_message.html.erb index eacbfac8c..78a6f2ecd 100644 --- a/app/views/users/_join_course_course_message.html.erb +++ b/app/views/users/_join_course_course_message.html.erb @@ -5,7 +5,7 @@
  • - <% content = User.find(ma.course_message_id).name+"申请成为课程\""+"#{Course.find(ma.course_id).name}"+"\"的"+"#{ma.content && ma.content.include?('9') ? "教师" : "助教"}" %> + <% content = User.find(ma.course_message_id).name+"申请成为班级\""+"#{Course.find(ma.course_id).name}"+"\"的"+"#{ma.content && ma.content.include?('9') ? "教师" : "助教"}" %> <%= link_to content, user_path(User.find(ma.course_message_id), :course_id => ma.course_id), :class => "#{ma.viewed==0 ? "newsBlack" : "newsGrey"}", :target => '_blank', :title => "#{content}" %> @@ -17,9 +17,10 @@ <%= User.current.lastname + User.current.firstname %>老师您好!您有了新的班级成员申请,信息如下:

    真实姓名:<%= User.find(ma.course_message_id).realname %>

    -

    申请课程:<%= Course.find(ma.course_id).name%>

    -
    课程描述:
    -
    <%= Course.find(ma.course_id).description.html_safe if Course.find(ma.course_id).description %>

    申请职位:<%=ma.content && ma.content.include?('9') ? "教师" : "教辅"%>

    +

    申请班级:<%= Course.find(ma.course_id).name%>

    +
    班级描述:
    +
    <%= Course.find(ma.course_id).description.html_safe if Course.find(ma.course_id).description %>
    +

    申请职位:<%=ma.content && ma.content.include?('9') ? "教师" : "助教"%>

  • diff --git a/app/views/users/user_organizations.html.erb b/app/views/users/user_organizations.html.erb index 7e4b28393..6f1b7db2f 100644 --- a/app/views/users/user_organizations.html.erb +++ b/app/views/users/user_organizations.html.erb @@ -3,7 +3,7 @@
    -
    s +
    组织列表 新建组织 <%#= form_tag url_for(:controller => 'users', :action => 'search_user_orgs', :id => User.current.id), :method => 'get', :id => "search_org_form", :class=>"resourcesSearchloadBox", :style=>"float:right; margin-top:-5px;" do %> diff --git a/db/migrate/20161206061652_update_student_work_score.rb b/db/migrate/20161206061652_update_student_work_score.rb new file mode 100644 index 000000000..4fcd374ca --- /dev/null +++ b/db/migrate/20161206061652_update_student_work_score.rb @@ -0,0 +1,19 @@ +class UpdateStudentWorkScore < ActiveRecord::Migration + def up + homework = HomeworkCommon.where("id = 4198").first + unless homework.nil? + homework.student_works.each do |st| + if st.late_penalty != 0 && Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") > Time.parse(st.commit_time.to_s).strftime("%Y-%m-%d") + if st.work_status == 2 + st.work_status = 1 + end + st.late_penalty = 0 + st.save + end + end + end + end + + def down + end +end diff --git a/db/schema.rb b/db/schema.rb index c61a33fc1..bd3645e2c 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20161201083030) do +ActiveRecord::Schema.define(:version => 20161128072528) do create_table "activities", :force => true do |t| t.integer "act_id", :null => false @@ -820,13 +820,11 @@ ActiveRecord::Schema.define(:version => 20161201083030) do t.integer "exercise_status" t.integer "user_id" t.integer "time" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false t.datetime "publish_time" t.datetime "end_time" t.integer "show_result" - t.integer "question_random", :default => 0 - t.integer "choice_random", :default => 0 end create_table "first_pages", :force => true do |t| @@ -966,7 +964,6 @@ ActiveRecord::Schema.define(:version => 20161201083030) do t.integer "homework_common_id" t.datetime "created_at", :null => false t.datetime "updated_at", :null => false - t.integer "no_anon_penalty", :default => 1 end create_table "homework_detail_programings", :force => true do |t|