From 7c1b86556dbab1592de5aa35595ec176b3303560 Mon Sep 17 00:00:00 2001 From: alan <547533434@qq.com> Date: Wed, 17 Dec 2014 17:36:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E3=80=8A=E4=BD=9C=E4=B8=9A?= =?UTF-8?q?=E8=AF=84=E5=88=86=E5=BC=B9=E7=AA=97=E3=80=8B=E3=80=8A=E5=AD=A6?= =?UTF-8?q?=E7=94=9F=E5=88=97=E8=A1=A8=E5=A2=9E=E5=8A=A0=E4=BD=9C=E4=B8=9A?= =?UTF-8?q?=E8=AF=84=E5=88=86=E3=80=8B=E4=B8=A4=E9=A1=B9=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=20Signed-off-by:=20alan=20<547533434@qq.com>?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/courses_controller.rb | 12 +++- app/helpers/courses_helper.rb | 26 ++++++- app/models/member.rb | 41 +++++++++++ app/models/user.rb | 4 +- app/views/courses/_member_list.html.erb | 53 ++++++++++---- app/views/courses/_show_member_score.html.erb | 58 +++++++++++++++ app/views/courses/show_member_score.js.erb | 3 + app/views/layouts/contest_base.html.erb | 2 +- app/views/layouts/course_base.html.erb | 6 +- .../projects/show_projects_score.html.erb | 71 ------------------- app/views/users/_user_score.html.erb | 2 +- config/locales/zh.yml | 1 + config/routes.rb | 2 + public/stylesheets/course_group.css | 14 ++-- 14 files changed, 192 insertions(+), 103 deletions(-) create mode 100644 app/views/courses/_show_member_score.html.erb create mode 100644 app/views/courses/show_member_score.js.erb delete mode 100644 app/views/projects/show_projects_score.html.erb diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index bf964fbaf..63b8294e7 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -318,7 +318,6 @@ class CoursesController < ApplicationController @canShowCode = isCourseTeacher(User.current.id,@course) && params[:role] != '1' @role = params[:role] @course_groups = @course.course_groups if @course.course_groups - @course_group_id = params[:@course_group_id] unless params[:@course_group_id].nil? @show_serch = params[:role] == '2' case params[:role] when '1' @@ -340,6 +339,15 @@ class CoursesController < ApplicationController render_403 end + end + # 显示每个学生的作业评分详情 + def show_member_score + @member_score = Member.find(params[:member_id]) if params[:member_id] + respond_to do |format| + format.html {render :layout => 'course_base'} + format.js + end + end #判断指定用户是否为课程教师 @@ -840,4 +848,6 @@ class CoursesController < ApplicationController render_404 end end + + end diff --git a/app/helpers/courses_helper.rb b/app/helpers/courses_helper.rb index a1199a55a..6f0265132 100644 --- a/app/helpers/courses_helper.rb +++ b/app/helpers/courses_helper.rb @@ -166,9 +166,25 @@ module CoursesHelper def searchStudent project #searchPeopleByRoles(project, StudentRoles) members = [] + project.members.each do |m| - members << m if m && m.user && m.user.allowed_to?(:as_student,project) + if m && m.user && m.user.allowed_to?(:as_student,project) + members << m + + end + end + members + end + def search_student_and_score project + #searchPeopleByRoles(project, StudentRoles) + members = [] + scores = [] + project.members.each do |m| + if m && m.user && m.user.allowed_to?(:as_student,project) + members << m + end + end members end def searchStudent_by_name project, name @@ -392,7 +408,13 @@ module CoursesHelper return teacher_score_for_homework homework end end - + def score_for_homework_new homework + if teacher_score_for_homework(homework) != 0 + return teacher_score_for_homework homework + else + return student_score_for_homework homework + end + end #获取作业的互评得分 def student_score_for_homework homework #member = searchTeacherAndAssistant(homework.bid.courses.first).first#searchPeopleByRoles(homework.bid.courses.first,TeacherRoles).first diff --git a/app/models/member.rb b/app/models/member.rb index 716f6a7c5..32d0f5c73 100644 --- a/app/models/member.rb +++ b/app/models/member.rb @@ -114,9 +114,50 @@ class Member < ActiveRecord::Base member end + # 查找每个学生每个作业的评分 + def student_homework_score + teachers = find_course_teachers(self.course) + + score_count = 0 + homework_scores = HomeworkAttach.find_by_sql("SELECT homework_attaches.bid_id as bid_id, bids.name as name, + (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' + AND rateable_id = homework_attaches.id AND rater_id IN (#{teachers}) ) AS t_score, + (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' + AND rateable_id = homework_attaches.id AND rater_id NOT IN (#{teachers})) AS s_score + FROM homework_attaches, bids where homework_attaches.user_id = #{self.user_id} + and homework_attaches.bid_id IN (SELECT bid_id FROM homework_for_courses where course_id = #{self.course_id} + and homework_attaches.bid_id = bids.id)") + homework_scores.each do |homework| + if !homework.t_score.nil? && homework.t_score != 0 + score = homework.t_score + else + if !homework.s_score.nil? + score= homework.s_score + else + score = 0 + end + end + score_count = score_count + score + end + [homework_scores, format("%0.2f", score_count)] + end protected def validate_role errors.add_on_empty :role if member_roles.empty? && roles.empty? end + + + #获取课程的老师列表 + def find_course_teachers course + searchTeacherAndAssistant(course).map{|teacher| teacher.user_id}.join(",") + end + def searchTeacherAndAssistant project + #searchPeopleByRoles(project, TeacherRoles) + members = [] + project.members.each do |m| + members << m if m && m.user && m.user.allowed_to?(:as_teacher,project) + end + members + end end diff --git a/app/models/user.rb b/app/models/user.rb index 70e4e8187..cae5f1aa2 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -90,7 +90,7 @@ class User < Principal has_many :contesting_projects, :dependent => :destroy belongs_to :softapplication, :foreign_key => 'id', :dependent => :destroy ##ended by xianbo - + #####fq has_many :jours, :class_name => 'JournalsForMessage', :dependent => :destroy has_many :journals_messages, :class_name => 'JournalsForMessage', :foreign_key => "user_id", :dependent => :destroy @@ -105,7 +105,7 @@ class User < Principal #has_many :courses, :through => :students_for_courses, :source => :project has_many :acts, :class_name => 'Activity', :as => :act, :dependent => :destroy has_many :file_commit, :class_name => 'Attachment', :foreign_key => 'author_id', :conditions => "container_type = 'Project' or container_type = 'Version'" -#### +#### # added by bai has_many :join_in_contests, :dependent => :destroy has_many :news, :foreign_key => 'author_id' diff --git a/app/views/courses/_member_list.html.erb b/app/views/courses/_member_list.html.erb index 58a0da0b2..25d32716f 100644 --- a/app/views/courses/_member_list.html.erb +++ b/app/views/courses/_member_list.html.erb @@ -1,4 +1,4 @@ -
+
<% if User.current.logged? && User.current.member_of_course?(@course) && @group %> <% if !@canShowCode %> <%= join_in_course_group(@course.course_groups,@group, User.current) %> @@ -26,31 +26,56 @@ <% if @result_count %>

