diff --git a/0) b/0) new file mode 100644 index 000000000..70d77d63e --- /dev/null +++ b/0) @@ -0,0 +1 @@ +终止批处理操作吗(Y/N)? 终止批处理操作吗(Y/N)? 终止批处理操作吗(Y/N)? 终止批处理操作吗(Y/N)? \ No newline at end of file diff --git a/Gemfile b/Gemfile index 91e72a745..f462133c3 100644 --- a/Gemfile +++ b/Gemfile @@ -16,6 +16,8 @@ gem "coderay", "~> 1.0.6" gem "fastercsv", "~> 1.5.0", :platforms => [:mri_18, :mingw_18, :jruby] gem "builder", "3.0.0" gem 'acts-as-taggable-on', '2.4.1' +gem 'spreadsheet' +gem 'ruby-ole' group :development do gem 'better_errors', path: 'lib/better_errors' diff --git a/Gemfile.lock b/Gemfile.lock deleted file mode 100644 index 6916219a9..000000000 --- a/Gemfile.lock +++ /dev/null @@ -1,282 +0,0 @@ -PATH - remote: lib/better_errors - specs: - better_errors (1.1.0) - coderay (>= 1.0.0) - erubis (>= 2.6.6) - -PATH - remote: lib/rack-mini-profiler - specs: - rack-mini-profiler (0.9.1) - rack (>= 1.1.3) - -PATH - remote: lib/seems_rateable - specs: - seems_rateable (1.0.13) - jquery-rails - rails - -GEM - remote: http://ruby.taobao.org/ - remote: https://rubygems.org/ - specs: - actionmailer (3.2.13) - actionpack (= 3.2.13) - mail (~> 2.5.3) - actionpack (3.2.13) - activemodel (= 3.2.13) - activesupport (= 3.2.13) - builder (~> 3.0.0) - erubis (~> 2.7.0) - journey (~> 1.0.4) - rack (~> 1.4.5) - rack-cache (~> 1.2) - rack-test (~> 0.6.1) - sprockets (~> 2.2.1) - activemodel (3.2.13) - activesupport (= 3.2.13) - builder (~> 3.0.0) - activerecord (3.2.13) - activemodel (= 3.2.13) - activesupport (= 3.2.13) - arel (~> 3.0.2) - tzinfo (~> 0.3.29) - activeresource (3.2.13) - activemodel (= 3.2.13) - activesupport (= 3.2.13) - activesupport (3.2.13) - i18n (= 0.6.1) - multi_json (~> 1.0) - acts-as-taggable-on (2.4.1) - rails (>= 3, < 5) - arel (3.0.3) - builder (3.0.0) - capybara (2.4.1) - mime-types (>= 1.16) - nokogiri (>= 1.3.3) - rack (>= 1.0.0) - rack-test (>= 0.5.4) - xpath (~> 2.0) - celluloid (0.15.2) - timers (~> 1.1.0) - childprocess (0.5.3) - ffi (~> 1.0, >= 1.0.11) - climate_control (0.0.3) - activesupport (>= 3.0) - cocaine (0.5.4) - climate_control (>= 0.0.3, < 1.0) - coderay (1.0.9) - coffee-rails (3.2.2) - coffee-script (>= 2.2.0) - railties (~> 3.2.0) - coffee-script (2.3.0) - coffee-script-source - execjs - coffee-script-source (1.7.1) - erubis (2.7.0) - execjs (2.2.1) - factory_girl (4.4.0) - activesupport (>= 3.0.0) - fastercsv (1.5.5) - ffi (1.9.3) - ffi (1.9.3-x86-mingw32) - formatador (0.2.5) - guard (2.6.1) - formatador (>= 0.2.4) - listen (~> 2.7) - lumberjack (~> 1.0) - pry (>= 0.9.12) - thor (>= 0.18.1) - guard-rails (0.5.3) - guard (~> 2.0) - guard-spork (1.5.1) - childprocess (>= 0.2.3) - guard (>= 1.1) - spork (>= 0.8.4) - guard-test (1.0.0) - guard (>= 1.8) - test-unit (~> 2.2) - hike (1.2.3) - htmlentities (4.3.2) - i18n (0.6.1) - journey (1.0.4) - jquery-rails (2.0.3) - railties (>= 3.1.0, < 5.0) - thor (~> 0.14) - json (1.8.1) - kaminari (0.16.1) - actionpack (>= 3.0.0) - activesupport (>= 3.0.0) - libv8 (3.16.14.3) - listen (2.7.9) - celluloid (>= 0.15.2) - rb-fsevent (>= 0.9.3) - rb-inotify (>= 0.9) - lumberjack (1.0.9) - mail (2.5.4) - mime-types (~> 1.16) - treetop (~> 1.4.8) - metaclass (0.0.4) - method_source (0.8.2) - mime-types (1.25.1) - mini_portile (0.6.0) - mocha (1.1.0) - metaclass (~> 0.0.1) - multi_json (1.10.1) - mysql2 (0.3.11) - mysql2 (0.3.11-x86-mingw32) - net-ldap (0.3.1) - nokogiri (1.6.3) - mini_portile (= 0.6.0) - nokogiri (1.6.3-x86-mingw32) - mini_portile (= 0.6.0) - paperclip (3.5.4) - activemodel (>= 3.0.0) - activesupport (>= 3.0.0) - cocaine (~> 0.5.3) - mime-types - polyglot (0.3.5) - pry (0.9.12.6) - coderay (~> 1.0) - method_source (~> 0.8) - slop (~> 3.4) - pry (0.9.12.6-x86-mingw32) - coderay (~> 1.0) - method_source (~> 0.8) - slop (~> 3.4) - win32console (~> 1.3) - pry-nav (0.2.3) - pry (~> 0.9.10) - rack (1.4.5) - rack-cache (1.2) - rack (>= 0.4) - rack-openid (1.4.2) - rack (>= 1.1.0) - ruby-openid (>= 2.1.8) - rack-raw-upload (1.1.1) - multi_json - rack-ssl (1.3.4) - rack - rack-test (0.6.2) - rack (>= 1.0) - rails (3.2.13) - actionmailer (= 3.2.13) - actionpack (= 3.2.13) - activerecord (= 3.2.13) - activeresource (= 3.2.13) - activesupport (= 3.2.13) - bundler (~> 1.0) - railties (= 3.2.13) - railties (3.2.13) - actionpack (= 3.2.13) - activesupport (= 3.2.13) - rack-ssl (~> 1.3.2) - rake (>= 0.8.7) - rdoc (~> 3.4) - thor (>= 0.14.6, < 2.0) - rake (10.3.2) - rb-fsevent (0.9.4) - rb-inotify (0.9.5) - ffi (>= 0.5.0) - rdoc (3.12.2) - json (~> 1.4) - ref (1.0.5) - rich (1.4.6) - jquery-rails - kaminari - mime-types - paperclip - rack-raw-upload - rails (>= 3.2.0) - sass-rails - rmagick (2.13.2) - ruby-openid (2.1.8) - rubyzip (1.1.6) - sass (3.3.10) - sass-rails (3.2.6) - railties (~> 3.2.0) - sass (>= 3.1.10) - tilt (~> 1.3) - selenium-webdriver (2.42.0) - childprocess (>= 0.5.0) - multi_json (~> 1.0) - rubyzip (~> 1.0) - websocket (~> 1.0.4) - shoulda (3.5.0) - shoulda-context (~> 1.0, >= 1.0.1) - shoulda-matchers (>= 1.4.1, < 3.0) - shoulda-context (1.2.1) - shoulda-matchers (2.6.1) - activesupport (>= 3.0.0) - slop (3.5.0) - spork (0.9.2) - spork-testunit (0.0.8) - spork (>= 0.6.0) - sprockets (2.2.2) - hike (~> 1.2) - multi_json (~> 1.0) - rack (~> 1.0) - tilt (~> 1.1, != 1.3.0) - test-unit (2.5.5) - therubyracer (0.12.1) - libv8 (~> 3.16.14.0) - ref - thor (0.19.1) - tilt (1.4.1) - timers (1.1.0) - treetop (1.4.15) - polyglot - polyglot (>= 0.3.1) - tzinfo (0.3.40) - uglifier (2.5.1) - execjs (>= 0.3.0) - json (>= 1.8.0) - websocket (1.0.7) - win32console (1.3.2-x86-mingw32) - xpath (2.0.0) - nokogiri (~> 1.3) - -PLATFORMS - ruby - x86-mingw32 - -DEPENDENCIES - activerecord-jdbc-adapter (= 1.2.5) - activerecord-jdbcmysql-adapter - acts-as-taggable-on (= 2.4.1) - better_errors! - builder (= 3.0.0) - capybara (~> 2.4.1) - coderay (~> 1.0.6) - coffee-rails (~> 3.2.1) - factory_girl (~> 4.4.0) - fastercsv (~> 1.5.0) - guard-rails (~> 0.5.3) - guard-spork (~> 1.5.1) - guard-test (~> 1.0.0) - htmlentities - i18n (~> 0.6.0) - jquery-rails (~> 2.0.2) - kaminari - mocha (~> 1.1.0) - mysql2 (= 0.3.11) - net-ldap (~> 0.3.1) - nokogiri (~> 1.6.3) - paperclip (~> 3.5.4) - pry - pry-nav - rack-mini-profiler! - rack-openid - rails (= 3.2.13) - rich (= 1.4.6) - rmagick (>= 2.0.0) - ruby-openid (~> 2.1.4) - sass-rails (~> 3.2.3) - seems_rateable! - selenium-webdriver (~> 2.42.0) - shoulda (~> 3.5.0) - spork-testunit (~> 0.0.8) - therubyracer - uglifier (>= 1.0.3) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 54346c0cc..2721c57c7 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -759,6 +759,19 @@ 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 @first_page = FirstPage.find_by_page_type('project') diff --git a/app/controllers/bids_controller.rb b/app/controllers/bids_controller.rb index 2997f4205..ec2fb7d77 100644 --- a/app/controllers/bids_controller.rb +++ b/app/controllers/bids_controller.rb @@ -492,27 +492,19 @@ class BidsController < ApplicationController if @bid.homework_type @homework = HomeworkAttach.new @is_teacher = is_course_teacher(User.current,@bid.courses.first) - teachers = "(" - teacher_members = searchTeacherAndAssistant(@bid.courses.first) - teacher_members.each do |member| - if member == teacher_members.last - teachers += member.user_id.to_s + ")" - else - teachers += member.user_id.to_s + "," - end - end if @is_teacher - all_homework_list = HomeworkAttach.eager_load(:attachments,:user,:rate_averages).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 rater_id IN #{teachers}) AS t_score, - (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id NOT IN #{teachers}) AS s_score + all_homework_list = HomeworkAttach.find_by_sql("SELECT * FROM (SELECT homework_attaches.*, + (SELECT 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 ORDER BY updated_at DESC limit 0,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") + @not_batch_homework = true @cur_type = 1 else - 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 rater_id IN #{teachers}) AS t_score, - (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id NOT IN #{teachers}) AS s_score, - (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 + all_homework_list = HomeworkAttach.find_by_sql("SELECT homework_attaches.*, + (SELECT 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 ORDER BY updated_at DESC limit 0,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} 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") @@ -1056,17 +1048,8 @@ class BidsController < ApplicationController elsif @bid.comment_status == 1 @totle_size = 0 @bid.homeworks.map { |homework| @totle_size += homework.homework_evaluations.count} - teachers = "(" - teacher_members = searchTeacherAndAssistant(@course) - teacher_members.each do |member| - if member == teacher_members.last - teachers += member.user_id.to_s + ")" - else - teachers += member.user_id.to_s + "," - end - end @cur_size = 0 - @bid.homeworks.map { |homework| @cur_size += homework.rates(:quality).where("seems_rateable_rates.rater_id not in #{teachers}").count} + @bid.homeworks.map { |homework| @cur_size += homework.rates(:quality).where("seems_rateable_rates.is_teacher_score = 0").count} end @percent = format("%.2f",(@cur_size.to_f / ( @totle_size == 0 ? 1 : @totle_size)) * 100) respond_to do |format| diff --git a/app/controllers/contests_controller.rb b/app/controllers/contests_controller.rb index 6213b2315..d3edde756 100644 --- a/app/controllers/contests_controller.rb +++ b/app/controllers/contests_controller.rb @@ -134,9 +134,8 @@ class ContestsController < ApplicationController @state = false respond_to do |format| - layout_file = 'base_newcontest' format.html { - render :layout => layout_file + render :layout => 'base_newcontest' } format.api end diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index e0d7feff5..1a8506b12 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] @@ -210,15 +210,17 @@ 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(@@member_scores, q) + @results = searchmember_by_name(student_homework_score(0,0,0,"desc"), q) + elsif params[:ingroup] @group = CourseGroup.find(params[:search_group_id]) - @results = @results =searchgroupmember_by_name(@@member_scores, @group, q) + @results = searchmember_by_name(student_homework_score(@group.id,0,0,"desc"), q) end - + @is_remote = true @result_count = @results.count @results = paginateHelper @results @@ -285,9 +287,9 @@ 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 end def unjoin_group @@ -298,8 +300,7 @@ class CoursesController < ApplicationController member.save @group = group @course_groups = @course.course_groups - @members = searchStudent(@course) - @membercount = @members.count + search_group_members group end def searchgroupmembers @@ -307,69 +308,104 @@ 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 = @@member_scores.find_all {|mem| mem.course_group_id == group.id} + + @results = student_homework_score(@group.id,0, 0,"desc") + @results = paginateHelper @results, 10 + + else - @results = @@member_scores + page_from = params[:page].nil? ? 0 : (params[:page].to_i - 1) + @results = student_homework_score(0,page_from, 10,"desc") + @results = paginateHelper_for_members @results, 10 end - @@result = @results - @members = searchStudent(@course) - @membercount = @members.count - @results = paginateHelper @results + + end def member ## 鏈夎鑹插弬鏁扮殑鎵嶆槸璇剧▼锛屾病鏈夌殑灏辨槸椤圭洰 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) + @score_sort_by = "desc" @canShowCode = isCourseTeacher(User.current.id,@course) && params[:role] != '1' - @role = params[:role] + @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 + @all_members = searchTeacherAndAssistant(@course) + @members = paginateHelper @all_members, 10 when '2' @subPage_title = l :label_student_list - teachers = @teachers.map{|teacher| teacher.user_id}.join(",") - @@member_scores = student_homework_score teachers - @members = @@member_scores - # @member_scores = @@member_scores - # @members = searchStudent_sort(@course, 'desc', @@member_scores) - @membercount = @members.count + page = params[:page].nil? ? 0 : (params['page'].to_i - 1) + @all_members = student_homework_score(0,page, 10,"desc") + + @members = paginateHelper_for_members @all_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 - @@result = @members - @members = paginateHelper @members - render :layout => 'base_courses' + + # render :layout => 'base_courses' else render_403 end end + def export_course_member_excel + @all_members = student_homework_score(0,0,0,"desc") + respond_to do |format| + format.xls { + send_data(member_to_xls(@all_members,@course.course_groups), :type => "text/excel;charset=utf-8; header=present", + :filename => "#{@course.teacher.lastname.to_s + @course.teacher.firstname.to_s }_#{@course.name}_#{@course.time.to_s + @course.term}#{l(:excel_member_list)}.xls") + } + end + end + def member_score_sort - @teachers= searchTeacherAndAssistant(@course) + + # @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' + # @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' + @render_file = 'member_list' + # @results = params[:result] if params[:result] + # unless @result.nil? + # @results = @result.reverse + # + # end + # @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) - unless @@result.nil? - @results = @@result.reverse - @@result = @results + @results = paginateHelper_for_members @results, 10 + else + @group = CourseGroup.find(group_id) + @results = student_homework_score(group_id, 0, 0,@score_sort_by) + @results = paginateHelper @results, 10 end - @results = paginateHelper @results end # 鏄剧ず姣忎釜瀛︾敓鐨勪綔涓氳瘎鍒嗚鎯 def show_member_score @@ -378,17 +414,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 @@ -477,7 +505,7 @@ class CoursesController < ApplicationController per_page_option = 10 if @school_id == "0" or @school_id.nil? @courses_all = Course.active.visible. - joins("LEFT JOIN #{CourseStatus.table_name} ON #{Course.table_name}.id = #{CourseStatus.table_name}.course_id"). + joins("LEFT JOIN #{CourseStatus.table_name} ON #{Course.table_name}.id = #{CourseStatus.table_name}.course_id") else @courses_all = Course.active.visible. joins("LEFT JOIN #{CourseStatus.table_name} ON #{Course.table_name}.id = #{CourseStatus.table_name}.course_id"). @@ -881,17 +909,50 @@ class CoursesController < ApplicationController end end - def student_homework_score teachers - 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 - 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") + def student_homework_score(groupid,start_from, nums, score_sort_by) + #teachers = find_course_teachers(@course) + start_from = start_from * nums + sql_select = "" + if groupid == 0 + if nums == 0 + sql_select = "SELECT members.*, SUM(homework_attaches.score) as score FROM members, homework_attaches + WHERE members.course_id = #{@course.id} AND members.user_id in (SELECT students_for_courses.student_id FROM students_for_courses WHERE course_id = #{@course.id}) AND members.user_id = homework_attaches.user_id +AND homework_attaches.bid_id in (SELECT bid_id FROM homework_for_courses WHERE course_id = #{@course.id}) GROUP BY members.user_id +UNION all +SELECT members.*, 0 as score FROM members,homework_attaches,students_for_courses WHERE members.course_id = #{@course.id} AND +students_for_courses.course_id = #{@course.id} and members.user_id = students_for_courses.student_id AND +members.user_id NOT IN (SELECT homework_attaches.user_id FROM homework_attaches WHERE homework_attaches.bid_id in (SELECT bid_id FROM homework_for_courses WHERE course_id = #{@course.id} ) +) +GROUP BY members.user_id ORDER BY score #{score_sort_by}" + else + sql_select = "SELECT members.*, SUM(homework_attaches.score) as score FROM members, homework_attaches + WHERE members.course_id = #{@course.id} AND members.user_id in (SELECT students_for_courses.student_id FROM students_for_courses WHERE course_id = #{@course.id}) AND members.user_id = homework_attaches.user_id +AND homework_attaches.bid_id in (SELECT bid_id FROM homework_for_courses WHERE course_id = #{@course.id}) GROUP BY members.user_id +UNION all +SELECT members.*, 0 as score FROM members,homework_attaches,students_for_courses WHERE members.course_id = #{@course.id} AND +students_for_courses.course_id = #{@course.id} and members.user_id = students_for_courses.student_id AND +members.user_id NOT IN (SELECT homework_attaches.user_id FROM homework_attaches WHERE homework_attaches.bid_id in (SELECT bid_id FROM homework_for_courses WHERE course_id = #{@course.id} ) +) +GROUP BY members.user_id ORDER BY score #{score_sort_by} limit #{start_from}, #{nums}" + + end + else + sql_select = "SELECT members.*, SUM(homework_attaches.score) as score FROM members, homework_attaches + WHERE members.course_id = #{@course.id} AND members.user_id in (SELECT students_for_courses.student_id FROM students_for_courses WHERE course_id = #{@course.id}) AND members.user_id = homework_attaches.user_id + and members.course_group_id = #{groupid} AND homework_attaches.bid_id in (SELECT bid_id FROM homework_for_courses WHERE course_id = #{@course.id}) + GROUP BY members.user_id +UNION all +SELECT members.*, 0 as score FROM members,homework_attaches,students_for_courses WHERE members.course_id = #{@course.id} +and members.course_group_id = #{groupid} AND +students_for_courses.course_id = #{@course.id} and members.user_id = students_for_courses.student_id AND +members.user_id NOT IN (SELECT homework_attaches.user_id FROM homework_attaches WHERE homework_attaches.bid_id in (SELECT bid_id FROM homework_for_courses WHERE course_id = #{@course.id} ) +) +GROUP BY members.user_id ORDER BY score #{score_sort_by}" + end + sql = ActiveRecord::Base.connection() + homework_scores = Member.find_by_sql(sql_select) + sql.close() + homework_scores end #鑾峰彇璇剧▼鐨勮佸笀鍒楄〃 @@ -905,11 +966,46 @@ class CoursesController < ApplicationController @render_file = 'member_list' @canShowCode = isCourseTeacher(User.current.id,@course) && params[:role] != '1' @is_remote = true - - @members = searchStudent(@course) - @membercount = @members.count - @results = @@member_scores.find_all {|mem| mem.course_group_id == group.id} - @@result = @results - @results = paginateHelper @results + @score_sort_by = "desc" + page_from = params[:page].nil? ? 0 : (params[:page].to_i - 1) + @results = student_homework_score(group.id,0,0, "desc") + @results = paginateHelper @results, 10 + + end + + def member_to_xls members,groups + xls_report = StringIO.new + book = Spreadsheet::Workbook.new + sheet1 = book.create_worksheet :name => "student" + + blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10 + 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_homework_score)]) + count_row = 1 + group0 = CourseGroup.new(); + group0.id = 0; + group0.name = l(:excel_member_with_out_class) + groups_dup = groups.dup + groups_dup << group0 + groups_dup.each do |group| + sheet1[count_row,0] = l(:excel_class) + sheet1[count_row,1] = group.name + count_row += 1 + members.each do |member| + if member.course_group_id == group.id + sheet1[count_row,0]= member.user.id + sheet1[count_row,1] = member.user.lastname.to_s + member.user.firstname.to_s + sheet1[count_row,2] = member.user.login + sheet1[count_row,3] = member.user.user_extensions.student_id + sheet1[count_row,4] = member.user.mail + sheet1[count_row,5] = format("%0.2f",member.score.nil? ? 0:member.score.to_s) + count_row += 1 + end + end + end + book.write xls_report + xls_report.string end + end 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 diff --git a/app/controllers/homework_attach_controller.rb b/app/controllers/homework_attach_controller.rb index 5c4542944..8b9bf9099 100644 --- a/app/controllers/homework_attach_controller.rb +++ b/app/controllers/homework_attach_controller.rb @@ -21,20 +21,25 @@ class HomeworkAttachController < ApplicationController #鑾峰彇鏈壒浣滀笟鍒楄〃 def get_not_batch_homework + @not_batch_homework = true sort, direction = params[:sort] || "s_socre", params[:direction] || "desc" - teachers = find_course_teachers @course - get_not_batch_homework_list sort,direction,teachers, @bid.id + get_not_batch_homework_list sort,direction, @bid.id @cur_page = params[:page] || 1 @cur_type = 1 @direction = direction == 'asc'? 'desc' : 'asc' respond_to do |format| format.js + format.xls { + send_data(homework_to_xls(@all_homework_list), :type => "text/excel;charset=utf-8; header=present", + :filename => "#{@course.teacher.lastname.to_s + @course.teacher.firstname}_#{@course.name}_#{@course.time.to_s + @course.term}_#{@bid.name}#{l(:excel_homework_list)}(#{l(:excel_not_rated)}).xls") + } end end #鑾峰彇宸茶瘎浣滀笟鍒楄〃 def get_batch_homeworks sort, direction = params[:sort] || "s_socre", params[:direction] || "desc" + @is_batch_homeworks = true if sort == 't_socre' order_by = "t_score #{direction}" elsif sort == 's_socre' @@ -42,10 +47,9 @@ class HomeworkAttachController < ApplicationController elsif sort == 'time' order_by = "created_at #{direction}" end - teachers = find_course_teachers @course all_homework_list = HomeworkAttach.eager_load(:attachments,:user,:rate_averages).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 rater_id IN (#{teachers}) 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 rater_id NOT IN (#{teachers})) AS s_score + (SELECT 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 ORDER BY updated_at DESC limit 0,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 #{order_by}) AS table1 WHERE table1.t_score IS NOT NULL") @@ -55,11 +59,18 @@ class HomeworkAttachController < ApplicationController @direction = direction == 'asc'? 'desc' : 'asc' respond_to do |format| format.js + format.xls { + send_data(homework_to_xls(all_homework_list), :type => "text/excel;charset=utf-8; header=present", + :filename => "#{@course.teacher.lastname.to_s + @course.teacher.firstname}_#{@course.name}_#{@course.time.to_s + @course.term}_#{@bid.name}#{l(:excel_homework_list)}(#{l(:excel_been_rated)}).xls") + } end end + + #鑾峰彇鎵鏈変綔涓氬垪琛 def get_homeworks + @is_all_homeworks = true sort, direction = params[:sort] || "s_socre", params[:direction] || "desc" if sort == 't_socre' order_by = "t_score #{direction}" @@ -68,10 +79,9 @@ class HomeworkAttachController < ApplicationController elsif sort == 'time' order_by = "created_at #{direction}" end - teachers = find_course_teachers @course 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 rater_id in (#{teachers})) AS t_score, - (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id not in (#{teachers})) AS s_score + (SELECT 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 ORDER BY updated_at DESC limit 0,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 #{order_by}") @cur_page = params[:page] || 1 @@ -80,17 +90,20 @@ class HomeworkAttachController < ApplicationController @direction = direction == 'asc'? 'desc' : 'asc' respond_to do |format| format.js + format.xls { + send_data(homework_to_xls(all_homework_list), :type => "text/excel;charset=utf-8; header=present", + :filename => "#{@course.teacher.lastname.to_s + @course.teacher.firstname}_#{@course.name}_#{@course.time.to_s + @course.term}_#{@bid.name}#{l(:excel_homework_list)}.xls") + } end end #鑾峰彇瀛︾敓鍖胯瘎鍒楄〃 def get_student_batch_homework @is_student_batch_homework = true - teachers = find_course_teachers @course 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 rater_id IN (#{teachers})) AS t_score, - (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id NOT IN (#{teachers})) AS s_score, - (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 is_teacher_score = 1 AND stars IS NOT NULL ORDER BY updated_at DESC limit 0,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} 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") @@ -105,17 +118,16 @@ class HomeworkAttachController < ApplicationController #鑾峰彇鎴戠殑浣滀笟 def get_my_homework @is_my_homework = true - teachers = find_course_teachers @course 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 rater_id IN (#{teachers})) AS t_score, - (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id NOT IN (#{teachers})) AS s_score + (SELECT 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 ORDER BY updated_at DESC limit 0,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 homework_attaches.bid_id = #{@bid.id} AND homework_attaches.user_id = #{User.current.id}") #濡傛灉鎴戞病鏈夊垱寤鸿繃浣滀笟锛屽氨妫绱㈡垜鏄惁鍙備笌浜嗘煇涓綔涓 if all_homework_list.empty? 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 rater_id IN (#{teachers})) AS t_score, - (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id NOT IN (#{teachers})) AS s_score + (SELECT 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 ORDER BY updated_at DESC limit 0,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 INNER JOIN homework_users ON homework_users.homework_attach_id = homework_attaches.id WHERE homework_attaches.bid_id = #{@bid.id} AND homework_users.user_id = #{User.current.id}") @@ -358,12 +370,11 @@ class HomeworkAttachController < ApplicationController # 浣滀笟鎵撳垎鍒楄〃 @stars_reates = @homework.rates(:quality) #鎴戠殑璇勫垎 - @has_evaluation = @stars_reates.where("rater_id = #{User.current.id}").first - @m_score = @has_evaluation.nil? ? 0 : @has_evaluation.stars - teachers = find_course_teachers(@course) - @teacher_stars = @stars_reates.where("rater_id in (#{teachers})") #鑰佸笀璇勫垎鍒楄〃 - @student_stars = @stars_reates.where("rater_id not in (#{teachers})") #瀛︾敓璇勫垎鍒楄〃 @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_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 #鐣欒█ @@ -385,10 +396,9 @@ class HomeworkAttachController < ApplicationController @journal_destroyed = JournalsForMessage.find(params[:object_id]) if @journal_destroyed.is_comprehensive_evaluation == 3 && @journal_destroyed.destroy render_403 unless User.current == @journal_destroyed.user || User.current.admin? - teachers = find_course_teachers(@homework.bid.courses.first) @stars_reates = @homework.rates(:quality) - @teacher_stars = @stars_reates.where("rater_id in (#{teachers})") #鑰佸笀璇勫垎鍒楄〃 - @student_stars = @stars_reates.where("rater_id not in (#{teachers})") #瀛︾敓璇勫垎鍒楄〃 + @teacher_stars = @stars_reates.where("is_teacher_score = 1)") #鑰佸笀璇勫垎鍒楄〃 + @student_stars = @stars_reates.where("is_teacher_score = 0") #瀛︾敓璇勫垎鍒楄〃 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 #鐣欒█ else @@ -425,41 +435,67 @@ 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]) + @stars_reates = @homework.rates(:quality) + homework = @homework + is_teacher = @is_teacher ? 1 : 0 + #淇濆瓨璇勫垎@homework.rate(@m_score.to_i,User.current.id,:quality, (@is_teacher ? 1 : 0)) + if @m_score + 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).save! + end + + if homework.is_teacher_score == 0 + if is_teacher == 1 + homework.score = @m_score + homework.is_teacher_score = 1 + else + sql = "SELECT AVG(stars) as stars FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = #{homework.id}" + score= HomeworkAttach.find_by_sql(sql).first.stars + homework.score = score + end + else + if is_teacher == 1 + homework.score = @m_score + homework.is_teacher_score = 1 + end + end + homework.save! + end - #淇濆瓨璇勫垎 - @homework.rate(@m_score.to_i,User.current.id,:quality) if @m_score #淇濆瓨璇勮 @is_comprehensive_evaluation = @is_teacher ? 1 : (@is_anonymous_comments ? 2 : 3) #鍒ゆ柇褰撳墠璇勮鏄佸笀璇勮锛熷尶璇勶紵鐣欒█ if params[:new_form] && params[:new_form][:user_message] && params[:new_form][:user_message] != "" #鏈夋病鏈夌暀瑷 @homework.addjours User.current.id, params[:new_form][:user_message],0,@is_comprehensive_evaluation end - teachers = find_course_teachers(@homework.bid.courses.first) - @stars_reates = @homework.rates(:quality) - @teacher_stars = @stars_reates.where("rater_id in (#{teachers})") #鑰佸笀璇勫垎鍒楄〃 - @student_stars = @stars_reates.where("rater_id not in (#{teachers})") #瀛︾敓璇勫垎鍒楄〃 + @teacher_stars = @stars_reates.where("is_teacher_score = 1") #鑰佸笀璇勫垎鍒楄〃 + @student_stars = @stars_reates.where("is_teacher_score = 0") #瀛︾敓璇勫垎鍒楄〃 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 #鐣欒█ if @cur_type == "1" #濡傛灉褰撳墠鏄佸笀鏈壒鍒楄〃锛岄渶瑕佸埛鏂版暣涓綔涓氬垪琛ㄧ晫闈 @bid = @homework.bid - get_not_batch_homework_list "s_socre","desc",teachers,@homework.bid_id + 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.*, - (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id IN (#{teachers}) 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 rater_id NOT IN (#{teachers})) AS s_score + @result_homework = HomeworkAttach.find_by_sql("SELECT homework_attaches.*, + (SELECT 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 ORDER BY updated_at DESC limit 0,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 == "3" #鍏ㄩ儴浣滀笟鍒楄〃 - @result_homework = 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 rater_id in (#{teachers})) AS t_score, - (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id not in (#{teachers})) AS s_score + @result_homework = HomeworkAttach.find_by_sql("SELECT homework_attaches.*, + (SELECT 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 ORDER BY updated_at DESC limit 0,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.*, - (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id IN (#{teachers})) AS t_score, - (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id NOT IN (#{teachers})) AS s_score, - (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 + @result_homework = HomeworkAttach.find_by_sql("SELECT homework_attaches.*, + (SELECT 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 ORDER BY updated_at DESC limit 0,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} AND is_teacher_score = #{is_teacher}) AS m_score FROM homework_attaches WHERE homework_attaches.id = #{@homework.id}").first else #鍏朵粬鐨勪笉鐢ㄧ @@ -552,7 +588,7 @@ class HomeworkAttachController < ApplicationController teacher_proportion end - def get_not_batch_homework_list sort,direction,teachers,bid_id + def get_not_batch_homework_list sort,direction,bid_id if sort == 't_socre' order_by = "t_score #{direction}" elsif sort == 's_socre' @@ -560,18 +596,65 @@ class HomeworkAttachController < ApplicationController elsif sort == 'time' order_by = "created_at #{direction}" end - all_homework_list = HomeworkAttach.eager_load(:attachments,:user,:rate_averages).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 rater_id IN (#{teachers})) AS t_score, - (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id NOT IN (#{teachers})) AS s_score + @all_homework_list = HomeworkAttach.eager_load(:attachments,:user,:rate_averages).find_by_sql("SELECT * FROM (SELECT homework_attaches.*, + (SELECT 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 ORDER BY updated_at DESC limit 0,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 #{order_by}) AS table1 WHERE table1.t_score IS NULL") - @homework_list = paginateHelper all_homework_list,10 + @homework_list = paginateHelper @all_homework_list,10 end #鑾峰彇鎸囧畾浣滀笟鐨勬墍鏈夋垚鍛 def users_for_homework homework homework.nil? ? [] : (homework.users + [homework.user]) 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 + + def homework_to_xls items + xls_report = StringIO.new + book = Spreadsheet::Workbook.new + sheet1 = book.create_worksheet :name => "homework" + + blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10 + 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_homework_name), + l(:excel_t_score),l(:excel_n_score),l(:excel_commit_time)]) + count_row = 1 + items.each do |homework| + sheet1[count_row,0]=homework.user.id + sheet1[count_row,1] = homework.user.lastname.to_s + homework.user.firstname.to_s + sheet1[count_row,2] = homework.user.login + sheet1[count_row,3] = homework.user.user_extensions.student_id + sheet1[count_row,4] = homework.user.mail + sheet1[count_row,5] = homework.name + sheet1[count_row,6] =(homework.t_score.nil? || (homework.t_score && homework.t_score.to_i == 0)) ? l(:label_without_score) : format("%.2f",homework.t_score) + sheet1[count_row,7] = homework.s_score.nil? ? l(:label_without_score) : format("%.2f",homework.s_score) + sheet1[count_row,8] = format_time(homework.created_at) + count_row += 1 + end + + book.write xls_report + xls_report.string + end end 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/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index e6ab0f431..fa0beb311 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -376,8 +376,8 @@ class UsersController < ApplicationController "show_changesets" => true } scope = User.logged.status(@status) - @search_by = params[:search_by] ? params[:search_by][:id] : 0 - scope = scope.like(params[:name],"0") if params[:name].present? + @search_by = params[:search_by] ? params[:search_by] :"0" + scope = scope.like(params[:name], @search_by) if params[:name].present? @user_count = scope.count @user_pages = Paginator.new @user_count, @limit, params['page'] @user_base_tag = params[:id] ? 'base_users':'users_base' diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb index 94717a4ce..c023a0ba3 100644 --- a/app/controllers/welcome_controller.rb +++ b/app/controllers/welcome_controller.rb @@ -110,6 +110,7 @@ class WelcomeController < ApplicationController def search search_condition = params[:q] search_type = params[:search_type].to_sym unless search_condition.blank? + search_by = params[:search_by] if search_type.nil? && params[:contests_search] && params[:name] != "" search_type = :contests @@ -127,11 +128,11 @@ class WelcomeController < ApplicationController when :contests redirect_to contests_url(:name => search_condition) when :users - redirect_to users_search_url(:name => search_condition) + redirect_to users_search_url(:name => search_condition,:search_by => search_by) when :users_teacher - redirect_to users_search_url(:name => search_condition, :role => :teacher) + redirect_to users_search_url(:name => search_condition, :search_by => search_by, :role => :teacher) when :users_student - redirect_to users_search_url(:name => search_condition, :role => :student) + redirect_to users_search_url(:name => search_condition, :search_by => search_by, :role => :student) else #redirect_to home_path, :alert => l(:label_sumbit_empty) (redirect_to home_url, :notice => l(:label_sumbit_empty);return) #if params[:name].blank? 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) diff --git a/app/models/member.rb b/app/models/member.rb index 446bb02e7..f1a139f74 100644 --- a/app/models/member.rb +++ b/app/models/member.rb @@ -117,25 +117,16 @@ class Member < ActiveRecord::Base # 鏌ユ壘姣忎釜瀛︾敓姣忎釜浣滀笟鐨勮瘎鍒 def student_homework_score score_count = 0 - homework_score = HomeworkAttach.find_by_sql("SELECT bids.`name`, 0 as score, - (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' - AND rateable_id = homework_attaches.id ) AS t_score, - (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' - AND rateable_id = homework_attaches.id ) AS s_score + homework_score = HomeworkAttach.find_by_sql("SELECT bids.name, homework_attaches.score as score FROM homework_attaches, bids where homework_attaches.user_id = #{self.user_id} and homework_attaches.bid_id IN (SELECT bid_id FROM homework_for_courses where course_id = #{self.course_id}) AND homework_attaches.bid_id = bids.id ") homework_score.each do |homework| - if !homework.t_score.nil? && homework.t_score != 0 - score = homework.t_score - else - if !homework.s_score.nil? - score= homework.s_score - else - score = 0 - end + mem_score = 0 + if homework[:score] + mem_score = homework[:score] end - score_count = score_count + score + score_count = score_count + mem_score end [homework_score, format("%0.2f", score_count)] end diff --git a/app/models/query.rb b/app/models/query.rb index 550047c57..19bd1bed5 100644 --- a/app/models/query.rb +++ b/app/models/query.rb @@ -173,6 +173,7 @@ class Query < ActiveRecord::Base :string => [ "=", "~", "!", "!~", "!*", "*" ], :text => [ "~", "!~", "!*", "*" ], :integer => [ "=", ">=", "<=", "><", "!*", "*" ], + :integer_done => [ "=", ">=", "<=", "><", "!*", "*" ], :float => [ "=", ">=", "<=", "><", "!*", "*" ], :relation => ["=", "=p", "=!p", "!p", "!*", "*"] } @@ -217,6 +218,8 @@ class Query < ActiveRecord::Base case type_for(field) when :integer add_filter_error(field, :invalid) if values_for(field).detect {|v| v.present? && !v.match(/^[+-]?\d+$/) } + when :integer_done + add_filter_error(field, :invalid) if values_for(field).detect {|v| v.present? && !v.match(/^[+-]?\d+$/) || (v.match(/^[+-]?\d+$/) && (v.to_i<0 || v.to_i> 100)) } when :float add_filter_error(field, :invalid) if values_for(field).detect {|v| v.present? && !v.match(/^[+-]?\d+(\.\d*)?$/) } when :date, :date_past @@ -602,6 +605,12 @@ class Query < ActiveRecord::Base else sql = "#{db_table}.#{db_field} = #{value.first.to_i}" end + when :integer_done + if is_custom_filter + sql = "(#{db_table}.#{db_field} <> '' AND CAST(CASE #{db_table}.#{db_field} WHEN '' THEN '0' ELSE #{db_table}.#{db_field} END AS decimal(30,3)) = #{value.first.to_i})" + else + sql = "#{db_table}.#{db_field} = #{value.first.to_i}" + end when :float if is_custom_filter sql = "(#{db_table}.#{db_field} <> '' AND CAST(CASE #{db_table}.#{db_field} WHEN '' THEN '0' ELSE #{db_table}.#{db_field} END AS decimal(30,3)) BETWEEN #{value.first.to_f - 1e-5} AND #{value.first.to_f + 1e-5})" diff --git a/app/models/seems_rateable_rates.rb b/app/models/seems_rateable_rates.rb new file mode 100644 index 000000000..664f987ba --- /dev/null +++ b/app/models/seems_rateable_rates.rb @@ -0,0 +1,3 @@ +class SeemsRateableRates < ActiveRecord::Base + attr_accessible :rater_id, :rateable_id, :rateable_type, :stars, :dimension, :is_teacher_score +end diff --git a/app/views/bids/_homework_list.html.erb b/app/views/bids/_homework_list.html.erb index 202a2ee91..6572ee2c9 100644 --- a/app/views/bids/_homework_list.html.erb +++ b/app/views/bids/_homework_list.html.erb @@ -59,7 +59,7 @@ :locals => {:homeworks => @homework_list, :homework_count => @obj_count, :remote => false, - :is_student_batch_homework => @is_student_batch_homework}%> + :not_batch_homework => @not_batch_homework,:is_student_batch_homework => @is_student_batch_homework}%> diff --git a/app/views/courses/_join_private_course.html.erb b/app/views/courses/_join_private_course.html.erb index e3e75b9d7..343e7252a 100644 --- a/app/views/courses/_join_private_course.html.erb +++ b/app/views/courses/_join_private_course.html.erb @@ -13,7 +13,7 @@ a{ text-decoration:none; } a:hover{ } - + .alert_box {width:488px;height:550px;position:fixed;z-index:1002;left:50%;top:40%;margin:-215px 0 0 -300px; background:#fff; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px; box-shadow:0px 0px 8px #194a81; padding:5px; overflow:auto; } #popbox{width:488px;height:308px;} .alert .C{width:476px;height:296px;position:absolute;left:5px;top:5px; } .C_top{ margin-top:20px; width:368px; height:100px; background:#e9e9e9; padding:0px 60px; } @@ -21,7 +21,7 @@ .C_top p{ color:#a9aaaa; line-height:22px;} .C_form{ margin:20px 0 0 60px;} .C_form ul li{ font-size:14px; color:#3f3a39; line-height:30px; } - .C_form ul li input{ margin-left:30px; border:0px; border:1px solid #e1e1e1; color:#898989; padding-left:5px; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px; } + .C_form ul li input{ margin-left:20px; border:0px; border:1px solid #e1e1e1; color:#898989; padding-left:5px; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px; padding: 0 !important; } .C_form ul li.mB5{ color:#898989; font-size:12px; padding-left:90px;} .width190{ width:190px; height:26px; border-color:#e1e1e1;} .C_form a{ font-size:12px; color:#15bccf; float:left; display:block; height:40px; width:200px; margin-top:25px;} @@ -35,6 +35,11 @@ hideModal(obj); $("#new-watcher-form").submit(); } + + function hidden_join_course_form() + { + hideModal($("#popbox")); + } @@ -55,6 +60,7 @@
  • 璇 绋 ID锛 +
  • 璇剧▼ID鏄墍鍦ㄨ绋嬬綉鍧涓樉绀虹殑搴忓彿
  • @@ -62,8 +68,12 @@
  • - <%= l(:label_new_join) %> - <%= l(:button_cancel)%> + + <%= l(:label_new_join) %> + + + <%= l(:button_cancel)%> +
  • <% end%> diff --git a/app/views/courses/_member_list.html.erb b/app/views/courses/_member_list.html.erb index 9b3a0443d..41b4f41e7 100644 --- a/app/views/courses/_member_list.html.erb +++ b/app/views/courses/_member_list.html.erb @@ -1,13 +1,4 @@ - +
    <% if User.current.logged? && User.current.member_of_course?(@course) && @group %> <% if !@canShowCode %> @@ -34,16 +25,22 @@
    <% if @subPage_title == l(:label_student_list) %> - <%= link_to format("%0.2f",member.score.to_s), { + <%= link_to format("%0.2f",member.score.nil? ? 0 : member.score.to_s), { :action => 'show_member_score', :member_id => member.id, :remote => true}, @@ -101,7 +98,7 @@
    <% else %>

    diff --git a/app/views/courses/_searchmembers.html.erb b/app/views/courses/_searchmembers.html.erb new file mode 100644 index 000000000..71bacd02e --- /dev/null +++ b/app/views/courses/_searchmembers.html.erb @@ -0,0 +1,12 @@ +<% 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 %> + <%= link_to l(:label_export_excel), export_course_member_excel_course_path(@course,:format => 'xls'),:class=>'xls'%> +<% end %> \ No newline at end of file diff --git a/app/views/courses/_show_member_score.html.erb b/app/views/courses/_show_member_score.html.erb index 57dd7b2be..0f962da81 100644 --- a/app/views/courses/_show_member_score.html.erb +++ b/app/views/courses/_show_member_score.html.erb @@ -40,16 +40,8 @@

    diff --git a/app/views/courses/join_private_courses.js.erb b/app/views/courses/join_private_courses.js.erb index 0cf723f6b..254311ce7 100644 --- a/app/views/courses/join_private_courses.js.erb +++ b/app/views/courses/join_private_courses.js.erb @@ -1,3 +1,9 @@ $('#ajax-modal').html('<%= escape_javascript(render :partial => 'join_private_course') %>'); showModal('ajax-modal', '510px'); -$('#ajax-modal').css('height','330px'); \ No newline at end of file +$('#ajax-modal').css('height','330px'); +$('#ajax-modal').siblings().remove(); +$('#ajax-modal').before("" + + ""); +$('#ajax-modal').parent().removeClass("alert_praise"); +$('#ajax-modal').parent().css("top","").css("left",""); +$('#ajax-modal').parent().addClass("alert_box"); 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' %>
    -