diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 403119e20..45a3f981b 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -184,14 +184,24 @@ class CoursesController < ApplicationController if params[:incourse] 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,"desc"), q) + if params[:search_group_id] == "-1" + @group = -1 + results = searchmember_by_name(student_homework_score(-1,0,0,"desc"), q) + else + @group = CourseGroup.find(params[:search_group_id]) + results = searchmember_by_name(student_homework_score(@group.id,0,0,"desc"), q) + end end @is_remote = true #@result_count = results.count #@results = paginateHelper results, 10 @results = results @search_name = q + @limit = 50 + @page = params[:page].nil? ? 1 : params['page'].to_i + @members_count = @results.count + @mem_pages = Paginator.new @members_count, @limit, @page + @results = paginateHelper @results, @limit end def addgroups @@ -208,6 +218,12 @@ class CoursesController < ApplicationController @is_remote = true @members = student_homework_score(0,0, 10,@score_sort_by) @course_groups = @course.course_groups + @limit = 50 + @page = params[:page].nil? ? 1 : params['page'].to_i + @members_count = @members.count + @no_group_count = @members_count - @course.members.where("course_group_id != 0").count + @mem_pages = Paginator.new @members_count, @limit, @page + @members = paginateHelper @members, @limit end def deletegroup @@ -219,6 +235,12 @@ class CoursesController < ApplicationController @score_sort_by = "desc" @members = student_homework_score(0,0, 10,@score_sort_by) @course_groups = @course.course_groups + @limit = 50 + @page = params[:page].nil? ? 1 : params['page'].to_i + @members_count = @members.count + @no_group_count = @members_count - @course.members.where("course_group_id != 0").count + @mem_pages = Paginator.new @members_count, @limit, @page + @members = paginateHelper @members, @limit end def updategroupname @@ -232,6 +254,12 @@ class CoursesController < ApplicationController @is_remote = true @members = student_homework_score(0,0, 10,"desc") @course_groups = @course.course_groups + @limit = 50 + @page = params[:page].nil? ? 1 : params['page'].to_i + @members_count = @members.count + @no_group_count = @members_count - @course.members.where("course_group_id != 0").count + @mem_pages = Paginator.new @members_count, @limit, @page + @members = paginateHelper @members, @limit end def valid_ajax @@ -268,6 +296,7 @@ class CoursesController < ApplicationController member.course_group_id = params[:course_group_id].to_i member.save @course_groups = @course.course_groups + @no_group_count = @course.student.count - @course.members.where("course_group_id != 0").count @canShowCode = isCourseTeacher(User.current.id,@course) && params[:role] != '1' respond_to do |format| format.js @@ -283,6 +312,7 @@ class CoursesController < ApplicationController @group = group @course_groups = @course.course_groups + @no_group_count = @course.student.count - @course.members.where("course_group_id != 0").count search_group_members group end @@ -294,6 +324,7 @@ class CoursesController < ApplicationController member.save @group = group @course_groups = @course.course_groups + @no_group_count = @course.student.count - @course.members.where("course_group_id != 0").count search_group_members group end @@ -304,14 +335,22 @@ class CoursesController < ApplicationController @is_remote = true @sort_type = 'score' @score_sort_by = "desc" - if params[:group_id] && params[:group_id] != "0" + if params[:group_id] && params[:group_id] != "0" && params[:group_id] != "-1" @group = CourseGroup.find(params[:group_id]) @results = student_homework_score(@group.id,0, 0,"desc") # @results = paginateHelper @results, 10 + elsif params[:group_id] && params[:group_id] == "-1" + @group = -1 + @results = student_homework_score(-1, 0, 10,"desc") else page_from = params[:page].nil? ? 0 : (params[:page].to_i - 1) @results = student_homework_score(0,page_from, 10,"desc") end + @limit = 50 + @page = params[:page].nil? ? 1 : params['page'].to_i + @members_count = @results.count + @mem_pages = Paginator.new @members_count, @limit, @page + @results = paginateHelper @results, @limit end def member @@ -332,10 +371,15 @@ class CoursesController < ApplicationController @members = @all_members when '2' if @course.open_student == 1 || User.current.member_of_course?(@course) || User.current.admin? + @limit = 50 @subPage_title = l :label_student_list - page = params[:page].nil? ? 0 : (params['page'].to_i - 1) - @all_members = student_homework_score(0,page, 10,@score_sort_by,@sort_type) - @members = @all_members + @page = params[:page].nil? ? 1 : params['page'].to_i + @all_members = student_homework_score(0, @page - 1, @limit, @score_sort_by, @sort_type) + @members_count = @all_members.count + @no_group_count = @members_count - @course.members.where("course_group_id != 0").count + @mem_pages = Paginator.new @members_count, @limit, @page + @members = paginateHelper @all_members, @limit + @left_nav_type = 9 else render_403 return @@ -378,25 +422,35 @@ class CoursesController < ApplicationController group_id = params[:group_id] if !@search_name.nil? if group_id == '0' - page = params[:page].nil? ? 0 : (params['page'].to_i - 1) + #page = params[:page].nil? ? 0 : (params['page'].to_i - 1) @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 + elsif group_id == '-1' + @group = -1 + @results = searchmember_by_name(student_homework_score(-1,0,0,@score_sort_by,@sort_type), @search_name) else @group = CourseGroup.find(group_id) @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,@sort_type) + elsif group_id == '-1' + @group = -1 + @results = student_homework_score(-1,0, 10,@score_sort_by,@sort_type) else @group = CourseGroup.find(group_id) @results = student_homework_score(group_id, 0, 0,@score_sort_by,@sort_type) end end + @limit = 50 + @page = params[:page].nil? ? 1 : params['page'].to_i + @members_count = @results.count + @no_group_count = @members_count - @course.members.where("course_group_id != 0").count + @mem_pages = Paginator.new @members_count, @limit, @page + @results = paginateHelper @results, @limit end # 显示每个学生的作业评分详情 def show_member_score @@ -1149,7 +1203,7 @@ class CoursesController < ApplicationController #统计 def statistics_course - @left_nav_type = 9 + @left_nav_type = 10 respond_to do |format| format.html {render :layout => 'base_courses'} end @@ -1223,7 +1277,6 @@ class CoursesController < ApplicationController def student_homework_score(groupid,start_from, nums, score_sort_by, sort_type = 'score') start_from = start_from * nums - sql_select = "" if groupid == 0 sql_select = "SELECT members.*,( SELECT SUM(student_works.work_score) @@ -1231,13 +1284,49 @@ 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,(SELECT (message_num*2 + message_reply_num*1 + news_reply_num*1 + news_num*1 + + ) AS score,(SELECT max(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 = #{@course.id} AND ccs.user_id = members.user_id - ) AS act_score + ) AS act_score,(SELECT SUM(exercise_users.score) FROM exercise_users,exercises WHERE exercise_users.exercise_id = exercises.id + AND exercises.course_id = #{@course.id} AND exercise_users.user_id = members.user_id) AS ex_score, + (SELECT max(student_id) FROM user_extensions WHERE user_extensions.user_id = members.user_id) AS student_id, + (SELECT max(message_num) FROM course_contributor_scores AS ccs WHERE ccs.course_id = #{@course.id} AND ccs.user_id = members.user_id) AS message_num, + (SELECT max(message_reply_num) FROM course_contributor_scores AS ccs WHERE ccs.course_id = #{@course.id} AND ccs.user_id = members.user_id) AS message_reply_num, + (SELECT max(news_reply_num) FROM course_contributor_scores AS ccs WHERE ccs.course_id = #{@course.id} AND ccs.user_id = members.user_id) AS news_reply_num, + (SELECT max(news_num) FROM course_contributor_scores AS ccs WHERE ccs.course_id = #{@course.id} AND ccs.user_id = members.user_id) AS news_num, + (SELECT max(resource_num) FROM course_contributor_scores AS ccs WHERE ccs.course_id = #{@course.id} AND ccs.user_id = members.user_id) AS resource_num, + (SELECT max(journal_num) FROM course_contributor_scores AS ccs WHERE ccs.course_id = #{@course.id} AND ccs.user_id = members.user_id) AS journal_num, + (SELECT max(homework_journal_num) FROM course_contributor_scores AS ccs WHERE ccs.course_id = #{@course.id} AND ccs.user_id = members.user_id) AS homework_journal_num, + (SELECT COUNT(ss.id) FROM student_works AS ss ,homework_commons AS hc WHERE ss.homework_common_id = hc.id AND hc.course_id = #{@course.id} AND ss.work_status != 0 AND ss.user_id = members.user_id) AS homework_num, + (SELECT COUNT(eu.id) FROM exercise_users AS eu,exercises WHERE eu.exercise_id = exercises.id AND exercises.course_id = #{@course.id} AND exercises.end_time >= eu.created_at AND eu.user_id = members.user_id) AS exercise_num 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 #{sort_type} #{score_sort_by}" + elsif groupid == -1 + sql_select = "SELECT members.*,( + SELECT SUM(student_works.work_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,(SELECT max(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 = #{@course.id} AND ccs.user_id = members.user_id + ) AS act_score,(SELECT SUM(exercise_users.score) FROM exercise_users,exercises WHERE exercise_users.exercise_id = exercises.id + AND exercises.course_id = #{@course.id} AND exercise_users.user_id = members.user_id) AS ex_score, + (SELECT max(student_id) FROM user_extensions WHERE user_extensions.user_id = members.user_id) AS student_id, + (SELECT max(message_num) FROM course_contributor_scores AS ccs WHERE ccs.course_id = #{@course.id} AND ccs.user_id = members.user_id) AS message_num, + (SELECT max(message_reply_num) FROM course_contributor_scores AS ccs WHERE ccs.course_id = #{@course.id} AND ccs.user_id = members.user_id) AS message_reply_num, + (SELECT max(news_reply_num) FROM course_contributor_scores AS ccs WHERE ccs.course_id = #{@course.id} AND ccs.user_id = members.user_id) AS news_reply_num, + (SELECT max(news_num) FROM course_contributor_scores AS ccs WHERE ccs.course_id = #{@course.id} AND ccs.user_id = members.user_id) AS news_num, + (SELECT max(resource_num) FROM course_contributor_scores AS ccs WHERE ccs.course_id = #{@course.id} AND ccs.user_id = members.user_id) AS resource_num, + (SELECT max(journal_num) FROM course_contributor_scores AS ccs WHERE ccs.course_id = #{@course.id} AND ccs.user_id = members.user_id) AS journal_num, + (SELECT max(homework_journal_num) FROM course_contributor_scores AS ccs WHERE ccs.course_id = #{@course.id} AND ccs.user_id = members.user_id) AS homework_journal_num, + (SELECT COUNT(ss.id) FROM student_works AS ss ,homework_commons AS hc WHERE ss.homework_common_id = hc.id AND hc.course_id = #{@course.id} AND ss.work_status != 0 AND ss.user_id = members.user_id) AS homework_num, + (SELECT COUNT(eu.id) FROM exercise_users AS eu,exercises WHERE eu.exercise_id = exercises.id AND exercises.course_id = #{@course.id} AND exercises.end_time >= eu.created_at AND eu.user_id = members.user_id) AS exercise_num + 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 = 0 ORDER BY #{sort_type} #{score_sort_by}" else sql_select = "SELECT members.*,( SELECT SUM(student_works.work_score) @@ -1247,7 +1336,18 @@ class CoursesController < ApplicationController AND student_works.user_id = members.user_id ) 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 = #{@course.id} AND ccs.user_id = members.user_id - ) AS act_score + ) AS act_score,(SELECT SUM(exercise_users.score) FROM exercise_users,exercises WHERE exercise_users.exercise_id = exercises.id + AND exercises.course_id = #{@course.id} AND exercise_users.user_id = members.user_id) AS ex_score, + (SELECT max(student_id) FROM user_extensions WHERE user_extensions.user_id = members.user_id) AS student_id, + (SELECT max(message_num) FROM course_contributor_scores AS ccs WHERE ccs.course_id = #{@course.id} AND ccs.user_id = members.user_id) AS message_num, + (SELECT max(message_reply_num) FROM course_contributor_scores AS ccs WHERE ccs.course_id = #{@course.id} AND ccs.user_id = members.user_id) AS message_reply_num, + (SELECT max(news_reply_num) FROM course_contributor_scores AS ccs WHERE ccs.course_id = #{@course.id} AND ccs.user_id = members.user_id) AS news_reply_num, + (SELECT max(news_num) FROM course_contributor_scores AS ccs WHERE ccs.course_id = #{@course.id} AND ccs.user_id = members.user_id) AS news_num, + (SELECT max(resource_num) FROM course_contributor_scores AS ccs WHERE ccs.course_id = #{@course.id} AND ccs.user_id = members.user_id) AS resource_num, + (SELECT max(journal_num) FROM course_contributor_scores AS ccs WHERE ccs.course_id = #{@course.id} AND ccs.user_id = members.user_id) AS journal_num, + (SELECT max(homework_journal_num) FROM course_contributor_scores AS ccs WHERE ccs.course_id = #{@course.id} AND ccs.user_id = members.user_id) AS homework_journal_num, + (SELECT COUNT(ss.id) FROM student_works AS ss ,homework_commons AS hc WHERE ss.homework_common_id = hc.id AND hc.course_id = #{@course.id} AND ss.work_status != 0 AND ss.user_id = members.user_id) AS homework_num, + (SELECT COUNT(eu.id) FROM exercise_users AS eu,exercises WHERE eu.exercise_id = exercises.id AND exercises.course_id = #{@course.id} AND exercises.end_time >= eu.created_at AND eu.user_id = members.user_id) AS exercise_num FROM members JOIN students_for_courses ON students_for_courses.student_id = members.user_id AND students_for_courses.course_id = members.course_id @@ -1284,25 +1384,32 @@ class CoursesController < ApplicationController #sheet1.row(0).default_format = blue #sheet1.row(0).concat([l(:excel_user_id),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_mail),l(:excel_class),l(:excel_f_score),l(:excel_commit_time)]) sheet1[0,0] = "课程编号" - sheet1[0,1] = course.id - sheet1[1,0] = "课程学期" - sheet1[1,1] = course.time.to_s+"年"+course.term - sheet1[2,0] = "课程名称" - sheet1[2,1] = course.name - sheet1[3,0] = "教师团队" - sheet1[3,1] = (searchTeacherAndAssistant course).map{|member| member.user.show_name}.join('、') - sheet1[4,0] = "主讲教师" - sheet1[4,1] = course.teacher.show_name - sheet1[5,0] = "排名" - sheet1[5,1] = "学生姓名" - sheet1[5,2] = "昵称" - sheet1[5,3] = "学号" + sheet1[0,1] = course.syllabus.id + sheet1[1,0] = "课程名称" + sheet1[1,1] = course.syllabus.title + sheet1[2,0] = "班级编号" + sheet1[2,1] = course.id + sheet1[3,0] = "班级学期" + sheet1[3,1] = course.time.to_s+"年"+course.term + sheet1[4,0] = "班级名称" + sheet1[4,1] = course.name + sheet1[5,0] = "教师团队" + sheet1[5,1] = (searchTeacherAndAssistant course).map{|member| member.user.show_name}.join('、') + sheet1[6,0] = "主讲教师" + sheet1[6,1] = course.teacher.show_name + sheet1[7,0] = "排名" + sheet1[7,1] = "学生姓名" + sheet1[7,2] = "昵称" + sheet1[7,3] = "学号" for i in 0 ... homeworks.count - sheet1[5,i+4] = "第"+(i+1).to_s+"次" - end - sheet1[5,homeworks.count+4] = "总成绩" - sheet1[5,homeworks.count+5] = "活跃度" - count_row = 6 + sheet1[7,i+4] = "第"+(i+1).to_s+"次" + end + sheet1[7,homeworks.count+4] = "作业得分" + sheet1[7,homeworks.count+5] = "测评得分" + sheet1[7,homeworks.count+6] = "社区得分" + sheet1[7,homeworks.count+7] = "总得分" + sheet1[7,homeworks.count+8] = "分班" + count_row = 8 members.each_with_index do |member, i| sheet1[count_row,0]= i+1 sheet1[count_row,1] = member.user.lastname.to_s + member.user.firstname.to_s @@ -1318,36 +1425,47 @@ class CoursesController < ApplicationController sheet1[count_row,j+4] = score <0 ? 0:score.round(2) end end - 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 + hw_score = member.score.nil? ? 0 : member.score + ex_score = member.ex_score.nil? ? 0 : member.ex_score + act_score = member.act_score.nil? ? 0 : member.act_score + sum = hw_score + ex_score + act_score + sheet1[count_row,homeworks.count+4] = hw_score.round(2) + sheet1[count_row,homeworks.count+5] = ex_score + sheet1[count_row,homeworks.count+6] = act_score + sheet1[count_row,homeworks.count+7] = sum.round(2) + sheet1[count_row,homeworks.count+8] = member.course_group_id == 0 ? "暂无" : member.course_group.name count_row += 1 end homeworks.each_with_index do |home, i| sheet = book.create_worksheet :name => "第#{i+1}次作业" sheet[0,0] = "课程编号" - sheet[0,1] = course.id - sheet[1,0] = "课程学期" - sheet[1,1] = course.time.to_s+"年"+course.term - sheet[2,0] = "课程名称" - sheet[2,1] = course.name - sheet[3,0] = "教师团队" - sheet[3,1] = (searchTeacherAndAssistant course).map{|member| member.user.show_name}.join('、') - sheet[4,0] = "主讲教师" - sheet[4,1] = course.teacher.show_name - sheet[4,0] = "作业批次" - sheet[4,1] = "第#{i+1}次作业" - sheet[4,0] = "作业名称" - sheet[4,1] = home.name + sheet[0,1] = course.syllabus.id + sheet[1,0] = "课程名称" + sheet[1,1] = course.syllabus.title + sheet[2,0] = "班级编号" + sheet[2,1] = course.id + sheet[3,0] = "班级学期" + sheet[3,1] = course.time.to_s+"年"+course.term + sheet[4,0] = "班级名称" + sheet[4,1] = course.name + sheet[5,0] = "教师团队" + sheet[5,1] = (searchTeacherAndAssistant course).map{|member| member.user.show_name}.join('、') + sheet[6,0] = "主讲教师" + sheet[6,1] = course.teacher.show_name + sheet[6,0] = "作业批次" + sheet[6,1] = "第#{i+1}次作业" + sheet[6,0] = "作业名称" + sheet[6,1] = home.name if home.homework_type == 1 #普通作业 if home.anonymous_comment ==0 - sheet.row(5).concat([l(:excel_rank),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_homework_name),l(:excel_homework_des), + sheet.row(7).concat([l(:excel_rank),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_homework_name),l(:excel_homework_des), l(:excel_t_score),l(:excel_ta_score), l(:excel_n_score),l(:excel_a_penalty),l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)]) else - sheet.row(5).concat([l(:excel_rank),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_homework_name),l(:excel_homework_des), + sheet.row(7).concat([l(:excel_rank),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_homework_name),l(:excel_homework_des), l(:excel_t_score),l(:excel_ta_score),l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)]) end - count_row = 6 + count_row = 8 items = home.student_works.order("work_score desc") items.each_with_index do |stu, j| sheet[count_row,0]= j + 1 @@ -1373,13 +1491,13 @@ class CoursesController < ApplicationController end elsif home.homework_type == 2 #编程作业 if home.anonymous_comment ==0 - sheet.row(5).concat([l(:excel_rank),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_homework_name),l(:excel_homework_des), + sheet.row(7).concat([l(:excel_rank),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_homework_name),l(:excel_homework_des), l(:excel_t_score),l(:excel_ta_score), l(:excel_s_score),l(:excel_n_score),l(:excel_a_penalty),l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)]) else - sheet.row(5).concat([l(:excel_rank),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_homework_name),l(:excel_homework_des), + sheet.row(7).concat([l(:excel_rank),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_homework_name),l(:excel_homework_des), l(:excel_t_score),l(:excel_ta_score), l(:excel_s_score),l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)]) end - count_row = 6 + count_row = 8 items = home.student_works.order("work_score desc") items.each_with_index do |stu, j| sheet[count_row,0]= j + 1 @@ -1406,13 +1524,13 @@ class CoursesController < ApplicationController end elsif home.homework_type == 3 #分组作业 if home.anonymous_comment ==0 - sheet.row(5).concat([l(:excel_rank),l(:excel_group_member),l(:excel_homework_name),l(:excel_homework_project),l(:excel_homework_des), + sheet.row(7).concat([l(:excel_rank),l(:excel_group_member),l(:excel_homework_name),l(:excel_homework_project),l(:excel_homework_des), l(:excel_t_score),l(:excel_ta_score),l(:excel_n_score),l(:excel_a_penalty),l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)]) else - sheet.row(5).concat([l(:excel_rank),l(:excel_group_member),l(:excel_homework_name),l(:excel_homework_project),l(:excel_homework_des), + sheet.row(7).concat([l(:excel_rank),l(:excel_group_member),l(:excel_homework_name),l(:excel_homework_project),l(:excel_homework_des), l(:excel_t_score),l(:excel_ta_score),l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)]) end - count_row = 6 + count_row = 8 items = home.student_works.order("work_score desc") items.each_with_index do |stu, j| sheet[count_row,0] = j + 1 diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 263155f91..0940dbdf8 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -58,27 +58,26 @@ class IssuesController < ApplicationController include ApplicationHelper def index + # 为了性能所有用了两种模式,issue的@query查询所有的没有优势 + # 但是对过滤条件很有有时 if params[:set_filter] != "1" @project_base_tag = (params[:project_id] || @issue.project) ? 'base_projects':'base' - @issues_filter = Issue.where(:project_id => @project.id).order('updated_on desc') + if User.current.member_of?(@project) + @issues_filter = Issue.where(:project_id => @project.id).order('updated_on desc') + else + @issues_filter = Issue.where(:project_id => @project.id, :is_private => 0).order('updated_on desc') + end + open_and_close_num(@project) @issue_count = @issues_filter.count @limit = 10 @is_remote = true @issue_pages = Paginator.new @issue_count, @limit, params['page'] || 1 @offset ||= @issue_pages.offset @issues = paginateHelper @issues_filter, @limit - # if params[:set_filter] - # @set_filter = params[:set_filter] - # end - # @issue_count_by_group = @query.issue_count_by_group respond_to do |format| format.js format.html { render :template => 'issues/index', :layout => @project_base_tag }#by young format.api {Issue.load_visible_relations(@issues) if include_in_api_response?('relations')} - # format.json { render :json => @issues.map { |issue| issue.to_json}} #:json => @issues.map { |issue| issue.to_json} - # format.atom { render_feed(@issues, :title => "#{@project || Setting.app_title}: #{l(:label_issue_plural)}") } - # format.csv { send_data(query_to_csv(@issues, @query, params), :type => 'text/csv; header=present', :filename => 'issues.csv') } - # format.pdf { send_data(issues_to_pdf(@issues, @project, @query), :type => 'application/pdf', :filename => 'issues.pdf') } format.xls {filename = "#{@project.name.to_s}_#{l(:label_issue_list_xls)}.xls" send_data(issue_list_xls(@issues_filter), :type => 'application/octet-stream', :filename => filename_for_content_disposition(filename)) } @@ -88,20 +87,8 @@ class IssuesController < ApplicationController sort_init(@query.sort_criteria.empty? ? [['id', 'desc']] : @query.sort_criteria) sort_update(@query.sortable_columns) @query.sort_criteria = sort_criteria.to_a - @project_base_tag = (params[:project_id] || @issue.project) ? 'base_projects':'base' - if @query.valid? - # case params[:format] - # when 'csv', 'pdf' - # @limit = 10#Setting.issues_export_limit.to_i - # when 'atom' - # @limit = 10#Setting.feeds_limit.to_i - # when 'xml', 'json' - # @offset, @limit = api_offset_and_limit({:limit => 10}) - # else - # @limit = 10#per_page_option - # end @tracker_id = params[:tracker_id] @assign_to_id = params[:assigned_to_id] @author_id = params[:author_id] @@ -111,9 +98,6 @@ class IssuesController < ApplicationController @fixed_version_id = params[:fixed_version_id] @issue_count = @query.issue_count @test = params[:test] - # @issue_pages = Paginator.new @issue_count, @limit, params['page'] - # params[:page] = (params[:page] || 1).to_i + 1 #页码需要加1 - # @offset ||= @issue_pages.offset @project_sort = 'issues.updated_on desc' if params[:test] != "0" case @test @@ -127,6 +111,7 @@ class IssuesController < ApplicationController @project_sort = 'issues.updated_on asc' end end + open_and_close_num(@project) @issues_filter_assign_count = @query.issues.select{|issue| issue.assigned_to_id == User.current.id }.count @issues_filter_author_count = @query.issues.select{|issue| issue.author_id == User.current.id }.count @issues_filter = @query.issues(:order => @project_sort) @@ -135,35 +120,17 @@ class IssuesController < ApplicationController @issue_pages = Paginator.new @issue_count, @limit, params['page'] || 1 @offset ||= @issue_pages.offset @issues = paginateHelper @issues_filter, @limit - # if params[:set_filter] - # @set_filter = params[:set_filter] - # end - # @issue_count_by_group = @query.issue_count_by_group - if params[:export_issue_hidden] == "1" - # index(:format=>'xls', :export_issue_hidden => 0) - params[:export_issue_hidden] = "0" - redirect_to project_issues_path(:project_id => @project, :format => 'xls') - - # respond_to do |format| - # format.xls {filename = "#{@project.name.to_s}_#{l(:label_issue_list_xls)}.xls" - # send_data(issue_list_xls(@issues_filter), :type => 'application/octet-stream', :filename => filename_for_content_disposition(filename)) - # return - # } - # return - # end - else - respond_to do |format| - format.js - format.html { render :template => 'issues/index', :layout => @project_base_tag }#by young - format.api {Issue.load_visible_relations(@issues) if include_in_api_response?('relations')} - # format.json { render :json => @issues.map { |issue| issue.to_json}} #:json => @issues.map { |issue| issue.to_json} - format.atom { render_feed(@issues, :title => "#{@project || Setting.app_title}: #{l(:label_issue_plural)}") } - format.csv { send_data(query_to_csv(@issues, @query, params), :type => 'text/csv; header=present', :filename => 'issues.csv') } - format.pdf { send_data(issues_to_pdf(@issues, @project, @query), :type => 'application/pdf', :filename => 'issues.pdf') } - format.xls {filename = "#{@project.name.to_s}_#{l(:label_issue_list_xls)}.xls" - send_data(issue_list_xls(@issues_filter), :type => 'application/octet-stream', :filename => filename_for_content_disposition(filename)) - } - end + respond_to do |format| + format.js + format.html { render :template => 'issues/index', :layout => @project_base_tag }#by young + format.api {Issue.load_visible_relations(@issues) if include_in_api_response?('relations')} + # format.json { render :json => @issues.map { |issue| issue.to_json}} #:json => @issues.map { |issue| issue.to_json} + format.atom { render_feed(@issues, :title => "#{@project || Setting.app_title}: #{l(:label_issue_plural)}") } + format.csv { send_data(query_to_csv(@issues, @query, params), :type => 'text/csv; header=present', :filename => 'issues.csv') } + format.pdf { send_data(issues_to_pdf(@issues, @project, @query), :type => 'application/pdf', :filename => 'issues.pdf') } + format.xls {filename = "#{@project.name.to_s}_#{l(:label_issue_list_xls)}.xls" + send_data(issue_list_xls(@issues_filter), :type => 'application/octet-stream', :filename => filename_for_content_disposition(filename)) + } end else respond_to do |format| @@ -174,12 +141,21 @@ class IssuesController < ApplicationController end end end - - rescue ActiveRecord::RecordNotFound render_404 end + # 获取issue的开启统计数 + def open_and_close_num project + if User.current.member_of?(project) + @issue_open_count = Issue.where("project_id=#{project.id} and status_id in (1,2,3,4,6)").count + @issue_close_count = Issue.where(:project_id => project.id, :status_id => 5 ).count + else + @issue_open_count = Issue.where("project_id=#{project.id} and status_id in (1,2,3,4,6) and is_private = 0").count + @issue_close_count = Issue.where(:project_id => project.id, :status_id => 5, :is_private => 0).count + end + end + def show # 打开编辑内容 @is_edit = true unless params[:edit].nil? diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb index 5731244c3..226d24afa 100644 --- a/app/controllers/messages_controller.rb +++ b/app/controllers/messages_controller.rb @@ -47,6 +47,9 @@ class MessagesController < ApplicationController all_comments = [] @replies = get_all_children(all_comments, @topic) @reply_count = @replies.count + @page = params[:page] ? params[:page].to_i + 1 : 0 + @limit = 10 + @replies = @replies[@page * @limit..@page * @limit + 9] @reply = Message.new(:subject => "RE: #{@message.subject}") if @course #@replies = @topic.children. @@ -57,7 +60,11 @@ class MessagesController < ApplicationController #all #@replies = paginateHelper messages_replies,10 @left_nav_type = 2 - render :action => "show", :layout => "base_courses"#by young + respond_to do |format| + format.js + format.html {render :layout => 'base_courses'} + end + #render :action => "show", :layout => "base_courses"#by young elsif @project #@reply_pages = Paginator.new @reply_count, REPLIES_PER_PAGE, page # @replies = @topic.children. @@ -66,8 +73,10 @@ class MessagesController < ApplicationController # limit(@reply_pages.per_page). # offset(@reply_pages.offset). # all - - render :action => "show", :layout => "base_projects"#by young + respond_to do |format| + format.js + format.html {render :layout => 'base_projects'} + end else # @reply_pages = Paginator.new @reply_count, REPLIES_PER_PAGE, page # @replies = @topic.children. @@ -78,7 +87,10 @@ class MessagesController < ApplicationController # all @organization = @org_subfield.organization - render :action => "show", :layout => "base_org"#by young + respond_to do |format| + format.js + format.html {render :layout => 'base_org'} + end end end diff --git a/app/controllers/news_controller.rb b/app/controllers/news_controller.rb index 660e4d76c..07a3ba393 100644 --- a/app/controllers/news_controller.rb +++ b/app/controllers/news_controller.rb @@ -171,6 +171,10 @@ class NewsController < ApplicationController result = cs.show_course_news params,User.current @news = result[:news] @comments = result[:comments] + @comments_count = @comments.count + @page = params[:page] ? params[:page].to_i + 1 : 0 + @limit = 10 + @comments = @comments[@page * @limit..@page * @limit + 9] @comment = Comment.new #@comments = @news.comments #@comments.reverse! if User.current.wants_comments_in_reverse_order? @@ -179,12 +183,23 @@ class NewsController < ApplicationController @course = Course.find(@news.course_id) if @course @left_nav_type = 4 - render :layout => 'base_courses' + respond_to do |format| + format.js + format.html {render :layout => 'base_courses'} + end + end + elsif @project + respond_to do |format| + format.js + format.html {render :layout => 'base_projects'} end elsif @news.org_subfield_id @org_subfield = OrgSubfield.find(@news.org_subfield_id) @organization = @org_subfield.organization - render :layout => 'base_org' + respond_to do |format| + format.js + format.html {render :layout => 'base_org'} + end end end diff --git a/app/controllers/student_work_controller.rb b/app/controllers/student_work_controller.rb index a0d981b22..27b6ed272 100644 --- a/app/controllers/student_work_controller.rb +++ b/app/controllers/student_work_controller.rb @@ -106,13 +106,13 @@ class StudentWorkController < ApplicationController rescue Timeout::Error tEndtime = Time.now tUsedtime = (tEndtime.to_i-tStarttime.to_i)*1000+(tEndtime.usec - tStarttime.usec)/1000 - logger.debug "program_test_ex user wait time = #{tUsedtime} 毫秒" + logger.info "program_test_ex user wait time = #{tUsedtime} 毫秒" #status 0:答案正确 -5program_test_ex 函数出错 -4judge代码出错 -3http超时 -2:编译错误 -1:答案错误 2:程序运行超时 resultObj[:status] = -3 CodeTests.create(:homework_id=>@homework.id,:language=>@homework.homework_detail_programing.language,:status=>-3,:wait_time=>tUsedtime,:student_work_id=>student_work.id) rescue => e #-4 judge代码 出错 - logger.debug "program_test_error #{e}" + logger.info "program_test_error #{e}" resultObj[:status] = -4 tmpstatus = -4 CodeTests.create(:homework_id=>@homework.id,:language=>@homework.homework_detail_programing.language,:status=>tmpstatus,:time_used=>0,:wait_time=>0,:student_work_id=>student_work.id) @@ -217,7 +217,7 @@ class StudentWorkController < ApplicationController end rescue #-5 program_test_ex 函数出错 - logger.debug "program_test_error 2" + logger.info "program_test_error 2" resultObj[:status] = -5 tmpstatus = -5 CodeTests.create(:homework_id=>@homework.id,:language=>@homework.homework_detail_programing.language,:status=>tmpstatus,:time_used=>0,:wait_time=>0,:student_work_id=>student_work.id) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 87dc127a0..78c60599a 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -625,7 +625,7 @@ class UsersController < ApplicationController visible_course_ids = visible_course.empty? ? "(-1)" : "(" + visible_course.map{|course| course.id}.join(",") + ")" @homeworks = HomeworkCommon.where("course_id in #{visible_course_ids} and publish_time <= '#{Date.today}'").order("#{@order} #{@b_sort}") end - @type = params[:type] + @type = params[:type] ? params[:type] : '1' @limit = 10 @is_remote = true @hw_count = @homeworks.count @@ -808,7 +808,7 @@ class UsersController < ApplicationController #@homeworks = @homeworks.where("homework_type = 3").reorder("#{@order} #{@b_sort}") end end - @type = params[:type] + @type = params[:type] ? params[:type] : '1' @property = params[:property] @is_import = params[:is_import] @limit = params[:is_import].to_i == 1 ? 15 : 10 @@ -1033,7 +1033,7 @@ class UsersController < ApplicationController update_org_activity(homework.class,homework.id) flash[:notice] = l(:notice_successful_create) - redirect_to student_work_index_url(:homework => params[:homework]) + redirect_to student_work_index_url(:homework => params[:homework], :tab => 2) else render_403 end @@ -3200,6 +3200,7 @@ class UsersController < ApplicationController ori = Attachment.find_by_id(send_id) # 如果该附件已经存课程中,则只更新附件创建时间 mul_container.attachments.each do |att| + @exist = false if att.id == ori.id || (!att.copy_from.nil? && !ori.copy_from.nil? && att.copy_from == ori.copy_from) || att.copy_from == ori.id || att.id == ori.copy_from att.created_on = Time.now att.save diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 6215a79d0..ef606c0cb 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -3311,17 +3311,32 @@ def get_reply_parents_no_root parents_rely, comment parents_rely end +def get_all_children_ex result, jour + if jour.kind_of? Message + jour.children.includes(:author, :praise_tread_cache).each do |jour_child| + result << jour_child + get_all_children_ex result, jour_child + end + elsif (jour.kind_of? JournalsForMessage) || (jour.kind_of? BlogComment) || (jour.kind_of? OrgDocumentComment) + jour.children.each do |jour_child| + result << jour_child + get_all_children_ex result, jour_child + end + end + result +end + #获取所有子节点 def get_all_children result, jour if jour.kind_of? Message jour.children.includes(:author, :praise_tread_cache).each do |jour_child| result << jour_child - get_all_children result, jour_child + get_all_children_ex result, jour_child end elsif (jour.kind_of? JournalsForMessage) || (jour.kind_of? BlogComment) || (jour.kind_of? OrgDocumentComment) jour.children.each do |jour_child| result << jour_child - get_all_children result, jour_child + get_all_children_ex result, jour_child end end if jour.respond_to?(:created_on) diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb index 0ab09802f..7aec64718 100644 --- a/app/helpers/issues_helper.rb +++ b/app/helpers/issues_helper.rb @@ -60,9 +60,9 @@ module IssuesHelper def states_done_ratio(issue) done_ratio = issue.done_ratio if done_ratio == 100 - "#{l(:label_done_ratio_endding)}".html_safe + "#{l(:label_done_ratio_endding)}".html_safe else - "#{l(:label_done_ratio_doing)}".html_safe + "#{l(:label_done_ratio_doing)}".html_safe end end diff --git a/app/views/admin/homework.html.erb b/app/views/admin/homework.html.erb index 03472d0a0..aaf21999d 100644 --- a/app/views/admin/homework.html.erb +++ b/app/views/admin/homework.html.erb @@ -38,11 +38,13 @@
- <% if homework.course %> - - <% end %> + diff --git a/app/views/courses/_course_student.html.erb b/app/views/courses/_course_student.html.erb index 8da3987a8..59c0dc641 100644 --- a/app/views/courses/_course_student.html.erb +++ b/app/views/courses/_course_student.html.erb @@ -1,10 +1,10 @@ -- <%= l(:label_search_member_count) %> - <%= @result_count %> - <%= l(:label_member_people) %> +
序号 | +姓名 | ++ <%= link_to '学号', member_score_sort_course_path(:sort_type => 'student_id', :sort_by => (@score_sort_by == "desc" ? "asc" : "desc"), :group_id => (@group ? (@group == -1 ? -1 : @group.id) : 0), :search_name => (@search_name ? @search_name : nil)), :result => members, method: 'get', remote: true, :style => 'color:#000000;'%> + <% if @sort_type == "student_id" && @score_sort_by == 'desc' %> + + <% elsif @sort_type == "student_id" && @score_sort_by == 'asc' %> + + <% end %> + | +
+ <%= link_to '作业得分', member_score_sort_course_path(:sort_type => 'score', :sort_by => (@score_sort_by == "desc" ? "asc" : "desc"), :group_id => (@group ? (@group == -1 ? -1 : @group.id) : 0), :search_name => (@search_name ? @search_name : nil)), :result => members, method: 'get', remote: true, :style => 'color:#000000;'%>
+ <% if @sort_type == "score" && @score_sort_by == 'desc' %>
+
+ <% elsif @sort_type == "score" && @score_sort_by == 'asc' %>
+
+ <% end %>
+
+
+ 积分规则 |
+
+ <%= link_to '测评得分', member_score_sort_course_path(:sort_type => 'ex_score', :sort_by => (@score_sort_by == "desc" ? "asc" : "desc"), :group_id => (@group ? (@group == -1 ? -1 : @group.id) : 0), :search_name => (@search_name ? @search_name : nil)), :result => members, method: 'get', remote: true, :style => 'color:#000000;'%>
+ <% if @sort_type == "ex_score" && @score_sort_by == 'desc' %>
+
+ <% elsif @sort_type == "ex_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 == -1 ? -1 : @group.id) : 0),:search_name => (@search_name ? @search_name : nil)) ,:result => members,method: 'get', remote: true, :style => 'color:#000000;'%>
+ <% if @sort_type == "act_score" && @score_sort_by == 'desc' %>
+
+ <% elsif @sort_type == "act_score" && @score_sort_by == 'asc' %>
+
+ <% end %>
+
+ 积分规则
-
-
- <%= member.user.nil? ? '' : (image_tag(url_to_avatar(member.user), :width => 32, :height => 32)) %>
-
-
+
- <% unless member.user.user_extensions.student_id == ''%> -
- <%=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 %>
-
- <%= 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: 5px;"}) %>
- <% end %>
- <% end %>
- <% else %>
-
- <%=member.course_group_id == 0 ? "暂无" : member.course_group.name %>
-
- <% end %>
- <% end %>
- <%= link_to format("%0.2f",member.score.nil? ? 0 : member.score.to_s), {
- :action => 'show_member_score',
- :member_id => member.id,
- :remote => true},
- :class => "st_list_score c_red #{@course.course_groups.empty? ? 'ml130' : ''}" %>
- <%= 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}) %>
+ |
+ 总得分
+
+
+ 积分规则 |
+ 分班 | +
---|---|---|---|---|---|---|---|
<%= (@page - 1) * @limit + i + 1 %> | ++ <%= link_to image_tag(url_to_avatar(user), :width => "30", :height => "30", :style => "display:block;"), user_path(member.user_id), :class => 'sy_class_users_st fl mt5 mr5' ,:alt => "用户头像" %> + <%= user.show_name %> + | ++ <%= user.user_extensions.student_id %> + | ++ <%= link_to format("%0.2f", hw_score), { + :action => 'show_member_score', + :member_id => member.id, + :remote => true}, + :class => "" %> + | +<%= ex_score %> | ++ <%= link_to act_score, { + :action => 'show_member_act_score', + :member_id => member.id, + :remote => true}, + :class => '' %> + | +
+ <%= format("%0.2f", sum) %>
+
+
+
-
- <% end; reset_cycle %>
-
-
-
+
+ <%= user.show_name %> |
+ + <% if User.current.allowed_to?(:as_teacher, @course) || User.current.admin? || User.current == user %> + <% if @course.course_groups.empty? %> + <%=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 %> + + <%= 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=>"w100 undis class-edit sy_fenban_select", :style => "margin-left: 5px;"}) %> + <% end %> + <% end %> + <% else %> + <%=member.course_group_id == 0 ? "暂无" : member.course_group.name %> + <% end %> + | +
- <%= l(:label_no_data) %> -
-<% end%> ++ <%= l(:label_no_data) %> +
+<% end %> diff --git a/app/views/courses/_searchmembers.html.erb b/app/views/courses/_searchmembers.html.erb index b864bfd8f..8c7f684df 100644 --- a/app/views/courses/_searchmembers.html.erb +++ b/app/views/courses/_searchmembers.html.erb @@ -1,11 +1,35 @@ -<%= form_tag( searchmembers_course_path(@course), method: 'get',:class => "f_l",:remote=>true,:id => "search_student") do %> - <%= text_field_tag 'name', params[:name], name: "name", :class => 'st_search_input', :placeholder => '输入学生登录名、姓名、学号进行搜索'%> - <% if @group %> - <%= hidden_field "search_group_id", params[:search_group_id],:value => "#{@group.id}", name: 'search_group_id' %> - - <% else %> - +已有<%=committed_work_count %>个学生提交作品,不允许再修改作业类型和测试集。
<% elsif @homework.homework_type == 3 %> -已有<%=committed_work_count %>个学生提交作品,不允许再修改作业类型和分组设置。
+已有<%=committed_work_count %>个学生提交作品,不允许再修改作业类型和分组设置(可扩大分组范围)。
<% end %> <% elsif stu_pro_count != 0 && @homework.homework_type == 3 %>已有<%=stu_pro_count %>个学生关联项目,不允许再修改作业类型。
diff --git a/app/views/issues/_issue_filter_all.html.erb b/app/views/issues/_issue_filter_all.html.erb new file mode 100644 index 000000000..64242df9b --- /dev/null +++ b/app/views/issues/_issue_filter_all.html.erb @@ -0,0 +1 @@ +<%= @issue_count %> \ No newline at end of file diff --git a/app/views/issues/_project_issue.html.erb b/app/views/issues/_project_issue.html.erb index cf04baa14..25b7a6954 100644 --- a/app/views/issues/_project_issue.html.erb +++ b/app/views/issues/_project_issue.html.erb @@ -10,10 +10,6 @@