<%= l(:label_search_member_count) %><%= @result_count %><%= l(:label_member_people) %>

<% end %> - <% members.each do |member| %> -
+
+
+ + <% members.each do |member| %> + +
+
<% next if member.new_record? %> - <% unless member.created_on.nil? %> - <%= content_tag "p", "#{format_date(member.created_on)}#{l(:label_member_since)}", :class => "float_right member_since" %> - <% end %> - <%= member.user.nil? ? '' : (image_tag(url_to_avatar(member.user), :class => 'avatar')) %> + + <%= member.user.nil? ? '' : (image_tag(url_to_avatar(member.user), :width => 40, :height => 40)) %> +
    <% if @canShowCode %> - <%= content_tag "div", link_to(member.user.show_name, user_path(member.user)), :class => "nomargin avatar_name" %> +
  • + <%= l(:label_bidding_user_studentname) %> : + <%= link_to member.user.show_name, user_path(member.user) %> + +

  • + <%#= content_tag "li", "#{l(:label_bidding_user_studentname)}#{' : '}"link_to(member.user.show_name, user_path(member.user)) %> <% else %> - <%= content_tag "div", link_to(member.user.name, user_path(member.user)), :class => "nomargin avatar_name" %> + <%= content_tag "li", link_to(member.user.name, user_path(member.user)) %> <% end %> <% if @canShowCode %> - <%= content_tag "p", "#{l(:label_bidding_user_studentcode)}#{' : '}#{member.user.user_extensions.student_id}", :class => "nomargin avatar_name" %> +
  • + <%= l(:label_bidding_user_studentcode) %> : + <%= link_to member.user.user_extensions.student_id, user_path(member.user) %> +
  • + <%#= content_tag "li", "#{l(:label_bidding_user_studentcode)}#{' : '}#{member.user.user_extensions.student_id}", :style=> "color:#1c9ec7;" %> <% end %> -
      -

    -

    -
    +
