From b17d4840b11a789ad4614fa1a5995ffa581a4cd2 Mon Sep 17 00:00:00 2001 From: alan <547533434@qq.com> Date: Thu, 25 Dec 2014 10:23:59 +0800 Subject: [PATCH 01/46] =?UTF-8?q?=E3=80=8A=E4=BD=9C=E4=B8=9A=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E3=80=8B=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 | 22 +++++++++++----------- app/helpers/courses_helper.rb | 11 +++++++++-- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index ae6ad4ce3..1ec17e2cf 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -213,10 +213,10 @@ class CoursesController < ApplicationController q = "#{params[:name].strip}" #(redirect_to stores_url, :notice => l(:label_sumbit_empty);return) if params[:name].blank? if params[:incourse] - @results = searchmember_by_name(@@member_scores, q) + @results = searchmember_by_name(student_homework_score, q) elsif params[:ingroup] @group = CourseGroup.find(params[:search_group_id]) - @results = @results =searchgroupmember_by_name(@@member_scores, @group, q) + @results = @results =searchgroupmember_by_name(student_homework_score, @group, q) end @result_count = @results.count @@ -285,7 +285,7 @@ class CoursesController < ApplicationController member.course_group_id = group.id member.save @group = group - @members = searchStudent(@course) + @course_groups = @course.course_groups @membercount = @members.count search_group_members group @@ -298,7 +298,7 @@ class CoursesController < ApplicationController member.save @group = group @course_groups = @course.course_groups - @members = searchStudent(@course) + @membercount = @members.count search_group_members group end @@ -309,9 +309,9 @@ class CoursesController < ApplicationController @is_remote = true if params[:group_id] && params[:group_id] != "0" @group = CourseGroup.find(params[:group_id]) - @results = @@member_scores.find_all {|mem| mem.course_group_id == group.id} + @results = student_homework_score.find_all {|mem| mem.course_group_id == group.id} else - @results = @@member_scores + @results = student_homework_score end @@result = @results @@ -336,8 +336,8 @@ class CoursesController < ApplicationController @members = searchTeacherAndAssistant(@course) when '2' @subPage_title = l :label_student_list - @@member_scores = student_homework_score - @members = @@member_scores + @members = student_homework_score + # @member_scores = @@member_scores # @members = searchStudent_sort(@course, 'desc', @@member_scores) @membercount = @members.count @@ -886,8 +886,8 @@ class CoursesController < ApplicationController homework_scores = Member.find_by_sql("SELECT id, user_id,course_id, course_group_id,created_on,IFNULL(SUM(CASE WHEN t_score <> 0 AND t_score IS NOT NULL THEN t_score ELSE s_score END),0) as score FROM ( SELECT members.id as id, members.user_id AS user_id, members.course_id AS course_id, members.created_on as created_on,members.course_group_id AS course_group_id, - (SELECT AVG(seems_rateable_rates.stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id IN (3040,4762,4765)) AS t_score, - (SELECT AVG(seems_rateable_rates.stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id NOT IN (3040,4762,4765)) AS s_score + (SELECT AVG(seems_rateable_rates.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(seems_rateable_rates.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` , members WHERE members.course_id = #{@course.id} AND members.user_id NOT IN (#{teachers}) AND homework_attaches.bid_id IN (SELECT bid_id FROM homework_for_courses WHERE course_id = #{@course.id}) @@ -909,7 +909,7 @@ class CoursesController < ApplicationController @members = searchStudent(@course) @membercount = @members.count - @results = @@member_scores.find_all {|mem| mem.course_group_id == group.id} + @results = student_homework_score.find_all {|mem| mem.course_group_id == group.id} @@result = @results @results = paginateHelper @results end diff --git a/app/helpers/courses_helper.rb b/app/helpers/courses_helper.rb index a5ae7d760..096ce7ad8 100644 --- a/app/helpers/courses_helper.rb +++ b/app/helpers/courses_helper.rb @@ -194,19 +194,23 @@ module CoursesHelper def searchmember_by_name members, name #searchPeopleByRoles(project, StudentRoles) mems = [] - members.each do |m| + if name != "" + members.each do |m| username = m.user[:lastname].to_s + m.user[:firstname].to_s if(m.user[:login].to_s.include?(name) || m.user.user_extensions[:student_id].to_s.include?(name) || username.include?(name)) mems << m end - + end + else + mems = members end mems end def searchgroupmember_by_name members, name, group #searchPeopleByRoles(project, StudentRoles) mems = [] + if name != "" members.each do |m| if m.course_group_id == group.id username = m.user[:lastname].to_s + m.user[:firstname].to_s @@ -215,6 +219,9 @@ module CoursesHelper end end end + else + mems = members + end mems end def searchgroupstudent_by_name(group, project, name) From f549530744c2b02580495c5734867d81ff9fae48 Mon Sep 17 00:00:00 2001 From: sw <939547590@qq.com> Date: Thu, 25 Dec 2014 17:36:53 +0800 Subject: [PATCH 02/46] =?UTF-8?q?=E5=8F=96=E6=B6=88=E8=AF=BE=E7=A8=8B?= =?UTF-8?q?=E5=8A=A8=E6=80=81=E4=B8=AD=E6=8F=8F=E8=BF=B0=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E4=B8=BA=E6=9C=80=E5=A4=9A30=E4=B8=AA=E5=AD=97=E6=AF=8D?= =?UTF-8?q?=E6=88=96=E6=B1=89=E5=AD=97=E7=9A=84=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/courses/show.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/courses/show.html.erb b/app/views/courses/show.html.erb index 629cac072..9f0084019 100644 --- a/app/views/courses/show.html.erb +++ b/app/views/courses/show.html.erb @@ -35,7 +35,7 @@

- <%= h(truncate(strip_tags(e.event_description).gsub(/ /, ' '), length: 30, omission: '...')) %> + <%= e.event_description %>

From d2aef552e6bf24a56042f851da2717384000d859 Mon Sep 17 00:00:00 2001 From: alan <547533434@qq.com> Date: Fri, 26 Dec 2014 14:50:14 +0800 Subject: [PATCH 03/46] =?UTF-8?q?=E4=BC=98=E5=8C=96=E3=80=8A=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A=E8=AF=84=E5=88=86=E3=80=8B=20Signed-off-by:=20alan=20?= =?UTF-8?q?<547533434@qq.com>?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/application_controller.rb | 1 + app/controllers/courses_controller.rb | 18 ++--- app/views/courses/_member_list.html.erb | 4 +- data/member_score.sql | 97 +++++++++++++++++++++++ 4 files changed, 106 insertions(+), 14 deletions(-) create mode 100644 data/member_score.sql diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 54346c0cc..35e034603 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -759,6 +759,7 @@ class ApplicationController < ActionController::Base end end + #查找首页相关信息 def find_first_page @first_page = FirstPage.find_by_page_type('project') diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 2e28c793e..ffdd51762 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -216,7 +216,7 @@ class CoursesController < ApplicationController @results = searchmember_by_name(student_homework_score, q) elsif params[:ingroup] @group = CourseGroup.find(params[:search_group_id]) - @results = @results =searchgroupmember_by_name(student_homework_score, @group, q) + @results =searchgroupmember_by_name(student_homework_score, @group, q) end @result_count = @results.count @@ -881,17 +881,11 @@ class CoursesController < ApplicationController end def student_homework_score - teachers = find_course_teachers(@course) - homework_scores = Member.find_by_sql("SELECT id, user_id,course_id, course_group_id,created_on,IFNULL(SUM(CASE WHEN t_score <> 0 AND t_score IS NOT NULL THEN t_score ELSE s_score END),0) as score - FROM ( - SELECT members.id as id, members.user_id AS user_id, members.course_id AS course_id, members.created_on as created_on,members.course_group_id AS course_group_id, - (SELECT AVG(seems_rateable_rates.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(seems_rateable_rates.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` , members - WHERE members.course_id = #{@course.id} - AND members.user_id NOT IN (#{teachers}) AND homework_attaches.bid_id IN (SELECT bid_id FROM homework_for_courses WHERE course_id = #{@course.id}) - AND homework_attaches.user_id = members.user_id - ) AS table1 GROUP BY user_id ORDER BY score DESC") + #teachers = find_course_teachers(@course) + sql = ActiveRecord::Base.connection() + + homework_scores = Member.find_by_sql("call member_score(#{@course.id})") + sql.close() homework_scores end #获取课程的老师列表 diff --git a/app/views/courses/_member_list.html.erb b/app/views/courses/_member_list.html.erb index 9b3a0443d..860c86ba4 100644 --- a/app/views/courses/_member_list.html.erb +++ b/app/views/courses/_member_list.html.erb @@ -53,7 +53,7 @@ <% members.each do |member| %>
- <% next if member.new_record? %> + <%= member.user.nil? ? '' : (image_tag(url_to_avatar(member.user), :width => 40, :height => 40)) %> @@ -101,7 +101,7 @@
<% else %>

