diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb
index 0fd4cc2c9..1478bceae 100644
--- a/app/controllers/courses_controller.rb
+++ b/app/controllers/courses_controller.rb
@@ -162,6 +162,7 @@ class CoursesController < ApplicationController
@subPage_title = l :label_student_list
@canShowCode = User.current.allowed_to?(:as_teacher,@course) && params[:role] != '1'
# @is_remote = true
+ @sort_type = 'score'
@score_sort_by = "desc"
q = "#{params[:name].strip}"
if params[:incourse]
@@ -185,9 +186,11 @@ class CoursesController < ApplicationController
group.course_id = @course.id
group.save
end
+ @sort_type = 'score'
+ @score_sort_by = "desc"
@canShowCode = User.current.allowed_to?(:as_teacher,@course) && params[:role] != '1'
@is_remote = true
- @members = student_homework_score(0,0, 10,"desc")
+ @members = student_homework_score(0,0, 10,@score_sort_by)
@course_groups = @course.course_groups
end
@@ -196,7 +199,9 @@ class CoursesController < ApplicationController
@subPage_title = l :label_student_list
@canShowCode = isCourseTeacher(User.current.id,@course) && params[:role] != '1'
@is_remote = true
-
+ @sort_type = 'score'
+ @score_sort_by = "desc"
+ @members = student_homework_score(0,0, 10,@score_sort_by)
@course_groups = @course.course_groups
end
@@ -281,6 +286,7 @@ class CoursesController < ApplicationController
@render_file = 'new_member_list'
@canShowCode = isCourseTeacher(User.current.id,@course) && params[:role] != '1'
@is_remote = true
+ @sort_type = 'score'
@score_sort_by = "desc"
if params[:group_id] && params[:group_id] != "0"
@group = CourseGroup.find(params[:group_id])
@@ -298,6 +304,7 @@ class CoursesController < ApplicationController
@render_file = 'new_member_list'
@score_sort_by = "desc"
+ @sort_type = "score"
@canShowCode = User.current.allowed_to?(:as_teacher,@course) && params[:role] != '1'
@role = params[:role].nil? ? '2':params[:role]
@is_remote = true
@@ -312,7 +319,7 @@ class CoursesController < ApplicationController
if @course.open_student == 1 || User.current.member_of_course?(@course)
@subPage_title = l :label_student_list
page = params[:page].nil? ? 0 : (params['page'].to_i - 1)
- @all_members = student_homework_score(0,page, 10,"desc")
+ @all_members = student_homework_score(0,page, 10,@score_sort_by)
@members = @all_members
else
render_403
@@ -350,28 +357,29 @@ class CoursesController < ApplicationController
@subPage_title = l :label_student_list
@render_file = 'new_member_list'
@is_remote = true
+ @sort_type = params[:sort_type] if params[:sort_type]
@score_sort_by = params[:sort_by] if params[:sort_by]
@search_name = params[:search_name] if params[:search_name]
group_id = params[:group_id]
if !@search_name.nil?
if group_id == '0'
page = params[:page].nil? ? 0 : (params['page'].to_i - 1)
- @results = searchmember_by_name(student_homework_score(0,0,0,@score_sort_by), @search_name)
+ @results = searchmember_by_name(student_homework_score(0,0,0,@score_sort_by,@sort_type), @search_name)
@result_count = @results.count
# @results = paginateHelper @results, 10
else
@group = CourseGroup.find(group_id)
- @results = searchmember_by_name(student_homework_score(group_id, 0, 0,@score_sort_by),@search_name)
+ @results = searchmember_by_name(student_homework_score(group_id, 0, 0,@score_sort_by,@sort_type),@search_name)
@result_count = @results.count
# @results = paginateHelper @results, 10
end
else
if group_id == '0'
page = params[:page].nil? ? 0 : (params['page'].to_i - 1)
- @results = student_homework_score(0,page, 10,@score_sort_by)
+ @results = student_homework_score(0,page, 10,@score_sort_by,@sort_type)
else
@group = CourseGroup.find(group_id)
- @results = student_homework_score(group_id, 0, 0,@score_sort_by)
+ @results = student_homework_score(group_id, 0, 0,@score_sort_by,@sort_type)
end
end
end
@@ -384,6 +392,15 @@ class CoursesController < ApplicationController
end
end
+ # 显示每个学生的作业评分详情
+ def show_member_act_score
+ @member = Member.find(params[:member_id]) if params[:member_id]
+ respond_to do |format|
+ format.html {render :layout => 'course_base'}
+ format.js
+ end
+ end
+
def handle_course courses, activities
course_activity_count_array=activities.values()
course_array=[]
@@ -1149,7 +1166,7 @@ class CoursesController < ApplicationController
end
end
- def student_homework_score(groupid,start_from, nums, score_sort_by)
+ def student_homework_score(groupid,start_from, nums, score_sort_by, sort_type = 'score')
start_from = start_from * nums
sql_select = ""
if groupid == 0
@@ -1159,11 +1176,13 @@ class CoursesController < ApplicationController
WHERE student_works.homework_common_id = homework_commons.id
AND homework_commons.course_id = #{@course.id}
AND student_works.user_id = members.user_id
- ) AS score
+ ) AS score,(SELECT (message_num*2 + message_reply_num*1 + news_reply_num*1 + news_num*1 +
+ resource_num*5 + journal_num*1 + homework_journal_num*1 ) FROM `course_contributor_scores` AS ccs WHERE ccs.course_id = 577 AND ccs.user_id = members.user_id
+ ) AS act_score
FROM members
JOIN students_for_courses
ON students_for_courses.student_id = members.user_id AND students_for_courses.course_id = members.course_id
- WHERE members.course_id = #{@course.id} ORDER BY score #{score_sort_by}"
+ WHERE members.course_id = #{@course.id} ORDER BY #{sort_type} #{score_sort_by}"
else
sql_select = "SELECT members.*,(
SELECT SUM(student_works.work_score)
@@ -1171,11 +1190,13 @@ class CoursesController < ApplicationController
WHERE student_works.homework_common_id = homework_commons.id
AND homework_commons.course_id = #{@course.id}
AND student_works.user_id = members.user_id
- ) AS score
+ ) AS score,(SELECT (message_num*2 + message_reply_num*1 + news_reply_num*1 + news_num*1 +
+ resource_num*5 + journal_num*1 + homework_journal_num*1 ) FROM `course_contributor_scores` AS ccs WHERE ccs.course_id = 577 AND ccs.user_id = members.user_id
+ ) AS act_score
FROM members
JOIN students_for_courses
ON students_for_courses.student_id = members.user_id AND students_for_courses.course_id = members.course_id
- WHERE members.course_id = #{@course.id} AND members.course_group_id = #{groupid} ORDER BY score #{score_sort_by}"
+ WHERE members.course_id = #{@course.id} AND members.course_group_id = #{groupid} ORDER BY #{sort_type} #{score_sort_by}"
end
sql = ActiveRecord::Base.connection()
homework_scores = Member.find_by_sql(sql_select)
@@ -1225,8 +1246,7 @@ class CoursesController < ApplicationController
sheet1[5,i+4] = "第"+(i+1).to_s+"次"
end
sheet1[5,homeworks.count+4] = "总成绩"
- sheet1[5,0] = "排名"
- sheet1[5,0] = "排名"
+ sheet1[5,homeworks.count+5] = "活跃度"
count_row = 6
members.each_with_index do |member, i|
sheet1[count_row,0]= i+1
@@ -1236,14 +1256,15 @@ class CoursesController < ApplicationController
homeworks.each_with_index do |homework, j|
student_works = homework.student_works.where("user_id = #{member.user.id}")
if student_works.empty?
- sheet1[count_row,j+4] = format("%0.2f",0)
+ sheet1[count_row,j+4] = 0
else
final_score = student_works.first.final_score.nil? ? 0 : student_works.first.final_score
score = final_score - student_works.first.absence_penalty - student_works.first.late_penalty
- sheet1[count_row,j+4] = format("%0.2f",score <0 ? 0:score)
+ sheet1[count_row,j+4] = score <0 ? 0:score.round(2)
end
end
- sheet1[count_row,homeworks.count+4] = format("%0.2f",member.score.nil? ? 0:member.score.to_s)
+ sheet1[count_row,homeworks.count+4] = member.score.nil? ? 0:member.score.round(2)
+ sheet1[count_row,homeworks.count+5] = member.act_score.nil? ? 0:member.act_score
count_row += 1
end
diff --git a/app/views/courses/_new_member_list.html.erb b/app/views/courses/_new_member_list.html.erb
index bf69c3a61..ef8a43d5c 100644
--- a/app/views/courses/_new_member_list.html.erb
+++ b/app/views/courses/_new_member_list.html.erb
@@ -24,16 +24,24 @@
- 姓名
- 学号
- - 分班
- -
- <%= link_to '作业积分', member_score_sort_course_path(:sort_by => (@score_sort_by == "desc" ? "asc" : "desc"), :group_id => (@group ? @group.id : 0),:search_name => (@search_name ? @search_name : nil)) ,:result => members,method: 'get', remote: true%>
- <% if @score_sort_by == 'desc' %>
+
- 分班
+ -
+ <%= link_to '作业积分', member_score_sort_course_path(:sort_type => 'score', :sort_by => (@score_sort_by == "desc" ? "asc" : "desc"), :group_id => (@group ? @group.id : 0),:search_name => (@search_name ? @search_name : nil)) ,:result => members,method: 'get', remote: true, :class => 'ml25'%>
+ <% if @sort_type == "score" && @score_sort_by == 'desc' %>
- <% else %>
+ <% elsif @sort_type == "score" && @score_sort_by == 'asc' %>
<% end %>
- - 加入时间
+ -
+ <%= link_to '活跃度', member_score_sort_course_path(:sort_type => 'act_score', :sort_by => (@score_sort_by == "desc" ? "asc" : "desc"), :group_id => (@group ? @group.id : 0),:search_name => (@search_name ? @search_name : nil)) ,:result => members,method: 'get', remote: true, :class => 'ml35'%>
+ <% if @sort_type == "act_score" && @score_sort_by == 'desc' %>
+
+ <% elsif @sort_type == "act_score" && @score_sort_by == 'asc' %>
+
+ <% end %>
+
+ - 加入时间
@@ -61,21 +69,21 @@
<% if User.current.allowed_to?(:as_teacher, @course) || User.current.admin? %>
<% if @course.course_groups.nil? || @group %>
-
+
<%=member.course_group_id == 0 ? "暂无" : member.course_group.name %>
<% else %>
<%= form_tag({:controller => 'courses', :action => 'teacher_assign_group', :id => @course.id,:user_id => member.user_id},:remote=>'true', :method => 'post', :id=>"join_group_form_#{member.id}", :class => 'query_form') do %>
-
<%=member.course_group_id == 0 ? "暂无" : member.course_group.name %>
+
<%=member.course_group_id == 0 ? "暂无" : member.course_group.name %>
<%= select( :name,:group_id, course_group_option(@course),
{ :include_blank => false,:selected => member.course_group_id},
- {:onchange=>"join_group_function('#join_group_form_#{member.id}');", :id =>"course_group_id", :name => "course_group_id",:class=>"w125 undis class-edit fl", :style => "margin-left: 105px;"}) %>
+ {:onchange=>"join_group_function('#join_group_form_#{member.id}');", :id =>"course_group_id", :name => "course_group_id",:class=>"w125 undis class-edit fl", :style => "margin-left: 5px;"}) %>
<% end %>
<% end %>
<% else %>
-
+
<%=member.course_group_id == 0 ? "暂无" : member.course_group.name %>
<% end %>
@@ -83,7 +91,12 @@
:action => 'show_member_score',
:member_id => member.id,
:remote => true},
- :class => 'ml25 c_red' %>
+ :class => 'st_list_score c_red' %>
+ <%= link_to member.act_score.nil? ? 0 : member.act_score.to_s, {
+ :action => 'show_member_act_score',
+ :member_id => member.id,
+ :remote => true},
+ :class => 'st_list_score c_red' %>
<%= format_date(member.created_on)%>
<%= call_hook(:view_projects_settings_members_table_row, { :course => @course, :member => member}) %>
diff --git a/app/views/courses/_show_member_act_score.html.erb b/app/views/courses/_show_member_act_score.html.erb
new file mode 100644
index 000000000..cec17f0b8
--- /dev/null
+++ b/app/views/courses/_show_member_act_score.html.erb
@@ -0,0 +1,38 @@
+
+
+
+
+ <% act_score = CourseContributorScore.where("user_id = ? and course_id = ?", member.user_id, member.course_id).first %>
+
<%= member.user.show_name %> 活跃度计算
+ <% if act_score.nil? %>
+
+ 资源发布数 x 5 = 0 x 5 = 0
+ 问答发布数 x 2 = 0 x 2 = 0
+ 通知发布数 x 1 = 0 x 1 = 0
+ 问答回帖数 x 1 = 0 x 1 = 0
+ 作业留言数 x 1 = 0 x 1 = 0
+ 通知留言数 x 1 = 0 x 1 = 0
+ 课程留言数 x 1 = 0 x 1 = 0
+ 总得分:0
+
+ <% else %>
+ <% total_score = act_score.resource_num.to_i * 5 + act_score.message_num.to_i * 2 +
+ act_score.message_reply_num.to_i * 1 + act_score.journal_num.to_i * 1 +
+ + act_score.homework_journal_num.to_i * 1 + act_score.news_reply_num.to_i * 1 +
+ act_score.news_num.to_i * 1 %>
+
+ 资源发布数 x 5 = <%= act_score.resource_num.to_i %> x 5 = <%= act_score.resource_num.to_i * 5 %>
+ 问答发布数 x 2 = <%= act_score.message_num.to_i %> x 2 = <%= act_score.message_num.to_i * 2 %>
+ 通知发布数 x 1 = <%= act_score.news_num.to_i %> x 1 = <%= act_score.news_num.to_i %>
+ 问答回帖数 x 1 = <%= act_score.message_reply_num.to_i %> x 1 = <%= act_score.message_reply_num.to_i %>
+ 作业留言数 x 1 = <%= act_score.homework_journal_num.to_i %> x 1 = <%= act_score.homework_journal_num.to_i %>
+ 通知留言数 x 1 = <%= act_score.news_reply_num.to_i %> x 1 = <%= act_score.news_reply_num.to_i %>
+ 课程留言数 x 1 = <%= act_score.journal_num.to_i %> x 1 = <%= act_score.journal_num.to_i %>
+ 总得分:<%=total_score %>
+
+ <% end %>
+
+
diff --git a/app/views/courses/_show_member_score.html.erb b/app/views/courses/_show_member_score.html.erb
index 94d282cec..27b3863b0 100644
--- a/app/views/courses/_show_member_score.html.erb
+++ b/app/views/courses/_show_member_score.html.erb
@@ -28,7 +28,7 @@
<% end %>
-
作业积分(总分)<%= format("%0.2f",(@member_score.student_work_score_sum).first.score) %>
+
作业积分(总分)<%= format("%0.2f",(@member_score.student_work_score_sum).first.score.nil? ? 0 : (@member_score.student_work_score_sum).first.score) %>
diff --git a/app/views/courses/deletegroup.js.erb b/app/views/courses/deletegroup.js.erb
index cb7e1fbb1..f0c0f4be3 100644
--- a/app/views/courses/deletegroup.js.erb
+++ b/app/views/courses/deletegroup.js.erb
@@ -1 +1,2 @@
-$("#st_groups").html("<%= escape_javascript( render :partial => 'new_groups_name', locals: {:course_groups => @course_groups})%>");
\ No newline at end of file
+$("#st_groups").html("<%= escape_javascript( render :partial => 'new_groups_name', locals: {:course_groups => @course_groups})%>");
+$("#member_content").html("<%= escape_javascript( render :partial => 'new_member_list', :locals => {:members => @members})%>");
\ No newline at end of file
diff --git a/app/views/courses/show_member_act_score.js.erb b/app/views/courses/show_member_act_score.js.erb
new file mode 100644
index 000000000..c6327d164
--- /dev/null
+++ b/app/views/courses/show_member_act_score.js.erb
@@ -0,0 +1,7 @@
+$('#ajax-modal').html('<%= escape_javascript(render :partial => 'courses/show_member_act_score', :locals => {:member => @member}) %>');
+showModal('ajax-modal', '300px');
+$('#ajax-modal').siblings().remove();
+$('#ajax-modal').before("
" +
+ "
");
+$('#ajax-modal').parent().css("top","30%").css("left","40%").css("position","fixed").css("border","3px solid #269ac9");
+$('#ajax-modal').parent().addClass("new-watcher");
\ No newline at end of file
diff --git a/config/routes.rb b/config/routes.rb
index 0feb60098..451d3e0a7 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -1060,6 +1060,7 @@ RedmineApp::Application.routes.draw do
match "addgroups", :via => [:post, :get]
match 'deletegroup', :via => [:delete]
match 'show_member_score', :via => [:get]
+ match 'show_member_act_score', :via => [:get]
match 'valid_ajax', :to => 'courses#valid_ajax', :via => :get
post 'join_in/join_group', :to => 'courses#join_group', :as => 'join_group'
delete 'join_in/join_group', :to => 'courses#unjoin_group'
diff --git a/db/migrate/20160517013659_alter_course_contributor_score_default.rb b/db/migrate/20160517013659_alter_course_contributor_score_default.rb
new file mode 100644
index 000000000..488dab848
--- /dev/null
+++ b/db/migrate/20160517013659_alter_course_contributor_score_default.rb
@@ -0,0 +1,52 @@
+class AlterCourseContributorScoreDefault < ActiveRecord::Migration
+ def up
+ change_column :course_contributor_scores, :message_num, :integer, :default => 0
+ change_column :course_contributor_scores, :message_reply_num, :integer, :default => 0
+ change_column :course_contributor_scores, :news_reply_num, :integer, :default => 0
+ change_column :course_contributor_scores, :news_num, :integer, :default => 0
+ change_column :course_contributor_scores, :resource_num, :integer, :default => 0
+ change_column :course_contributor_scores, :journal_num, :integer, :default => 0
+ change_column :course_contributor_scores, :journal_reply_num, :integer, :default => 0
+ change_column :course_contributor_scores, :homework_journal_num, :integer, :default => 0
+ change_column :course_contributor_scores, :total_score, :integer, :default => 0
+
+ count = CourseContributorScore.all.count / 30 + 2
+ transaction do
+ for i in 1 ... count do i
+ CourseContributorScore.page(i).per(30).each do |cs|
+ if cs.message_num.nil?
+ cs.message_num = 0
+ end
+ if cs.message_reply_num.nil?
+ cs.message_reply_num = 0
+ end
+ if cs.news_reply_num.nil?
+ cs.news_reply_num = 0
+ end
+ if cs.news_num.nil?
+ cs.news_num = 0
+ end
+ if cs.resource_num.nil?
+ cs.resource_num = 0
+ end
+ if cs.journal_num.nil?
+ cs.journal_num = 0
+ end
+ if cs.journal_reply_num.nil?
+ cs.journal_reply_num = 0
+ end
+ if cs.homework_journal_num.nil?
+ cs.homework_journal_num = 0
+ end
+ if cs.total_score.nil?
+ cs.total_score = 0
+ end
+ cs.save
+ end
+ end
+ end
+ end
+
+ def down
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index d5334c43c..9b317fd9e 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 => 20160511055221) do
+ActiveRecord::Schema.define(:version => 20160517013659) do
create_table "activities", :force => true do |t|
t.integer "act_id", :null => false
@@ -450,15 +450,15 @@ ActiveRecord::Schema.define(:version => 20160511055221) do
create_table "course_contributor_scores", :force => true do |t|
t.integer "course_id"
t.integer "user_id"
- t.integer "message_num"
- t.integer "message_reply_num"
- t.integer "news_reply_num"
- t.integer "resource_num"
- t.integer "journal_num"
- t.integer "journal_reply_num"
+ t.integer "message_num", :default => 0
+ t.integer "message_reply_num", :default => 0
+ t.integer "news_reply_num", :default => 0
+ t.integer "resource_num", :default => 0
+ t.integer "journal_num", :default => 0
+ t.integer "journal_reply_num", :default => 0
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
- t.integer "total_score"
+ t.integer "total_score", :default => 0
t.integer "homework_journal_num", :default => 0
t.integer "news_num", :default => 0
end
@@ -1107,6 +1107,23 @@ ActiveRecord::Schema.define(:version => 20160511055221) do
t.integer "viewed_count", :default => 0
end
+ create_table "mess", :id => false, :force => true do |t|
+ t.string "课程名"
+ t.integer "课程ID", :default => 0, :null => false
+ t.string "教师姓", :default => "", :null => false
+ t.string "教师名", :limit => 30, :default => "", :null => false
+ t.string "主贴名", :default => "", :null => false
+ t.integer "主贴或回帖ID", :default => 0, :null => false
+ t.integer "回帖对应主贴ID"
+ t.integer "帖子点赞数"
+ t.integer "主贴回复数", :default => 0, :null => false
+ t.text "主贴或回帖内容"
+ t.datetime "发帖时间", :null => false
+ t.integer "发帖或回帖用户ID", :default => 0, :null => false
+ t.string "发帖或回帖用户姓", :default => "", :null => false
+ t.string "发帖或回帖用户名", :limit => 30, :default => "", :null => false
+ end
+
create_table "message_alls", :force => true do |t|
t.integer "user_id"
t.integer "message_id"
@@ -1328,6 +1345,7 @@ ActiveRecord::Schema.define(:version => 20160511055221) do
t.boolean "allow_guest_download", :default => true
t.integer "visits", :default => 0
t.integer "show_mode", :default => 0
+ t.integer "allow_teacher", :default => 0
end
create_table "phone_app_versions", :force => true do |t|
@@ -2043,6 +2061,7 @@ ActiveRecord::Schema.define(:version => 20160511055221) do
t.string "salt", :limit => 64
t.integer "gid"
t.integer "visits", :default => 0
+ t.integer "excellent_teacher", :default => 0
end
add_index "users", ["auth_source_id"], :name => "index_users_on_auth_source_id"
diff --git a/public/stylesheets/courses.css b/public/stylesheets/courses.css
index 758e59296..cd9f88651 100644
--- a/public/stylesheets/courses.css
+++ b/public/stylesheets/courses.css
@@ -560,6 +560,8 @@ a:hover.st_img { border:1px solid #1c9ec7; }
a:hover.st_add{ color:#ff8e15;}
.classbox_on{ border:1px solid #f8df8c; background:#f6f098; padding:0 3px; float:left; margin-left:15px;}
.classbox_on a{ color:#716cad;}
+.st_list_score {width:105px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis; float:left; vertical-align:middle; font-size:12px; text-align:center;}
+
/* 创建课程courses*/
.courses_input{ border:1px solid #64bdd9; height:16px; width:532px; background:#fff; margin-bottom:10px; padding:5px;}
.courses_input_w{ width:300px;}