diff --git a/app/helpers/courses_helper.rb b/app/helpers/courses_helper.rb index 7c1831d56..d07001215 100644 --- a/app/helpers/courses_helper.rb +++ b/app/helpers/courses_helper.rb @@ -738,3 +738,22 @@ module CoursesHelper desc.html_safe end end + +# 学生按作业总分排序,取前8个 +def hero_homework_score(course, score_sort_by) + sql_select = "SELECT members.*,( + SELECT SUM(student_works.final_score) + FROM student_works,homework_commons + 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 + 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} limit 9" + sql = ActiveRecord::Base.connection() + homework_scores = Member.find_by_sql(sql_select) + sql.close() + homework_scores +end diff --git a/app/models/course.rb b/app/models/course.rb index 1350b8cf7..ec1afd611 100644 --- a/app/models/course.rb +++ b/app/models/course.rb @@ -40,8 +40,10 @@ class Course < ActiveRecord::Base has_many :course_activities # 课程消息 - has_many :course_messages, :class_name =>'CourseMessage', :as => :course_message, :dependent => :destroy + has_many :course_messages, :class_name =>'CourseMessage', :as => :course_message, :dependent => :destroy has_many :exercises, :dependent => :destroy + # 课程贡献榜 + has_many :course_contributor_scores, :dependent => :destroy acts_as_taggable acts_as_nested_set :order => 'name', :dependent => :destroy diff --git a/app/models/course_contributor_score.rb b/app/models/course_contributor_score.rb new file mode 100644 index 000000000..598b8e014 --- /dev/null +++ b/app/models/course_contributor_score.rb @@ -0,0 +1,5 @@ +class CourseContributorScore < ActiveRecord::Base + attr_accessible :course_id, :journal_num, :journal_reply_num, :message_num, :message_reply_num, :news_reply_num, :resource_num, :user_id + belongs_to :course + belongs_to :user +end diff --git a/app/models/user.rb b/app/models/user.rb index 3e7bc2ddb..cd8b96d47 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -153,6 +153,8 @@ class User < Principal # 邮件邀请状态 has_many :invite_lists, :dependent => :destroy # end + # 课程贡献榜 + has_many :course_contributor_scores, :dependent => :destroy ######added by nie has_many :project_infos, :dependent => :destroy diff --git a/app/views/layouts/base_courses.html.erb b/app/views/layouts/base_courses.html.erb index 8b15e67ea..4a7692405 100644 --- a/app/views/layouts/base_courses.html.erb +++ b/app/views/layouts/base_courses.html.erb @@ -200,7 +200,58 @@ <%= render 'courses/tool_expand', :locals => {:is_teacher => is_teacher, :course_file_num => course_file_num} %> + <%# 课程贡献榜 %>
+ +

<%= l(:label_course_brief_introduction)%>:

diff --git a/db/migrate/20151125064914_create_course_contributor_scores.rb b/db/migrate/20151125064914_create_course_contributor_scores.rb new file mode 100644 index 000000000..0d16ac68b --- /dev/null +++ b/db/migrate/20151125064914_create_course_contributor_scores.rb @@ -0,0 +1,16 @@ +class CreateCourseContributorScores < ActiveRecord::Migration + def change + create_table :course_contributor_scores 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.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 95f79b84b..64f94cc29 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 => 20151120134208) do +ActiveRecord::Schema.define(:version => 20151125064914) do create_table "activities", :force => true do |t| t.integer "act_id", :null => false @@ -241,6 +241,58 @@ ActiveRecord::Schema.define(:version => 20151120134208) do add_index "changesets_issues", ["changeset_id", "issue_id"], :name => "changesets_issues_ids", :unique => true + create_table "code_review_assignments", :force => true do |t| + t.integer "issue_id" + t.integer "change_id" + t.integer "attachment_id" + t.string "file_path" + t.string "rev" + t.string "rev_to" + t.string "action_type" + t.integer "changeset_id" + end + + create_table "code_review_project_settings", :force => true do |t| + t.integer "project_id" + t.integer "tracker_id" + t.datetime "created_at" + t.datetime "updated_at" + t.integer "updated_by" + t.boolean "hide_code_review_tab", :default => false + t.integer "auto_relation", :default => 1 + t.integer "assignment_tracker_id" + t.text "auto_assign" + t.integer "lock_version", :default => 0, :null => false + t.boolean "tracker_in_review_dialog", :default => false + end + + create_table "code_review_user_settings", :force => true do |t| + t.integer "user_id", :default => 0, :null => false + t.integer "mail_notification", :default => 0, :null => false + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "code_reviews", :force => true do |t| + t.integer "project_id" + t.integer "change_id" + t.datetime "created_at" + t.datetime "updated_at" + t.integer "line" + t.integer "updated_by_id" + t.integer "lock_version", :default => 0, :null => false + t.integer "status_changed_from" + t.integer "status_changed_to" + t.integer "issue_id" + t.string "action_type" + t.string "file_path" + t.string "rev" + t.string "rev_to" + t.integer "attachment_id" + t.integer "file_count", :default => 0, :null => false + t.boolean "diff_all" + end + create_table "comments", :force => true do |t| t.string "commented_type", :limit => 30, :default => "", :null => false t.integer "commented_id", :default => 0, :null => false @@ -330,6 +382,19 @@ ActiveRecord::Schema.define(:version => 20151120134208) do t.integer "container_id", :default => 0 end + 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.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + create_table "course_groups", :force => true do |t| t.string "name" t.integer "course_id" diff --git a/public/stylesheets/courses.css b/public/stylesheets/courses.css index e71eb975c..7d5d66103 100644 --- a/public/stylesheets/courses.css +++ b/public/stylesheets/courses.css @@ -1173,6 +1173,6 @@ a:hover.testEdit{ background:url(images/icons.png) -21px -272px no-repeat;} .courseMenuSetting:hover {background:url(../images/homepage_icon2.png) -190px -407px no-repeat;} .rankList {width:220px; padding:10px; background-color:#ffffff; margin-top:10px;} .rankList li {width:73px; padding:5px 0px; text-align:center; float:left; position:relative;} -.rankList li p {width:100%; overflow:hidden; white-space:normal; text-overflow:ellipsis; color:#585858;} +.rankList li p {width:100%; overflow:hidden; white-space:normal; text-overflow:ellipsis; color:#585858;word-wrap: normal; word-break: normal;} .rankPortrait {border-radius:50%; width:35px; height:35px;} .numIntro {position:absolute; text-align:left; z-index:999; box-shadow:0px 2px 8px rgba(146, 153, 169, 0.5); border:1px solid #eaeaea; background-color:#ffffff; padding:3px 5px; left:15px; width:65px; color:#585858;} \ No newline at end of file diff --git a/spec/factories/course_contributor_scores.rb b/spec/factories/course_contributor_scores.rb new file mode 100644 index 000000000..2226a60d2 --- /dev/null +++ b/spec/factories/course_contributor_scores.rb @@ -0,0 +1,13 @@ +FactoryGirl.define do + factory :course_contributor_score do + course_id 1 +user_id 1 +message_num 1 +message_reply_num 1 +news_reply_num 1 +resource_num 1 +journal_num 1 +journal_reply_num 1 + end + +end diff --git a/spec/models/course_contributor_score_spec.rb b/spec/models/course_contributor_score_spec.rb new file mode 100644 index 000000000..bc3b3cb52 --- /dev/null +++ b/spec/models/course_contributor_score_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe CourseContributorScore, :type => :model do + pending "add some examples to (or delete) #{__FILE__}" +end