diff --git a/data/member_score.sql b/data/member_score.sql new file mode 100644 index 000000000..13858ccce --- /dev/null +++ b/data/member_score.sql @@ -0,0 +1,97 @@ + +DELIMITER $$ + +CREATE + /*[DEFINER = { user | CURRENT_USER }]*/ + PROCEDURE `member_score`(IN courseid INT) + /*LANGUAGE SQL + | [NOT] DETERMINISTIC + | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } + | SQL SECURITY { DEFINER | INVOKER } + | COMMENT 'string'*/ + BEGIN + + CREATE TEMPORARY TABLE IF NOT EXISTS course_teachers ( + id INT + + ); + TRUNCATE TABLE course_teachers; + + CREATE TEMPORARY TABLE IF NOT EXISTS mems ( + id INT , + user_id INT, + course_id INT, + created_on DATETIME, + course_group_id INT, + score FLOAT DEFAULT 0 + ); + TRUNCATE TABLE mems; + + CREATE TEMPORARY TABLE IF NOT EXISTS mem_home ( + id INT, + user_id INT, + course_id INT, + created_on DATETIME, + course_group_id INT, + home_id INT, + score FLOAT DEFAULT 0 + ); + TRUNCATE TABLE mem_home; + + CREATE TEMPORARY TABLE IF NOT EXISTS t_scores ( + + home_id INT, + score FLOAT + ); + TRUNCATE TABLE t_scores; + + CREATE TEMPORARY TABLE IF NOT EXISTS s_scores ( + + home_id INT, + score FLOAT + ); + TRUNCATE TABLE s_scores; + + CREATE TEMPORARY TABLE IF NOT EXISTS scores ( + + user_id INT, + score FLOAT + ); + TRUNCATE TABLE scores; + + INSERT INTO course_teachers (SELECT members.user_id FROM members WHERE members.user_id NOT IN (SELECT student_id FROM students_for_courses WHERE course_id = courseid)); + + #查出所有的学生 + + INSERT INTO mems (id, user_id, course_id, created_on, course_group_id) + (SELECT members.id, members.user_id, members.course_id, members.created_on, members.course_group_id + FROM members WHERE course_id = courseid AND members.user_id NOT IN (SELECT id FROM course_teachers)); + + # 查出所有的学生列表及其作业 + INSERT INTO mem_home (id, user_id, course_id, created_on, course_group_id,home_id) + (SELECT members.id, members.user_id, members.course_id, members.created_on, members.course_group_id, homework_attaches.id + FROM members, homework_attaches WHERE course_id = courseid + AND members.user_id = homework_attaches.user_id AND members.user_id NOT IN (SELECT id FROM course_teachers) + AND homework_attaches.bid_id IN (SELECT bid_id FROM homework_for_courses WHERE course_id = courseid )); + + INSERT INTO t_scores (home_id, score) (SELECT rateable_id,AVG(seems_rateable_rates.stars) + FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id IN (SELECT mem_home.home_id FROM mem_home) + AND rater_id IN (SELECT id FROM course_teachers) + GROUP BY rateable_id); + + INSERT INTO s_scores (home_id, score) (SELECT rateable_id,AVG(seems_rateable_rates.stars) + FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id IN (SELECT mem_home.home_id FROM mem_home) + AND rater_id NOT IN (SELECT id FROM course_teachers) + GROUP BY rateable_id) ; + + UPDATE mem_home, t_scores SET mem_home.score = t_scores.score WHERE mem_home.home_id = t_scores.home_id ; + + UPDATE mem_home, s_scores SET mem_home.score = s_scores.score WHERE mem_home.home_id = s_scores.home_id AND mem_home.score = 0; + + INSERT INTO scores (user_id, score) (SELECT user_id, SUM(score) FROM mem_home GROUP BY user_id); + UPDATE mems, scores SET mems.score = scores.score WHERE mems.user_id = scores.user_id; + + SELECT * FROM mems ORDER BY score DESC; + END$$ + +DELIMITER ; \ No newline at end of file From 68cadba317bf0f65019a177b0b14ca896c3e53ee Mon Sep 17 00:00:00 2001 From: z9hang Date: Fri, 26 Dec 2014 15:35:38 +0800 Subject: [PATCH 04/46] =?UTF-8?q?#1710=20=E6=B5=8B=E8=AF=95=E7=89=88--?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE--=E4=BD=9C=E5=93=81=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?=EF=BC=9A=E9=80=89=E6=8B=A9=E4=BB=BB=E6=84=8F=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E3=80=81=E6=96=87=E4=BB=B6=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=EF=BC=8C=E9=83=BD=E5=BC=B9=E5=87=BAerror=E7=9A=84=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E6=A1=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/files_controller.rb | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/app/controllers/files_controller.rb b/app/controllers/files_controller.rb index d87992ec8..56f760e13 100644 --- a/app/controllers/files_controller.rb +++ b/app/controllers/files_controller.rb @@ -395,16 +395,18 @@ class FilesController < ApplicationController render :layout => 'base_courses' } end + else + show_attachments @containers + @attachtype = params[:type].to_i + @contenttype = params[:contentType].to_s + + respond_to do |format| + format.js + format.html + end end - show_attachments @containers - @attachtype = params[:type].to_i - @contenttype = params[:contentType].to_s - respond_to do |format| - format.js - format.html - end end end From b79b08fa8f112c6a6e2b3c7f897fcda650f40807 Mon Sep 17 00:00:00 2001 From: alan <547533434@qq.com> Date: Fri, 26 Dec 2014 15:51:39 +0800 Subject: [PATCH 05/46] =?UTF-8?q?=E7=BC=96=E5=86=99=E3=80=8A=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A=E6=9F=A5=E8=AF=A2=E5=AD=98=E5=82=A8=E8=BF=87=E7=A8=8B?= =?UTF-8?q?=E3=80=8B=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 | 8 +- app/controllers/members_controller.rb | 4 +- .../20141226074532_select_member_score.rb | 197 +++++++++--------- db/schema.rb | 2 +- 4 files changed, 107 insertions(+), 104 deletions(-) rename data/member_score.sql => db/migrate/20141226074532_select_member_score.rb (59%) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index ffdd51762..d5ebb4c05 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -285,7 +285,7 @@ class CoursesController < ApplicationController member.course_group_id = group.id member.save @group = group - + @members = student_homework_score @course_groups = @course.course_groups @membercount = @members.count search_group_members group @@ -298,7 +298,7 @@ class CoursesController < ApplicationController member.save @group = group @course_groups = @course.course_groups - + @members = student_homework_score @membercount = @members.count search_group_members group end @@ -309,12 +309,12 @@ class CoursesController < ApplicationController @is_remote = true if params[:group_id] && params[:group_id] != "0" @group = CourseGroup.find(params[:group_id]) - @results = student_homework_score.find_all {|mem| mem.course_group_id == group.id} + @results = student_homework_score.find_all {|mem| mem.course_group_id == @group.id} else @results = student_homework_score end @@result = @results - + @members = searchStudent(@course) @membercount = @members.count @results = paginateHelper @results diff --git a/app/controllers/members_controller.rb b/app/controllers/members_controller.rb index 867c2a302..ce899eff5 100644 --- a/app/controllers/members_controller.rb +++ b/app/controllers/members_controller.rb @@ -129,7 +129,7 @@ class MembersController < ApplicationController member = Member.new(:role_ids => params[:membership][:role_ids], :user_id => user_id) role = Role.find_by_id(params[:membership][:role_ids]) # 这里的判断只能通过角色名,可以弄成常量 - if role.name == "学生" + if role.name == "学生" || role.name == "Student" StudentsForCourse.create(:student_id => user_id, :course_id =>@course.id) end members << member @@ -210,7 +210,7 @@ class MembersController < ApplicationController if (params[:membership][:role_ids]) role = Role.find(params[:membership][:role_ids][0]) # 这里的判断只能通过角色名,可以弄成常量 - if role.name == "学生" + if role.name == "学生" || role.name == "Student" StudentsForCourse.create(:student_id => @member.user_id, :course_id =>@course.id) else joined = StudentsForCourse.where('student_id = ? and course_id = ?', @member.user_id,@course.id) diff --git a/data/member_score.sql b/db/migrate/20141226074532_select_member_score.rb similarity index 59% rename from data/member_score.sql rename to db/migrate/20141226074532_select_member_score.rb index 13858ccce..2303c6235 100644 --- a/data/member_score.sql +++ b/db/migrate/20141226074532_select_member_score.rb @@ -1,97 +1,100 @@ - -DELIMITER $$ - -CREATE - /*[DEFINER = { user | CURRENT_USER }]*/ - PROCEDURE `member_score`(IN courseid INT) - /*LANGUAGE SQL - | [NOT] DETERMINISTIC - | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } - | SQL SECURITY { DEFINER | INVOKER } - | COMMENT 'string'*/ - BEGIN - - CREATE TEMPORARY TABLE IF NOT EXISTS course_teachers ( - id INT - - ); - TRUNCATE TABLE course_teachers; - - CREATE TEMPORARY TABLE IF NOT EXISTS mems ( - id INT , - user_id INT, - course_id INT, - created_on DATETIME, - course_group_id INT, - score FLOAT DEFAULT 0 - ); - TRUNCATE TABLE mems; - - CREATE TEMPORARY TABLE IF NOT EXISTS mem_home ( - id INT, - user_id INT, - course_id INT, - created_on DATETIME, - course_group_id INT, - home_id INT, - score FLOAT DEFAULT 0 - ); - TRUNCATE TABLE mem_home; - - CREATE TEMPORARY TABLE IF NOT EXISTS t_scores ( - - home_id INT, - score FLOAT - ); - TRUNCATE TABLE t_scores; - - CREATE TEMPORARY TABLE IF NOT EXISTS s_scores ( - - home_id INT, - score FLOAT - ); - TRUNCATE TABLE s_scores; - - CREATE TEMPORARY TABLE IF NOT EXISTS scores ( - - user_id INT, - score FLOAT - ); - TRUNCATE TABLE scores; - - INSERT INTO course_teachers (SELECT members.user_id FROM members WHERE members.user_id NOT IN (SELECT student_id FROM students_for_courses WHERE course_id = courseid)); - - #查出所有的学生 - - INSERT INTO mems (id, user_id, course_id, created_on, course_group_id) - (SELECT members.id, members.user_id, members.course_id, members.created_on, members.course_group_id - FROM members WHERE course_id = courseid AND members.user_id NOT IN (SELECT id FROM course_teachers)); - - # 查出所有的学生列表及其作业 - INSERT INTO mem_home (id, user_id, course_id, created_on, course_group_id,home_id) - (SELECT members.id, members.user_id, members.course_id, members.created_on, members.course_group_id, homework_attaches.id - FROM members, homework_attaches WHERE course_id = courseid - AND members.user_id = homework_attaches.user_id AND members.user_id NOT IN (SELECT id FROM course_teachers) - AND homework_attaches.bid_id IN (SELECT bid_id FROM homework_for_courses WHERE course_id = courseid )); - - INSERT INTO t_scores (home_id, score) (SELECT rateable_id,AVG(seems_rateable_rates.stars) - FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id IN (SELECT mem_home.home_id FROM mem_home) - AND rater_id IN (SELECT id FROM course_teachers) - GROUP BY rateable_id); - - INSERT INTO s_scores (home_id, score) (SELECT rateable_id,AVG(seems_rateable_rates.stars) - FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id IN (SELECT mem_home.home_id FROM mem_home) - AND rater_id NOT IN (SELECT id FROM course_teachers) - GROUP BY rateable_id) ; - - UPDATE mem_home, t_scores SET mem_home.score = t_scores.score WHERE mem_home.home_id = t_scores.home_id ; - - UPDATE mem_home, s_scores SET mem_home.score = s_scores.score WHERE mem_home.home_id = s_scores.home_id AND mem_home.score = 0; - - INSERT INTO scores (user_id, score) (SELECT user_id, SUM(score) FROM mem_home GROUP BY user_id); - UPDATE mems, scores SET mems.score = scores.score WHERE mems.user_id = scores.user_id; - - SELECT * FROM mems ORDER BY score DESC; - END$$ - -DELIMITER ; \ No newline at end of file +#encoding=UTF-8 +class SelectMemberScore < ActiveRecord::Migration + def up + sql = (" + +CREATE + + PROCEDURE `member_score`(IN courseid INT) + + BEGIN + + CREATE TEMPORARY TABLE IF NOT EXISTS course_teachers ( + id INT + + ); + TRUNCATE TABLE course_teachers; + + CREATE TEMPORARY TABLE IF NOT EXISTS mems ( + id INT , + user_id INT, + course_id INT, + created_on DATETIME, + course_group_id INT, + score FLOAT DEFAULT 0 + ); + TRUNCATE TABLE mems; + + CREATE TEMPORARY TABLE IF NOT EXISTS mem_home ( + id INT, + user_id INT, + course_id INT, + created_on DATETIME, + course_group_id INT, + home_id INT, + score FLOAT DEFAULT 0 + ); + TRUNCATE TABLE mem_home; + + CREATE TEMPORARY TABLE IF NOT EXISTS t_scores ( + + home_id INT, + score FLOAT + ); + TRUNCATE TABLE t_scores; + + CREATE TEMPORARY TABLE IF NOT EXISTS s_scores ( + + home_id INT, + score FLOAT + ); + TRUNCATE TABLE s_scores; + + CREATE TEMPORARY TABLE IF NOT EXISTS scores ( + + user_id INT, + score FLOAT + ); + TRUNCATE TABLE scores; + + INSERT INTO course_teachers (SELECT members.user_id FROM members WHERE members.user_id NOT IN (SELECT student_id FROM students_for_courses WHERE course_id = courseid)); + + + + INSERT INTO mems (id, user_id, course_id, created_on, course_group_id) + (SELECT members.id, members.user_id, members.course_id, members.created_on, members.course_group_id + FROM members WHERE course_id = courseid AND members.user_id NOT IN (SELECT id FROM course_teachers)); + + INSERT INTO mem_home (id, user_id, course_id, created_on, course_group_id,home_id) + (SELECT members.id, members.user_id, members.course_id, members.created_on, members.course_group_id, homework_attaches.id + FROM members, homework_attaches WHERE course_id = courseid + AND members.user_id = homework_attaches.user_id AND members.user_id NOT IN (SELECT id FROM course_teachers) + AND homework_attaches.bid_id IN (SELECT bid_id FROM homework_for_courses WHERE course_id = courseid )); + + INSERT INTO t_scores (home_id, score) (SELECT rateable_id,AVG(seems_rateable_rates.stars) + FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id IN (SELECT mem_home.home_id FROM mem_home) + AND rater_id IN (SELECT id FROM course_teachers) + GROUP BY rateable_id); + + INSERT INTO s_scores (home_id, score) (SELECT rateable_id,AVG(seems_rateable_rates.stars) + FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id IN (SELECT mem_home.home_id FROM mem_home) + AND rater_id NOT IN (SELECT id FROM course_teachers) + GROUP BY rateable_id) ; + + UPDATE mem_home, t_scores SET mem_home.score = t_scores.score WHERE mem_home.home_id = t_scores.home_id ; + + UPDATE mem_home, s_scores SET mem_home.score = s_scores.score WHERE mem_home.home_id = s_scores.home_id AND mem_home.score = 0; + + INSERT INTO scores (user_id, score) (SELECT user_id, SUM(score) FROM mem_home GROUP BY user_id); + UPDATE mems, scores SET mems.score = scores.score WHERE mems.user_id = scores.user_id; + + SELECT * FROM mems ORDER BY score DESC; + END; + + ") + execute(sql) + end + + def down + end +end diff --git a/db/schema.rb b/db/schema.rb index a75c6eb29..f850e759e 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 => 20141210070327) do +ActiveRecord::Schema.define(:version => 20141226074532) do create_table "activities", :force => true do |t| t.integer "act_id", :null => false From 329be27567837bca6e3d3e71ac0700ba34f47afb Mon Sep 17 00:00:00 2001 From: alan <547533434@qq.com> Date: Fri, 26 Dec 2014 17:31:01 +0800 Subject: [PATCH 06/46] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E3=80=8A=E5=88=86?= =?UTF-8?q?=E7=8F=AD=E6=9F=A5=E8=AF=A2=E3=80=8B=20Signed-off-by:=20alan=20?= =?UTF-8?q?<547533434@qq.com>?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/courses_controller.rb | 33 +++++++++++---------- app/views/courses/_member_list.html.erb | 6 ++-- app/views/courses/_searchmembers.html.erb | 11 +++++++ app/views/courses/member.html.erb | 16 ++-------- app/views/courses/searchgroupmembers.js.erb | 1 + 5 files changed, 36 insertions(+), 31 deletions(-) create mode 100644 app/views/courses/_searchmembers.html.erb diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index d5ebb4c05..61bce8b36 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -218,7 +218,7 @@ class CoursesController < ApplicationController @group = CourseGroup.find(params[:search_group_id]) @results =searchgroupmember_by_name(student_homework_score, @group, q) end - + @is_remote = true @result_count = @results.count @results = paginateHelper @results @@ -313,7 +313,7 @@ class CoursesController < ApplicationController else @results = student_homework_score end - @@result = @results + @members = searchStudent(@course) @membercount = @members.count @@ -328,6 +328,7 @@ class CoursesController < ApplicationController @teachers= searchTeacherAndAssistant(@course) @canShowCode = isCourseTeacher(User.current.id,@course) && params[:role] != '1' @role = params[:role] + @is_remote = false @course_groups = @course.course_groups if @course.course_groups @show_serch = params[:role] == '2' case params[:role] @@ -346,7 +347,7 @@ class CoursesController < ApplicationController @subPage_title = '' @members = @course.member_principals.includes(:roles, :principal).all.sort end - @@result = @members + @members = paginateHelper @members render :layout => 'base_courses' else @@ -356,19 +357,19 @@ class CoursesController < ApplicationController end def member_score_sort - @teachers= searchTeacherAndAssistant(@course) - @canShowCode = isCourseTeacher(User.current.id,@course) && params[:role] != '1' - @role = params[:role] - @course_groups = @course.course_groups if @course.course_groups - @show_serch = params[:role] == '2' - @subPage_title = l :label_student_list - @render_file = 'member_list' - - unless @@result.nil? - @results = @@result.reverse - @@result = @results - end - @results = paginateHelper @results + # @teachers= searchTeacherAndAssistant(@course) + # @canShowCode = isCourseTeacher(User.current.id,@course) && params[:role] != '1' + # @role = params[:role] + # @course_groups = @course.course_groups if @course.course_groups + # @show_serch = params[:role] == '2' + # @subPage_title = l :label_student_list + # @render_file = 'member_list' + # @results = params[:result] if params[:result] + # unless @result.nil? + # @results = @result.reverse + # + # end + # @results = paginateHelper @results end # 显示每个学生的作业评分详情 def show_member_score diff --git a/app/views/courses/_member_list.html.erb b/app/views/courses/_member_list.html.erb index 860c86ba4..7e6407aa5 100644 --- a/app/views/courses/_member_list.html.erb +++ b/app/views/courses/_member_list.html.erb @@ -3,9 +3,11 @@ var classname = document.getElementById(id).className if(classname == 'st_up') { document.getElementById(id).className = 'st_down' + } else document.getElementById(id).className = 'st_up' + }