+ + <%= link_to member.student_homework_score[1].to_s, { + :action => 'show_member_score', + :member_id => member.id, + :remote => true}, + :class => 'ml258 c_red', :style => "color:red;" %> + + <% unless member.created_on.nil? %> + <%= content_tag "span", "#{format_date(member.created_on)}#{l(:label_member_since)}", :class => "ml65 c_grey" %> + <% end %> + <%= call_hook(:view_projects_settings_members_table_row, { :course => @course, :member => member}) %>
<% end; reset_cycle %> +
<% else %>

diff --git a/app/views/courses/_show_member_score.html.erb b/app/views/courses/_show_member_score.html.erb new file mode 100644 index 000000000..57dd7b2be --- /dev/null +++ b/app/views/courses/_show_member_score.html.erb @@ -0,0 +1,58 @@ + + + +

+

<%= @member_score.user.name %> 历次作业积分

+
    +
  • 作业名称得分
  • + <% @member_score.student_homework_score[0].each do |homework_score| %> + <% if !homework_score.t_score.nil? && homework_score.t_score != 0 %> + <% score = homework_score.t_score %> + <% else %> + <% if !homework_score.s_score.nil? %> + <% score = homework_score.s_score %> + <% else %> + <% score = 0 %> + <% end %> + <% end %> +
  • <%= homework_score.name %><%= format("%0.2f",score) %>
  • + <% end %> +
  • 作业积分(总得分)<%= @member_score.student_homework_score[1] %>
  • +
+ + +
diff --git a/app/views/courses/show_member_score.js.erb b/app/views/courses/show_member_score.js.erb new file mode 100644 index 000000000..fe8d52a2b --- /dev/null +++ b/app/views/courses/show_member_score.js.erb @@ -0,0 +1,3 @@ +$('#ajax-modal').html('<%= escape_javascript(render :partial => 'courses/show_member_score', :locals => {:member => @member_score}) %>'); +showModal('ajax-modal', '400px'); +$('#ajax-modal').addClass('new-watcher'); diff --git a/app/views/layouts/contest_base.html.erb b/app/views/layouts/contest_base.html.erb index ba187be3e..98663f6c4 100644 --- a/app/views/layouts/contest_base.html.erb +++ b/app/views/layouts/contest_base.html.erb @@ -30,7 +30,7 @@
<%= render_flash_messages %> <%= yield %> - <%= call_hook :view_layouts_base_content %> + <%= call_hook :view_layouts_base_course %>
<%=render :partial => 'layouts/base_footer'%>
diff --git a/app/views/layouts/course_base.html.erb b/app/views/layouts/course_base.html.erb index 198252a52..af376b1f5 100644 --- a/app/views/layouts/course_base.html.erb +++ b/app/views/layouts/course_base.html.erb @@ -1,7 +1,5 @@ -<% @nav_dispaly_course_all_label = 1 - @nav_dispaly_forum_label = 1 - @nav_dispaly_course_label = nil - @nav_dispaly_store_all_label = 1 %> +<% @nav_dispaly_project_label = 1 + @nav_dispaly_forum_label = 1 %> diff --git a/app/views/projects/show_projects_score.html.erb b/app/views/projects/show_projects_score.html.erb deleted file mode 100644 index 836e0a05c..000000000 --- a/app/views/projects/show_projects_score.html.erb +++ /dev/null @@ -1,71 +0,0 @@ - - - - <%= h html_title %> - - - <%= csrf_meta_tag %> - <%= favicon %> - <%= stylesheet_link_tag 'jquery/jquery-ui-1.9.2', 'application', 'nyan', :media => 'all' %> - <%= stylesheet_link_tag 'rtl', :media => 'all' if l(:direction) == 'rtl' %> - <%= javascript_heads %> - <%= heads_for_theme %> - <%= hubspot_head %> - <%= call_hook :view_layouts_base_html_head %> - - <%= yield :header_tags -%> - -<% if @project %> -

<%= l(:label_projects_score) %>

-
- - - - - - -
<%= image_tag(url_to_avatar(@project), :class => 'avatar2') %> - - - -
<%= @project.name %>
-
- - - -
<%= l(:label_projects_score) %>
<%= format("%.2f" , project_scores(@project) ).to_i %>
-
-
- -
-
    -
  • - <%= link_to l(:label_projects_score), {:controller => 'projects', :action => 'show_projects_score', :remote => true}%> : - <%= format("%.2f" , project_scores(@project) ).to_i %> -
  • -
  • - <%= link_to l(:label_issue_score), {:controller => 'projects', :action => 'issue_score_index', :remote => true}%> : - <%= format("%.2f" , issue_score(@project)).to_i %> -
  • -
  • - <%= link_to l(:label_news_score), {:controller => 'projects', :action => 'news_score_index', :remote => true}%> : - <%= format("%.2f" , news_score(@project)).to_i %> -
  • -
  • - <%= link_to l(:label_file_score), {:controller => 'projects', :action => 'file_score_index', :remote => true}%> : - <%= format("%.2f" , documents_score(@project)).to_i %> -
  • -
  • - <%= link_to l(:label_code_submit_score), {:controller => 'projects', :action => 'code_submit_score_index', :remote => true}%> : - <%= format("%.2f" , changesets_score(@project)).to_i %> -
  • -
  • - <%= link_to l(:label_topic_score), {:controller => 'projects', :action => 'projects_topic_score_index', :remote => true}%> : - <%= format("%.2f" , board_message_score(@project)).to_i %> -
  • -
-
-
- <%= render :partial => 'projects/project_score_index', :locals => {:index => 0,:project => @project } %> -
-<% end %> \ No newline at end of file diff --git a/app/views/users/_user_score.html.erb b/app/views/users/_user_score.html.erb index e9334a047..71f8f60a5 100644 --- a/app/views/users/_user_score.html.erb +++ b/app/views/users/_user_score.html.erb @@ -5,4 +5,4 @@ :action => 'show_new_score', :remote => true, :id => user.id -}, :style => 'color :#E8770D;',:id => 'user_score') %> \ No newline at end of file + }, :style => 'color :#E8770D;',:id => 'user_score') %> \ No newline at end of file diff --git a/config/locales/zh.yml b/config/locales/zh.yml index 236af39c1..8f23d3025 100644 --- a/config/locales/zh.yml +++ b/config/locales/zh.yml @@ -1572,6 +1572,7 @@ zh: label_bidding_user: 应标人: label_bidding_user_homework: 作业提交者 label_bidding_user_studentcode: 学号 + label_bidding_user_studentname: 姓名 label_bidding_reason: 应标宣言: label_bidding_reason_homewrok: 作业提交说明 label_username: 用户名: diff --git a/config/routes.rb b/config/routes.rb index 45f3071b3..f4fff69d4 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -641,6 +641,7 @@ RedmineApp::Application.routes.draw do get 'file', :action => 'file', :as => 'file' get 'feedback', :action => 'feedback', :as => 'course_feedback' get 'member', :controller => 'courses', :action => 'member', :as => 'member' + get 'member_score', :to => 'courses#member_score' post 'finishcourse' post 'restartcourse' match "searchmembers", :controller => 'courses', :action => 'searchmembers', :via => [:post,:get] @@ -648,6 +649,7 @@ RedmineApp::Application.routes.draw do match "updategroupname", :via => [:post, :get] match "addgroups", :via => [:post, :get] match 'deletegroup', :via => [:delete] + match 'show_member_score', :via => [:get] post 'join_in/join_group', :to => 'courses#join_group', :as => 'join_group' delete 'join_in/join_group', :to => 'courses#unjoin_group' end diff --git a/public/stylesheets/course_group.css b/public/stylesheets/course_group.css index edfcb9091..92cc5f08d 100644 --- a/public/stylesheets/course_group.css +++ b/public/stylesheets/course_group.css @@ -60,15 +60,15 @@ input.f_2 { .st_down{ display: block; width:8px; float:left; height:13px; background:url(../images/pic_up.png) 0 -22px no-repeat; margin-top:5px; margin-left:3px;} a.st_img { display:block;width:40px; height:40px; border:1px solid #CCC; padding:1px;} a:hover.st_img { border:1px solid #1c9ec7; } -.st_boxlist{ border-bottom:1px dashed #CCC; height:53px; padding-top:10px; } -.st_boxlist a{ float:left;} +.st_boxlist{ border-bottom:1px dashed #CCC; height:53px; padding-top:10px;padding-bottom: 10px; } +.st_boxlist a{ } .st_boxlist ul{ float:left; width:200px; margin-left:10px;} -.st_boxlist ul li a{ color:#5d5d5d;} -.st_boxlist ul li a span{ color:#1c9ec7;} -.st_boxlist ul li a:hover span{ color:#ff8e15;} + +.st_boxlist ul li a { color:#1c9ec7;} +.st_boxlist ul li a:hover{ color:#ff8e15;} .ml50{ margin-left:50px;} -.ml358{ margin-left:358px;} -.ml258{ margin-left:254px;} +.ml358{ margin-left:360px;} +.ml258{ margin-left:110px;} .ml65{ margin-left:65px;} a:hover.st_add{ color:#ff8e15;}