@@ -34,7 +36,7 @@
<% else %>

diff --git a/app/views/courses/_searchmembers.html.erb b/app/views/courses/_searchmembers.html.erb new file mode 100644 index 000000000..426c52ca5 --- /dev/null +++ b/app/views/courses/_searchmembers.html.erb @@ -0,0 +1,11 @@ +<% if @subPage_title && @subPage_title == l(:label_student_list)%> + <%= form_tag( searchmembers_course_path(@course), method: 'get',:class => "f_l",:style => "margin-left: 5px; ",:remote=>true) do %> + <%= text_field_tag 'name', params[:name], name: "name", :class => 'f_1', :style => "height:15px; float: left;"%> + <% if @group %> + <%= hidden_field "search_group_id", params[:search_group_id],:value => "#{@group.id}", name: 'search_group_id' %> + <%= submit_tag l(:label_search_member), :name => "ingroup",:class => "f_2", :style => "float: left "%> + <% else %> + <%= submit_tag l(:label_search_member),:style => "float: left", :name => 'incourse',:onclick => "checkclass('group_name_0')",:class => "f_2"%> + <% end %> + <% end %> +<% end %> \ No newline at end of file diff --git a/app/views/courses/member.html.erb b/app/views/courses/member.html.erb index 91d8badcc..313e50748 100644 --- a/app/views/courses/member.html.erb +++ b/app/views/courses/member.html.erb @@ -57,20 +57,10 @@ <%= stylesheet_link_tag 'course_group', :media => 'all' %>

-
From fb398904b606b2f84a2975a4f3a11da4ad797eda Mon Sep 17 00:00:00 2001 From: alan <547533434@qq.com> Date: Mon, 29 Dec 2014 16:57:31 +0800 Subject: [PATCH 15/46] =?UTF-8?q?=E4=BC=98=E5=8C=96=E3=80=8A=E5=AD=A6?= =?UTF-8?q?=E7=94=9F=E5=88=97=E8=A1=A8=E3=80=8B=E5=88=86=E9=A1=B5=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=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/application_controller.rb | 12 +++ app/controllers/courses_controller.rb | 85 ++++++++------- app/views/courses/member.js.erb | 1 + db/migrate/20141229081716_pro_member_score.rb | 100 ++++++++++++++++++ db/schema.rb | 2 +- 5 files changed, 158 insertions(+), 42 deletions(-) create mode 100644 app/views/courses/member.js.erb create mode 100644 db/migrate/20141229081716_pro_member_score.rb diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 35e034603..2721c57c7 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -759,6 +759,18 @@ class ApplicationController < ActionController::Base end end + def paginateHelper_for_members obj, pre_size=10 + @obj_count = StudentsForCourse.find_by_sql("select count(id) as mem_count from students_for_courses where course_id = #{@course.id}")[0][:mem_count].to_s.to_i + @obj_pages = Paginator.new @obj_count, pre_size, params['page'] + if obj.kind_of? ActiveRecord::Base or obj.kind_of? ActiveRecord::Relation + obj.limit(@obj_pages.per_page).offset(0) + elsif obj.kind_of? Array + obj[0, @obj_pages.per_page] + else + logger.error "[ApplicationController] Error : application_controller#paginateHelper ===> unknow category: #{obj.class}" + raise RuntimeError, 'unknow type, Please input you type into this helper.' + end + end #查找首页相关信息 def find_first_page diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 61bce8b36..21199f6f9 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -23,7 +23,7 @@ class CoursesController < ApplicationController before_filter :require_login, :only => [:join, :unjoin] #before_filter :allow_join, :only => [:join] - @@result = nil + def join if User.current.logged? course = Course.find_by_id params[:object_id] @@ -213,10 +213,11 @@ class CoursesController < ApplicationController q = "#{params[:name].strip}" #(redirect_to stores_url, :notice => l(:label_sumbit_empty);return) if params[:name].blank? if params[:incourse] - @results = searchmember_by_name(student_homework_score, q) + @results = searchmember_by_name(student_homework_score(0,0,0), q) + elsif params[:ingroup] @group = CourseGroup.find(params[:search_group_id]) - @results =searchgroupmember_by_name(student_homework_score, @group, q) + @results = searchmember_by_name(student_homework_score(@group.id,0,0), q) end @is_remote = true @result_count = @results.count @@ -285,9 +286,9 @@ class CoursesController < ApplicationController member.course_group_id = group.id member.save @group = group - @members = student_homework_score + @course_groups = @course.course_groups - @membercount = @members.count + search_group_members group end def unjoin_group @@ -298,8 +299,7 @@ class CoursesController < ApplicationController member.save @group = group @course_groups = @course.course_groups - @members = student_homework_score - @membercount = @members.count + search_group_members group end def searchgroupmembers @@ -309,15 +309,19 @@ class CoursesController < ApplicationController @is_remote = true if params[:group_id] && params[:group_id] != "0" @group = CourseGroup.find(params[:group_id]) - @results = student_homework_score.find_all {|mem| mem.course_group_id == @group.id} + + @results = student_homework_score(@group.id,0, 0) + @results = paginateHelper @results, 10 + + else - @results = student_homework_score + page_from = params[:page].nil? ? 0 : (params[:page].to_i - 1) + @results = student_homework_score(0,page_from, 10) + @results = paginateHelper_for_members @results, 10 end - @members = searchStudent(@course) - @membercount = @members.count - @results = paginateHelper @results + end @@ -325,31 +329,36 @@ class CoursesController < ApplicationController ## 有角色参数的才是课程,没有的就是项目 if (User.current.admin? || @course.is_public == 1 || (@course.is_public == 0 && User.current.member_of_course?(@course))) @render_file = 'member_list' - @teachers= searchTeacherAndAssistant(@course) + @canShowCode = isCourseTeacher(User.current.id,@course) && params[:role] != '1' - @role = params[:role] - @is_remote = false + @role = params[:role].nil? ? '2':params[:role] + @is_remote = true @course_groups = @course.course_groups if @course.course_groups @show_serch = params[:role] == '2' - case params[:role] + case @role when '1' @subPage_title = l :label_teacher_list - @members = @teachers + @members = searchTeacherAndAssistant(@course) + @members = paginateHelper @members, 10 when '2' @subPage_title = l :label_student_list - @members = student_homework_score + page = params[:page].nil? ? 0 : (params['page'].to_i - 1) + @members = student_homework_score(0,page, 10) - # @member_scores = @@member_scores - # @members = searchStudent_sort(@course, 'desc', @@member_scores) - @membercount = @members.count + @members = paginateHelper_for_members @members, 10 + + end + respond_to do |format| + if params[:page] + format.js else - @subPage_title = '' - @members = @course.member_principals.includes(:roles, :principal).all.sort + format.html {render :layout => 'base_courses'} + end + end - @members = paginateHelper @members - render :layout => 'base_courses' + # render :layout => 'base_courses' else render_403 end @@ -378,17 +387,9 @@ class CoursesController < ApplicationController respond_to do |format| format.html {render :layout => 'course_base'} format.js - end - end - - #判断指定用户是否为课程教师 - def isCourseTeacher(id) - result = false - if @teachers.find_by_user_id(id) != nil - result = true end - result + end def handle_course courses, activities @@ -881,11 +882,13 @@ class CoursesController < ApplicationController end end - def student_homework_score + def student_homework_score(groupid,start_from, nums) #teachers = find_course_teachers(@course) + start_from = start_from * nums sql = ActiveRecord::Base.connection() + + homework_scores = Member.find_by_sql("call member_score(#{@course.id},#{groupid},#{start_from},#{nums})") - homework_scores = Member.find_by_sql("call member_score(#{@course.id})") sql.close() homework_scores end @@ -901,10 +904,10 @@ class CoursesController < ApplicationController @canShowCode = isCourseTeacher(User.current.id,@course) && params[:role] != '1' @is_remote = true - @members = searchStudent(@course) - @membercount = @members.count - @results = student_homework_score.find_all {|mem| mem.course_group_id == group.id} - @@result = @results - @results = paginateHelper @results + + page_from = params[:page].nil? ? 0 : (params[:page].to_i - 1) + @results = student_homework_score(group.id,0,0) + @results = paginateHelper @results, 10 + end end diff --git a/app/views/courses/member.js.erb b/app/views/courses/member.js.erb new file mode 100644 index 000000000..4d8c22de6 --- /dev/null +++ b/app/views/courses/member.js.erb @@ -0,0 +1 @@ +$("#member_content").html("<%= escape_javascript( render :partial => @render_file, :locals => {:members => @members})%>"); \ No newline at end of file diff --git a/db/migrate/20141229081716_pro_member_score.rb b/db/migrate/20141229081716_pro_member_score.rb new file mode 100644 index 000000000..ef262421e --- /dev/null +++ b/db/migrate/20141229081716_pro_member_score.rb @@ -0,0 +1,100 @@ +class ProMemberScore < ActiveRecord::Migration + def up + sql_delete = ("DROP PROCEDURE IF EXISTS `member_score`;") + sql = (" +CREATE PROCEDURE `member_score`(IN courseid INT, IN groupid INT,IN start_from INT, IN nums INT) +BEGIN + + CREATE TEMPORARY TABLE IF NOT EXISTS course_teachers ( + id INT + + ); + TRUNCATE TABLE course_teachers; + + CREATE TEMPORARY TABLE IF NOT EXISTS mems ( + id INT , + user_id INT, + course_id INT, + created_on DATETIME, + course_group_id INT, + score FLOAT DEFAULT 0 + ); + TRUNCATE TABLE mems; + + CREATE TEMPORARY TABLE IF NOT EXISTS mem_home ( + id INT, + user_id INT, + course_id INT, + created_on DATETIME, + course_group_id INT, + home_id INT, + score FLOAT DEFAULT 0 + ); + TRUNCATE TABLE mem_home; + + CREATE TEMPORARY TABLE IF NOT EXISTS t_scores ( + + home_id INT, + score FLOAT + ); + TRUNCATE TABLE t_scores; + + CREATE TEMPORARY TABLE IF NOT EXISTS s_scores ( + + home_id INT, + score FLOAT + ); + TRUNCATE TABLE s_scores; + + CREATE TEMPORARY TABLE IF NOT EXISTS scores ( + + user_id INT, + score FLOAT + ); + TRUNCATE TABLE scores; + + INSERT INTO course_teachers (SELECT members.user_id FROM members WHERE members.user_id NOT IN (SELECT student_id FROM students_for_courses WHERE course_id = courseid)); + + + + INSERT INTO mems (id, user_id, course_id, created_on, course_group_id) + (SELECT members.id, members.user_id, members.course_id, members.created_on, members.course_group_id + FROM members WHERE course_id = courseid AND members.user_id NOT IN (SELECT id FROM course_teachers)); + + INSERT INTO mem_home (id, user_id, course_id, created_on, course_group_id,home_id) + (SELECT members.id, members.user_id, members.course_id, members.created_on, members.course_group_id, homework_attaches.id + FROM members, homework_attaches WHERE course_id = courseid + AND members.user_id = homework_attaches.user_id AND members.user_id NOT IN (SELECT id FROM course_teachers) + AND homework_attaches.bid_id IN (SELECT bid_id FROM homework_for_courses WHERE course_id = courseid )); + + INSERT INTO t_scores (home_id, score) (SELECT rateable_id,AVG(seems_rateable_rates.stars) + FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id IN (SELECT mem_home.home_id FROM mem_home) + AND rater_id IN (SELECT id FROM course_teachers) + GROUP BY rateable_id); + + INSERT INTO s_scores (home_id, score) (SELECT rateable_id,AVG(seems_rateable_rates.stars) + FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id IN (SELECT mem_home.home_id FROM mem_home) + AND rater_id NOT IN (SELECT id FROM course_teachers) + GROUP BY rateable_id) ; + + UPDATE mem_home, t_scores SET mem_home.score = t_scores.score WHERE mem_home.home_id = t_scores.home_id ; + + UPDATE mem_home, s_scores SET mem_home.score = s_scores.score WHERE mem_home.home_id = s_scores.home_id AND mem_home.score = 0; + + INSERT INTO scores (user_id, score) (SELECT user_id, SUM(score) FROM mem_home GROUP BY user_id); + UPDATE mems, scores SET mems.score = scores.score WHERE mems.user_id = scores.user_id; + IF nums <> 0 THEN + SELECT * FROM mems ORDER BY score DESC LIMIT start_from, nums; + ELSE + SELECT * FROM mems WHERE course_group_id = groupid ORDER BY score DESC; + END IF; + END; + +") + execute(sql_delete) + execute(sql) + end + + def down + end +end diff --git a/db/schema.rb b/db/schema.rb index f850e759e..50fddceb4 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 => 20141226074532) do +ActiveRecord::Schema.define(:version => 20141229081716) do create_table "activities", :force => true do |t| t.integer "act_id", :null => false From 70083789cb82078c776b4f58745fad9a70fb203e Mon Sep 17 00:00:00 2001 From: sw <939547590@qq.com> Date: Mon, 29 Dec 2014 16:59:22 +0800 Subject: [PATCH 16/46] =?UTF-8?q?1.=E4=BF=AE=E5=A4=8D=E5=8C=BF=E8=AF=84?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E6=9F=A5=E8=AF=A2=E6=9C=89=E9=94=99=202.?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=BD=93=E8=BA=AB=E4=BB=BD=E6=94=B9=E5=8F=98?= =?UTF-8?q?=E6=97=B6=E4=BF=AE=E6=94=B9=E5=88=86=E6=95=B0=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=88=86=E6=95=B0=E4=B8=BA=E4=B9=8B=E5=89=8D=E8=BA=AB=E4=BB=BD?= =?UTF-8?q?=E7=9A=84=E8=AF=84=E5=88=86=EF=BC=8C=E4=BF=AE=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B9=8B=E5=89=8D=E8=BA=AB=E4=BB=BD=E7=9A=84?= =?UTF-8?q?=E8=AF=84=E5=88=86=E7=9A=84BUG=203.=E6=98=AF=E5=90=A6=E5=B7=B2?= =?UTF-8?q?=E7=BB=8F=E8=AF=84=E5=88=86=E5=88=A4=E6=96=AD=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=9C=A8=E5=BD=93=E5=89=8D=E8=A7=92=E8=89=B2=E4=B8=8B=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E5=B7=B2=E7=BB=8F=E8=AF=84=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/bids_controller.rb | 6 ++--- app/controllers/homework_attach_controller.rb | 22 +++++++++---------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/app/controllers/bids_controller.rb b/app/controllers/bids_controller.rb index eaeca0e46..e3b8b9a66 100644 --- a/app/controllers/bids_controller.rb +++ b/app/controllers/bids_controller.rb @@ -493,17 +493,17 @@ class BidsController < ApplicationController @homework = HomeworkAttach.new @is_teacher = is_course_teacher(User.current,@bid.courses.first) if @is_teacher - all_homework_list = HomeworkAttach.eager_load(:attachments,:user,:rate_averages).find_by_sql("SELECT * FROM (SELECT homework_attaches.*, + all_homework_list = HomeworkAttach.find_by_sql("SELECT * FROM (SELECT homework_attaches.*, (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 1) AS t_score, (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 0) AS s_score FROM homework_attaches WHERE bid_id = #{@bid.id} ORDER BY s_score DESC,created_at ASC) AS table1 WHERE table1.t_score IS NULL") @cur_type = 1 else - all_homework_list = HomeworkAttach.eager_load(:attachments,:user,:rate_averages).find_by_sql("SELECT homework_attaches.*, + all_homework_list = HomeworkAttach.find_by_sql("SELECT homework_attaches.*, (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 1) AS t_score, (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 0) AS s_score, - (SELECT stars FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id = #{User.current.id}) AS m_score + (SELECT stars FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id = #{User.current.id} AND is_teacher_score = #{@is_teacher ? 1 : 0}) AS m_score FROM homework_attaches INNER JOIN homework_evaluations ON homework_evaluations.homework_attach_id = homework_attaches.id WHERE homework_attaches.bid_id = #{@bid.id} AND homework_evaluations.user_id = #{User.current.id} ORDER BY s_score DESC") diff --git a/app/controllers/homework_attach_controller.rb b/app/controllers/homework_attach_controller.rb index fedc99030..9ca47afdd 100644 --- a/app/controllers/homework_attach_controller.rb +++ b/app/controllers/homework_attach_controller.rb @@ -86,7 +86,7 @@ class HomeworkAttachController < ApplicationController all_homework_list = HomeworkAttach.eager_load(:attachments,:user,:rate_averages).find_by_sql("SELECT homework_attaches.*, (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 1) AS t_score, (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 0) AS s_score, - (SELECT stars FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id = #{User.current.id}) AS m_score + (SELECT stars FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id = #{User.current.id} AND is_teacher_score = 0) AS m_score FROM homework_attaches INNER JOIN homework_evaluations ON homework_evaluations.homework_attach_id = homework_attaches.id WHERE homework_attaches.bid_id = #{@bid.id} AND homework_evaluations.user_id = #{User.current.id} ORDER BY m_score DESC") @@ -353,11 +353,11 @@ class HomeworkAttachController < ApplicationController # 作业打分列表 @stars_reates = @homework.rates(:quality) #我的评分 - @has_evaluation = @stars_reates.where("rater_id = #{User.current.id}").first + @is_teacher = is_course_teacher User.current,@course + @has_evaluation = @stars_reates.where("rater_id = #{User.current.id} and is_teacher_score=#{@is_teacher ? 1 : 0}").first @m_score = @has_evaluation.nil? ? 0 : @has_evaluation.stars @teacher_stars = @stars_reates.where("is_teacher_score = 1") #老师评分列表 @student_stars = @stars_reates.where("is_teacher_score = 0") #学生评分列表 - @is_teacher = is_course_teacher User.current,@course @is_anonymous_comments = @bid.comment_status == 1 && !@homework.users.include?(User.current) && @homework.user != User.current && !@is_teacher #判断是不是匿评(开启匿评,当前用户不是作业的创建者或者参与者,不是老师) jours = @homework.journals_for_messages.where("is_comprehensive_evaluation = 3 or is_comprehensive_evaluation is null").order("created_on DESC")#jours留言 is null条件用以兼容历史数据 @jour = paginateHelper jours,5 #留言 @@ -418,15 +418,15 @@ class HomeworkAttachController < ApplicationController @is_teacher,@is_anonymous_comments,@m_score = params[:is_teacher]=="true",params[:is_anonymous_comments]=="true",params[:stars_value] @cur_page,@cur_type = params[:cur_page] || 1,params[:cur_type] || 5 @homework = HomeworkAttach.find(params[:homework_id]) - + is_teacher = @is_teacher ? 1 : 0 #保存评分@homework.rate(@m_score.to_i,User.current.id,:quality, (@is_teacher ? 1 : 0)) if @m_score - if @homework.has_rated?(User.current, :quality) - rate = @homework.rates(:quality).where(:rater_id => User.current.id).first + rate = @homework.rates(:quality).where(:rater_id => User.current.id, :is_teacher_score => is_teacher).first + if rate rate.stars = @m_score rate.save! else - @homework.rates(:quality).new(:stars => @m_score, :rater_id => User.current.id, :is_teacher_score => (@is_teacher ? 1 : 0)).save! + @homework.rates(:quality).new(:stars => @m_score, :rater_id => User.current.id, :is_teacher_score => is_teacher).save! end end #保存评论 @@ -445,21 +445,21 @@ class HomeworkAttachController < ApplicationController @bid = @homework.bid get_not_batch_homework_list "s_socre","desc",@homework.bid_id elsif @cur_type == "2" #老师已批列表 - @result_homework = HomeworkAttach.eager_load(:attachments,:user,:rate_averages).find_by_sql("SELECT homework_attaches.*, + @result_homework = HomeworkAttach.find_by_sql("SELECT homework_attaches.*, (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 1 and stars IS NOT NULL) AS t_score, (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 0) AS s_score FROM homework_attaches WHERE id = #{@homework.id}").first elsif @cur_type == "3" #全部作业列表 - @result_homework = HomeworkAttach.eager_load(:attachments,:user,:rate_averages).find_by_sql("SELECT homework_attaches.*, + @result_homework = HomeworkAttach.find_by_sql("SELECT homework_attaches.*, (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 1) AS t_score, (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 0) AS s_score FROM homework_attaches WHERE id = #{@homework.id}").first elsif @cur_type == "4" #匿评作业列表 @is_student_batch_homework = true - @result_homework = HomeworkAttach.eager_load(:attachments,:user,:rate_averages).find_by_sql("SELECT homework_attaches.*, + @result_homework = HomeworkAttach.find_by_sql("SELECT homework_attaches.*, (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 1) AS t_score, (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 0) AS s_score, - (SELECT stars FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id = #{User.current.id}) AS m_score + (SELECT stars FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id = #{User.current.id} AND is_teacher_score = #{is_teacher}) AS m_score FROM homework_attaches WHERE homework_attaches.id = #{@homework.id}").first else #其他的不用管 From 3545a8b0bc356acd1268a94565284b4bd736da01 Mon Sep 17 00:00:00 2001 From: sw <939547590@qq.com> Date: Mon, 29 Dec 2014 17:34:07 +0800 Subject: [PATCH 17/46] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=AB=9E=E8=B5=9B?= =?UTF-8?q?=E8=AF=84=E5=88=86=E6=98=BE=E7=A4=BA=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/softapplications/show.html.erb | 95 +++++++++++++++++------- db/schema.rb | 2 +- 2 files changed, 71 insertions(+), 26 deletions(-) diff --git a/app/views/softapplications/show.html.erb b/app/views/softapplications/show.html.erb index 77cc6aa71..8dd82a62d 100644 --- a/app/views/softapplications/show.html.erb +++ b/app/views/softapplications/show.html.erb @@ -16,7 +16,8 @@ <%=l(:label_attendingcontestwork_belongs_type)%>: - <%= @softapplication.app_type_name %> + <%= @softapplication.app_type_name %> + <% contest = @softapplication.contests.first %> <%=l(:label_attendingcontestwork_belongs_contest)%>: @@ -35,23 +36,35 @@ - <%=l(:label_attendingcontestwork_download)%>: - <% options = {:author => true, :deletable => @softapplication.user.eql?(User.current)} %><%= render :partial => 'attachments/app_link', :locals => {:attachments => @app_items, :options => options} %> + <%=l(:label_attendingcontestwork_download)%>: + + + <% options = {:author => true, :deletable => @softapplication.user.eql?(User.current)} %> + <%= render :partial => 'attachments/app_link', :locals => {:attachments => @app_items, :options => options} %> - <%=l(:label_attendingcontestwork_developers)%>:<%= @softapplication.application_developers %> + + <%=l(:label_attendingcontestwork_developers)%>: + <%= @softapplication.application_developers %> + - <%=l(:label_attendingcontestwork_average_scores)%>: <%= rating_for @softapplication, :static => true, dimension: :quality, class: 'rateable div_inline' %> - <%=l(:label_attendingcontestwork_release_time)%>:<%=format_time @softapplication.created_at %> + + <%=l(:label_attendingcontestwork_average_scores)%>: + <%= rating_for @softapplication, :static => true, dimension: :quality, class: 'rateable div_inline' %> + + + <%=l(:label_attendingcontestwork_release_time)%>: + <%=format_time @softapplication.created_at %> + - <% if @softapplication.project %> - <%=l(:label_attendingcontestwork_deposit_project)%>: + <% if @softapplication.project %> + <%=l(:label_attendingcontestwork_deposit_project)%>: <%= link_to "#{@softapplication.project}", project_path(@softapplication.project) %> - <% end %> + <% end %> @@ -62,18 +75,28 @@
-
<%=l(:label_work_description)%>:
+
+ <%=l(:label_work_description)%>: +
-
<%= @softapplication.description %>
+
+ <%= @softapplication.description %> +
-
<%=l(:label_work_scores)%>:
+
+ + <%=l(:label_work_scores)%>: + +
-
<%=l(:label_work_scores_people)%>
+
+ <%=l(:label_work_scores_people)%> +
<% 100.step(20, -20) do |star| %>
@@ -87,15 +110,26 @@ <% end %>
-
-
<%=l(:label_final_scores)%>
-
<%= @softapplication.average(:quality).try(:avg).try(:round, 2).to_i.to_s %>分
-
<%= rating_for @softapplication, :static => true, dimension: :quality, class: 'rateable div_inline' %>
+
+
+ <%=l(:label_final_scores)%> +
+
+ <%= @softapplication.average(:quality).try(:avg).try(:round, 2).to_i.to_s %>分 +
+
+ <%= rating_for @softapplication, :static => true, dimension: :quality, class: 'rateable div_inline' %> +
-
<%=l(:label_rating_person_amount)%>
+
+ <%=l(:label_rating_person_amount)%> +
- <%= @softapplication.raters(:quality).count %>
+ + <%= @softapplication.raters(:quality).count %> + +
@@ -103,7 +137,9 @@
-
<%=l(:label_work_photo)%>:
+
+ <%=l(:label_work_photo)%>: +
@@ -111,8 +147,10 @@ <% @image_results.take(4).each do |attachment| %>
  • + + <%= attachment.filename.to_s -%> + +
  • <%= link_to_attachment_img attachment, :class => "soft-application", :download => "true"%> <% end %> @@ -125,11 +163,18 @@
    - <%=l(:label_work_comment)%>: + + <%=l(:label_work_comment)%>: +
    <% if (User.current.logged? and User.current.id != @softapplication.user_id) %> -
    <%=l(:label_work_rating)%>: <%= rating_for @softapplication, dimension: :quality, class: 'rateable div_inline' %> - (<%=l(:label_attendingcontestwork_sorting_intimation)%>)
    +
    + <%=l(:label_work_rating)%>: + <%= rating_for @softapplication, dimension: :quality, class: 'rateable div_inline' %> + ( + <%=l(:label_attendingcontestwork_sorting_intimation)%>) + +
    <% end %>
    diff --git a/db/schema.rb b/db/schema.rb index 5725d8221..fd8c8ee1a 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 => 20141229025925) do +ActiveRecord::Schema.define(:version => 20141229081716) do create_table "activities", :force => true do |t| t.integer "act_id", :null => false From 61e1f0fa528a72e636a2f1a768b5fdfc3d58f564 Mon Sep 17 00:00:00 2001 From: z9hang Date: Mon, 29 Dec 2014 17:44:39 +0800 Subject: [PATCH 18/46] =?UTF-8?q?=E5=AF=BC=E5=87=BA=E4=BD=9C=E5=93=81?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/homework_attach_controller.rb | 22 +++++++++++++++++++ app/views/bids/_homework_list.html.erb | 5 ----- .../homework_attach/_homeworks_list.html.erb | 6 +++++ 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/app/controllers/homework_attach_controller.rb b/app/controllers/homework_attach_controller.rb index 5c4542944..c2ba1654b 100644 --- a/app/controllers/homework_attach_controller.rb +++ b/app/controllers/homework_attach_controller.rb @@ -55,7 +55,29 @@ class HomeworkAttachController < ApplicationController @direction = direction == 'asc'? 'desc' : 'asc' respond_to do |format| format.js + format.csv { + send_data(homework_to_csv(all_homework_list), :type => 'text/csv; header=present', :filename => 'issues.csv') + } + end + end + + def homework_to_csv items + encoding = l(:general_csv_encoding) + columns = ["student_id","user_name","login","student_num","mail","work_name","teacher_score","ni_score","commit_time"] + + + export = FCSV.generate(:col_sep => l(:general_csv_separator)) do |csv| + # csv header fields + csv << columns.collect {|c| Redmine::CodesetUtil.from_utf8(c, encoding) } + # csv lines + items.each do |homework| + csv << [homework.user.id,Redmine::CodesetUtil.from_utf8(homework.user.lastname.to_s + homework.user.firstname.to_s, encoding),Redmine::CodesetUtil.from_utf8(homework.user.login, encoding), + Redmine::CodesetUtil.from_utf8(homework.user.user_extensions.student_id, encoding),Redmine::CodesetUtil.from_utf8(homework.user.mail, encoding),Redmine::CodesetUtil.from_utf8(homework.name, encoding), + Redmine::CodesetUtil.from_utf8((homework.t_score.nil? || (homework.t_score && homework.t_score.to_i == 0)) ? l(:label_without_score) : format("%.2f",homework.t_score), encoding), + Redmine::CodesetUtil.from_utf8( homework.s_score.nil? ? l(:label_without_score) : format("%.2f",homework.s_score), encoding),Redmine::CodesetUtil.from_utf8(format_time(homework.created_at), encoding)] + end end + export end #获取所有作业列表 diff --git a/app/views/bids/_homework_list.html.erb b/app/views/bids/_homework_list.html.erb index ea1f9b770..202a2ee91 100644 --- a/app/views/bids/_homework_list.html.erb +++ b/app/views/bids/_homework_list.html.erb @@ -62,11 +62,6 @@ :is_student_batch_homework => @is_student_batch_homework}%>
    - <% if @is_teacher %> - - <% end %>
    diff --git a/app/views/homework_attach/_homeworks_list.html.erb b/app/views/homework_attach/_homeworks_list.html.erb index 8ef696e0c..6ada00bb9 100644 --- a/app/views/homework_attach/_homeworks_list.html.erb +++ b/app/views/homework_attach/_homeworks_list.html.erb @@ -63,4 +63,10 @@ <%= anonymous_comment_notice(@bid, @bid.courses.first) %> + <% other_formats_links do |f| %> + <%= f.link_to 'CSV', :url => params %> + <% end %> + <% end %> From e39e801c617f58db31fea59379d8b361cc20e5d1 Mon Sep 17 00:00:00 2001 From: alan <547533434@qq.com> Date: Mon, 29 Dec 2014 20:46:27 +0800 Subject: [PATCH 19/46] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E3=80=8A=E5=AD=A6?= =?UTF-8?q?=E7=94=9F=E5=88=97=E8=A1=A8=E6=8C=89=E4=BD=9C=E4=B8=9A=E8=AF=84?= =?UTF-8?q?=E5=88=86=E6=8E=92=E5=BA=8F=E5=8A=9F=E8=83=BD=E3=80=8B=20Signed?= =?UTF-8?q?-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 | 44 ++++++++++++++-------- app/views/courses/_member_list.html.erb | 10 +++-- app/views/courses/member_score_sort.js.erb | 2 +- 3 files changed, 36 insertions(+), 20 deletions(-) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 21199f6f9..49cc40f10 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -210,14 +210,15 @@ class CoursesController < ApplicationController @render_file = 'member_list' @canShowCode = isCourseTeacher(User.current.id,@course) && params[:role] != '1' @is_remote = true + @score_sort_by = "desc" q = "#{params[:name].strip}" #(redirect_to stores_url, :notice => l(:label_sumbit_empty);return) if params[:name].blank? if params[:incourse] - @results = searchmember_by_name(student_homework_score(0,0,0), q) + @results = searchmember_by_name(student_homework_score(0,0,0,"desc"), q) elsif params[:ingroup] @group = CourseGroup.find(params[:search_group_id]) - @results = searchmember_by_name(student_homework_score(@group.id,0,0), q) + @results = searchmember_by_name(student_homework_score(@group.id,0,0,"desc"), q) end @is_remote = true @result_count = @results.count @@ -307,16 +308,17 @@ class CoursesController < ApplicationController @render_file = 'member_list' @canShowCode = isCourseTeacher(User.current.id,@course) && params[:role] != '1' @is_remote = true + @score_sort_by = "desc" if params[:group_id] && params[:group_id] != "0" @group = CourseGroup.find(params[:group_id]) - @results = student_homework_score(@group.id,0, 0) + @results = student_homework_score(@group.id,0, 0,"desc") @results = paginateHelper @results, 10 else page_from = params[:page].nil? ? 0 : (params[:page].to_i - 1) - @results = student_homework_score(0,page_from, 10) + @results = student_homework_score(0,page_from, 10,"") @results = paginateHelper_for_members @results, 10 end @@ -329,7 +331,7 @@ class CoursesController < ApplicationController ## 有角色参数的才是课程,没有的就是项目 if (User.current.admin? || @course.is_public == 1 || (@course.is_public == 0 && User.current.member_of_course?(@course))) @render_file = 'member_list' - + @score_sort_by = "desc" @canShowCode = isCourseTeacher(User.current.id,@course) && params[:role] != '1' @role = params[:role].nil? ? '2':params[:role] @is_remote = true @@ -343,7 +345,7 @@ class CoursesController < ApplicationController when '2' @subPage_title = l :label_student_list page = params[:page].nil? ? 0 : (params['page'].to_i - 1) - @members = student_homework_score(0,page, 10) + @members = student_homework_score(0,page, 10,"desc") @members = paginateHelper_for_members @members, 10 @@ -367,18 +369,31 @@ class CoursesController < ApplicationController def member_score_sort # @teachers= searchTeacherAndAssistant(@course) - # @canShowCode = isCourseTeacher(User.current.id,@course) && params[:role] != '1' + @canShowCode = isCourseTeacher(User.current.id,@course) && params[:role] != '1' # @role = params[:role] # @course_groups = @course.course_groups if @course.course_groups # @show_serch = params[:role] == '2' - # @subPage_title = l :label_student_list - # @render_file = 'member_list' + @subPage_title = l :label_student_list + @render_file = 'member_list' # @results = params[:result] if params[:result] # unless @result.nil? # @results = @result.reverse # # end - # @results = paginateHelper @results + # @results = paginateHelper @results@score_sort_by = "desc" + @is_remote = true + @score_sort_by = params[:sort_by] if params[:sort_by] + group_id = params[:group_id] + 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 = paginateHelper_for_members @results, 10 + else + @group = Group.find(group_id) + @results = student_homework_score(group_id, 0, 0,@score_sort_by) + @results = paginateHelper @results, 10 + end end # 显示每个学生的作业评分详情 def show_member_score @@ -882,12 +897,12 @@ class CoursesController < ApplicationController end end - def student_homework_score(groupid,start_from, nums) + def student_homework_score(groupid,start_from, nums, score_sort_by) #teachers = find_course_teachers(@course) start_from = start_from * nums sql = ActiveRecord::Base.connection() - homework_scores = Member.find_by_sql("call member_score(#{@course.id},#{groupid},#{start_from},#{nums})") + homework_scores = Member.find_by_sql("call member_score(#{@course.id},#{groupid},#{start_from},#{nums}, '#{score_sort_by}')") sql.close() homework_scores @@ -903,10 +918,9 @@ class CoursesController < ApplicationController @render_file = 'member_list' @canShowCode = isCourseTeacher(User.current.id,@course) && params[:role] != '1' @is_remote = true - - + @score_sort_by = "desc" page_from = params[:page].nil? ? 0 : (params[:page].to_i - 1) - @results = student_homework_score(group.id,0,0) + @results = student_homework_score(group.id,0,0, "desc") @results = paginateHelper @results, 10 end diff --git a/app/views/courses/_member_list.html.erb b/app/views/courses/_member_list.html.erb index 7e6407aa5..295db933a 100644 --- a/app/views/courses/_member_list.html.erb +++ b/app/views/courses/_member_list.html.erb @@ -1,13 +1,15 @@ +
    @@ -36,7 +38,7 @@