diff --git a/Gemfile b/Gemfile index e40c468aa..758ef59dd 100644 --- a/Gemfile +++ b/Gemfile @@ -4,9 +4,9 @@ unless RUBY_PLATFORM =~ /w32/ # unix-like only gem 'iconv' if RUBY_PLATFORM =~ /darwin/ - gem "rmagick", "= 2.15.4" ## osx must be this version + # gem "rmagick", "= 2.15.4" ## osx must be this version elsif RUBY_PLATFORM =~ /linux/ - gem "rmagick", "~> 2.13.1" ## centos yum install ImageMagick-devel + # gem "rmagick", "~> 2.13.1" ## centos yum install ImageMagick-devel end gem 'certified' gem 'net-ssh', '2.9.1' diff --git a/app/assets/javascripts/training_tasks.js.coffee b/app/assets/javascripts/training_tasks.js.coffee new file mode 100644 index 000000000..b3f5f376b --- /dev/null +++ b/app/assets/javascripts/training_tasks.js.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ diff --git a/app/assets/stylesheets/training_tasks.css.scss b/app/assets/stylesheets/training_tasks.css.scss new file mode 100644 index 000000000..5a071ec72 --- /dev/null +++ b/app/assets/stylesheets/training_tasks.css.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the training_tasks controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/controllers/account_controller.rb b/app/controllers/account_controller.rb index 6e91035d0..4c7d578ba 100644 --- a/app/controllers/account_controller.rb +++ b/app/controllers/account_controller.rb @@ -42,7 +42,7 @@ class AccountController < ApplicationController redirect_to user_path(User.current) end else - render :layout => 'login' + render :layout => 'login' end else authenticate_user @@ -279,6 +279,14 @@ class AccountController < ApplicationController render :json => result end + def change_email + user = User.find params[:user_id].to_i + user.update_attributes(:mail => params[:value]) + result = {:email => user.mail} + + render :json => result + end + def email_activation diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb index ece68733b..9d51e5839 100644 --- a/app/controllers/admin_controller.rb +++ b/app/controllers/admin_controller.rb @@ -783,8 +783,8 @@ class AdminController < ApplicationController begin #更新消息表的status applied_message_id = aas.school_id - applied_message = AppliedMessage.where(:applied_id => applied_message_id, :applied_type => "ApplyAddSchools") - applied_message.update_all(:status => 2) + #applied_message = AppliedMessage.where(:applied_id => applied_message_id, :applied_type => "ApplyAddSchools") + #applied_message.update_all(:status => 2) aas.update_attribute(:status, 2) AppliedMessage.create(:user_id => aas.user_id, :status => 2, :viewed => 0, :applied_id => aas.id, :applied_type => "ApplyAddSchools", :name => school[0].name ) users = UserExtensions.where("school_id = #{aas.school_id}") @@ -978,7 +978,11 @@ class AdminController < ApplicationController #作业 def homework #@homework = HomeworkCommon.order('end_time desc') - @homework = HomeworkCommon.order( 'created_at desc ') + if params[:type] == "2" + @homework = HomeworkCommon.where(:homework_type => 2).order( 'created_at desc ') + else + @homework = HomeworkCommon.order( 'created_at desc ') + end @homework = paginateHelper @homework,30 @page = (params['page'] || 1).to_i - 1 respond_to do |format| diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index cd989ef2d..8a3445494 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -312,7 +312,11 @@ class ApplicationController < ActionController::Base def authorize_allowed(ctrl = params[:controller], action = params[:action], global = false) #modify by NWB if @project - allowed = User.current.allowed_to?({:controller => ctrl, :action => action}, @project || @projects, :global => global) + if ctrl == "repositories" && action == "show" && @project.hidden_repo + allowed = User.current.admin? || (User.current.member_of?(@project) && !(role_of_members_in_project(@project.id, User.current.id) == "Reporter")) + else + allowed = User.current.allowed_to?({:controller => ctrl, :action => action}, @project || @projects, :global => global) + end elsif @course allowed = User.current.allowed_to?({:controller => ctrl, :action => action}, @course || @courses, :global => global) else diff --git a/app/controllers/at_controller.rb b/app/controllers/at_controller.rb index 66cbf27b8..81d678261 100644 --- a/app/controllers/at_controller.rb +++ b/app/controllers/at_controller.rb @@ -29,6 +29,8 @@ class AtController < ApplicationController case type when "Issue" find_issue(id) + whne 'TrainingTask' + find_training_task(id) when 'Project' find_project(id) when 'Course' @@ -69,6 +71,13 @@ class AtController < ApplicationController at_persons.uniq { |u| u.id }.delete_if { |u| u.id == User.current.id } end + def find_training_task(id) + training_task = TrainingTask.find(id) + journals = training_task.journals + at_persons = journals.map(&:user) + training_task.project.users + at_persons.uniq { |u| u.id }.delete_if { |u| u.id == User.current.id } + end + def find_project(id) return [] if id.to_i<0 at_persons = Project.find(id).users diff --git a/app/controllers/blog_comments_controller.rb b/app/controllers/blog_comments_controller.rb index b2dd971bb..88d4c4d53 100644 --- a/app/controllers/blog_comments_controller.rb +++ b/app/controllers/blog_comments_controller.rb @@ -39,6 +39,9 @@ class BlogCommentsController < ApplicationController end end def show + # 更新博客消息为已读 + update_messsages_to_viewed("BlogMessage", params[:blog_id]) + @article = BlogComment.find(params[:id]) @replies = BlogComment.where("root_id = #{@article.id}").reorder("created_on desc") @reply_count = @replies.count diff --git a/app/controllers/boards_controller.rb b/app/controllers/boards_controller.rb index 2f7d66ee0..b8c2c3880 100644 --- a/app/controllers/boards_controller.rb +++ b/app/controllers/boards_controller.rb @@ -199,7 +199,7 @@ class BoardsController < ApplicationController end else respond_to do |format| - format.js + format.js {render "show.js.erb"} format.html { if @project render :action => 'show', :layout => 'base_projects' diff --git a/app/controllers/comments_controller.rb b/app/controllers/comments_controller.rb index 99c9b9af7..1dbaa13e8 100644 --- a/app/controllers/comments_controller.rb +++ b/app/controllers/comments_controller.rb @@ -24,7 +24,7 @@ class CommentsController < ApplicationController before_filter :authorize, :except => [:destroy] def create - raise Unauthorized unless @news.commentable? + #raise Unauthorized unless @news.commentable? if !@news.org_subfield_id.nil? @org_subfield = OrgSubfield.find(@news.org_subfield_id) end diff --git a/app/controllers/contests_controller.rb b/app/controllers/contests_controller.rb index e6fb49ec7..e8285074a 100644 --- a/app/controllers/contests_controller.rb +++ b/app/controllers/contests_controller.rb @@ -7,7 +7,8 @@ class ContestsController < ApplicationController helper :attachments helper :files include AvatarHelper - + include ApplicationHelper + before_filter :find_contest, :only => [:show, :settings, :update, :destroy, :contest_activities, :private_or_public, :switch_role, :set_invite_code_halt, :renew, :member, :export_all_members, :feedback] before_filter :is_logged, :only => [:index, :new, :create] @@ -18,10 +19,37 @@ class ContestsController < ApplicationController def show #更新创建课程消息状态 - contest_request_messages = ContestMessage.where("user_id = #{User.current.id} and contest_id = #{@contest.id} and contest_message_type in ('ContestRequestDealResult', 'JoinContest', 'RemoveFromContest') and viewed = 0") - contest_request_messages.update_all(:viewed => true) + update_messsages_to_viewed("ContestMessage", @contest) @left_nav_type = 1 + contest_activities = @contest.contest_activities + @page = params[:page] ? params[:page].to_i + 1 : 0 + if params[:type].present? + case params[:type] + when "work" + @contest_activities = contest_activities.where("contest_act_type = 'Work'").order('updated_at desc') + when "news" + @contest_activities = contest_activities.where("contest_act_type = 'News'").order('updated_at desc') + when "message" + @contest_activities = contest_activities.where("contest_act_type = 'Message'").order('updated_at desc') + when "poll" + @contest_activities = contest_activities.where("contest_act_type = 'Poll'").order('updated_at desc') + when "attachment" + @contest_activities = contest_activities.where("contest_act_type = 'Attachment'").order('updated_at desc') + when "journalsForMessage" + @contest_activities = contest_activities.where("contest_act_type = 'JournalsForMessage'").order('updated_at desc') + when "news" + @contest_activities = contest_activities.where("contest_act_type = 'News'").order('updated_at desc') + else + @contest_activities = contest_activities.order('updated_at desc') + end + else + @contest_activities = contest_activities.order('updated_at desc') + end + @contest_activities_count = @contest_activities.count + @contest_activities = @contest_activities.limit(10).offset(@page * 10) + @type = params[:type] + respond_to do |format| format.js format.html diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 2f47fb808..bf1b88b4c 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -9,6 +9,7 @@ class CoursesController < ApplicationController helper :attachments helper :files helper :activity_notifys + include ApplicationHelper before_filter :auth_login1, :only => [:show, :course_activity, :feedback] menu_item :overview @@ -354,6 +355,44 @@ class CoursesController < ApplicationController #search_group_members group end + def change_manager + if params[:chooseteacher] + man_member = Member.where(:course_id => @course.id, :user_id => @course.tea_id).first + cha_member = Member.find params[:chooseteacher] + if man_member && cha_member + cha_member.member_roles.where("role_id = 9 || role_id = 7").first.update_attributes(:role_id => 3, :is_current => 1) + if cha_member.member_roles.where("role_id = 10").count > 0 + cha_member.member_roles.where("role_id = 10").first.destroy + StudentsForCourse.where(:course_id => @course.id, :student_id => cha_member.user_id).destroy_all + end + @course.update_attributes(:tea_id => cha_member.user_id) + man_member.member_roles.first.update_attributes(:role_id => 9) + course_act = CourseActivity.where(:course_id => @course.id, :course_act_id => @course.id, :course_act_type => 'Course').first + course_act.update_column('user_id', cha_member.user_id) + UserActivity.where(:act_id => @course.id, :container_type => 'Course', :act_type => 'Course', :container_id => @course.id).first.update_column('user_id', cha_member.user_id) + ws = WechatService.new + title = "您已成为班级管理员" + ws.create_class_notice cha_member.user_id, "create_course_notice", @course.id,title, @course.name, man_member.user.show_name, @course.members.count, "点击查看班级详情。" + end + end + end + + def search_course_teacher_list + q = params[:search] ? "#{params[:search].strip}" : "" + @members = searchTeacherAndAssistantNoManager(@course) + if q.nil? || q == "" + else + members = [] + @members.each do |m| + username = m.user[:lastname].to_s.downcase + m.user[:firstname].to_s.downcase + if m && m.user && (m.user[:login].to_s.downcase.include?(q) || m.user[:mail].to_s.downcase.include?(q) || username.include?(q)) + members << m + end + end + @members = members + end + end + #查找未分班的学生 def search_not_group_member @group = CourseGroup.find params[:group_id] @@ -454,6 +493,8 @@ class CoursesController < ApplicationController end def member + # 当前用户查看班级消息时,设置消息为已读 + update_messsages_to_viewed("CourseMessage", @course) ## 有角色参数的才是课程,没有的就是项目 if (User.current.admin? || @course.is_public == 1 || (@course.is_public == 0 && User.current.member_of_course?(@course))) @render_file = 'new_member_list' @@ -512,7 +553,7 @@ class CoursesController < ApplicationController @all_members = searchmember_by_name(student_homework_score(0, 0, 10,"desc"), q) end - @homeworks = @course.homework_commons.where("publish_time <= '#{Date.today}'").order("created_at asc") + @homeworks = @course.homework_commons.where("publish_time <= '#{Time.now}'").order("created_at asc") filename="#{@course.teacher.lastname.to_s + @course.teacher.firstname.to_s }_#{@course.name}_#{@course.time.to_s + @course.term}#{l(:excel_member_list)}"; respond_to do |format| @@ -715,8 +756,8 @@ class CoursesController < ApplicationController new_homework.name = homework.name new_homework.user_id = User.current.id new_homework.description = homework.description - new_homework.publish_time = Date.today + 30 - new_homework.end_time = Date.today + 60 + new_homework.publish_time = Time.now + 30.days + new_homework.end_time = Time.now + 60 new_homework.homework_type = homework.homework_type new_homework.late_penalty = homework.late_penalty new_homework.course_id = @course.id @@ -780,7 +821,7 @@ class CoursesController < ApplicationController attach_copied_obj.author_id = User.current.id attach_copied_obj.copy_from = attachment.copy_from.nil? ? attachment.id : attachment.copy_from attach_copied_obj.is_publish = 0 - attach_copied_obj.publish_time = Date.today + 30 + attach_copied_obj.publish_time = Time.now + 30.days if attach_copied_obj.attachtype == nil attach_copied_obj.attachtype = 4 end @@ -1366,7 +1407,7 @@ class CoursesController < ApplicationController if @is_teacher @homeworks = @course.homework_commons.where("name like '%#{@search}%'").order("created_at desc").limit(10).offset(@page * 10) else - @homeworks = @course.homework_commons.where("name like '%#{@search}%' and publish_time <= '#{Date.today}'").order("created_at desc").limit(10).offset(@page * 10) + @homeworks = @course.homework_commons.where("name like '%#{@search}%' and publish_time <= '#{Time.now}'").order("created_at desc").limit(10).offset(@page * 10) end end @@ -1388,11 +1429,19 @@ class CoursesController < ApplicationController @members = @course.course_homework_statisticss.reorder("#{@type} #{@order}, total_score #{@order}") elsif params[:tab] == "3" + @homework_id = params[:homework_id] ? params[:homework_id].to_i : 0 @type = params[:type] ? params[:type] : 'project_act_score' - sql = "SELECT (IFNULL(changeset_num, 0)*4 + issue_num*4 + issue_journal_num*1 + attach_num*5 + board_num*2 + board_message_num*1) AS project_act_score, + if @homework_id == 0 + sql = "SELECT (IFNULL(changeset_num, 0)*4 + issue_num*4 + issue_journal_num*1 + attach_num*5 + board_num*2 + board_message_num*1) AS project_act_score, changeset_num, issue_num, issue_journal_num, attach_num, board_num, board_message_num, pss.project_id FROM project_scores pss JOIN student_work_projects ON student_work_projects.project_id = pss.project_id AND student_work_projects.course_id = #{@course.id} GROUP BY pss.project_id ORDER BY #{@type} #{@order}, project_act_score #{@order}" + else + sql = "SELECT (IFNULL(changeset_num, 0)*4 + issue_num*4 + issue_journal_num*1 + attach_num*5 + board_num*2 + board_message_num*1) AS project_act_score, + changeset_num, issue_num, issue_journal_num, attach_num, board_num, board_message_num, pss.project_id FROM project_scores pss + JOIN student_work_projects ON student_work_projects.project_id = pss.project_id AND student_work_projects.course_id = #{@course.id} AND student_work_projects.homework_common_id = #{@homework_id} + GROUP BY pss.project_id ORDER BY #{@type} #{@order}, project_act_score #{@order}" + end @members = ProjectScore.find_by_sql(sql) end diff --git a/app/controllers/forums_controller.rb b/app/controllers/forums_controller.rb index 8eff74041..0f5a55ab9 100644 --- a/app/controllers/forums_controller.rb +++ b/app/controllers/forums_controller.rb @@ -143,7 +143,7 @@ class ForumsController < ApplicationController reorder(order). preload(:author, {:last_reply => :author}). all - @forums = Forum.reorder("topic_count desc,updated_at desc") + @forums = Forum.find_by_sql("SELECT *,topic_count + memo_count tm FROM `forums` order by tm desc;") @my_forums_count = Memo.where("author_id =? and parent_id is null", User.current.id).count @my_memos_count = Memo.where("author_id =? and parent_id is not null", User.current.id).count @errors = params[:errors] diff --git a/app/controllers/homework_common_controller.rb b/app/controllers/homework_common_controller.rb index d5511cb44..031a228ce 100644 --- a/app/controllers/homework_common_controller.rb +++ b/app/controllers/homework_common_controller.rb @@ -6,8 +6,12 @@ class HomeworkCommonController < ApplicationController include StudentWorkHelper before_filter :find_course, :only => [:index,:new,:create] - before_filter :find_homework, :only => [:edit,:update,:alert_anonymous_comment,:start_anonymous_comment,:stop_anonymous_comment,:destroy,:start_evaluation_set,:set_evaluation_attr,:score_rule_set,:alert_forbidden_anonymous_comment,:alert_open_student_works,:open_student_works,:set_score_open,:alert_score_open_modal] - before_filter :teacher_of_course, :only => [:new, :create, :edit, :update, :destroy, :start_anonymous_comment, :stop_anonymous_comment, :alert_anonymous_comment,:start_evaluation_set,:set_evaluation_attr,:score_rule_set,:alert_forbidden_anonymous_comment,:alert_open_student_works,:open_student_works] + before_filter :find_homework, :only => [:edit,:update,:alert_anonymous_comment,:start_anonymous_comment,:stop_anonymous_comment,:destroy,:start_evaluation_set, + :set_evaluation_attr,:score_rule_set,:alert_forbidden_anonymous_comment,:alert_open_student_works,:open_student_works, + :set_score_open,:alert_score_open_modal,:add_to_homework_bank,:publish_homework] + before_filter :teacher_of_course, :only => [:new, :create, :edit, :update, :destroy, :start_anonymous_comment, :stop_anonymous_comment, :alert_anonymous_comment, + :start_evaluation_set,:set_evaluation_attr,:score_rule_set,:alert_forbidden_anonymous_comment,:alert_open_student_works, + :open_student_works,:add_to_homework_bank,:publish_homework] before_filter :member_of_course, :only => [:index] def index @@ -25,7 +29,7 @@ class HomeworkCommonController < ApplicationController @homework_commons = @course.homework_commons.where("name like '%#{search}%'").order("created_at desc") else #@homeworks = @course.homework_commons.where("publish_time <= '#{Date.today}'").order("created_at desc").limit(10).offset(@page * 10) - @homework_commons = @course.homework_commons.where("name like '%#{search}%' and publish_time <= '#{Date.today}'").order("created_at desc") + @homework_commons = @course.homework_commons.where("name like '%#{search}%' and publish_time <= '#{Time.now}'").order("created_at desc") end #update_homework_time @homework_commons @is_student = User.current.logged? && (User.current.admin? || (User.current.member_of_course?(@course) && !@is_teacher)) @@ -80,88 +84,105 @@ class HomeworkCommonController < ApplicationController def update if params[:homework_common] + is_update = @homework.name != params[:homework_common][:name] || @homework.description != params[:homework_common][:description] || params[:homework_type].to_i != @homework.homework_type + if params[:homework_type].to_i == 2 + is_update = is_update || params[:language_type] != @homework.homework_detail_programing.language + if !is_update && params[:sample] && params[:program] + is_update = params[:sample][:input] != @homework.homework_samples.map(&:input) || params[:sample][:output] != @homework.homework_samples.map(&:output) || params[:program][:input] != @homework.homework_tests.map(&:input)|| params[:program][:output] != @homework.homework_tests.map(&:output) + end + elsif params[:homework_type].to_i == 3 + base_on_project = params[:base_on_project] ? 1 : 0 + is_update = is_update || params[:min_num].to_i != @homework.homework_detail_group.min_num || params[:max_num].to_i != @homework.homework_detail_group.max_num || base_on_project != @homework.homework_detail_group.base_on_project + end + @homework.is_update = @homework.is_update || is_update + @homework.name = params[:homework_common][:name] @homework.description = params[:homework_common][:description] - if params[:homework_common][:publish_time] == "" - @homework.publish_time = Date.today - else - @homework.publish_time = params[:homework_common][:publish_time] - end homework_detail_manual = @homework.homework_detail_manual || HomeworkDetailManual.new - param_end_time = Time.parse(params[:homework_common][:end_time]).strftime("%Y-%m-%d") - homework_end_time = @homework.end_time ? Time.parse(@homework.end_time.to_s).strftime("%Y-%m-%d") : '' - if homework_end_time != param_end_time - if homework_end_time > param_end_time - @homework.student_works.where("work_status = 1").each do |st| - if param_end_time < Time.parse(st.commit_time.to_s).strftime("%Y-%m-%d") - st.late_penalty = @homework.late_penalty - st.work_status = 2 - st.save - #更新CourseHomeworkStatistics中学生的迟交作品数 - course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, st.user_id) - course_statistics.update_attribute('late_commit_work_num', course_statistics.late_commit_work_num + 1) if course_statistics - end - end + if params[:homework_common][:end_time] != "" + if params[:homework_common][:publish_time] == "" + @homework.publish_time = Time.now else - @homework.student_works.where("work_status = 2").each do |st| - if param_end_time >= Time.parse(st.commit_time.to_s).strftime("%Y-%m-%d") - st.late_penalty = 0 - st.work_status = 1 - st.save - #更新CourseHomeworkStatistics中学生的迟交作品数 - course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, st.user_id) - course_statistics.update_attribute('late_commit_work_num', (course_statistics.late_commit_work_num - 1) < 0 ? 0 : (course_statistics.late_commit_work_num - 1)) if course_statistics + @homework.publish_time = params[:homework_common][:publish_time] + end + param_end_time = Time.parse(params[:homework_common][:end_time]) + homework_end_time = @homework.end_time ? @homework.end_time : '' + if homework_end_time != param_end_time + if homework_end_time > param_end_time + @homework.student_works.where("work_status = 1").each do |st| + if param_end_time < st.commit_time + st.late_penalty = @homework.late_penalty + st.work_status = 2 + st.save + #更新CourseHomeworkStatistics中学生的迟交作品数 + course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, st.user_id) + course_statistics.update_attribute('late_commit_work_num', course_statistics.late_commit_work_num + 1) if course_statistics + end + end + else + @homework.student_works.where("work_status = 2").each do |st| + if param_end_time >= Time.parse(st.commit_time.to_s).strftime("%Y-%m-%d") + st.late_penalty = 0 + st.work_status = 1 + st.save + #更新CourseHomeworkStatistics中学生的迟交作品数 + course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, st.user_id) + course_statistics.update_attribute('late_commit_work_num', (course_statistics.late_commit_work_num - 1) < 0 ? 0 : (course_statistics.late_commit_work_num - 1)) if course_statistics + end end end end + @homework.end_time = params[:homework_common][:end_time] || Time.now + + status = false + if @homework.publish_time > Time.now && homework_detail_manual.comment_status == 1 + homework_detail_manual.comment_status = 0 + @homework.student_works.destroy_all + #更新CourseHomeworkStatistics中每个学生的未交作品数 + @homework.course.student.each do |student| + course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, student.student_id) + course_statistics.update_attribute('un_commit_work_num', (course_statistics.un_commit_work_num - 1) < 0 ? 0 : (course_statistics.un_commit_work_num - 1)) if course_statistics + end + elsif @homework.publish_time <= Time.now && homework_detail_manual.comment_status == 0 + homework_detail_manual.comment_status = 1 + create_works_list @homework if params[:homework_type].to_i != 3 + status = true + #更新CourseHomeworkStatistics中每个学生的未交作品数 + @homework.course.student.each do |student| + course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, student.student_id) + course_statistics.update_attribute('un_commit_work_num', course_statistics.un_commit_work_num + 1) if course_statistics + end + end + + eval_start = homework_detail_manual.evaluation_start + if eval_start.nil? || (Time.parse(eval_start.to_s) <= @homework.end_time && homework_detail_manual.comment_status <= 1) + homework_detail_manual.evaluation_start = @homework.end_time + 7 + homework_detail_manual.evaluation_end = homework_detail_manual.evaluation_start + 7 + end end - @homework.end_time = params[:homework_common][:end_time] || Time.now - @homework.course_id = params[:course_id] + if params[:homework_type] && params[:homework_type].to_i != @homework.homework_type if @homework.homework_type == 2 @homework.homework_detail_programing.destroy if @homework.homework_detail_programing @homework.homework_tests.destroy_all elsif @homework.homework_type == 3 @homework.homework_detail_group.destroy if @homework.homework_detail_group - create_works_list @homework + create_works_list @homework if homework_detail_manual.comment_status > 0 && @homework.student_works.empty? end if params[:homework_type].to_i == 3 @homework.student_works.destroy_all end + @homework.homework_type = params[:homework_type].to_i end - @homework.homework_type = params[:homework_type].to_i || @homework.homework_type anonymous = params[:homework_common][:anonymous_comment] ? params[:homework_common][:anonymous_comment].to_i : 1 if anonymous != @homework.anonymous_comment - if anonymous == 1 + if anonymous == 1 homework_detail_manual.ta_proportion = @homework.homework_type == 2 ? 0.4 : 1.0 else homework_detail_manual.ta_proportion = @homework.homework_type == 2 ? 0.3 : 0.6 end end - status = false - if @homework.publish_time > Date.today && homework_detail_manual.comment_status == 1 - homework_detail_manual.comment_status = 0 - @homework.student_works.destroy_all - #更新CourseHomeworkStatistics中每个学生的未交作品数 - @homework.course.student.each do |student| - course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, student.student_id) - course_statistics.update_attribute('un_commit_work_num', (course_statistics.un_commit_work_num - 1) < 0 ? 0 : (course_statistics.un_commit_work_num - 1)) if course_statistics - end - elsif @homework.publish_time <= Date.today && homework_detail_manual.comment_status == 0 - homework_detail_manual.comment_status = 1 - status = true - #更新CourseHomeworkStatistics中每个学生的未交作品数 - @homework.course.student.each do |student| - course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, student.student_id) - course_statistics.update_attribute('un_commit_work_num', course_statistics.un_commit_work_num + 1) if course_statistics - end - end - eval_start = homework_detail_manual.evaluation_start - if eval_start.nil? || (eval_start <= @homework.end_time && homework_detail_manual.comment_status <= 1) - homework_detail_manual.evaluation_start = @homework.end_time + 7 - homework_detail_manual.evaluation_end = homework_detail_manual.evaluation_start + 7 - end @homework.save_attachments(params[:attachments]) render_attachment_warning_if_needed(@homework) @@ -178,6 +199,17 @@ class HomeworkCommonController < ApplicationController end end + @homework.homework_samples.delete_all if params[:sample] + sample_inputs = params[:sample][:input] if params[:sample] + if Array === sample_inputs + sample_inputs.each_with_index do |val, i| + @homework.homework_samples << HomeworkSample.new( + input: val, + output: params[:sample][:output][i] + ) + end + end + @homework.homework_tests.delete_all if params[:program] inputs = params[:program][:input] if params[:program] if Array === inputs @@ -211,9 +243,9 @@ class HomeworkCommonController < ApplicationController @homework_detail_programing.save if @homework_detail_programing @homework_detail_group.save if @homework_detail_group - if @homework.homework_type != 3 && homework_detail_manual.comment_status == 1 && status - create_works_list @homework - end + # if @homework.homework_type != 3 && homework_detail_manual.comment_status == 1 && status + # create_works_list @homework + # end @hw_status = params[:hw_status].to_i if params[:is_manage] == "1" @@ -280,6 +312,85 @@ class HomeworkCommonController < ApplicationController end end + #加入到题库 + def add_to_homework_bank + if params[:type] && (params[:type].to_i == 1 || params[:type].to_i == 3) + if params[:type].to_i == 3 + old_banks = HomeworkBank.where(:homework_common_id => @homework.id) + unless old_banks.blank? + old_banks.each do |bank| + bank.update_attributes(:quotes => (bank.quotes - 1) > 0 ? (bank.quotes - 1) : 0) + end + end + end + homework_bank = add_to_homework_bank_f @homework + homework_bank.save + @homework.update_attributes(:homework_bank_id => homework_bank.id) + elsif params[:type].to_i == 2 + homework_bank = HomeworkBank.where(:id => @homework.homework_bank_id).first + if homework_bank + homework_bank.update_attributes(:name => @homework.name, :description => @homework.description, :homework_type => @homework.homework_type) + if @homework.homework_type == 2 && @homework.homework_detail_programing + homework_bank.update_attributes(:language => @homework.homework_detail_programing.language) + homework_bank.homework_bank_tests.destroy_all + @homework.homework_tests.each_with_index do |homework_test| + homework_bank.homework_bank_tests << HomeworkBankTest.new( + test_type: 1, + input: homework_test.input, + output: homework_test.output + ) + end + @homework.homework_samples.each_with_index do |homework_test| + homework_bank.homework_bank_tests << HomeworkBankTest.new( + test_type: 0, + input: homework_test.input, + output: homework_test.output + ) + end + elsif @homework.homework_type == 3 && @homework.homework_detail_group + homework_bank.update_attributes(:min_num => @homework.homework_detail_group.min_num, :max_num => @homework.homework_detail_group.max_num, :base_on_project => @homework.homework_detail_group.base_on_project) + end + end + end + if @homework.is_update + @homework.update_attributes(:is_update => 0) + end + @user_activity_id = params[:user_activity_id].to_i + @hw_status = params[:hw_status].to_i + @is_teacher = User.current.admin? || User.current.allowed_to?(:as_teacher, @course) + end + + def publish_homework + if @homework.homework_detail_manual.comment_status > 0 + @status = 1 + elsif @homework.publish_time.nil? + @status = 2 + else + homework_detail_manual = @homework.homework_detail_manual + homework_detail_manual.update_column('comment_status', 1) + @homework.update_attributes(:publish_time => Time.now) + @status = 3 + if @homework.homework_type != 3 + create_works_list @homework + end + #更新CourseHomeworkStatistics中每个学生的未交作品数 + @course.student.each do |student| + course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, student.student_id) + course_statistics.update_attribute('un_commit_work_num', course_statistics.un_commit_work_num + 1) if course_statistics + end + + @course.members.each do |m| + @homework.course_messages << CourseMessage.new(:user_id => m.user_id, :course_id => @course.id, :viewed => false, :status => nil) + end + if @homework.course_acts.size == 0 + @homework.course_acts << CourseActivity.new(:user_id => @homework.user_id,:course_id => @homework.course_id) + end + end + @user_activity_id = params[:user_activity_id].to_i + @hw_status = params[:hw_status].to_i + @is_teacher = User.current.admin? || User.current.allowed_to?(:as_teacher, @course) + end + # 成绩公开范围弹框 def alert_score_open_modal if params[:user_activity_id] @@ -301,7 +412,7 @@ class HomeworkCommonController < ApplicationController #statue 1:启动成功,2:启动失败,作业总数大于等于2份时才能启动匿评,3:已开启匿评,请务重复开启,4:没有开启匿评的权限 def start_anonymous_comment @statue = 4 and return unless User.current.admin? || User.current.allowed_to?(:as_teacher,@course) - @statue = 5 and return if Time.parse(@homework.end_time.to_s).strftime("%Y-%m-%d") >= Time.now.strftime("%Y-%m-%d") + @statue = 5 and return if @homework.end_time >= Time.now if @homework_detail_manual.comment_status == 1 student_works = @homework.student_works.has_committed if student_works && student_works.size >= 2 diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb index 95fcee95e..4cdd82d72 100644 --- a/app/controllers/messages_controller.rb +++ b/app/controllers/messages_controller.rb @@ -260,7 +260,7 @@ class MessagesController < ApplicationController elsif @course redirect_to course_activity_path(@course) elsif @contest - redirect_to contest_activities_contest_path(@contest) + redirect_to contest_path(@contest) end elsif params[:is_course] && params[:is_course].to_i == 1 && params[:is_board] && params[:is_board].to_i == 1 if @project @@ -351,7 +351,7 @@ class MessagesController < ApplicationController if params[:is_course] && params[:is_course].to_i == 0 redirect_to user_contest_community_path(User.current.id) elsif params[:is_course] && params[:is_course].to_i == 1 && params[:is_board] && params[:is_board].to_i == 0 - redirect_to contest_activities_contest_path(@contest) + redirect_to contest_path(@contest) elsif params[:is_course] && params[:is_course].to_i == 1 && params[:is_board] && params[:is_board].to_i == 1 redirect_to contest_boards_path(@contest) elsif @message.parent diff --git a/app/controllers/praise_tread_controller.rb b/app/controllers/praise_tread_controller.rb index 3e3c338b4..a60b85b90 100644 --- a/app/controllers/praise_tread_controller.rb +++ b/app/controllers/praise_tread_controller.rb @@ -1,166 +1,168 @@ -class PraiseTreadController < ApplicationController - - accept_api_auth :tread_plus,:praise_plus - # before_filter :require_login,:only => [:praise_plus,:tread_plus] - before_filter :user_unlogged_check,:only => [:praise_plus,:tread_plus,:praise_minus] - - def praise_plus - @obj = nil - @activity = false - if request.get? - @obj_id = params[:obj_id] - @obj_type = params[:obj_type] - if !params[:user_activity_id].nil? && !params[:type].nil? - @user_activity_id = params[:user_activity_id] - @type = params[:type] - @activity = true - end - # @is_in_list = nil - @obj = find_object_by_type_and_id(@obj_type,@obj_id) - pts = PraiseTread.where("praise_tread_object_id=? and praise_tread_object_type=? and user_id=?",@obj_id,@obj_type.to_s,User.current.id) - unless pts.empty? - respond_to do |format| - format.js - end - return - end - @horizontal = params[:horizontal].downcase == "false" ? false:true if params[:horizontal] - # if @obj.respond_to?("author_id") - # author_id = @obj.author_id - # elsif @obj.respond_to?("user_id") - # author_id = @obj.user_id - # end - # unless author_id == User.current.id - praise_tread_plus(@obj_type,@obj_id,1) - # end - respond_to do |format| - format.js - end - end - end - - def praise_minus - @obj = nil - @activity = false - if request.get? - #@obj = params[:obj] # 传的是对象,最后变成id了 - #首先更新praise_tread 表 删除关注记录 - #@pt = PraiseTread.find_by_user_id_and_praise_tread_object_id_and_praise_tread_object_type(User.current.id,@obj,"user") - @obj_id = params[:obj_id] - @obj_type = params[:obj_type] - if !params[:user_activity_id].nil? && !params[:type].nil? - @user_activity_id = params[:user_activity_id] - @type = params[:type] - @activity = true - end - @obj = find_object_by_type_and_id(@obj_type,@obj_id) - @pt = PraiseTread.where("praise_tread_object_id=? and praise_tread_object_type=? and user_id=?",@obj_id,@obj_type.to_s,User.current.id).first - if @pt.nil? - respond_to do |format| - format.js - end - return - end - @pt.delete if !@pt.nil? - #再更新praise_tread_cache表 使相应的记录减1 当为0时删除 - @ptc = PraiseTreadCache.where("object_id=? and object_type=?",@obj_id,@obj_type.to_s).first - @ptc.minus(1) if !@ptc.nil? - if @ptc.praise_num == 0 - @ptc.delete - end - - end - #@obj = User.find_by_id(@obj) - respond_to do |format| - format.js - end - end - - def tread_plus - @obj = nil - # @is_in_list = nil - if request.get? - @obj_id = params[:obj_id] - @obj_type = params[:obj_type] - #@horizontal = params[:horizontal].downcase == "false" ? false:true - @obj = find_object_by_type_and_id(@obj_type,@obj_id) - unless @obj.author_id == User.current.id - praise_tread_plus(@obj_type,@obj_id,0) - end - - end - end - - def tread_minus - respond_to do |format| - format.html - format.js - end - end - - private - - def find_object_by_type_and_id(type,id) - @obj = nil - case type - when 'Memo' - @obj = Memo.find_by_id(id) - when 'Message' - @obj = Message.find_by_id(id) - when 'HomeworkCommon' - @obj = HomeworkCommon.find_by_id(id) - when 'JournalsForMessage' - @obj = JournalsForMessage.find_by_id(id) - when 'News' - @obj = News.find_by_id(id) - when 'Comment' - @obj = Comment.find_by_id(id) - when 'Journal' - @obj = Journal.find_by_id(id) - when 'BlogComment' - @obj = BlogComment.find_by_id(id) - when 'OrgDocumentComment' - @obj = OrgDocumentComment.find_by_id(id) - when 'User' - @obj = User.find_by_id(id) - when 'Issue' - @obj = Issue.find_by_id(id) - when 'Project' - @obj = Project.find_by_id(id) - when 'Bid' - @obj = Bid.find_by_id(id) - when 'Contest' - @obj = Contest.find_by_id(id) - when 'Syllabus' - @obj = Syllabus.find_by_id(id) - when 'Work' - @obj = Work.find_by_id(id) - else - @obj = nil - end - return @obj - end - - def praise_tread_plus(type,id,flag) - unless id.nil? and type.nil? - #首先创建或更新praise_tread 表 - @pt = PraiseTread.new - @pt.user_id = User.current.id - @pt.praise_tread_object_id = id.to_i - @pt.praise_tread_object_type = type - @pt.praise_or_tread = flag - @pt.save - # end - - #再创建或更新praise_tread_cache表 - #@ptc = PraiseTreadCache.find_by_object_id_and_object_type(id,type) - @ptc = PraiseTreadCache.where("object_id = ? and object_type = ?",id.to_i,type).first - @ptc = @ptc.nil? ? PraiseTreadCache.new : @ptc - @ptc.object_id = id.to_i - @ptc.object_type = type - @ptc.save - @ptc.plus(flag,1) - end - end - -end +class PraiseTreadController < ApplicationController + + accept_api_auth :tread_plus,:praise_plus + # before_filter :require_login,:only => [:praise_plus,:tread_plus] + before_filter :user_unlogged_check,:only => [:praise_plus,:tread_plus,:praise_minus] + + def praise_plus + @obj = nil + @activity = false + if request.get? + @obj_id = params[:obj_id] + @obj_type = params[:obj_type] + if !params[:user_activity_id].nil? && !params[:type].nil? + @user_activity_id = params[:user_activity_id] + @type = params[:type] + @activity = true + end + # @is_in_list = nil + @obj = find_object_by_type_and_id(@obj_type,@obj_id) + pts = PraiseTread.where("praise_tread_object_id=? and praise_tread_object_type=? and user_id=?",@obj_id,@obj_type.to_s,User.current.id) + unless pts.empty? + respond_to do |format| + format.js + end + return + end + @horizontal = params[:horizontal].downcase == "false" ? false:true if params[:horizontal] + # if @obj.respond_to?("author_id") + # author_id = @obj.author_id + # elsif @obj.respond_to?("user_id") + # author_id = @obj.user_id + # end + # unless author_id == User.current.id + praise_tread_plus(@obj_type,@obj_id,1) + # end + respond_to do |format| + format.js + end + end + end + + def praise_minus + @obj = nil + @activity = false + if request.get? + #@obj = params[:obj] # 传的是对象,最后变成id了 + #首先更新praise_tread 表 删除关注记录 + #@pt = PraiseTread.find_by_user_id_and_praise_tread_object_id_and_praise_tread_object_type(User.current.id,@obj,"user") + @obj_id = params[:obj_id] + @obj_type = params[:obj_type] + if !params[:user_activity_id].nil? && !params[:type].nil? + @user_activity_id = params[:user_activity_id] + @type = params[:type] + @activity = true + end + @obj = find_object_by_type_and_id(@obj_type,@obj_id) + @pt = PraiseTread.where("praise_tread_object_id=? and praise_tread_object_type=? and user_id=?",@obj_id,@obj_type.to_s,User.current.id).first + if @pt.nil? + respond_to do |format| + format.js + end + return + end + @pt.delete if !@pt.nil? + #再更新praise_tread_cache表 使相应的记录减1 当为0时删除 + @ptc = PraiseTreadCache.where("object_id=? and object_type=?",@obj_id,@obj_type.to_s).first + @ptc.minus(1) if !@ptc.nil? + if @ptc.praise_num == 0 + @ptc.delete + end + + end + #@obj = User.find_by_id(@obj) + respond_to do |format| + format.js + end + end + + def tread_plus + @obj = nil + # @is_in_list = nil + if request.get? + @obj_id = params[:obj_id] + @obj_type = params[:obj_type] + #@horizontal = params[:horizontal].downcase == "false" ? false:true + @obj = find_object_by_type_and_id(@obj_type,@obj_id) + unless @obj.author_id == User.current.id + praise_tread_plus(@obj_type,@obj_id,0) + end + + end + end + + def tread_minus + respond_to do |format| + format.html + format.js + end + end + + private + + def find_object_by_type_and_id(type,id) + @obj = nil + case type + when 'Memo' + @obj = Memo.find_by_id(id) + when 'Message' + @obj = Message.find_by_id(id) + when 'HomeworkCommon' + @obj = HomeworkCommon.find_by_id(id) + when 'JournalsForMessage' + @obj = JournalsForMessage.find_by_id(id) + when 'News' + @obj = News.find_by_id(id) + when 'Comment' + @obj = Comment.find_by_id(id) + when 'Journal' + @obj = Journal.find_by_id(id) + when 'BlogComment' + @obj = BlogComment.find_by_id(id) + when 'OrgDocumentComment' + @obj = OrgDocumentComment.find_by_id(id) + when 'User' + @obj = User.find_by_id(id) + when 'Issue' + @obj = Issue.find_by_id(id) + when 'TrainingTask' + @obj = TrainingTask.find_by_id(id) + when 'Project' + @obj = Project.find_by_id(id) + when 'Bid' + @obj = Bid.find_by_id(id) + when 'Contest' + @obj = Contest.find_by_id(id) + when 'Syllabus' + @obj = Syllabus.find_by_id(id) + when 'Work' + @obj = Work.find_by_id(id) + else + @obj = nil + end + return @obj + end + + def praise_tread_plus(type,id,flag) + unless id.nil? and type.nil? + #首先创建或更新praise_tread 表 + @pt = PraiseTread.new + @pt.user_id = User.current.id + @pt.praise_tread_object_id = id.to_i + @pt.praise_tread_object_type = type + @pt.praise_or_tread = flag + @pt.save + # end + + #再创建或更新praise_tread_cache表 + #@ptc = PraiseTreadCache.find_by_object_id_and_object_type(id,type) + @ptc = PraiseTreadCache.where("object_id = ? and object_type = ?",id.to_i,type).first + @ptc = @ptc.nil? ? PraiseTreadCache.new : @ptc + @ptc.object_id = id.to_i + @ptc.object_type = type + @ptc.save + @ptc.plus(flag,1) + end + end + +end diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 7d69e3a6f..3b80bade0 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -21,19 +21,22 @@ class ProjectsController < ApplicationController layout 'base_projects' before_filter :authorize1, :only => [:show] - menu_item :overview, :only => :show - menu_item :roadmap, :only => :roadmap - menu_item :settings, :only => :settings - menu_item :homework, :only => [:homework, :new_homework] - menu_item :feedback, :only => :feedback - menu_item :share, :only => :share - + # menu_item :overview, :only => :show + # menu_item :roadmap, :only => :roadmap + # menu_item :settings, :only => :settings + # menu_item :homework, :only => [:homework, :new_homework] + # menu_item :feedback, :only => :feedback + # menu_item :share, :only => :share + skip_before_filter :verify_authenticity_token, :only => [:training_task_status] + skip_before_filter :check_if_login_required, :only => [:training_task_status] before_filter :find_project, :except => [ :index, :search,:list, :new, :create, :copy, :statistics, :new_join, :course, :enterprise_course, :course_enterprise, - :view_homework_attaches,:join_project, :project_home] + :view_homework_attaches,:join_project, :project_home, :training_execute, :training_task_status] before_filter :authorize, :only => [:show, :settings, :edit, :sort_project_members, :update, :modules, :close, :reopen,:view_homework_attaches,:course] before_filter :authorize_global, :only => [:new, :create,:view_homework_attaches] before_filter :require_admin, :only => [ :copy, :unarchive, :destroy, :calendar] before_filter :file + + # 除非项目内人员,不可查看成员, TODO: 完了写报表里去 # before_filter :memberAccess, only: :member @@ -72,6 +75,7 @@ class ProjectsController < ApplicationController include UsersHelper ### added by william include ActsAsTaggableOn::TagsHelper + include ApplicationHelper # 仅仅为了转换Gitlab地址 def project_home @@ -331,9 +335,11 @@ class ProjectsController < ApplicationController if User.current.member_of?(@project) || User.current.admin? case params[:type] when nil - @events_pages = ForgeActivity.where("project_id = ? and forge_act_type in ('Issue', 'Message','News', 'Project', 'Attachment','Commit')", @project).includes(:forge_act).order("updated_at desc").limit(10).offset(@page * 10) + @events_pages = ForgeActivity.where("project_id = ? and forge_act_type in ('Issue', 'TrainingTask','Message','News', 'Project', 'Attachment','Commit')", @project).includes(:forge_act).order("updated_at desc").limit(10).offset(@page * 10) when 'issue' @events_pages = ForgeActivity.where("project_id = ? and forge_act_type = 'Issue'", @project).includes(:forge_act).order("updated_at desc").limit(10).offset(@page * 10) + when 'training_task' + @events_pages = ForgeActivity.where("project_id = ? and forge_act_type = 'TrainingTask'", @project).includes(:forge_act).order("updated_at desc").limit(10).offset(@page * 10) when 'news' @events_pages = ForgeActivity.where("project_id = ? and forge_act_type = 'News'", @project).includes(:forge_act).order("updated_at desc").limit(10).offset(@page * 10) when 'message' @@ -378,7 +384,9 @@ class ProjectsController < ApplicationController def settings # 顶部导航 @project_menu_type = 10 - + if @project.is_child_training_project? + return render_404 + end # 修改查看消息状态 applied_messages = ForgeMessage.where("user_id =? and project_id =? and forge_message_type =? and viewed =?", User.current.id, @project, "AppliedProject", 0) applied_messages.update_all(:viewed => true) @@ -575,7 +583,7 @@ class ProjectsController < ApplicationController if params[:message_id] message_invite(params[:message_id], params[:key]) end - update_message_status(User.current, @project) + update_messsages_to_viewed("ForgeMessage", @project) # params[:login]为邮箱邀请用户加入,主要功能: # 1、自动注册 # 2、加入项目、创建角色 @@ -764,6 +772,18 @@ class ProjectsController < ApplicationController end end + def add_script + if User.current.admin? || User.current.member_of?(@project) + if @project.update_attribute(:script, params[:project_script]) + @notice = "脚本添加成功" + else + @notice = "脚本添加失败" + end + else + return render_403 + end + end + def modules @project.enabled_module_names = params[:enabled_module_names] flash[:notice] = l(:notice_successful_update) @@ -804,6 +824,242 @@ class ProjectsController < ApplicationController redirect_to admin_projects_url(:status => params[:status]) end + # 弹框提醒: + # 自己不能参加自己的实训项目 + # 没有建立版本库的项目不能开启实训 + # 已经实训过直接跳入 + # + def training_chiled_project_exec + if !User.current.logged? + return render_403 + end + respond_to do |format| + format.js + end + end + + # training_status: 默认为0; 1代表实训项目; 2:代表实训子项目 + def training_project_execute + if @project.training_tasks.count == 0 + @notice = "实训开启失败:请先发布实训任务" + return + elsif Repository.where(:project_id => @project.id, :type => "Repository::Gitlab").count == 0 + @notice = "实训开启失败:请先创建版本库" + return + end + jobName = "#{@project.id}" + pipeLine = "#{Base64.encode64(@project.script)}" + uri = URI("http://123.59.135.74:9999/jenkins-exec/api/createJob") + params = {jobName: jobName, pipeLine: pipeLine} + res = uri_exec uri, params + training_project_notice res + @project.update_attribute(:training_status, 1) + end + + def training_project_update + jobName = "#{@project.id}" + pipeLine = "#{Base64.encode64(@project.script)}" + uri = URI("http://123.59.135.74:9999/jenkins-exec/api/updateJob") + params = {jobName: jobName, pipeLine: pipeLine} + res = uri_exec uri, params + training_project_notice res + @project.update_attribute(:training_status, 1) + end + + def training_project_notice res + if res['code'] == 0 + @notice = "实训开启成功" + elsif res['code'] == -2 + @notice = "Job已存在" + else + @notice = res['msg'].nil? ? "实训开启失败" : res['msg'] + end + end + + # TrainintTask.status 0:评测中 1:评测成功 2:评测进行中 + # 非项目成员、非实训子项目不允许执行该方法 + def task_execute + if !@project.is_child_training_project? || !User.current.member_of?(@project) + return render_403 + end + taskId = params[:training_task_id] + jobName = @project.forked_from_project_id + @training_task = TrainingTask.find(taskId) + step = @training_task.position + + rep_identify = Repository.where(:project_id => @project.id, :type => "Repository::Gitlab").first.try(:identifier) + gitlab_address = Redmine::Configuration['gitlab_address'] + gitUrl = gitlab_address.to_s+"/"+@project.owner.to_s+"/"+ rep_identify + "."+"git" + gitUrl = Base64.encode64(gitUrl) + if @training_task.status == 0 + params = {:jobName => "#{jobName}", :taskId => "#{taskId}", :step => "#{step}", :gitUrl => "#{gitUrl}"} + uri = URI.parse("http://123.59.135.74:9999/jenkins-exec/api/buildJob") + begin + res = uri_exec uri, params + # 任务开启成功后创建一条留言提示,并发布 + @training_task.update_attribute(:status, 2) + return + rescue Exception => e + puts e + end + end + end + + def uri_exec uri, params + res = Net::HTTP.post_form(uri, params).body + res = JSON.parse(res) + end + + # 开启实训项目,学生会fork一个项目并自动发送任务 + def training_project_extend + @project = Project.find(params[:id]) + @repository = Repository.where("project_id =? and type =?", @project.id, "Repository::Gitlab") + # 如果当前用户已经fork过该项目,不会新fork项目,则跳至已fork的项 + unless has_forked?(@project, User.current) + project = project_from_current_project(@project.id, User.current.id) + redirect_to project_path(project) + else + ActiveRecord::Base.transaction do + g = Gitlab.client + if User.current.gid.nil? + s = Trustie::Gitlab::Sync.new + s.sync_user(User.current) + end + gproject = g.fork(@project.gpid, User.current.gid) + if gproject + new_training_project = copy_project_and_module(@project, gproject) + forked_count = @project.forked_count.to_i + 1 + @project.update_attributes(:forked_count => forked_count) + # 发布实训任务,只发布实训任务的第一个 + publish_training_tasks(@project.id, new_training_project.id, 1) + end + end + end + end + + # 需要传Task ID + # 判断任务是否完成 + # 如果完成则发送下一个任务直到任务结束 + # TrainingTask.status 1 成功,其它失败 + def training_task_status + status = params[:status].to_i + task_id = params[:taskId] + message = Base64.decode64(params[:msg]) + begin + @training_task = TrainingTask.find(task_id) + # 如果已经执行成功过,则不重复执行 + return if @training_task.status == 1 + original_project_id = Project.find(@training_task.project_id).try(:forked_from_project_id) + original_project = Project.find(original_project_id) + rescue + return + end + original_tasks_count = original_project.training_tasks.count + position = @training_task.try(:position) + # 测试,默认成功 + if status == 0 + ActiveRecord::Base.transaction do + if position < original_tasks_count + # 继续发布下一个任务 + publish_training_tasks original_project_id, @training_task.project_id, position + 1 + end + @training_task.update_attribute(:status, 1) + # 创建一条回复提醒 + content = (position == original_tasks_count) ? "恭喜您,您已经完成了实训项目的所有任务" : "恭喜您,您已经完成了本任务" + add_training_task_journal(content, original_project.user_id) + end + else + content = "很抱歉,您的任务未通过,请继续加油,错误信息如下:#{message}" + add_training_task_journal(content, original_project.user_id) + # 失败的时候可以继续提交 + @training_task.update_attribute(:status, 0) + end + end + + # 创建一条回复 + def add_training_task_journal content, user_id + jour = Journal.new + jour.user_id = user_id + jour.notes = content + jour.journalized = @training_task + jour.save + update_user_activity(@training_task.class, @training_task.id) + update_forge_activity(@training_task.class, @training_task.id) + end + + # 实训开启成功后,发布第一个任务 + # REDO:失败后提醒用户,及相关处理 + def publish_training_tasks original_project_id, new_training_project_id, position + original_task = TrainingTask.where(:project_id => original_project_id, :position => position).first + training_task = TrainingTask.new + training_task.save_attachments(params[:attachments] || (params[:training_task] && params[:training_task][:uploads])) + training_task.subject = original_task.subject + training_task.description = original_task.description + training_task.position = original_task.position + training_task.project_id = new_training_project_id + training_task.author_id = User.current.id + if training_task.save + respond_to do |format| + format.html{redirect_to project_url(new_training_project_id)} + end + else + raise "create task failed" + end + end + + # 复制项目 + def copy_project_and_module tproject, gproject + project = Project.new + project.name = tproject.name + project.is_public = tproject.is_public + project.status = tproject.status + project.description = tproject.description + project.hidden_repo = tproject.hidden_repo + project.user_id = User.current.id + project.project_type = 0 + project.project_new_type = tproject.project_new_type + project.gpid = gproject.id + project.forked_from_project_id = tproject.id + project.enabled_module_names = tproject.enabled_module_names + if project.save + project.update_attribute(:training_status,2) + r = Role.givable.find_by_id(Setting.new_project_user_role_id.to_i) || Role.givable.first + m = Member.new(:user => User.current, :roles => [r]) + if ProjectScore.where("project_id=?", project.id).first.nil? + ProjectScore.create(:project_id => project.id, :score => false) + end + project_info = ProjectInfo.new(:user_id => User.current.id, :project_id => project.id) + user_grades = UserGrade.create(:user_id => User.current.id, :project_id => project.id) + Rails.logger.debug "UserGrade created: #{user_grades.to_json}" + project_status = ProjectStatus.create(:project_id => @project.id, :watchers_count => 0, :changesets_count => 0, :project_type => @project.project_type,:grade => 0) + Rails.logger.debug "ProjectStatus created: #{project_status.to_json}" + project.members << m + project.project_infos << project_info + copy_repository(project, gproject) + return project + else + respond_to do |format| + format.html { render :action => 'forked', :layout => 'base_projects'} + format.api { render_validation_errors(@project) } + end + end + end + + # 判断用户是否已经fork过该项目 + def has_forked?(project, user) + projects = Project.where("user_id =?", user) + projects.map(&:forked_from_project_id).detect{|s| s == @project.id}.nil? ? true : false + end + + def copy_repository(project, gproject) + repository = Repository.factory('Git') + repository.project_id = project.id + repository.type = 'Repository::Gitlab' + repository.url = gproject.name + repository.identifier = gproject.name + repository = repository.save + end + # 资源库fork弹框 def forked_pop respond_to do |format| diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index a955fa88b..35fde54ac 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -35,12 +35,13 @@ class RepositoriesController < ApplicationController before_filter :find_project_by_project_id, :only => [:new, :create, :newrepo, :stats, :quality_analysis] before_filter :find_repository, :only => [:edit, :update, :destroy, :committers] - before_filter :find_project_repository, :except => [:new, :create, :newcreate, :edit, :update, :destroy, :committers, :newrepo, :to_gitlab, :forked, :export_rep_static] + before_filter :find_project_repository, :except => [:new, :create, :newcreate, :edit, :update, :destroy, :committers, :newrepo, :to_gitlab, :forked, :export_rep_static, :training_project_extend] # 连接gitlab # before_filter :connect_gitlab, :only => [:quality_analysis, :commit_diff] before_filter :find_changeset, :only => [:revision, :add_related_issue, :remove_related_issue] - before_filter :authorize , :except => [:newrepo,:newcreate,:fork, :to_gitlab, :forked, :project_archive, :quality_analysis, :commit_diff] + # before_filter :authorize , :except => [:newrepo,:newcreate,:fork, :to_gitlab, :forked, :project_archive, :quality_analysis, :commit_diff] + before_filter :authorize_visible , :except => [:newrepo,:newcreate,:fork, :to_gitlab, :forked, :project_archive, :quality_analysis, :commit_diff] # 版本库新增权限 # before_filter :show_rep, :only => [:show, :stats, :revisions, :revision, :diff, :commit_diff ] accept_rss_auth :revisions @@ -132,6 +133,94 @@ class RepositoriesController < ApplicationController # send_file "/path/to/file.zip" end + # 开启实训项目,学生会fork一个项目并自动发送任务 + def training_project_extend + @project = Project.find(params[:id]) + @repository = Repository.where("project_id =? and type =?", @project.id, "Repository::Gitlab") + # 如果当前用户已经fork过该项目,不会新fork项目,则跳至已fork的项 + unless has_forked?(@project, User.current) + project = project_from_current_project(@project.id, User.current.id) + redirect_to project_path(project) + else + ActiveRecord::Base.transaction do + g = Gitlab.client + if User.current.gid.nil? + begin + s = Trustie::Gitlab::Sync.new + s.sync_user(User.current) + ensure + logger.error "Syn user failed ==>#{User.current.id}" + end + end + gproject = g.fork(@project.gpid, User.current.gid) + if gproject + new_training_project = copu_project_and_module(@project, gproject) + forked_count = @project.forked_count.to_i + 1 + @project.update_attributes(:forked_count => forked_count) + # 发布实训任务,只发布实训任务的第一个 + publish_training_tasks(@project, new_training_project) + end + end + end + end + + def copu_project_and_module tproject, gproject + project = Project.new + project.name = tproject.name + project.is_public = tproject.is_public + project.status = tproject.status + project.description = tproject.description + project.hidden_repo = tproject.hidden_repo + project.user_id = User.current.id + project.project_type = 0 + project.project_new_type = tproject.project_new_type + project.gpid = gproject.id + project.forked_from_project_id = tproject.id + project.enabled_module_names = tproject.enabled_module_names + if project.save + project.update_attribute(:training_status,1) + r = Role.givable.find_by_id(Setting.new_project_user_role_id.to_i) || Role.givable.first + m = Member.new(:user => User.current, :roles => [r]) + if ProjectScore.where("project_id=?", project.id).first.nil? + ProjectScore.create(:project_id => project.id, :score => false) + end + project_info = ProjectInfo.new(:user_id => User.current.id, :project_id => project.id) + user_grades = UserGrade.create(:user_id => User.current.id, :project_id => project.id) + Rails.logger.debug "UserGrade created: #{user_grades.to_json}" + project_status = ProjectStatus.create(:project_id => @project.id, :watchers_count => 0, :changesets_count => 0, :project_type => @project.project_type,:grade => 0) + Rails.logger.debug "ProjectStatus created: #{project_status.to_json}" + project.members << m + project.project_infos << project_info + copy_repository(project, gproject) + return project + else + respond_to do |format| + format.html { render :action => 'forked', :layout => 'base_projects'} + format.api { render_validation_errors(@project) } + end + end + end + + # REDO: 如果实训项目还没有创建任务的时候应该跳出 + def publish_training_tasks original_project, new_training_project + original_task = TrainingTask.where(:project_id => original_project.id, :position => 1).first + training_task = TrainingTask.new + training_task.save_attachments(params[:attachments] || (params[:training_task] && params[:training_task][:uploads])) + training_task.subject = original_task.subject + training_task.description = original_task.description + training_task.position = original_task.position + training_task.project_id = new_training_project.id + training_task.author_id = User.current.id + if training_task.save + respond_to do |format| + format.html{redirect_to project_training_tasks_url(:project_id => new_training_project.id)} + end + else + raise "create task failed" + end + end + + # 判断用户是否已经fork过该项目 def has_forked?(project, user) projects = Project.where("user_id =?", user) @@ -183,6 +272,7 @@ class RepositoriesController < ApplicationController format.api { render :action => 'show', :status => :created, :location => url_for(:controller => 'projects', :action => 'show', :id => project.id) } format.js end + return project else respond_to do |format| format.html { render :action => 'forked', :layout => 'base_projects'} @@ -396,11 +486,12 @@ update redirect_to :controller => 'repositories', :action => 'show', :id => @project.id, to: 'gitlab' end + # 权限: + # 如果项目隐藏了版本库,则非项目成员及项目报告人员不能够访问版本库 + # 如果没有隐藏版本库,只要项目公开,其它成员都可以看到版本库 + # 项目关联了课程,课程的老师是可以看到版本库的 + # 超级管理员可以看到项目版本库 def show - if !User.current.admin? && (@project.hidden_repo && (role_of_members_in_project(@project.id, User.current.id) == "Reporter" || !is_project_member?(User.current.id, @project.id))) - render_403 - return - else # 顶部导航 @project_menu_type = 5 @@ -410,7 +501,6 @@ update if request.xhr? @entries ? render(:partial => 'dir_list_content') : render(:nothing => true) else - unless @entries.blank? @changesets_latest_coimmit = @g.rep_last_changes(@project.gpid, :rev => @rev, :path => @path) # @g.rep_last_changes(@project.gpid, :rev => @rev, :path => @path) # 总的提交数 @@ -426,7 +516,6 @@ update # token值解密 # gitlab_token = aes_dicrypt("priEn3UwXfJs3Pmy", token) @zip_path = Gitlab.endpoint.to_s + "/projects/" + @project.gpid.to_s + "/repository/archive?&private_token=" + token - end @creator = @project.owner.to_s gitlab_address = Redmine::Configuration['gitlab_address'] @@ -448,7 +537,6 @@ update render :layout => 'base_projects' end end - end alias_method :browse, :show @@ -698,6 +786,19 @@ update end end + def authorize_visible + allowed = authorize_allowed(params[:controller], params[:action], global = false) + if allowed || User.current.admin? || (@project.hidden_repo && User.current.member_of?(@project) && !role_of_members_in_project(@project.id, User.current.id) == "Reporter") + true + else + if @project && @project.archived? + render_403 :message => :notice_not_authorized_archived_project + else + deny_access + end + end + end + private # 更新项目统计数 def update_commits_count project, count diff --git a/app/controllers/student_work_controller.rb b/app/controllers/student_work_controller.rb index c27eade85..cd433a450 100644 --- a/app/controllers/student_work_controller.rb +++ b/app/controllers/student_work_controller.rb @@ -41,7 +41,7 @@ class StudentWorkController < ApplicationController else student_work.name = params[:title] student_work.description = params[:src] - if Time.parse(@homework.end_time.to_s).strftime("%Y-%m-%d") < Time.parse(Time.now.to_s).strftime("%Y-%m-%d") + if @homework.end_time < Time.now.to_s student_work.late_penalty = @homework.late_penalty else student_work.late_penalty = 0 @@ -160,7 +160,7 @@ class StudentWorkController < ApplicationController student_work.name = params[:title] student_work.description = params[:src] - if Time.parse(@homework.end_time.to_s).strftime("%Y-%m-%d") < Time.parse(Time.now.to_s).strftime("%Y-%m-%d") + if @homework.end_time < Time.now.to_s student_work.late_penalty = @homework.late_penalty else student_work.late_penalty = 0 @@ -365,7 +365,7 @@ class StudentWorkController < ApplicationController end ################################################################################################################## @order,@b_sort,@name,@group = params[:order] || "score",params[:sort] || "desc",params[:name].to_s.strip || "",params[:group] - @homework_commons = @course.homework_commons.where("publish_time <= ?",Time.now.strftime("%Y-%m-%d")).order("created_at desc") + @homework_commons = @course.homework_commons.where("publish_time <= ?",Time.now).order("created_at desc") @all_homework_commons = @course.homework_commons.order("created_at desc") @is_teacher = User.current.allowed_to?(:as_teacher,@course) || User.current.admin? @is_evaluation = @homework.homework_detail_manual && @homework.homework_detail_manual.comment_status == 2 && !@is_teacher #是不是匿评 @@ -398,7 +398,7 @@ class StudentWorkController < ApplicationController end #开放作品 || 老师 || 超级管理员 || 禁用匿评&&作业截止&&已提交作品 显示所有列表 - if (@homework.is_open == 1 && @course.is_public == 1) || (@homework.is_open == 1 && @course.is_public == 0 && User.current.member_of_course?(@course)) || @is_teacher || User.current.admin? || (User.current.member_of_course?(@course) && @homework.anonymous_comment == 1 && Time.parse(@homework.end_time.to_s).strftime("%Y-%m-%d") < Time.now.strftime("%Y-%m-%d") && !@homework.student_works.has_committed.where(:user_id => User.current.id).empty?) + if (@homework.is_open == 1 && @course.is_public == 1) || (@homework.is_open == 1 && @course.is_public == 0 && User.current.member_of_course?(@course)) || @is_teacher || User.current.admin? || (User.current.member_of_course?(@course) && @homework.anonymous_comment == 1 && @homework.end_time < Time.now && !@homework.student_works.has_committed.where(:user_id => User.current.id).empty?) if @order == 'lastname' @stundet_works = search_homework_member @homework.student_works.no_copy.select("student_works.*,student_works.work_score as score").joins(:user).where("users.id in #{student_in_group}").order("CONVERT(lastname USING gbk) COLLATE gbk_chinese_ci #{@b_sort}, login #{@b_sort}"),@name elsif @order == 'student_id' @@ -464,7 +464,7 @@ class StudentWorkController < ApplicationController @student_work_count = (search_homework_member @homework.student_works.has_committed.select("student_works.*,student_works.work_score as score").joins(:user).where("users.id in #{student_in_group}").order("#{@order} #{@b_sort}"),@name).count else - if (@homework.is_open == 1 &&@course.is_public == 1) || (@homework.is_open == 1 && @course.is_public == 0 && User.current.member_of_course?(@course)) || @is_teacher || User.current.admin? || (User.current.member_of_course?(@course) && @homework.anonymous_comment == 1 && Time.parse(@homework.end_time.to_s).strftime("%Y-%m-%d") < Time.now.strftime("%Y-%m-%d") && !@homework.student_works.has_committed.where(:user_id => User.current.id).empty?) + if (@homework.is_open == 1 &&@course.is_public == 1) || (@homework.is_open == 1 && @course.is_public == 0 && User.current.member_of_course?(@course)) || @is_teacher || User.current.admin? || (User.current.member_of_course?(@course) && @homework.anonymous_comment == 1 && @homework.end_time < Time.now && !@homework.student_works.has_committed.where(:user_id => User.current.id).empty?) if @order == 'lastname' @stundet_works = search_homework_member @homework.student_works.no_copy.select("student_works.*,student_works.work_score as score").joins(:user).order("CONVERT(lastname USING gbk) COLLATE gbk_chinese_ci #{@b_sort}, login #{@b_sort}"),@name elsif @order == 'student_id' @@ -596,7 +596,7 @@ class StudentWorkController < ApplicationController student_work.project_id = @student_work_project.project_id end #提交作品时,计算是否迟交 - if Time.parse(@homework.end_time.to_s).strftime("%Y-%m-%d") < Time.parse(Time.now.to_s).strftime("%Y-%m-%d") + if @homework.end_time < Time.now.to_s student_work.late_penalty = @homework.late_penalty student_work.work_status = 2 # 缺评扣分 @@ -669,7 +669,7 @@ class StudentWorkController < ApplicationController def edit @user = User.current - if (!User.current.admin? && @homework.homework_type == 2) || Time.parse(@homework.end_time.to_s).strftime("%Y-%m-%d") < Time.now.strftime("%Y-%m-%d") #编程作业不能修改作业|| 截止日期已到不能修改作业 + if (!User.current.admin? && @homework.homework_type == 2) || @homework.end_time < Time.now #编程作业不能修改作业|| 截止日期已到不能修改作业 render_403 else respond_to do |format| @@ -1131,7 +1131,7 @@ class StudentWorkController < ApplicationController unless @homework.late_penalty.to_s == params[:late_penalty].to_s @homework.late_penalty = params[:late_penalty].to_s - @homework.student_works.where("commit_time > '#{@homework.end_time} 23:59:59'").each do |student_work| + @homework.student_works.where("commit_time > '#{@homework.end_time}'").each do |student_work| student_work.late_penalty = params[:late_penalty].to_i student_work.save end @@ -1253,7 +1253,7 @@ class StudentWorkController < ApplicationController def appeal_anonymous_score @student_work_score = StudentWorksScore.where("id = #{params[:score_id].to_i}").first - @is_last = params[:is_last] + @is_last = params[:is_last] == "true" ? true : false if @student_work_score @student_work_score.update_column('appeal_status', 1) score_appeal = StudentWorksScoresAppeal.create(:user_id => User.current.id, :student_works_score_id => @student_work_score.id, :comment => params[:appeal][:comment], :appeal_status => 1) @@ -1274,8 +1274,8 @@ class StudentWorkController < ApplicationController def deal_appeal_score @student_work_score = StudentWorksScore.where("id = #{params[:score_id].to_i}").first - @is_last = params[:is_last] - if @student_work_score + @is_last = params[:is_last] == "true" ? true : false + if @student_work_score && @student_work_score.appeal_status == 1 @student_work_score.update_column('appeal_status', params[:status].to_i) score_appeal = @student_work_score.student_works_scores_appeal score_appeal.applied_messages.update_all(:status => params[:status].to_i == 2 ? 3 : (params[:status].to_i == 3 ? 1 : 2)) @@ -1306,23 +1306,31 @@ class StudentWorkController < ApplicationController CourseMessage.create(:user_id => @student_work_score.user_id, :course_id => course.id, :viewed => false,:course_message_id=> score_appeal.id,:course_message_type=>'StudentWorksScoresAppeal',:status=>params[:status].to_i,:apply_result =>User.current.id) CourseMessage.create(:user_id => score_appeal.user_id, :course_id => course.id, :viewed => false,:course_message_id=> score_appeal.id,:course_message_type=>'StudentWorksScoresAppeal',:status=>params[:status].to_i,:apply_result =>User.current.id) end - @homework = @student_work_score.student_work.homework_common - @is_teacher = User.current.allowed_to?(:as_teacher, course) || User.current.admin? - @work = @student_work_score.student_work - @is_group_leader = !@work.student_work_projects.empty? end + @homework = @student_work_score.student_work.homework_common + @is_teacher = User.current.allowed_to?(:as_teacher, course) || User.current.admin? + @work = @student_work_score.student_work + @is_group_leader = !@work.student_work_projects.empty? end def forbidden_anonymous_comment @homework.update_column('anonymous_comment', @homework.anonymous_comment == 0 ? 1 : 0) homework_detail_manual = @homework.homework_detail_manual homework_detail_programing = @homework.homework_detail_programing - if homework_detail_programing - homework_detail_manual.update_column('ta_proportion', 0.4) - homework_detail_programing.update_column('ta_proportion', 0.6) + if @homework.anonymous_comment == 1 + homework_detail_manual.ta_proportion = @homework.homework_type == 2 ? 0.4 : 1.0 else - homework_detail_manual.update_column('ta_proportion', 1.0) + homework_detail_manual.ta_proportion = @homework.homework_type == 2 ? 0.3 : 0.6 end + if @homework.homework_type == 2 && homework_detail_programing + if @homework.anonymous_comment == 1 + homework_detail_programing.ta_proportion = 0.6 + else + homework_detail_programing.ta_proportion = 0.5 + end + end + homework_detail_manual.save + homework_detail_programing.save if homework_detail_programing @homework.student_works.each do |student_work| set_final_score @homework,student_work student_work.save diff --git a/app/controllers/syllabuses_controller.rb b/app/controllers/syllabuses_controller.rb index 13bacbd4b..2be73ff27 100644 --- a/app/controllers/syllabuses_controller.rb +++ b/app/controllers/syllabuses_controller.rb @@ -118,7 +118,7 @@ class SyllabusesController < ApplicationController if @order.to_i == 2 @type = 2 @courses.each do |course| - course[:infocount] = (User.current.admin? || User.current.allowed_to?(:as_teacher,course)) ? (course.homework_commons.count + visable_attachemnts_incourse(course).count) : (course.homework_commons.where("publish_time <= '#{Date.today}'").count + visable_attachemnts_incourse(course).count) + course[:infocount] = (User.current.admin? || User.current.allowed_to?(:as_teacher,course)) ? (course.homework_commons.count + visable_attachemnts_incourse(course).count) : (course.homework_commons.where("publish_time <= '#{Time.now}'").count + visable_attachemnts_incourse(course).count) if course[:infocount] < 0 course[:infocount] = 0 end diff --git a/app/controllers/training_tasks_controller.rb b/app/controllers/training_tasks_controller.rb new file mode 100644 index 000000000..7b49fd44f --- /dev/null +++ b/app/controllers/training_tasks_controller.rb @@ -0,0 +1,403 @@ +# encoding: utf-8 +class TrainingTasksController < ApplicationController + + layout 'base_projects' + before_filter :find_training_task, :only => [:show, :edit, :update, :add_journal, :complete_training_task] + before_filter :find_project, :only => [:index, :new, :create, :update_form, :issue_commits, :commit_for_issue, :issue_commit_delete, :destroy] + before_filter :allow_manager, :only => [:index, :show] + before_filter :allow_members, :only => [:new, :create] + before_filter :build_new_task_from_params, :only => [:new, :create, :update_form] + + + # before_filter :find_issues, :only => [:bulk_edit, :bulk_update, :destroy] + + # before_filter :authorize, :except => [:index, :show] + # before_filter :authorize, :except => [:new, :index,:add_journal, :add_journal_in_org,:delete_journal,:reply,:add_reply, :issue_commits, :commit_for_issue, :issue_commit_delete] + + before_filter :check_for_default_issue_status, :only => [:new, :create] + before_filter :build_new_task_from_params, :only => [:new, :create, :update_form] + accept_rss_auth :index, :show + accept_api_auth :index, :show, :create, :update, :destroy + + rescue_from Query::StatementInvalid, :with => :query_statement_invalid + + helper :journals + helper :projects + include ProjectsHelper + helper :custom_fields + include CustomFieldsHelper + helper :issue_relations + include IssueRelationsHelper + helper :watchers + include WatchersHelper + helper :attachments + include AttachmentsHelper + helper :queries + include QueriesHelper + helper :repositories + include RepositoriesHelper + helper :sort + include SortHelper + include IssuesHelper + helper :timelog + include Redmine::Export::PDF + helper :project_score + include ApplicationHelper + + def issue_commit_delete + commit_id = params[:commit_id].split(",") + issue_commit_ids = params[:issue_commit_ids] + # issue_id存在则为issue详情或者编辑的时候,否则为新建Issue + # 编辑和详情的时候需要在数据库中删除记录,新建的时候在内存中删除 + if params[:issue_id] + commit_issue = CommitIssues.where(:commit_id => commit_id, :issue_id => params[:issue_id], :project_id => @project.id).first + commit_issue.delete if commit_issue + end + @issue_commit_ids = issue_commit_ids - commit_id + end + # over + + def index + # 顶部导航 + @project_menu_type = 11 + @training_tasks = TrainingTask.where(:project_id => @project.id).order('position desc') + @training_tasks_count = @training_tasks.count + @limit = 10 + @is_remote = true + @training_tasks_pages = Paginator.new @training_tasks_count, @limit, params['page'] || 1 + @offset ||= @training_tasks_pages.offset + @training_tasks = paginateHelper @training_tasks, @limit + respond_to do |format| + format.js + format.html + end + rescue ActiveRecord::RecordNotFound + render_404 + end + + def show + # 顶部导航 + @project_menu_type = 11 + # 打开编辑内容 + @is_edit = true unless params[:edit].nil? + @jour_reply = Journal.new + @journals = @training_task.journals.includes(:user, :details).reorder("#{Journal.table_name}.id desc").all + @journals = get_no_children_comments_all @journals + @journals.each_with_index {|j,i| j.indice = i+1} + @journals.reject!(&:private_notes?) unless User.current.allowed_to?(:view_private_notes, @training_task.project) + @journals.reverse! if User.current.wants_comments_in_reverse_order? + @journal = Journal.new(:journalized => @training_task) + respond_to do |format| + format.html + format.js + end + end + + # Add a new issue + # The new issue will be created from an existing one if copy_from parameter is given + def new + if @project.is_child_training_project? + return render_404 + end + # 顶部导航 + @project_menu_type = 11 + respond_to do |format| + format.html { render :action => 'new', :layout => 'base_projects' } + end + end + + # 用户发布新任务 + def create + if @project.is_child_training_project? + return render_404 + end + @training_task.save_attachments(params[:attachments] || (params[:training_task] && params[:training_task][:uploads])) + @training_task.subject = params[:training_task][:subject] + @training_task.description = params[:training_task][:description] + @training_task.tracker_id = params[:training_task][:tracker_id] + @training_task.position = params[:training_task][:position].to_i + if @training_task.save + respond_to do |format| + format.html { + render_attachment_warning_if_needed(@training_task) + redirect_to training_task_url(@training_task) + } + end + return + else + respond_to do |format| + format.html { render :action => 'new' } + end + end + end + + def complete_training_task + taskId = @training_task.position + end + + def edit + @project_menu_type = 11 + # 修改实例变量的值 + return unless build_new_task_from_params + respond_to do |format| + format.html {render :layout => 'base_projects' } + format.xml { } + end + end + + # 用户编辑更改issue + def update + return unless build_new_task_from_params + @training_task.save_attachments(params[:attachments] || (params[:training_task] && params[:training_task][:uploads])) + # params[:training_task][:position] = params[:training_task][:position].to_i + @training_task.position = params[:training_task][:position].to_i + @training_task.subject = params[:training_task][:subject] + @training_task.description = params[:training_task][:description] + if @training_task.save + respond_to do |format| + format.js + format.html{redirect_to training_task_url(@training_task)} + end + end + end + + def update_user_issue_detail(issue, params) + case params[:type] + when "status" + issue.update_attribute(:status_id, params[:status_id]) + when "assigned" + issue.update_attribute(:assigned_to_id, params[:assigned_to_id]) + when "ratio" + issue.update_attribute(:done_ratio, params[:done_ratio]) + when "prior" + issue.update_attribute(:priority_id, params[:priority_id]) + end + end + + # Updates the issue form when changing the project, status or tracker + # on issue creation/update + def update_form + end + + def destroy + return unless build_new_task_from_params + @training_task.destroy + respond_to do |format| + if params[:type] == "project_show" + format.html {redirect_to project_path(@project)} + else + format.html {redirect_to project_training_tasks_path(@project)} + end + end + end + + def add_journal + if User.current.logged? + jour = Journal.new + jour.user_id = User.current.id + jour.notes = params[:notes] + jour.journalized = @training_task + jour.save_attachments(params[:attachments]) + jour.save + update_user_activity(@training_task.class, @training_task.id) + update_forge_activity(@training_task.class, @training_task.id) + # @allowed_statuses = @training_task.new_statuses_allowed_to(User.current) + @user_activity_id = params[:user_activity_id] + @priorities = IssuePriority.active + + respond_to do |format| + # Issue详情单独处理 + if params[:is_issue_show] + format.js{ redirect_to training_task_path(@training_task) } + else + format.js + end + end + end + end + + def add_journal_in_org + if User.current.logged? + jour = Journal.new + jour.user_id = User.current.id + jour.notes = params[:notes] + jour.journalized = @issue + jour.save + org_activity = OrgActivity.where("org_act_type='Issue' and org_act_id =#{@issue.id}").first + org_activity.updated_at = jour.created_on + org_activity.save + @user_activity_id = params[:user_activity_id] + respond_to do |format| + format.js + end + end + end + + #对某个journ回复,显示回复框 + def reply + @training_task = TrainingTask.find(params[:id]) + @jour = Journal.find(params[:journal_id]) + respond_to do |format| + format.js + end + end + + #给issue添加journ。回复内容包含 对某个被回复的journ的内容 + def add_reply + if User.current.logged? + jour = Journal.find(params[:journal_id]) + @training_task = TrainingTask.find params[:id] + @project = @training_task.project + # @allowed_statuses = @training_task.new_statuses_allowed_to(User.current) + @priorities = IssuePriority.active + new_jour = Journal.new + new_jour.user_id = User.current.id + new_jour.reply_id = params[:journal_id] + new_jour.parent_id = jour.id + new_jour.notes = params[:content] + new_jour.journalized = @training_task + new_jour.save_attachments(params[:attachments]) + # new_jour = @issue.journals.build(:user_id => User.current.id, :reply_id => params[:journal_id], :notes => params[:content], :parent_id => jour.id) + @user_activity_id = params[:user_activity_id] + if new_jour.save + update_user_activity(@training_task.class, @training_task.id) + update_forge_activity(@training_task.class, @training_task.id) + respond_to do |format| + if params[:is_issue_show] + format.js{ redirect_to training_task_path(@training_task) } + else + format.js + end + end + end +=begin + @journals = @training_task.journals.includes(:user, :details).reorder("#{Journal.table_name}.id desc").all + @journals = get_no_children_comments_all @journals + @journals.each_with_index {|j,i| j.indice = i+1} + @journals.reject!(&:private_notes?) unless User.current.allowed_to?(:view_private_notes, @training_task.project) + @journals.reverse! if User.current.wants_comments_in_reverse_order? + @journal = Journal.new(:journalized => @training_task) + respond_to do |format| + #if params[:is_issue_show] + # format.js{ redirect_to training_task_path(@training_task) } + #else + format.js + #end + end +=end + end + end + + # 需要刷新详情页面,代码同步一致 + # 获取project和issue状态是为了刷新页面 + # 值所以用delete是因为issue和journal在act_as_attachment中是同一个类型 + # 非动态页面直接刷新,动态页面手动刷新 + def delete_journal + @is_project = params[:is_project] + @training_task = TrainingTask.find(params[:id]) + begin + forge_acts = ForgeMessage.where(:forge_message_type => "Journal", :forge_message_id => params[:journal_id]) + forge_acts.destroy_all unless forge_acts.empty? + at_message = AtMessage.where(:at_message_type => "Journal", :at_message_id => params[:journal_id]) + at_message.destroy_all unless at_message.empty? + Journal.delete(params[:journal_id]) + rescue Exception => e + puts e + end + @user_activity_id = params[:user_activity_id] + respond_to do |format| + if @user_activity_id + format.js + else + format.js{ redirect_to training_task_path(@training_task)} + end + end + end + + private + + def find_project + project_id = params[:project_id] || (params[:issue] && params[:issue][:project_id]) + @project = Project.find(project_id) + rescue ActiveRecord::RecordNotFound + render_404 + end + + def find_training_task + + end + + def allow_members + if !(User.current.member_of?(@project) || User.current.admin?) + render_403 + end + end + + def allow_manager + if !(User.current.admin? || is_project_manager?(User.current.id, @project.id) || is_project_manager?(User.current, @project.try(:forked_from_project_id)) ) + return render_403 + end + end + + def retrieve_previous_and_next_issue_ids + retrieve_query_from_session + if @query + sort_init(@query.sort_criteria.empty? ? [['id', 'desc']] : @query.sort_criteria) + sort_update(@query.sortable_columns, 'issues_index_sort') + limit = 500 + issue_ids = @query.issue_ids(:order => sort_clause, :limit => (limit + 1), :include => [:assigned_to, :tracker, :priority, :category, :fixed_version]) + if (idx = issue_ids.index(@issue.id)) && idx < limit + if issue_ids.size < 500 + @issue_position = idx + 1 + @issue_count = issue_ids.size + end + @prev_issue_id = issue_ids[idx - 1] if idx > 0 + @next_issue_id = issue_ids[idx + 1] if idx < (issue_ids.size - 1) + end + end + end + + def build_new_task_from_params + if params[:id].blank? + @training_task = TrainingTask.new + @training_task.project = @project + else + @training_task = @project.training_tasks.find(params[:id]) + end + + @training_task.project = @project + @training_task.author ||= User.current + end + + def check_for_default_issue_status + if IssueStatus.default.nil? + render_error l(:error_no_default_issue_status) + return false + end + end + + def parse_params_for_bulk_issue_attributes(params) + attributes = (params[:issue] || {}).reject {|k,v| v.blank?} + attributes.keys.each {|k| attributes[k] = '' if attributes[k] == 'none'} + if custom = attributes[:custom_field_values] + custom.reject! {|k,v| v.blank?} + custom.keys.each do |k| + if custom[k].is_a?(Array) + custom[k] << '' if custom[k].delete('__none__') + else + custom[k] = '' if custom[k] == '__none__' + end + end + end + attributes + end + + # Find the issue whose id is the :id parameter + # Raises a Unauthorized exception if the issue is not visible + def find_training_task + @training_task = TrainingTask.find(params[:id]) + @project = @training_task.project + rescue ActiveRecord::RecordNotFound + render_404 + end +end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 6fbdaa34f..a0fc10506 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -310,6 +310,11 @@ class UsersController < ApplicationController @user_activity_id = params[:user_activity_id] @activity_id = params[:activity_id] @type = 'Issue' + when 'Training_task' + @reply = Journal.find params[:reply_id] + @user_activity_id = params[:user_activity_id] + @activity_id = params[:activity_id] + @type = 'Training_task' when 'Syllabus' @reply = JournalsForMessage.find params[:reply_id] @type = 'Syllabus' @@ -417,6 +422,11 @@ class UsersController < ApplicationController comment = @root.journals.build(:user_id => User.current.id, :reply_id => params[:reply_id], :notes => params[:reply_message], :parent_id => reply.id) comment.save @is_project = params[:is_project] if params[:is_project] + when 'TrainingTask' + @root = reply.training_task + comment = @root.journals.build(:user_id => User.current.id, :reply_id => params[:reply_id], :notes => params[:reply_message], :parent_id => reply.id) + comment.save + @is_project = params[:is_project] if params[:is_project] when 'Syllabus' @root = Syllabus.find reply.jour_id options = {:notes => params[:reply_message], :reply_id => reply.user_id,:user_id => User.current.id,:m_parent_id => params[:reply_id].to_i,:m_reply_id => params[:reply_id].to_i, :root_id => reply.root_id} @@ -907,17 +917,19 @@ class UsersController < ApplicationController #用户作业列表 def user_homeworks - @order,@b_sort = params[:order] || "publish_time",params[:sort] || "desc" + @order,@b_sort = params[:order] || "created_at",params[:sort] || "desc" @user = User.current @r_sort = @b_sort == "desc" ? "asc" : "desc" if(params[:type].blank? || params[:type] == "1") #我的题库 - courses = @user.courses.where("is_delete = 1") - course_ids = courses.empty? ? "(-1)" : "(" + courses.map{|course| course.id}.join(",") + ")" - @homeworks = HomeworkCommon.where("user_id = #{@user.id} and course_id not in #{course_ids}").order("#{@order} #{@b_sort}") + # courses = @user.courses.where("is_delete = 1") + # course_ids = courses.empty? ? "(-1)" : "(" + courses.map{|course| course.id}.join(",") + ")" + # @homeworks = HomeworkCommon.where("user_id = #{@user.id} and course_id not in #{course_ids}").order("#{@order} #{@b_sort}") + @homeworks = @user.homework_banks.order("#{@order} #{@b_sort}") elsif params[:type] == "2" #公共题库 - visible_course = Course.where("is_delete = 0") - 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}") + # visible_course = Course.where("is_delete = 0") + # 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}") + @homeworks = HomeworkBank.where(:is_public => true).order("#{@order} #{@b_sort}") end @type = params[:type] ? params[:type] : '1' @limit = 10 @@ -941,7 +953,7 @@ class UsersController < ApplicationController visibleCourse = @user.courses.empty? ? [] : @user.courses.where("is_delete = 0").visible homework_ids = [] visibleCourse.each do |course| - homeworks = HomeworkCommon.where("course_id = #{course.id} and publish_time <= '#{Date.today}'") + homeworks = HomeworkCommon.where("course_id = #{course.id} and publish_time <= '#{Time.now}'") homework_ids << homeworks.pluck(:id) unless homeworks.empty? end visible_homework_ids = homework_ids.size == 0 ? "(-1)" :"(" + homework_ids.join(",") + ")" @@ -958,7 +970,7 @@ class UsersController < ApplicationController end def choose_user_course - homework = HomeworkCommon.find params[:homework].to_i + #homework = HomeworkCommon.find params[:homework].to_i # if homework.user != User.current && homework.course.is_public == 0 && !User.current.allowed_to?(:as_teacher,homework.course) # ah = ApplyHomework.where("user_id = ? and homework_common_id = ?", User.current.id, params[:send_id].to_i) # if ah.empty? @@ -969,9 +981,9 @@ class UsersController < ApplicationController # end if !params[:search].nil? search = "%#{params[:search].to_s.strip.downcase}%" - @course = @user.courses.where("is_delete = 0 and #{Course.table_name}.id != #{homework.course_id} and (#{Course.table_name}.id = #{params[:search].to_i } or #{Course.table_name}.name like :p)",:p=>search).select { |course| @user.allowed_to?(:as_teacher,course)} + @course = @user.courses.where("is_delete = 0 and (#{Course.table_name}.id = #{params[:search].to_i } or #{Course.table_name}.name like :p)",:p=>search).select { |course| @user.allowed_to?(:as_teacher,course)} else - @course = @user.courses.where("is_delete = 0 and #{Course.table_name}.id != #{homework.course_id}").select { |course| @user.allowed_to?(:as_teacher,course)} + @course = @user.courses.where("is_delete = 0").select { |course| @user.allowed_to?(:as_teacher,course)} end @search = params[:search] #这里仅仅是传递需要发送的资源id @@ -982,7 +994,7 @@ class UsersController < ApplicationController end def send_homework_to_course - homework = HomeworkCommon.find params[:send_id].to_i + homework = HomeworkBank.find params[:send_id].to_i course_ids = params[:course_ids] course_ids.each do |course_id| course = Course.find course_id.to_i @@ -991,49 +1003,60 @@ class UsersController < ApplicationController new_homework.user_id = User.current.id new_homework.description = homework.description new_homework.homework_type = homework.homework_type - new_homework.late_penalty = homework.late_penalty + new_homework.late_penalty = 0 new_homework.course_id = course.id - new_homework.teacher_priority = homework.teacher_priority - new_homework.anonymous_comment = homework.anonymous_comment + new_homework.teacher_priority = 1 + new_homework.anonymous_comment = 1 new_homework.quotes = 0 - new_homework.is_open = homework.is_open - homework.attachments.each do |attachment| - att = attachment.copy - att.container_id = nil - att.container_type = nil - att.copy_from = attachment.id - att.save - new_homework.attachments << att - end - homework_detail_manual = homework.homework_detail_manual - homework_detail_programing = homework.homework_detail_programing - homework_detail_group = homework.homework_detail_group - if homework_detail_manual + new_homework.is_open = 0 + # homework.attachments.each do |attachment| + # att = attachment.copy + # att.container_id = nil + # att.container_type = nil + # att.copy_from = attachment.id + # att.save + # new_homework.attachments << att + # end + #homework_detail_manual = homework.homework_detail_manual + #homework_detail_programing = homework.homework_detail_programing + #homework_detail_group = homework.homework_detail_group + #if homework_detail_manual new_homework.homework_detail_manual = HomeworkDetailManual.new - new_homework_detail_manual = new_homework.homework_detail_manual - new_homework_detail_manual.ta_proportion = homework_detail_manual.ta_proportion + new_homework_detail_manual = new_homework.homework_detail_manual + new_homework_detail_manual.ta_proportion = new_homework.homework_type == 2 ? 0.4 : 1.0 new_homework_detail_manual.comment_status = 0 - new_homework_detail_manual.evaluation_num = homework_detail_manual.evaluation_num - new_homework_detail_manual.absence_penalty = homework_detail_manual.absence_penalty - end - if homework_detail_programing + new_homework_detail_manual.evaluation_num = 3 + new_homework_detail_manual.absence_penalty = 0 + #end + #if homework_detail_programing + if new_homework.homework_type == 2 new_homework.homework_detail_programing = HomeworkDetailPrograming.new - new_homework.homework_detail_programing.ta_proportion = homework_detail_programing.ta_proportion - new_homework.homework_detail_programing.language = homework_detail_programing.language - homework.homework_tests.each_with_index do |homework_test| - new_homework.homework_tests << HomeworkTest.new( - input: homework_test.input, - output: homework_test.output - ) + new_homework.homework_detail_programing.ta_proportion = 0.6 + new_homework.homework_detail_programing.language = homework.language + homework.homework_bank_tests.each_with_index do |homework_test| + if homework_test.test_type + new_homework.homework_tests << HomeworkTest.new( + input: homework_test.input, + output: homework_test.output + ) + else + new_homework.homework_samples << HomeworkSample.new( + input: homework_test.input, + output: homework_test.output + ) + end end end + #end - if homework_detail_group + #if homework_detail_group + if new_homework.homework_type == 3 new_homework.homework_detail_group = HomeworkDetailGroup.new - new_homework.homework_detail_group.min_num = homework_detail_group.min_num - new_homework.homework_detail_group.max_num = homework_detail_group.max_num - new_homework.homework_detail_group.base_on_project = homework_detail_group.base_on_project + new_homework.homework_detail_group.min_num = homework.min_num + new_homework.homework_detail_group.max_num = homework.max_num + new_homework.homework_detail_group.base_on_project = homework.base_on_project end + #end if new_homework.save new_homework_detail_manual.save if new_homework_detail_manual new_homework.homework_detail_programing.save if new_homework.homework_detail_programing @@ -1052,9 +1075,9 @@ class UsersController < ApplicationController @user = User.current @select_course = params[:select_course] ? 1 : 0 #@user_homeworks = HomeworkCommon.where(:user_id => @user.id).order("created_at desc") - courses = @user.courses.where("is_delete = 1") - course_ids = courses.empty? ? "(-1)" : "(" + courses.map{|course| course.id}.join(",") + ")" - @homeworks = HomeworkCommon.where("user_id = #{@user.id} and course_id not in #{course_ids}").order("#{@order} #{@b_sort}") + #courses = @user.courses.where("is_delete = 1") + #course_ids = courses.empty? ? "(-1)" : "(" + courses.map{|course| course.id}.join(",") + ")" + @homeworks = @user.homework_banks.order("#{@order} #{@b_sort}") @type = params[:type] @limit = 15 @is_remote = true @@ -1068,17 +1091,17 @@ class UsersController < ApplicationController end def user_homework_type - @order,@b_sort = params[:order] || "publish_time",params[:sort] || "desc" + @order,@b_sort = params[:order] || "created_at",params[:sort] || "desc" @r_sort = @b_sort == "desc" ? "asc" : "desc" @user = User.current if(params[:type].blank? || params[:type] == "1") #我的题库 - courses = @user.courses.where("is_delete = 1") - course_ids = courses.empty? ? "(-1)" : "(" + courses.map{|course| course.id}.join(",") + ")" - @homeworks = HomeworkCommon.where("user_id = #{@user.id} and course_id not in #{course_ids}").order("#{@order} #{@b_sort}") + #courses = @user.courses.where("is_delete = 1") + #course_ids = courses.empty? ? "(-1)" : "(" + courses.map{|course| course.id}.join(",") + ")" + @homeworks = @user.homework_banks elsif params[:type] == "2" #公共题库 - visible_course = Course.where("is_public = 1 && is_delete = 0") - 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}") + #visible_course = Course.where("is_public = 1 && is_delete = 0") + #visible_course_ids = visible_course.empty? ? "(-1)" : "(" + visible_course.map{|course| course.id}.join(",") + ")" + @homeworks = HomeworkBank.where(:is_public => true) # elsif params[:type] == "3" #申请题库 # none_visible_course = Course.where("is_delete = 1") # none_visible_course_ids = none_visible_course.empty? ? "(-1)" : "(" + none_visible_course.map{|course| course.id}.join(",") + ")" @@ -1090,18 +1113,20 @@ class UsersController < ApplicationController # @homeworks = HomeworkCommon.find_by_sql(sql) end if params[:property] - all_homework_ids = @homeworks.empty? ? "(-1)" : "(" + @homeworks.map{|h| h.id}.join(",") + ")" - if params[:property] == "1" - @homeworks = HomeworkCommon.find_by_sql("select * from homework_commons where id in #{all_homework_ids} and homework_type = 1") - #@homeworks = @homeworks.where("homework_type = 1").reorder("#{@order} #{@b_sort}") - elsif params[:property] == "2" - @homeworks = HomeworkCommon.find_by_sql("select * from homework_commons where id in #{all_homework_ids} and homework_type = 2") - #@homeworks = @homeworks.where("homework_type = 2").reorder("#{@order} #{@b_sort}") - elsif params[:property] == "3" - @homeworks = HomeworkCommon.find_by_sql("select * from homework_commons where id in #{all_homework_ids} and homework_type = 3") - #@homeworks = @homeworks.where("homework_type = 3").reorder("#{@order} #{@b_sort}") - end + @homeworks = @homeworks.where(:homework_type => params[:property].to_i) + # all_homework_ids = @homeworks.empty? ? "(-1)" : "(" + @homeworks.map{|h| h.id}.join(",") + ")" + # if params[:property] == "1" + # @homeworks = HomeworkCommon.find_by_sql("select * from homework_commons where id in #{all_homework_ids} and homework_type = 1") + # #@homeworks = @homeworks.where("homework_type = 1").reorder("#{@order} #{@b_sort}") + # elsif params[:property] == "2" + # @homeworks = HomeworkCommon.find_by_sql("select * from homework_commons where id in #{all_homework_ids} and homework_type = 2") + # #@homeworks = @homeworks.where("homework_type = 2").reorder("#{@order} #{@b_sort}") + # elsif params[:property] == "3" + # @homeworks = HomeworkCommon.find_by_sql("select * from homework_commons where id in #{all_homework_ids} and homework_type = 3") + # #@homeworks = @homeworks.where("homework_type = 3").reorder("#{@order} #{@b_sort}") + # end end + @homeworks = @homeworks.reorder("#{@order} #{@b_sort}") @type = params[:type] ? params[:type] : '1' @property = params[:property] @is_import = params[:is_import] @@ -1117,7 +1142,7 @@ class UsersController < ApplicationController end def show_homework_detail - @homework = HomeworkCommon.find params[:homework].to_i + @homework = HomeworkBank.find params[:homework].to_i # if homework.course.is_public == 0 && !User.current.allowed_to?(:as_teacher,homework.course) && User.current != homework.user # ah = ApplyHomework.where("user_id = ? and homework_common_id = ?", User.current.id, params[:homework].to_i) # if ah.empty? @@ -1140,44 +1165,46 @@ class UsersController < ApplicationController #用户主页过滤作业 def user_search_homeworks - @order,@b_sort = params[:order] || "publish_time",params[:sort] || "desc" + @order,@b_sort = params[:order] || "created_at",params[:sort] || "desc" @r_sort = @b_sort == "desc" ? "asc" : "desc" @user = User.current search = params[:name].to_s.strip.downcase type_ids = (params[:property]=="" || params[:property].nil? || params[:property]=="0") ? "(1, 2, 3)" : "(" + params[:property] + ")" if(params[:type].blank? || params[:type] == "1") #我的题库 - courses = @user.courses.where("is_delete = 1") - course_ids = courses.empty? ? "(-1)" : "(" + courses.map{|course| course.id}.join(",") + ")" - if @order == "course_name" - sql = "SELECT homework_commons.* FROM homework_commons INNER JOIN courses ON homework_commons.course_id = courses.id where homework_commons.course_id not in #{course_ids} and homework_commons.user_id = #{@user.id} and homework_type in #{type_ids} and (homework_commons.name like '%#{search}%') order by CONVERT (courses.name USING gbk) COLLATE gbk_chinese_ci #{@b_sort}" - @homeworks = HomeworkCommon.find_by_sql(sql) - elsif @order == "user_name" - @homeworks = HomeworkCommon.where("user_id = #{@user.id} and course_id not in #{course_ids} and (name like '%#{search}%') and homework_type in #{type_ids}").joins(:user).order("CONVERT (lastname USING gbk) COLLATE gbk_chinese_ci #{@b_sort}, CONVERT (firstname USING gbk) COLLATE gbk_chinese_ci #{@b_sort},login #{@b_sort}") - else - @homeworks = HomeworkCommon.where("user_id = #{@user.id} and course_id not in #{course_ids} and (name like '%#{search}%') and homework_type in #{type_ids}").order("#{@order} #{@b_sort}") - end + #courses = @user.courses.where("is_delete = 1") + #course_ids = courses.empty? ? "(-1)" : "(" + courses.map{|course| course.id}.join(",") + ")" + @homeworks = @user.homework_banks.where("name like '%#{search}%' and homework_type in #{type_ids}").order("#{@order} #{@b_sort}") + # if @order == "course_name" + # sql = "SELECT homework_commons.* FROM homework_commons INNER JOIN courses ON homework_commons.course_id = courses.id where homework_commons.course_id not in #{course_ids} and homework_commons.user_id = #{@user.id} and homework_type in #{type_ids} and (homework_commons.name like '%#{search}%') order by CONVERT (courses.name USING gbk) COLLATE gbk_chinese_ci #{@b_sort}" + # @homeworks = HomeworkCommon.find_by_sql(sql) + # elsif @order == "user_name" + # @homeworks = HomeworkCommon.where("user_id = #{@user.id} and course_id not in #{course_ids} and (name like '%#{search}%') and homework_type in #{type_ids}").joins(:user).order("CONVERT (lastname USING gbk) COLLATE gbk_chinese_ci #{@b_sort}, CONVERT (firstname USING gbk) COLLATE gbk_chinese_ci #{@b_sort},login #{@b_sort}") + # else + # @homeworks = HomeworkCommon.where("user_id = #{@user.id} and course_id not in #{course_ids} and (name like '%#{search}%') and homework_type in #{type_ids}").order("#{@order} #{@b_sort}") + # end elsif params[:type] == "2" #题库 - visible_course = Course.where("is_public = 1 && is_delete = 0") - visible_course_ids = visible_course.empty? ? "(-1)" : "(" + visible_course.map{|course| course.id}.join(",") + ")" - all_homeworks = HomeworkCommon.where("course_id in #{visible_course_ids} and publish_time <= '#{Date.today}'") + #visible_course = Course.where("is_public = 1 && is_delete = 0") + #visible_course_ids = visible_course.empty? ? "(-1)" : "(" + visible_course.map{|course| course.id}.join(",") + ")" + all_homeworks = HomeworkBank.where(:is_public => true) all_user_ids = all_homeworks.map{|hw| hw.user_id} user_str_ids = search_user_by_name all_user_ids, search user_ids = user_str_ids.empty? ? "(-1)" : "(" + user_str_ids.join(",") + ")" - if @order == "course_name" - sql = "SELECT homework_commons.* FROM homework_commons INNER JOIN courses ON homework_commons.course_id = courses.id where homework_type in #{type_ids} and course_id in #{visible_course_ids} and publish_time <= '#{Date.today}' and (homework_commons.name like '%#{search}%' or homework_commons.user_id in #{user_ids}) order by CONVERT (courses.name USING gbk) COLLATE gbk_chinese_ci #{@b_sort}" - @homeworks = HomeworkCommon.find_by_sql(sql) - elsif @order == "user_name" - @homeworks = HomeworkCommon.where("course_id in #{visible_course_ids} and publish_time <= '#{Date.today}' and homework_type in #{type_ids} and (name like '%#{search}%' or user_id in #{user_ids})").joins(:user).order("CONVERT (lastname USING gbk) COLLATE gbk_chinese_ci #{@b_sort}, CONVERT (firstname USING gbk) COLLATE gbk_chinese_ci #{@b_sort},login #{@b_sort}") - else - @homeworks = HomeworkCommon.where("course_id in #{visible_course_ids} and publish_time <= '#{Date.today}' and homework_type in #{type_ids} and (name like '%#{search}%' or user_id in #{user_ids})").order("#{@order} #{@b_sort}") - end + @homeworks = HomeworkBank.where("is_public = 1 and (name like '%#{search}%' or user_id in #{user_ids}) and homework_type in #{type_ids}").order("#{@order} #{@b_sort}") + # if @order == "course_name" + # sql = "SELECT homework_commons.* FROM homework_commons INNER JOIN courses ON homework_commons.course_id = courses.id where homework_type in #{type_ids} and course_id in #{visible_course_ids} and publish_time <= '#{Date.today}' and (homework_commons.name like '%#{search}%' or homework_commons.user_id in #{user_ids}) order by CONVERT (courses.name USING gbk) COLLATE gbk_chinese_ci #{@b_sort}" + # @homeworks = HomeworkCommon.find_by_sql(sql) + # elsif @order == "user_name" + # @homeworks = HomeworkCommon.where("course_id in #{visible_course_ids} and publish_time <= '#{Date.today}' and homework_type in #{type_ids} and (name like '%#{search}%' or user_id in #{user_ids})").joins(:user).order("CONVERT (lastname USING gbk) COLLATE gbk_chinese_ci #{@b_sort}, CONVERT (firstname USING gbk) COLLATE gbk_chinese_ci #{@b_sort},login #{@b_sort}") + # else + # @homeworks = HomeworkCommon.where("course_id in #{visible_course_ids} and publish_time <= '#{Date.today}' and homework_type in #{type_ids} and (name like '%#{search}%' or user_id in #{user_ids})").order("#{@order} #{@b_sort}") + # end elsif params[:type] == "3" #申请题库 apply_homeworks = ApplyHomework.where("user_id = ?",@user.id) homework_ids = apply_homeworks.empty? ? "(-1)" : "(" + apply_homeworks.map{|ah| ah.homework_common_id}.join(",") + ")" none_visible_course = Course.where("is_delete = 1") none_visible_course_ids = none_visible_course.empty? ? "(-1)" : "(" + none_visible_course.map{|course| course.id}.join(",") + ")" if @order == "course_name" - sql = "SELECT homework_commons.* FROM homework_commons INNER JOIN courses ON homework_commons.course_id = courses.id where courses.is_delete = 0 and homework_commons.id in #{homework_ids} and homework_type in #{type_ids} and publish_time <= '#{Date.today}' and (homework_commons.name like '%#{search}%') order by CONVERT (courses.name USING gbk) COLLATE gbk_chinese_ci #{@b_sort}" + sql = "SELECT homework_commons.* FROM homework_commons INNER JOIN courses ON homework_commons.course_id = courses.id where courses.is_delete = 0 and homework_commons.id in #{homework_ids} and homework_type in #{type_ids} and publish_time <= '#{Time.now}' and (homework_commons.name like '%#{search}%') order by CONVERT (courses.name USING gbk) COLLATE gbk_chinese_ci #{@b_sort}" @homeworks = HomeworkCommon.find_by_sql(sql) elsif @order == "user_name" @homeworks = HomeworkCommon.where("homework_commons.id in #{homework_ids} and course_id not in #{none_visible_course_ids} and (name like '%#{search}%') and homework_type in #{type_ids}").joins(:user).order("CONVERT (lastname USING gbk) COLLATE gbk_chinese_ci #{@b_sort}, CONVERT (firstname USING gbk) COLLATE gbk_chinese_ci #{@b_sort},login #{@b_sort}") @@ -1211,11 +1238,16 @@ class UsersController < ApplicationController #检查改作业是否可以选用 def check_homework - homework = HomeworkCommon.find_by_id params[:homework] - student_ids = homework.course.student.empty? ? [] : homework.course.student.map{|student| student.student_id}.join(',') resultObj = {status: 2} - if student_ids.include?(User.current.id.to_s) - resultObj[:status] = 1 + homework_bank = HomeworkBank.find params[:homework] + if homework_bank.homework_common_id && HomeworkCommon.find(homework_bank.homework_common_id) + homework = HomeworkCommon.find(homework_bank.homework_common_id) + student_ids = homework.course.student.empty? ? [] : homework.course.student.map{|student| student.student_id}.join(',') + if student_ids.include?(User.current.id.to_s) + resultObj[:status] = 1 + else + resultObj[:status] = 0 + end else resultObj[:status] = 0 end @@ -1224,47 +1256,58 @@ class UsersController < ApplicationController #导入作业,确定按钮 def user_select_homework - homework = HomeworkCommon.find_by_id params[:checkMenu] - homework_detail_programing = homework.homework_detail_programing - homework_detail_group = homework.homework_detail_group + homework = HomeworkBank.find_by_id params[:checkMenu] + #homework_detail_programing = homework.homework_detail_programing + #homework_detail_group = homework.homework_detail_group @homework = HomeworkCommon.new @select_course = params[:select_course] || 0 if homework @ref_homework = homework @homework.name = homework.name @homework.description = homework.description - @homework.end_time = homework.end_time + #@homework.end_time = homework.end_time @homework.homework_type = homework.homework_type - @homework.course_id = homework.course_id - homework.attachments.each do |attachment| - att = attachment.copy - att.container_id = nil - att.container_type = nil - att.copy_from = attachment.id - att.save - @homework.attachments << att - end + #@homework.course_id = homework.course_id + # homework.attachments.each do |attachment| + # att = attachment.copy + # att.container_id = nil + # att.container_type = nil + # att.copy_from = attachment.id + # att.save + # @homework.attachments << att + # end - if homework_detail_programing + #if homework_detail_programing + if homework.homework_type == 2 @homework.homework_detail_programing = HomeworkDetailPrograming.new @homework_detail_programing = @homework.homework_detail_programing - @homework_detail_programing.ta_proportion = homework_detail_programing.ta_proportion - @homework_detail_programing.language = homework_detail_programing.language - homework.homework_tests.each_with_index do |homework_test| - @homework.homework_tests << HomeworkTest.new( - input: homework_test.input, - output: homework_test.output - ) + #@homework_detail_programing.ta_proportion = homework_detail_programing.ta_proportion + @homework_detail_programing.language = homework.language + homework.homework_bank_tests.each_with_index do |homework_test| + if homework_test.test_type + @homework.homework_tests << HomeworkTest.new( + input: homework_test.input, + output: homework_test.output + ) + else + @homework.homework_samples << HomeworkSample.new( + input: homework_test.input, + output: homework_test.output + ) + end end end + #end - if homework_detail_group + #if homework_detail_group + if homework.homework_type == 3 @homework.homework_detail_group = HomeworkDetailGroup.new @homework_detail_group = @homework.homework_detail_group - @homework_detail_group.min_num = homework_detail_group.min_num - @homework_detail_group.max_num = homework_detail_group.max_num - @homework_detail_group.base_on_project = homework_detail_group.base_on_project + @homework_detail_group.min_num = homework.min_num + @homework_detail_group.max_num = homework.max_num + @homework_detail_group.base_on_project = homework.base_on_project end + #end end respond_to do |format| format.js @@ -1310,7 +1353,7 @@ class UsersController < ApplicationController if student_work # 提交作品时,计算是否迟交 - if Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") < Time.parse(Time.now.to_s).strftime("%Y-%m-%d") + if homework.end_time < Time.now student_work.late_penalty = homework.late_penalty student_work.work_status = 2 # 缺评扣分 @@ -1347,12 +1390,12 @@ class UsersController < ApplicationController homework = HomeworkCommon.new homework.name = params[:homework_common][:name] homework.description = params[:homework_common][:description] - homework.end_time = params[:homework_common][:end_time] || Date.today - if params[:homework_common][:publish_time] == "" - homework.publish_time = Date.today - else - homework.publish_time = params[:homework_common][:publish_time] - end + # homework.end_time = params[:homework_common][:end_time] || Time.now + # if params[:homework_common][:publish_time] == "" + # homework.publish_time = Time.now + # else + # homework.publish_time = params[:homework_common][:publish_time] + # end homework.anonymous_comment = params[:homework_common][:anonymous_comment] ? params[:homework_common][:anonymous_comment].to_i : 1 homework.homework_type = params[:homework_type].to_i || 1 homework.late_penalty = 0 @@ -1369,19 +1412,31 @@ class UsersController < ApplicationController else homework_detail_manual.ta_proportion = homework.homework_type == 2 ? 0.3 : 0.6 end - if homework.publish_time > Date.today + if params[:homework_common][:end_time] == "" homework_detail_manual.comment_status = 0 else - homework_detail_manual.comment_status = 1 + homework.end_time = params[:homework_common][:end_time] + if params[:homework_common][:publish_time] == "" + homework.publish_time = Time.now + else + homework.publish_time = params[:homework_common][:publish_time] + end - #更新CourseHomeworkStatistics中每个学生的未交作品数 - homework.course.student.each do |student| - course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(homework.course_id, student.student_id) - course_statistics.update_attribute('un_commit_work_num', course_statistics.un_commit_work_num + 1) if course_statistics + if homework.publish_time > Time.now + homework_detail_manual.comment_status = 0 + else + homework_detail_manual.comment_status = 1 + + #更新CourseHomeworkStatistics中每个学生的未交作品数 + homework.course.student.each do |student| + course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(homework.course_id, student.student_id) + course_statistics.update_attribute('un_commit_work_num', course_statistics.un_commit_work_num + 1) if course_statistics + end end end - homework_detail_manual.evaluation_start = params[:evaluation_start].blank? ? homework.end_time + 7 : params[:evaluation_start] - homework_detail_manual.evaluation_end = params[:evaluation_end].blank? ? homework_detail_manual.evaluation_start + 7 : params[:evaluation_end] + + homework_detail_manual.evaluation_start = homework.end_time + 7 if homework.end_time + homework_detail_manual.evaluation_end = homework.end_time + 14 if homework.end_time homework_detail_manual.evaluation_num = params[:evaluation_num] || 3 homework_detail_manual.absence_penalty = 0 homework.homework_detail_manual = homework_detail_manual @@ -1397,6 +1452,16 @@ class UsersController < ApplicationController end homework_detail_programing.language = params[:language_type].to_i + sample_inputs = params[:sample][:input] + if Array === sample_inputs + sample_inputs.each_with_index do |val, i| + homework.homework_samples << HomeworkSample.new( + input: val, + output: params[:sample][:output][i] + ) + end + end + inputs = params[:program][:input] if Array === inputs inputs.each_with_index do |val, i| @@ -1427,10 +1492,15 @@ class UsersController < ApplicationController end if params[:quotes] && !params[:quotes].blank? - quotes_homework = HomeworkCommon.find params[:quotes].to_i + quotes_homework = HomeworkBank.find params[:quotes].to_i quotes_homework.update_column(:quotes, quotes_homework.quotes+1) end + if params[:add_to_bank] + homework_bank = add_to_homework_bank_f homework + homework_bank.save + homework.update_attributes(:homework_bank_id => homework_bank.id) + end redirect_to homework_common_index_path(:course => homework.course_id) end end @@ -1844,7 +1914,7 @@ class UsersController < ApplicationController @manage_homeworks = HomeworkCommon.where("course_id in #{tea_course_ids}").order("created_at desc").limit(5) stu_courses = @user.courses.visible.not_deleted.select{|course| @user.has_student_role(course)} stu_course_ids = stu_courses.empty? ? "(-1)" : "(" + stu_courses.map{|course| course.id}.join(',') + ")" - @receive_homeworks = HomeworkCommon.where("course_id in #{stu_course_ids} and publish_time <= '#{Date.today}'").order("created_at desc").limit(5) + @receive_homeworks = HomeworkCommon.where("course_id in #{stu_course_ids} and publish_time <= '#{Time.now}'").order("created_at desc").limit(5) if (@manage_homeworks.empty? && @receive_homeworks.empty?) || (@receive_homeworks.empty?) || (!@manage_homeworks.empty? && !@receive_homeworks.empty? && @manage_homeworks.first.created_at > @receive_homeworks.first.created_at) @manage_pre = true else @@ -1897,7 +1967,7 @@ class UsersController < ApplicationController @type = @type.to_i stu_courses = @user.courses.visible.not_deleted.select{|course| @user.has_student_role(course)} stu_course_ids = stu_courses.empty? ? "(-1)" : "(" + stu_courses.map{|course| course.id}.join(',') + ")" - @homeworks = HomeworkCommon.where("course_id in #{stu_course_ids} and publish_time <= '#{Date.today}'").order("#{@order} #{@b_sort}") + @homeworks = HomeworkCommon.where("course_id in #{stu_course_ids} and publish_time <= '#{Time.now}'").order("#{@order} #{@b_sort}") if params[:property] all_homework_ids = @homeworks.empty? ? "(-1)" : "(" + @homeworks.map{|h| h.id}.join(",") + ")" if params[:property] == "1" @@ -1934,7 +2004,7 @@ class UsersController < ApplicationController else stu_courses = @user.courses.visible.not_deleted.select{|course| @user.has_student_role(course)} stu_course_ids = stu_courses.empty? ? "(-1)" : "(" + stu_courses.map{|course| course.id}.join(',') + ")" - @homeworks = HomeworkCommon.where("course_id in #{stu_course_ids} and publish_time <= '#{Date.today}'").order("#{@order} #{@b_sort}") + @homeworks = HomeworkCommon.where("course_id in #{stu_course_ids} and publish_time <= '#{Time.now}'").order("#{@order} #{@b_sort}") end if params[:property] all_homework_ids = @homeworks.empty? ? "(-1)" : "(" + @homeworks.map{|h| h.id}.join(",") + ")" @@ -1975,7 +2045,7 @@ class UsersController < ApplicationController stu_courses = @user.courses.visible.not_deleted.select{|course| @user.has_student_role(course)} stu_course_ids = stu_courses.empty? ? "(-1)" : "(" + stu_courses.map{|course| course.id}.join(',') + ")" #user_ids = hw_publisher_user_ids search, stu_course_ids - @homeworks = HomeworkCommon.where("course_id in #{stu_course_ids} and homework_type in #{type_ids} and publish_time <= '#{Date.today}' and name like '%#{search}%'") + @homeworks = HomeworkCommon.where("course_id in #{stu_course_ids} and homework_type in #{type_ids} and publish_time <= '#{Time.now}' and name like '%#{search}%'") if @order == "status" @homeworks.each do |homework| work = cur_user_works_for_homework homework @@ -2033,7 +2103,7 @@ class UsersController < ApplicationController my_course_ids = StudentsForCourse.includes(:course).where("student_id = #{@user.id} and courses.is_delete = 0").blank? ? "(-1)" : "(" + StudentsForCourse.includes(:course). where("student_id = #{@user.id} and courses.is_delete = 0").map{|sc| sc.course_id}.join(",") + ")" # 用户待完成的作业 - homeworks = HomeworkCommon.where("course_id in #{my_course_ids} and publish_time <= '#{Date.today}'") + homeworks = HomeworkCommon.where("course_id in #{my_course_ids} and publish_time <= '#{Time.now}'") homework_ids = homeworks.blank? ? "(-1)" : "(" + homeworks.map{|homework| homework.id}.join(",") + ")" student_works = StudentWork.where("user_id = #{@user.id} and homework_common_id in #{homework_ids} and work_status != 0") @unfinished_homework_count = homeworks.count - student_works.count @@ -2175,11 +2245,11 @@ class UsersController < ApplicationController # 待完成的作业 def unfinished_homework_list my_course_ids = StudentsForCourse.includes(:course).where("student_id = #{@user.id} and courses.is_delete = 0").blank? ? "(-1)" : "(" + StudentsForCourse.includes(:course).where("student_id = #{@user.id} and courses.is_delete = 0").map{|sc| sc.course_id}.join(",") + ")" - homeworks = HomeworkCommon.where("course_id in #{my_course_ids} and publish_time <= '#{Date.today}'") + homeworks = HomeworkCommon.where("course_id in #{my_course_ids} and publish_time <= '#{Time.now}'") homework_ids = homeworks.blank? ? "(-1)" : "(" + homeworks.map{|homework| homework.id}.join(",") + ")" student_works = StudentWork.where("user_id = #{@user.id} and homework_common_id in #{homework_ids} and work_status != 0") finished_works_id = student_works.blank? ? "(-1)" : "(" + student_works.map{ |sw| sw.homework_common_id.to_i }.join(",") + ")" - @unfinished_homeworks = HomeworkCommon.where("course_id in #{my_course_ids} and publish_time <= '#{Date.today}' and id not in #{finished_works_id}").order("updated_at desc") + @unfinished_homeworks = HomeworkCommon.where("course_id in #{my_course_ids} and publish_time <= '#{Time.now}' and id not in #{finished_works_id}").order("updated_at desc") @unfinished_homeworks_count = @unfinished_homeworks.count @limit = 20 @unfinished_homework_pages = Paginator.new @unfinished_homeworks_count, @limit, params['page'] || 1 @@ -4130,7 +4200,7 @@ class UsersController < ApplicationController count = 0 courses = syllabus.courses.not_deleted courses.each do |c| - count += (User.current.admin? || User.current.allowed_to?(:as_teacher,c)) ? (c.homework_commons.count + visable_attachemnts_incourse(c).count) : (c.homework_commons.where("publish_time <= '#{Date.today}'").count + visable_attachemnts_incourse(c).count) + count += (User.current.admin? || User.current.allowed_to?(:as_teacher,c)) ? (c.homework_commons.count + visable_attachemnts_incourse(c).count) : (c.homework_commons.where("publish_time <= '#{Time.now}'").count + visable_attachemnts_incourse(c).count) end syllabus[:infocount] = count end @@ -4343,6 +4413,11 @@ class UsersController < ApplicationController @journals = @activity.journals.reorder("created_on desc") @user_activity_id = params[:div_id].to_i if params[:div_id] @user_activity = ForgeActivity.where(params[:div_id].to_i).first if params[:div_id] + when 'is_project_training_task' + @activity = TrainingTask.where('id = ?', params[:id].to_i).first + @journals = @activity.journals.reorder("created_on desc") + @user_activity_id = params[:div_id].to_i if params[:div_id] + @user_activity = ForgeActivity.where(params[:div_id].to_i).first if params[:div_id] when 'BlogComment' obj = BlogComment.where('id = ?', params[:id].to_i).first @user_activity_id = params[:div_id].to_i if params[:div_id] diff --git a/app/controllers/words_controller.rb b/app/controllers/words_controller.rb index 38ec4270b..b36d1dd01 100644 --- a/app/controllers/words_controller.rb +++ b/app/controllers/words_controller.rb @@ -126,7 +126,7 @@ class WordsController < ApplicationController if params[:user_activity_id] == params[:activity_id] redirect_to feedback_contest_path(@contest) else - redirect_to contest_activities_contest_path(@contest) + redirect_to contest_path(@contest) end return end diff --git a/app/controllers/works_controller.rb b/app/controllers/works_controller.rb index 7a06f83f3..cd63d5810 100644 --- a/app/controllers/works_controller.rb +++ b/app/controllers/works_controller.rb @@ -16,7 +16,7 @@ class WorksController < ApplicationController if @is_teacher @homework_commons = @contest.works.where("name like '%#{search}%'").order("created_at desc") else - @homework_commons = @contest.works.where("name like '%#{search}%' and publish_time <= '#{Date.today}'").order("created_at desc") + @homework_commons = @contest.works.where("name like '%#{search}%' and work_status > 0").order("created_at desc") end @is_new = params[:is_new] @@ -108,10 +108,16 @@ class WorksController < ApplicationController else @contestwork.publish_time = params[:homework_common][:publish_time] end + if @contestwork.publish_time > Date.today + @contestwork.work_status = 0 + elsif @contestwork.publish_time <= Date.today && @contestwork.work_status == 0 + @contestwork.work_status = 1 + end param_end_time = Time.parse(params[:homework_common][:end_time]).strftime("%Y-%m-%d") homework_end_time = Time.parse(@contestwork.end_time.to_s).strftime("%Y-%m-%d") work_detail_manual = @contestwork.work_detail_manual if homework_end_time != param_end_time + @contestwork.end_time = params[:homework_common][:end_time] eval_start = Time.parse(work_detail_manual.evaluation_start.to_s).strftime("%Y-%m-%d") if eval_start.nil? || (eval_start <= param_end_time && @contestwork.work_status <= 2) work_detail_manual.evaluation_start = @contestwork.end_time + 7 @@ -133,8 +139,13 @@ class WorksController < ApplicationController end end end + if @contestwork.end_time < Date.today && @contestwork.work_status == 1 + @contestwork.work_status = 2 + elsif @contestwork.end_time >= Date.today && @contestwork.work_status == 2 + @contestwork.work_status = 1 + #status = true + end end - @contestwork.end_time = params[:homework_common][:end_time] || Time.now if params[:homework_type] && params[:homework_type].to_i != @contestwork.work_type if @contestwork.work_type == 3 @contestwork.work_detail_group.destroy if @contestwork.work_detail_group @@ -142,14 +153,6 @@ class WorksController < ApplicationController end @contestwork.work_type = params[:homework_type].to_i || @contestwork.work_type - #status = false - if @contestwork.publish_time <= Date.today && @contestwork.work_status == 0 - @contestwork.work_status = 1 - elsif @contestwork.end_time < Date.today && @contestwork.work_status == 1 - @contestwork.work_status = 2 - #status = true - end - @contestwork.save_attachments(params[:attachments]) render_attachment_warning_if_needed(@contestwork) diff --git a/app/helpers/api_helper.rb b/app/helpers/api_helper.rb index e993b120f..0fc916757 100644 --- a/app/helpers/api_helper.rb +++ b/app/helpers/api_helper.rb @@ -102,7 +102,7 @@ module ApiHelper #获取作业的是否可以匿评的描述 def homework_status_desc homework if homework.homework_type == 1 && homework.homework_detail_manual #匿评作业 - if Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") >= Time.now.strftime("%Y-%m-%d") + if homework.end_time >= Time.now link = show_homework_deadline homework elsif homework.student_works.count >= 2 #作业份数大于2 case homework.homework_detail_manual.comment_status diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 7315d7630..6dd20aceb 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -1036,6 +1036,32 @@ module ApplicationHelper return @result end + # 更新各类消息为已读 + def update_messsages_to_viewed(message_type, forge_message_id) + if(message_type == "CourseMessage") + query = CourseMessage.where(:course_message_type => ["JoinCourse", "RemoveFromCourse"], + :user_id => User.current, + :course_id => forge_message_id, + :viewed => false) + elsif(message_type == "ForgeMessage") + query = ForgeMessage.where(:forge_message_type => ["ProjectInvite", "JoinProject", "RemoveFromProject"], + :user_id => User.current, + :project_id => forge_message_id, + :viewed => false) + elsif(message_type == "ContestMessage") + query = ContestMessage.where(:contest_message_type => ["ContestRequestDealResult", "JoinContest", "RemoveFromContest"], + :user_id => User.current, + :contest_id => forge_message_id, + :viewed => false) + elsif(message_type == "BlogMessage") + query = BlogMessage.where(:blog_message_type => "BlogComment", + :user_id => User.current, + :blog_id => forge_message_id, + :viewed => false) + end + query.update_all(:viewed => true) unless query.blank? + end + def show_attachment_tip container_id, container_type atts = Attachment.where(:container_id => container_id, :container_type => container_type, :is_public => 0) atts.count > 0 ? true :false @@ -2964,7 +2990,7 @@ module ApplicationHelper def user_receive_homework_count stu_courses = @user.courses.visible.not_deleted.select{|course| @user.has_student_role(course)} stu_course_ids = stu_courses.empty? ? "(-1)" : "(" + stu_courses.map{|course| course.id}.join(',') + ")" - @homeworks = HomeworkCommon.where("course_id in #{stu_course_ids} and publish_time <= '#{Date.today}'").count + @homeworks = HomeworkCommon.where("course_id in #{stu_course_ids} and publish_time <= '#{Time.now}'").count end # 用户发布的issue数 @@ -3044,7 +3070,7 @@ module ApplicationHelper #获取匿评相关连接代码 def homework_anonymous_comment (homework, hw_status, user_activity_id = -1) - if homework.homework_detail_manual.comment_status == 0 ||Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") >= Time.now.strftime("%Y-%m-%d") + if homework.homework_detail_manual.comment_status == 0 || homework.end_time >= Time.now link = link_to "启动匿评","javascript:void(0)", :class => "wpostOptionLink", :title => "作业截止日期之前不可以启动匿评" elsif homework.student_works.has_committed.count >= 2 && homework.homework_detail_manual#作业份数大于2 case homework.homework_detail_manual.comment_status @@ -3103,13 +3129,13 @@ module ApplicationHelper else #学生显示提交作品、修改作品等按钮 work = cur_user_works_for_homework homework project = cur_user_projects_for_homework homework - if work.nil? && Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") >= Time.now.strftime("%Y-%m-%d") + if work.nil? && homework.end_time >= Time.now if homework.homework_type ==3 && project.nil? && homework.homework_detail_group.base_on_project == 1 link_to "提交作品(#{count})","javascript:void(0)", :class => 'c_grey',:style=>"cursor:not-allowed",:title => '请先关联项目再提交作品' else link_to "提交作品(#{count})", new_student_work_url_without_domain(homework.id),:class => 'c_blue' end - elsif work.nil? && Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") < Time.now.strftime("%Y-%m-%d") + elsif work.nil? && homework.end_time < Time.now if homework.homework_type ==3 && project.nil? && homework.homework_detail_group.base_on_project == 1 link_to "补交作品(#{count})","javascript:void(0)", :class => 'c_grey',:style=>"cursor:not-allowed",:title => '请先关联项目再补交作品' else @@ -3129,9 +3155,9 @@ module ApplicationHelper end elsif homework.homework_detail_manual && homework.homework_detail_manual.comment_status == 3 link_to "查看作品(#{count})",student_work_index_url_in_org(homework.id, 2), :class => 'c_blue', :title => "匿评已结束" - elsif homework.homework_type == 2 && Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") >= Time.now.strftime("%Y-%m-%d")#编程作业不能修改作品 + elsif homework.homework_type == 2 && homework.end_time >= Time.now#编程作业不能修改作品 link_to "修改作品(#{count})", new_student_work_url_without_domain(homework.id),:class => 'c_blue' - elsif Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") >= Time.now.strftime("%Y-%m-%d") && work.user_id == User.current.id + elsif homework.end_time >= Time.now && work.user_id == User.current.id link_to "修改作品(#{count})", edit_student_work_url_without_domain(work.id),:class => 'c_blue' else link_to "查看作品(#{count})", student_work_index_url_in_org(homework.id, 2), :class => 'c_blue', :title => "作业截止后不可修改作品" @@ -3178,13 +3204,13 @@ module ApplicationHelper else User.current.member_of_course?(homework.course) work = cur_user_works_for_homework homework project = cur_user_projects_for_homework homework - if work.nil? && Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") >= Time.now.strftime("%Y-%m-%d") + if work.nil? && homework.end_time >= Time.now if homework.homework_type ==3 && project.nil? && homework.homework_detail_group.base_on_project == 1 link_to "关联项目", student_work_index_url_in_org(homework.id, 1), :class => 'hw_btn_green fr mt5',:title => '查看分组作业详情', :target => '_blank' else link_to "提交作品", new_student_work_url_without_domain(homework.id),:class => 'hw_btn_green fr mt5', :target => '_blank' end - elsif work.nil? && Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") < Time.now.strftime("%Y-%m-%d") + elsif work.nil? && homework.end_time < Time.now if homework.homework_type ==3 && project.nil? && homework.homework_detail_group.base_on_project == 1 link_to "关联项目", student_work_index_url_in_org(homework.id, 1), :class => 'hw_btn_green fr mt5',:title => '查看分组作业详情', :target => '_blank' else @@ -3195,9 +3221,9 @@ module ApplicationHelper link_to "作品匿评", student_work_index_url_in_org(homework.id, 2), :class => 'hw_btn_green fr mt5', :title => "开启匿评后不可修改作品", :target => '_blank' elsif homework.homework_detail_manual && homework.homework_detail_manual.comment_status == 3 link_to "查看作品",student_work_index_url_in_org(homework.id, 2), :class => 'hw_btn_green fr mt5', :title => "匿评已结束", :target => '_blank' - elsif homework.homework_type == 2 && Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") >= Time.now.strftime("%Y-%m-%d")#编程作业不能修改作品 + elsif homework.homework_type == 2 && homework.end_time >= Time.now#编程作业不能修改作品 link_to "修改作品", new_student_work_url_without_domain(homework.id),:class => 'hw_btn_green fr mt5', :target => '_blank' - elsif Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") >= Time.now.strftime("%Y-%m-%d") && work.user_id == User.current.id + elsif homework.end_time >= Time.now && work.user_id == User.current.id link_to "修改作品", edit_student_work_url_without_domain(work.id),:class => 'hw_btn_green fr mt5', :target => '_blank' else link_to "查看作品", student_work_index_url_in_org(homework.id, 2), :class => 'hw_btn_green fr mt5', :title => "作业截止后不可修改作品", :target => '_blank' @@ -3276,7 +3302,7 @@ module ApplicationHelper #获取当前作业的提交截止时间/互评截止时间 def cur_homework_end_time homework str = "" - if homework.anonymous_comment == 0 && homework.end_time && homework.end_time < Date.today && homework.homework_detail_manual + if homework.anonymous_comment == 0 && homework.end_time && homework.end_time < Time.now && homework.homework_detail_manual str = "互评截止:#{format_date homework.homework_detail_manual.evaluation_end}" else str = "提交截止:#{homework.end_time ? (format_date homework.end_time) : ' -- '}" @@ -3671,7 +3697,7 @@ def get_reply_by_type type, reply_id reply = OrgDocumentComment.find reply_id when 'News','Comment' reply = Comment.find reply_id - when 'Issue' + when 'Issue', 'TrainingTask' reply = Journal.find reply_id when 'Journal' reply = Journal.find reply_id @@ -3949,7 +3975,7 @@ def get_hw_index(hw,is_teacher) if is_teacher homeworks = hw.course.homework_commons.order("created_at asc") else - homeworks = hw.course.homework_commons.where("publish_time <= '#{Date.today}'").order("created_at asc") + homeworks = hw.course.homework_commons.where("publish_time <= '#{Time.now}'").order("created_at asc") end hw_ids = homeworks.map{|hw| hw.id} if !homeworks.empty? index = hw_ids.index(hw.id) @@ -3969,9 +3995,9 @@ def get_hw_status homework_common else str += '匿评已禁用' end - if Time.parse(homework_common.end_time.to_s).strftime("%Y-%m-%d") >= Time.now.strftime("%Y-%m-%d") + if homework_common.end_time >= Time.now str += '作品提交中' - elsif Time.parse(homework_common.end_time.to_s).strftime("%Y-%m-%d") < Time.now.strftime("%Y-%m-%d") && homework_common.anonymous_comment == 1 && User.current.allowed_to?(:as_teacher, homework_common.course) + elsif homework_common.end_time < Time.now && homework_common.anonymous_comment == 1 && User.current.allowed_to?(:as_teacher, homework_common.course) str += '教师评阅中' else str += '作品补交中' @@ -4091,6 +4117,33 @@ def create_works_list homework end end +def add_to_homework_bank_f homework + homework_bank = HomeworkBank.new(:name => homework.name, :description => homework.description, :user_id => homework.user_id, :homework_type => homework.homework_type, + :quotes => 1, :is_public => homework.course.is_public, :applicable_syllabus => homework.course.syllabus.title, :homework_common_id => homework.id) + if homework.homework_type == 2 && homework.homework_detail_programing + homework_bank.language = homework.homework_detail_programing.language + homework.homework_tests.each_with_index do |homework_test| + homework_bank.homework_bank_tests << HomeworkBankTest.new( + test_type: 1, + input: homework_test.input, + output: homework_test.output + ) + end + homework.homework_samples.each_with_index do |homework_test| + homework_bank.homework_bank_tests << HomeworkBankTest.new( + test_type: 0, + input: homework_test.input, + output: homework_test.output + ) + end + elsif homework.homework_type == 3 && homework.homework_detail_group + homework_bank.min_num = homework.homework_detail_group.min_num + homework_bank.max_num = homework.homework_detail_group.max_num + homework_bank.base_on_project = homework.homework_detail_group.base_on_project + end + homework_bank +end + # 获取项目动态更新时间 def get_forge_act_message(act, type) forge_act = ForgeActivity.where(:forge_act_id => act.id, :forge_act_type => type).first @@ -4146,7 +4199,7 @@ def visable_contest_work contest if User.current.admin? || User.current.admin_of_contest?(contest) work_num = contest.works.count else - work_num = contest.works.where("publish_time <= '#{Date.today}'").count + work_num = contest.works.where("work_status > 0").count end work_num end diff --git a/app/helpers/courses_helper.rb b/app/helpers/courses_helper.rb index e97d32523..397f91f6b 100644 --- a/app/helpers/courses_helper.rb +++ b/app/helpers/courses_helper.rb @@ -257,6 +257,14 @@ module CoursesHelper count.to_s << '+' end + def searchTeacherAndAssistantNoManager course + members = [] + course.members.includes(:user).each do |m| + members << m if m && m.user && m.user != course.teacher && m.user.has_teacher_role(course) + end + members + end + # ===================================================================================== # return people list def searchTeacherAndAssistant project @@ -816,7 +824,7 @@ module CoursesHelper if User.current.admin? || User.current.allowed_to?(:as_teacher,course) homework_num = course.homework_commons.count else - homework_num = course.homework_commons.where("publish_time <= '#{Date.today}'").count + homework_num = course.homework_commons.where("publish_time <= '#{Time.now}'").count end homework_num end @@ -928,5 +936,11 @@ module CoursesHelper result = !m_roles.blank? result end + + #获取该班级下已关联项目的分组作业 + def select_group_homeworks course + student_work_pros = course.student_work_projects.where("project_id != -1 && project_id != 0") + homeworks = @course.homework_commons.where(:id => student_work_pros.map(&:homework_common_id)) + end end diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index 653afef62..f9b185ba4 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -544,6 +544,8 @@ module ProjectsHelper result = "manage_versions" elsif user.allowed_to?(:manage_repository, @project) result = "manage_repository" + elsif @project.is_training_project? + result = "training_task" end result end diff --git a/app/helpers/student_work_helper.rb b/app/helpers/student_work_helper.rb index 119126ffb..afe16497b 100644 --- a/app/helpers/student_work_helper.rb +++ b/app/helpers/student_work_helper.rb @@ -161,7 +161,7 @@ module StudentWorkHelper def revise_attachment_status homework, attach date = Time.parse(format_time(attach.created_on.to_s)).strftime("%Y-%m-%d") status = "" - if homework.homework_detail_manual && ((homework.anonymous_comment == 0 &&homework.homework_detail_manual.evaluation_start.to_s <= date) || (homework.anonymous_comment == 1 && homework.end_time.to_s < date)) + if homework.homework_detail_manual && ((homework.anonymous_comment == 0 &&homework.homework_detail_manual.evaluation_start.to_s <= date) || (homework.anonymous_comment == 1 && homework.end_time < attach.created_on)) status = "此时其他同学作品已公开" else status = "此时其他同学作品尚未公开" diff --git a/app/helpers/training_tasks_helper.rb b/app/helpers/training_tasks_helper.rb new file mode 100644 index 000000000..bb52e8a79 --- /dev/null +++ b/app/helpers/training_tasks_helper.rb @@ -0,0 +1,44 @@ +module TrainingTasksHelper + include ApplicationHelper + include TagsHelper + require 'iconv' + + # Returns the textual representation of a journal details + # as an array of strings + def details_to_strings(details, no_html=false, options={}) + options[:only_path] = (options[:only_path] == false ? false : true) + options[:token] = options[:token] if options[:token] + strings = [] + values_by_field = {} + details.each do |detail| + + if detail.property == 'cf' + field_id = detail.prop_key + field = CustomField.find_by_id(field_id) + if field && field.multiple? + values_by_field[field_id] ||= {:added => [], :deleted => []} + if detail.old_value + values_by_field[field_id][:deleted] << detail.old_value + end + if detail.value + values_by_field[field_id][:added] << detail.value + end + next + end + end + strings << show_detail(detail, no_html, options) + + end + values_by_field.each do |field_id, changes| + detail = JournalDetail.new(:property => 'cf', :prop_key => field_id) + if changes[:added].any? + detail.value = changes[:added] + strings << show_detail(detail, no_html, options) + elsif changes[:deleted].any? + detail.old_value = changes[:deleted] + strings << show_detail(detail, no_html, options) + end + end + strings + end +end diff --git a/app/models/homework_bank.rb b/app/models/homework_bank.rb new file mode 100644 index 000000000..e55f8ac16 --- /dev/null +++ b/app/models/homework_bank.rb @@ -0,0 +1,9 @@ +class HomeworkBank < ActiveRecord::Base + # attr_accessible :title, :body + belongs_to :user + has_many :homework_bank_tests + + def language_name + %W(C C++ Python Java).at(self.language.to_i - 1) + end +end diff --git a/app/models/homework_bank_test.rb b/app/models/homework_bank_test.rb new file mode 100644 index 000000000..4d6d6e450 --- /dev/null +++ b/app/models/homework_bank_test.rb @@ -0,0 +1,4 @@ +class HomeworkBankTest < ActiveRecord::Base + # attr_accessible :title, :body + belongs_to :homework_bank +end diff --git a/app/models/homework_common.rb b/app/models/homework_common.rb index 34147a7d1..92d47bcdc 100644 --- a/app/models/homework_common.rb +++ b/app/models/homework_common.rb @@ -15,6 +15,7 @@ class HomeworkCommon < ActiveRecord::Base has_one :homework_detail_group, :dependent => :destroy has_many :student_work_projects, :dependent => :destroy has_many :homework_tests, :dependent => :destroy + has_many :homework_samples, :dependent => :destroy has_many :student_works, :dependent => :destroy, :conditions => "is_test=0 and is_delete != 1" has_many :student_works_evaluation_distributions, :through => :student_works #一个作业的分配的匿评列表 has_many :journals_for_messages, :as => :jour, :dependent => :destroy @@ -35,6 +36,17 @@ class HomeworkCommon < ActiveRecord::Base after_update :update_activity after_save :act_as_course_activity after_destroy :delete_kindeditor_assets + before_destroy :update_homework_bank_quotes + + #删除时更新题库中的引用数 + def update_homework_bank_quotes + old_banks = HomeworkBank.where(:homework_common_id => self.id) + unless old_banks.blank? + old_banks.each do |bank| + bank.update_attributes(:quotes => (bank.quotes - 1) > 0 ? (bank.quotes - 1) : 0, :homework_common_id => nil) + end + end + end #作业类型 def homework_type_ch diff --git a/app/models/homework_sample.rb b/app/models/homework_sample.rb new file mode 100644 index 000000000..67bc85ff6 --- /dev/null +++ b/app/models/homework_sample.rb @@ -0,0 +1,4 @@ +class HomeworkSample < ActiveRecord::Base + belongs_to :homework_common + attr_accessible :input, :output, :homework_common_id +end diff --git a/app/models/journal.rb b/app/models/journal.rb index f14484a31..822d7beca 100644 --- a/app/models/journal.rb +++ b/app/models/journal.rb @@ -23,7 +23,8 @@ class Journal < ActiveRecord::Base belongs_to :journalized, :polymorphic => true,:touch => true # added as a quick fix to allow eager loading of the polymorphic association # since always associated to an issue, for now - belongs_to :issue, :foreign_key => :journalized_id,:touch => true + belongs_to :issue, :foreign_key => :journalized_id, :touch => true + belongs_to :training_task, :foreign_key => :journalized_id, :touch => true belongs_to :user has_many :details, :class_name => "JournalDetail", :dependent => :delete_all @@ -192,27 +193,44 @@ class Journal < ActiveRecord::Base def act_as_forge_message receivers = [] # 直接回复 - if self.user_id != self.issue.author_id - receivers << self.issue.author_id - end - if self.user_id != self.issue.assigned_to_id && self.issue.assigned_to_id != self.issue.author_id # 指派人不是自己的话,则给指派人发送 - receivers << self.issue.assigned_to_id - end - receivers.each do |r| - self.forge_messages << ForgeMessage.new(:user_id => r, :project_id => self.issue.project_id, :viewed => false) + if self.journalized_type == 'Issue' + if self.user_id != self.issue.author_id + receivers << self.issue.author_id + end + if self.user_id != self.issue.assigned_to_id && self.issue.assigned_to_id != self.issue.author_id # 指派人不是自己的话,则给指派人发送 + receivers << self.issue.assigned_to_id + end + receivers.each do |r| + self.forge_messages << ForgeMessage.new(:user_id => r, :project_id => self.issue.project_id, :viewed => false) + end + elsif self.journalized_type == 'TrainingTask' + if self.user_id != self.training_task.author_id + receivers << self.training_task.author_id + end + receivers.each do |r| + self.forge_messages << ForgeMessage.new(:user_id => r, :project_id => self.training_task.project, :viewed => false) + end end end # 更新用户分数 -by zjc def be_user_score + if (self.journalized_type == 'Issue') #新建了缺陷留言且留言不为空,不为空白 - if !self.notes.nil? && self.notes.gsub(' ','') != '' - #协同得分加分 - UserScore.joint(:post_issue_message, self.user,self.issue.author,self, { message_id: self.id }) - update_messges_for_issue(self.user,1) - update_messges_for_issue(self.user,2,self.issue.project) + if !self.notes.nil? && self.notes.gsub(' ','') != '' + #协同得分加分 + UserScore.joint(:post_issue_message, self.user,self.issue.author,self, { message_id: self.id }) + update_messges_for_issue(self.user,1) + update_messges_for_issue(self.user,2,self.issue.project) + end + elsif( self.journalized_type == 'TrainingTask') + if !self.notes.nil? && self.notes.gsub(' ','') != '' + #协同得分加分 + UserScore.joint(:post_issue_message, self.user, self.training_task.author, self, { message_id: self.id }) + update_messges_for_issue(self.user, 1) + update_messges_for_issue(self.user, 2, self.training_task.project) + end end - end # 减少用户分数 -by zjc def down_user_score @@ -237,12 +255,18 @@ class Journal < ActiveRecord::Base # issue留言总数更新 def add_journals_count - if !self.issue.project.nil? && self.journalized_type == "Issue" && !self.issue.project.project_score.nil? - project = self.issue.project - project.project_score.update_attribute(:issue_journal_num, project.project_score.issue_journal_num + 1) + if self.journalized_type == 'Issue' + if !self.issue.project.nil? && self.journalized_type == "Issue" && !self.issue.project.project_score.nil? + project = self.issue.project + project.project_score.update_attribute(:issue_journal_num, project.project_score.issue_journal_num + 1) + end + elsif self.journalized_type == 'TrainingTask' + if !self.training_task.project.nil? && self.journalized_type == "TrainingTask" && !self.training_task.project.project_score.nil? + project = self.training_task.project + project.project_score.update_attribute(:issue_journal_num, project.project_score.issue_journal_num + 1) + end end end - # 回复issue的时候,更新issue的时候 def update_issue_time if self.journalized_type == "Issue" diff --git a/app/models/member.rb b/app/models/member.rb index 2d1a25b74..8eac2bca2 100644 --- a/app/models/member.rb +++ b/app/models/member.rb @@ -159,7 +159,7 @@ class Member < ActiveRecord::Base #当前课程的作业列表 def homework_common_list - HomeworkCommon.where("course_id = ? and publish_time is not null and publish_time <= '#{Date.today}'", self.course_id) + HomeworkCommon.where("course_id = ? and publish_time is not null and publish_time <= '#{Time.now}'", self.course_id) end #当前学生在指定作业内的得分 diff --git a/app/models/news.rb b/app/models/news.rb index aa04cea08..1b091cf0d 100644 --- a/app/models/news.rb +++ b/app/models/news.rb @@ -103,6 +103,19 @@ class News < ActiveRecord::Base user.allowed_to?(:comment_news, project) end + def news_object + object = self.project + if object == nil && self.has_attribute?('course_id') + object = self.course + if object.nil? && self.has_attribute?('contest_id') + object = self.contest + elsif object.nil? && self.has_attribute?('org_subfield_id') + object = self.org_subfield + end + end + object + end + def recipients project.users.select {|user| user.notify_about?(self)}.map(&:mail) end diff --git a/app/models/praise_tread.rb b/app/models/praise_tread.rb index 63ba89b18..d0c067437 100644 --- a/app/models/praise_tread.rb +++ b/app/models/praise_tread.rb @@ -1,98 +1,100 @@ -class PraiseTread < ActiveRecord::Base - attr_accessible :user_id,:praise_tread_object_id,:praise_tread_object_type,:praise_or_tread - belongs_to :user - belongs_to :praise_tread_object, polymorphic: true - #after_create :be_user_score - #after_destroy :down_user_score - include UserScoreHelper - def self.find_object_by_type_and_id(type,id) - @obj = nil - case type - when 'User' - @obj = User.find_by_id(id) - when 'Issue' - @obj = Issue.find_by_id(id) - when 'Project' - @obj = Project.find_by_id(id) - when 'Bid' - @obj = Bid.find_by_id(id) - when 'Contest' - @obj = Contest.find_by_id(id) - when 'Memo' - @obj = Memo.find_by_id(id) - when 'Message' - @obj = Message.find_by_id(id) - end - return @obj - end - - # 获取裁定对象为Message时Message所属的项目或课程 - def project - project = nil - if self.praise_tread_object_type == 'Message' || self.praise_tread_object_type == 'Issues' - obj = PraiseTread.find_object_by_type_and_id(self.praise_tread_object_type,praise_tread_object_id) - project = obj.project - end - project - end - - #更新用户分数 - by zjc - def be_user_score - #踩贴吧或讨论区帖子 - if self.praise_or_tread == 0 && (self.praise_tread_object_type == 'Issue' || self.praise_tread_object_type == 'Message') - obj = PraiseTread.find_object_by_type_and_id(self.praise_tread_object_type,praise_tread_object_id) - target_user = obj.author - UserScore.skill(:treaded_by_user, User.current,target_user,self, { praise_tread_id: self.id }) - update_tread(self.user,1) - update_tread(target_user,1) - unless self.project.nil? - update_tread(self.user,2,self.project) - update_tread(target_user,2,self.project) - end - #顶贴吧或讨论区帖子 - elsif self.praise_or_tread == 1 && (self.praise_tread_object_type == 'Issue' || self.praise_tread_object_type == 'Message') - obj = PraiseTread.find_object_by_type_and_id(self.praise_tread_object_type,praise_tread_object_id) - target_user = obj.author - UserScore.skill(:praised_by_user, User.current,target_user,self,{ praise_tread_id: self.id }) - update_praise(target_user,1) - unless self.project.nil? - update_praise(target_user,2,self.project) - end - #更新用户等级 - UserLevels.update_user_level(target_user) - end - end - - def down_user_score - #踩贴吧或讨论区帖子 - if self.praise_or_tread == 0 && (self.praise_tread_object_type == 'Issue' || self.praise_tread_object_type == 'Message') - obj = PraiseTread.find_object_by_type_and_id(self.praise_tread_object_type,praise_tread_object_id) - target_user = obj.author - #UserScore.skill(:treaded_by_user, User.current,target_user,self, { praise_tread_id: self.id }) - update_tread(self.user,1) - update_tread(target_user,1) - unless self.project.nil? - update_tread(self.user,2,self.project) - update_tread(target_user,2,self.project) - end - #顶贴吧或讨论区帖子 - elsif self.praise_or_tread == 1 && (self.praise_tread_object_type == 'Issue' || self.praise_tread_object_type == 'Message') - obj = PraiseTread.find_object_by_type_and_id(self.praise_tread_object_type,praise_tread_object_id) - target_user = obj.author - #UserScore.skill(:praised_by_user, User.current,target_user,self,{ praise_tread_id: self.id }) - update_praise(target_user,1) - unless self.project.nil? - update_praise(target_user,2,self.project) - end - #更新用户等级 - UserLevels.update_user_level(target_user) - end - end - - def self.praised(activity) - self.where(praise_tread_object_id: activity.id, - praise_tread_object_type: activity.class.to_s, - user_id: User.current.id).empty? - end - -end +class PraiseTread < ActiveRecord::Base + attr_accessible :user_id,:praise_tread_object_id,:praise_tread_object_type,:praise_or_tread + belongs_to :user + belongs_to :praise_tread_object, polymorphic: true + #after_create :be_user_score + #after_destroy :down_user_score + include UserScoreHelper + def self.find_object_by_type_and_id(type,id) + @obj = nil + case type + when 'User' + @obj = User.find_by_id(id) + when 'Issue' + @obj = Issue.find_by_id(id) + when 'TrainingTask' + @obj = TrainingTask.find_by_id(id) + when 'Project' + @obj = Project.find_by_id(id) + when 'Bid' + @obj = Bid.find_by_id(id) + when 'Contest' + @obj = Contest.find_by_id(id) + when 'Memo' + @obj = Memo.find_by_id(id) + when 'Message' + @obj = Message.find_by_id(id) + end + return @obj + end + + # 获取裁定对象为Message时Message所属的项目或课程 + def project + project = nil + if self.praise_tread_object_type == 'Message' || self.praise_tread_object_type == 'Issues' + obj = PraiseTread.find_object_by_type_and_id(self.praise_tread_object_type,praise_tread_object_id) + project = obj.project + end + project + end + + #更新用户分数 - by zjc + def be_user_score + #踩贴吧或讨论区帖子 + if self.praise_or_tread == 0 && (self.praise_tread_object_type == 'Issue' || self.praise_tread_object_type == 'Message') + obj = PraiseTread.find_object_by_type_and_id(self.praise_tread_object_type,praise_tread_object_id) + target_user = obj.author + UserScore.skill(:treaded_by_user, User.current,target_user,self, { praise_tread_id: self.id }) + update_tread(self.user,1) + update_tread(target_user,1) + unless self.project.nil? + update_tread(self.user,2,self.project) + update_tread(target_user,2,self.project) + end + #顶贴吧或讨论区帖子 + elsif self.praise_or_tread == 1 && (self.praise_tread_object_type == 'Issue' || self.praise_tread_object_type == 'Message') + obj = PraiseTread.find_object_by_type_and_id(self.praise_tread_object_type,praise_tread_object_id) + target_user = obj.author + UserScore.skill(:praised_by_user, User.current,target_user,self,{ praise_tread_id: self.id }) + update_praise(target_user,1) + unless self.project.nil? + update_praise(target_user,2,self.project) + end + #更新用户等级 + UserLevels.update_user_level(target_user) + end + end + + def down_user_score + #踩贴吧或讨论区帖子 + if self.praise_or_tread == 0 && (self.praise_tread_object_type == 'Issue' || self.praise_tread_object_type == 'Message') + obj = PraiseTread.find_object_by_type_and_id(self.praise_tread_object_type,praise_tread_object_id) + target_user = obj.author + #UserScore.skill(:treaded_by_user, User.current,target_user,self, { praise_tread_id: self.id }) + update_tread(self.user,1) + update_tread(target_user,1) + unless self.project.nil? + update_tread(self.user,2,self.project) + update_tread(target_user,2,self.project) + end + #顶贴吧或讨论区帖子 + elsif self.praise_or_tread == 1 && (self.praise_tread_object_type == 'Issue' || self.praise_tread_object_type == 'Message') + obj = PraiseTread.find_object_by_type_and_id(self.praise_tread_object_type,praise_tread_object_id) + target_user = obj.author + #UserScore.skill(:praised_by_user, User.current,target_user,self,{ praise_tread_id: self.id }) + update_praise(target_user,1) + unless self.project.nil? + update_praise(target_user,2,self.project) + end + #更新用户等级 + UserLevels.update_user_level(target_user) + end + end + + def self.praised(activity) + self.where(praise_tread_object_id: activity.id, + praise_tread_object_type: activity.class.to_s, + user_id: User.current.id).empty? + end + +end diff --git a/app/models/project.rb b/app/models/project.rb index e48a5296c..d5d2da038 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -57,6 +57,7 @@ class Project < ActiveRecord::Base has_many :enabled_modules, :dependent => :delete_all has_and_belongs_to_many :trackers, :order => "#{Tracker.table_name}.position" has_many :issues, :dependent => :destroy, :include => [:status, :tracker],:order => "issues.id ASC" + has_many :training_tasks, :dependent => :destroy, :order => "training_tasks.id ASC" has_many :issue_changes, :through => :issues, :source => :journals has_many :versions, :dependent => :destroy, :order => "#{Version.table_name}.effective_date DESC, #{Version.table_name}.name DESC" has_many :time_entries, :dependent => :delete_all @@ -159,6 +160,7 @@ class Project < ActiveRecord::Base after_create :create_board_sync,:acts_as_forge_activities, :create_project_ealasticsearch_index before_destroy :delete_all_members,:delete_project_ealasticsearch_index after_update :update_project_ealasticsearch_index + def remove_references_before_destroy return if self.id.nil? Watcher.delete_all ['watchable_id = ?', id] @@ -193,6 +195,7 @@ class Project < ActiveRecord::Base scope :project_entities, -> { where(project_type: ProjectType_project) } scope :course_entities, -> { where(project_type: ProjectType_course) } scope :indexable,lambda { where('is_public = 1')} #用于elastic建索引的scope + def self.search(query) __elasticsearch__.search( { @@ -219,6 +222,17 @@ class Project < ActiveRecord::Base } ) end + + # 判断项目是否为实训项目 + def is_training_project? + (!self.enabled_modules.where("name = 'training_tasks'").empty? && self.training_status == 1) ? true : false + end + + # 判断项目是否为开启实训的项目(eg:学生开启实训) + def is_child_training_project? + self.training_status == 2 ? true :false + end + def new_course self.where('project_type = ?', 1) end diff --git a/app/models/student_work.rb b/app/models/student_work.rb index daeb0b207..ffc369af0 100644 --- a/app/models/student_work.rb +++ b/app/models/student_work.rb @@ -190,7 +190,7 @@ class StudentWork < ActiveRecord::Base # status == 0 : delay def act_as_message - if self.work_status != 0 && self.created_at > self.homework_common.end_time + 1 + if self.work_status != 0 && self.created_at > self.homework_common.end_time self.course_messages << CourseMessage.new(:user_id => self.user_id, :course_id => self.homework_common.course_id, :viewed => false, :status => false) end end diff --git a/app/models/students_for_course.rb b/app/models/students_for_course.rb index 5ef2922b0..f3e0cb530 100644 --- a/app/models/students_for_course.rb +++ b/app/models/students_for_course.rb @@ -31,7 +31,7 @@ class StudentsForCourse < ActiveRecord::Base #加入班级时创建已发布作业的作品 def create_student_works course = self.course - course.homework_commons.each do |hw| + course.homework_commons.includes(:homework_detail_manual).where("homework_detail_manuals.comment_status > 0").each do |hw| if hw.homework_type != 3 && hw.student_works.where("user_id = #{self.student_id}").count == 0 hw.student_works << StudentWork.new(:user_id => self.student_id, :name => hw.name.to_s+"的作品提交", :work_status => 0) end diff --git a/app/models/training_task.rb b/app/models/training_task.rb new file mode 100644 index 000000000..3ddf99286 --- /dev/null +++ b/app/models/training_task.rb @@ -0,0 +1,28 @@ +class TrainingTask < ActiveRecord::Base + attr_accessible :description, :project_id, :subject, :tracker_id + belongs_to :project,:touch=> true + belongs_to :author, :class_name => 'User', :foreign_key => 'author_id' + belongs_to :tracker + has_many :journals, :as => :journalized, :dependent => :destroy + has_many :visible_journals, + :class_name => 'Journal', + :as => :journalized, + :conditions => Proc.new { + ["(#{Journal.table_name}.private_notes = ? OR (#{Project.allowed_to_condition(User.current, :view_private_notes)}))", false] + }, + :readonly => true + has_many :praise_tread, as: :praise_tread_object, dependent: :destroy + has_one :praise_tread_cache, as: :object, dependent: :destroy + has_many :forge_acts, :class_name => 'ForgeActivity', :as => :forge_act, :dependent => :destroy + + acts_as_attachable + + validates_presence_of :subject, :author + validates_length_of :subject, :maximum => 255 + after_create :act_as_forge_activity + + def act_as_forge_activity + self.forge_acts << ForgeActivity.new(:user_id => self.author_id, :project_id => self.project_id) + end + +end diff --git a/app/models/user.rb b/app/models/user.rb index d801ecd9e..0d2295ee8 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -114,6 +114,8 @@ class User < Principal has_many :apply_homeworks, :dependent => :destroy has_many :apply_resources, :dependent => :destroy #end + #题库 + has_many :homework_banks, :dependent => :destroy #竞赛 has_many :contests, :dependent => :destroy has_many :works, :dependent => :destroy @@ -1237,6 +1239,16 @@ class User < Principal Thread.current[:current_user] ||= User.anonymous end + def user_real_extension + ue = self.user_extensions + if ue.nil? + ue = UserExtensions.new + ue.user_id = self.id + ue.save + end + ue + end + # Returns the anonymous user. If the anonymous user does not exist, it is created. There can be only # one anonymous user per database. def self.anonymous diff --git a/app/services/comment_service.rb b/app/services/comment_service.rb index 62955905b..9ff00c610 100644 --- a/app/services/comment_service.rb +++ b/app/services/comment_service.rb @@ -8,7 +8,7 @@ class CommentService if @course.nil? raise 'news in unknown course' end - raise Unauthorized unless @news.commentable?(current_user) + #raise Unauthorized unless @news.commentable?(current_user) if current_user.nil? || !(current_user.admin? || @course.is_public == 1 || (@course.is_public == 0 && current_user.member_of_course?(@course))) raise '403' end diff --git a/app/services/courses_service.rb b/app/services/courses_service.rb index a36adaeaa..b818ab536 100644 --- a/app/services/courses_service.rb +++ b/app/services/courses_service.rb @@ -702,7 +702,7 @@ class CoursesService def homework_list params,current_user course = Course.find(params[:id]) if course.is_public != 0 || current_user.member_of_course?(course) - bids = course.homework_commons.where("publish_time <= ?",Time.now.strftime("%Y-%m-%d")).page(params[:page] || 1).per(20).reorder('created_at DESC') + bids = course.homework_commons.where("publish_time <= ?",Time.now).page(params[:page] || 1).per(20).reorder('created_at DESC') bids = bids.like(params[:name]) if params[:name].present? homeworks = [] bids.each do |bid| diff --git a/app/services/homework_service.rb b/app/services/homework_service.rb index 04680f76f..54431f4f4 100644 --- a/app/services/homework_service.rb +++ b/app/services/homework_service.rb @@ -105,7 +105,7 @@ class HomeworkService def start_anonymous_comment params,current_user homework = HomeworkCommon.find(params[:homework_id]) return {:status=> 4} unless current_user.admin? || current_user.allowed_to?(:as_teacher,Course.find(params[:course_id])) - return {:status=>5} if Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") >= Time.now.strftime("%Y-%m-%d") + return {:status=>5} if homework.end_time >= Time.now homework_detail_manual = homework.homework_detail_manual if homework_detail_manual.comment_status == 1 student_works = homework.student_works diff --git a/app/services/resources_service.rb b/app/services/resources_service.rb index b56da8ad3..6e11fa2f6 100644 --- a/app/services/resources_service.rb +++ b/app/services/resources_service.rb @@ -193,7 +193,7 @@ class ResourcesService courses_ids = courses.empty? ? '(-1)' :"(" + courses.map(&:id).join(",") + ")" - homeworks = HomeworkCommon.where("course_id in #{courses_ids} and publish_time <= ?",Time.now.strftime("%Y-%m-%d")).order("created_at desc") + homeworks = HomeworkCommon.where("course_id in #{courses_ids} and publish_time <= ?",Time.now).order("created_at desc") # homeworks.each do |v| # course = Course.where("id=?",v.course_id).first diff --git a/app/views/account/_change_user_email.html.erb b/app/views/account/_change_user_email.html.erb new file mode 100644 index 000000000..20eae1374 --- /dev/null +++ b/app/views/account/_change_user_email.html.erb @@ -0,0 +1,72 @@ +
您的账号尚未激活,请先进入您的注册邮箱,激活您的账号。
+您的账号尚未激活,请先进入您的注册邮箱(<%= @user.mail %>),激活您的账号。
<%#= link_to l(:label_mail_resend), { :controller => 'account', :action => 'resendmail',:user => @user}, :class=>"email_verify_btn mt30 ml30", :remote => true, :method => 'get' %> -如果您尚未收到激活邮件,请按照以下步骤操作:
注册成功! 请在24小时内点击邮件中的链接来激活您的账号。
-请登录邮箱(<%= @user.mail %>)收取账号激活邮件。
点击邮件中的激活链接,方可使用该账号
+
请登录邮箱(<%= @user.mail %>)收取账号激活邮件。
点击邮件中的激活链接,方可使用该账号
<%= l(:label_check_email)%> @@ -14,14 +14,15 @@
如果您一直收不到激活邮件,请按照以下步骤操作:
-没有数据可以显示!
+ <% end %>没有数据可以显示!
+没有数据可以显示!
+- 学期:<%= current_time_and_term @course %> +
教师:<%= course_teacher_link teacher_num %> 学生:<%= course_student_link student_num %> -
-- 单位:<%= get_occupation_from_user(@course.teacher).blank? ? '无' : get_occupation_from_user(@course.teacher) %> + <%= current_time_and_term @course %> + <%= get_occupation_from_user(@course.teacher).blank? ? '无' : get_occupation_from_user(@course.teacher) %>
<% is_TA = get_user_member_roles_course @course, User.current, 7 %> <% is_TE = get_user_member_roles_course @course, User.current, 9 %> @@ -101,7 +99,7 @@ <%= link_to '学生身份', switch_role_course_path(@course, :user_id => User.current.id, :curr_role => (is_TA ? 7 : 9), :tar_role => 10), :class => "sy_btn_orange mr10 fl", :title => "由教师身份切换至学生身份" %> <% end %> <% unless (is_teacher || is_TA || is_TE || is_ST) %> -<%= l(:label_rights_reserved)%><%= l(:label_license)%>
+<%= l(:label_rights_reserved)%><%= l(:label_license)%>
+<%= l(:label_rights_reserved)%><%= l(:label_license)%>
<%= l_or_humanize(m, :prefix => "project_module_").html_safe %>
-<%= check_all_links('modules-form').html_safe %>
-问题跟踪模块与实训模块不能同时选择
一旦选定并保存后,将不能修改
<%= l_or_humanize(m, :prefix => "project_module_").html_safe %>
+<%= check_all_links('modules-form').html_safe %>
+<%= @notice %>
<%= @project.name %>
@@ -24,15 +24,15 @@名称 | +名称 | 分支 | 语言 | 路径 | @@ -20,7 +20,7 @@ <% if @quality_analyses && @quality_analyses.count > 0 %> <% @quality_analyses.each do |qa| %>|||||||
<%= qa.branch %> | <%= qa.language %> | diff --git a/app/views/repositories/_forked_popbox.html.erb b/app/views/repositories/_forked_popbox.html.erb index c28bef2d6..eca24ea24 100644 --- a/app/views/repositories/_forked_popbox.html.erb +++ b/app/views/repositories/_forked_popbox.html.erb @@ -6,16 +6,17 @@<% if student_work.created_at && @homework.end_time %> <%= Time.parse(format_time(student_work.created_at)).strftime("%m-%d %H:%M") %> - <% if Time.parse(@homework.end_time.to_s).strftime("%Y-%m-%d") < Time.parse(format_time(student_work.created_at)).strftime("%Y-%m-%d") %> + <% if @homework.end_time < student_work.created_at %> [迟交] <% end %> <% end %> diff --git a/app/views/student_work/_evaluation_un_pro_work.html.erb b/app/views/student_work/_evaluation_un_pro_work.html.erb index 0aed8f708..c23811304 100644 --- a/app/views/student_work/_evaluation_un_pro_work.html.erb +++ b/app/views/student_work/_evaluation_un_pro_work.html.erb @@ -13,7 +13,7 @@ |
<% if student_work.created_at && @homework.end_time %>
<%= Time.parse(format_time(student_work.created_at)).strftime("%m-%d %H:%M") %>
- <% if Time.parse(@homework.end_time.to_s).strftime("%Y-%m-%d") < Time.parse(format_time(student_work.created_at)).strftime("%Y-%m-%d") %>
+ <% if @homework.end_time < student_work.created_at %>
[迟交]
<% end %>
<% end %>
diff --git a/app/views/student_work/_evaluation_un_work.html.erb b/app/views/student_work/_evaluation_un_work.html.erb
index adb007219..04e48bf7d 100644
--- a/app/views/student_work/_evaluation_un_work.html.erb
+++ b/app/views/student_work/_evaluation_un_work.html.erb
@@ -128,7 +128,7 @@
作品最终评分为
- <%= score %> 分 + <%= student_work.final_score %> 分 迟交扣分 <%= student_work.late_penalty %> diff --git a/app/views/student_work/_evaluation_un_work_archive.html.erb b/app/views/student_work/_evaluation_un_work_archive.html.erb index 5602dd4e3..c29266d65 100644 --- a/app/views/student_work/_evaluation_un_work_archive.html.erb +++ b/app/views/student_work/_evaluation_un_work_archive.html.erb @@ -33,7 +33,7 @@
- <%= l(:label_publish_time)%>:<%= homework.publish_time%> 00:00
+ <%= l(:label_publish_time)%>:<%= format_time homework.publish_time%>
<% end %>
<% if !homework.end_time.nil? %>
- 提交截止时间:<%= homework.end_time.to_s %> 23:59
+ 提交截止时间:<%= format_time homework.end_time %>
<% end %>
@@ -40,6 +40,32 @@
<%= homework.description.html_safe %>
+
+ <% samples = homework.homework_samples %>
+ <% unless samples.empty? %>
+
+
+ <% end %>
+
<% if is_pro %>
输入输出样例:<%= samples.count %>组 + <% samples.each_with_index do |sample, index| %> + #<%= index + 1 %> +
测试集:<%=homework.homework_tests.count %>组
+
+
+
+
diff --git a/app/views/training_tasks/reply.js.erb b/app/views/training_tasks/reply.js.erb
new file mode 100644
index 000000000..d53160573
--- /dev/null
+++ b/app/views/training_tasks/reply.js.erb
@@ -0,0 +1,12 @@
+<% if params[:is_project]%>
+$("#reply_message_<%= @jour.id %>").
+<% else %>
+if($("#reply_message_<%= @jour.id %>").length > 0) {
+ $("#reply_message_<%= @jour.id %>").replaceWith("<%= escape_javascript(render :partial => 'training_tasks/training_tasks_reply_ke_form') %>");
+ $(function(){
+ sd_create_editor_from_data(<%= @jour.id %>, null, "100%", "<%= @jour.class.name %>");
+ });
+}else if($("#reply_to_message_<%= @jour.id %>").length >0) {
+ $("#reply_to_message_<%= @jour.id %>").replaceWith("");
+}
+<% end %>
\ No newline at end of file
diff --git a/app/views/training_tasks/show.html.erb b/app/views/training_tasks/show.html.erb
new file mode 100644
index 000000000..f125717b1
--- /dev/null
+++ b/app/views/training_tasks/show.html.erb
@@ -0,0 +1,42 @@
+<%= content_for(:header_tags) do %>
+ <%= import_ke(enable_at: true) %>
+ <%= javascript_include_tag 'create_kindeditor'%>
+<% end %>
+
+
+
+ <%#= call_hook(:view_issues_new_top, {:training_task => @training_task}) %>
+ <%= labelled_form_for @training_task, :url => project_training_tasks_url(@project),
+ :html => {:id => 'project_training_form', :multipart => true} do |f| %>
+ <%= error_messages_for 'training_task' %>
+ <%= hidden_field_tag 'copy_from', params[:copy_from] if params[:copy_from] %>
+
+
+ <%= render :partial => 'training_tasks/form', :locals => {:f => f} %>
+
+ <% end %>
+
+
+
diff --git a/app/views/training_tasks/show.js.erb b/app/views/training_tasks/show.js.erb
new file mode 100644
index 000000000..9db0abd72
--- /dev/null
+++ b/app/views/training_tasks/show.js.erb
@@ -0,0 +1,19 @@
+// $("#div_user_issue_reply_<%#= @user_activity_id %>").html("<%#= escape_javascript(render :partial => 'projects/project_issue_reply', :locals => {:activity => @issue, :user_activity_id => @user_activity_id}) %>");
+
+$("#reply_div_<%= @training_task.id %>").html("<%= escape_javascript(render :partial => 'training_tasks/issue_replies', :locals => {:issue => @training_task}) %>");
+$("#div_issue_attachment_<%=@training_task.id %>").html("<%= escape_javascript(render :partial => 'issues/issue_attachments', :locals => {:issue => @training_task}) %>");
+issue_desc_editor = KindEditor.create('#issue_description',
+ {"width":"85%",
+ "resizeType":0,
+ "no_label":true,
+ "at_id":<%= @training_task.project_id %>,
+ "at_type":"Project",
+ "autoHeightMode":true,
+ "afterCreate":"eval(function(){ if(typeof enablePasteImg ==='function'){enablePasteImg(self);};if(typeof enableAt ==='function'){enableAt(self, \"<%= @training_task.project_id %>\", 'Project');}; this.loadPlugin('autoheight')})",
+ "emotionsBasePath":'<%= Setting.host_name%>',
+ "height":300,
+ "allowFileManager":true,
+ "uploadJson":"/kindeditor/upload",
+ "fileManagerJson":"/kindeditor/filemanager"});
+$(".homepagePostReplyBannerCount").html('<%= escape_javascript(render :partial => 'reply_banner') %>');
+sd_create_editor_from_data(<%= @training_task.id %>, null, "100%", "<%= @training_task.class.name %>");
\ No newline at end of file
diff --git a/app/views/users/_comment_reply.html.erb b/app/views/users/_comment_reply.html.erb
index 0720d2e25..c405b1ff0 100644
--- a/app/views/users/_comment_reply.html.erb
+++ b/app/views/users/_comment_reply.html.erb
@@ -1,8 +1,8 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <%= render :partial => 'detail'%>
+
+
+
+
+
+
+ <%= render :partial => 'issue_replies',:locals => {:issue => @training_task, :replies_all_i => 0 } %>
+
+
<% unless comment.parent.nil? %>
\ No newline at end of file
diff --git a/app/views/users/_comment_reply_detail.html.erb b/app/views/users/_comment_reply_detail.html.erb
index 12cd6874a..d36ad498c 100644
--- a/app/views/users/_comment_reply_detail.html.erb
+++ b/app/views/users/_comment_reply_detail.html.erb
@@ -1,7 +1,7 @@
- <%=render :partial => 'users/comment_reply', :locals => {:comment => comment.parent, :type => type, :user_activity_id => user_activity_id, :parent_id => parent_id} %>
+ <%= render :partial => 'users/comment_reply', :locals => {:comment => comment.parent, :type => type, :user_activity_id => user_activity_id, :parent_id => parent_id} %>
<% end %>
- <%=render :partial => 'users/comment_reply_detail', :locals => {:comment => comment, :type => type, :user_activity_id => user_activity_id, :parent_id => parent_id} %>
+ <%= render :partial => 'users/comment_reply_detail', :locals => {:comment => comment, :type => type, :user_activity_id => user_activity_id, :parent_id => parent_id} %>
<%= link_to image_tag(url_to_avatar(comment.creator_user), :width => "33", :height => "33"), user_path(comment.creator_user), :alt => "用户头像" %>
-
+
<%= link_to comment.creator_user.show_name, user_path(comment.creator_user), :class => "content-username" %>
<%= time_from_now(comment.respond_to?(:created_on) ? comment.created_on : comment.created_at) %>
@@ -26,23 +26,31 @@
<% topic = comment.root %>
<% if !topic.locked? && authorize_for('messages', 'reply') %>
- <%= link_to(
- l(:button_reply),
- {:controller => 'users' ,:action => 'reply_to_comment', :reply_id => comment.id, :type => type, :user_activity_id => user_activity_id, :parent_id => parent_id},
- :remote => true,
- :method => 'get',
- :title => l(:button_reply)) %>
+ <%= link_to(l(:button_reply),
+ {:controller => 'users' ,
+ :action => 'reply_to_comment',
+ :reply_id => comment.id,
+ :type => type,
+ :user_activity_id => user_activity_id,
+ :parent_id => parent_id},
+ :remote => true,
+ :method => 'get',
+ :title => l(:button_reply)) %>
<% end %>
<% else %>
- <%= link_to(
- l(:button_reply),
- {:controller => 'users' ,:action => 'reply_to_comment', :reply_id => comment.id, :type => type, :user_activity_id => user_activity_id, :parent_id => parent_id},
- :remote => true,
- :method => 'get',
- :title => l(:button_reply)) %>
+ <%= link_to(l(:button_reply),
+ {:controller => 'users',
+ :action => 'reply_to_comment',
+ :reply_id => comment.id,
+ :type => type,
+ :user_activity_id => user_activity_id,
+ :parent_id => parent_id},
+ :remote => true,
+ :method => 'get',
+ :title => l(:button_reply)) %>
<% end %>
diff --git a/app/views/users/_course_homework.html.erb b/app/views/users/_course_homework.html.erb
index b7ed168f4..2385fac80 100644
--- a/app/views/users/_course_homework.html.erb
+++ b/app/views/users/_course_homework.html.erb
@@ -34,15 +34,15 @@
<% end %>
-<% if activity.commentable? %>
+<% object = activity.news_object %>
+<% if User.current.admin? || ((object.kind_of? Contest) && User.current.member_of_contest?(object)) || ((object.kind_of? Course) && User.current.member_of_course?(object)) || ((object.kind_of? OrgSubfield) && User.current.member_of_org?(object.organization)) %>
<%= render :partial => 'users/homework_opr', :locals => {:activity => activity, :is_teacher => is_teacher, :hw_status => hw_status, :user_activity_id => user_activity_id} %>
<% if !activity.end_time.nil? %>
-
- <%=render :partial =>"users/intro_content", :locals=>{:user_activity_id =>user_activity_id, :content=>activity.description} %>
+ <%=render :partial =>"users/intro_content", :locals=>{:user_activity_id =>user_activity_id, :content=>activity.description, :samples => activity.homework_samples} %>
diff --git a/app/views/users/_course_news_post_reply.html.erb b/app/views/users/_course_news_post_reply.html.erb
index df1c51ae3..1b0c29685 100644
--- a/app/views/users/_course_news_post_reply.html.erb
+++ b/app/views/users/_course_news_post_reply.html.erb
@@ -8,7 +8,8 @@
<%= render :partial => 'users/news_replies', :locals => {:comments => no_children_comments[:no_children_comments], :user_activity_id => user_activity_id, :type => 'News', :activity_id => activity.id} %>
提交截止时间:<%= activity.end_time.to_s %> 23:59
+ 提交截止时间:<%= format_time activity.end_time %>
<% end %>
<% if activity.homework_detail_manual.comment_status == 0 && !activity.publish_time.nil? %>
- <%= l(:label_publish_time)%>:<%= activity.publish_time%> 00:00
+ <%= l(:label_publish_time)%>:<%= format_time activity.publish_time%>
<% end %>
<%= link_to image_tag(url_to_avatar(User.current), :width => "33", :height => "33"), user_path(User.current), :alt => "用户头像" %>
diff --git a/app/views/users/_homework_base_info.html.erb b/app/views/users/_homework_base_info.html.erb
index 83ee74958..fc50b7200 100644
--- a/app/views/users/_homework_base_info.html.erb
+++ b/app/views/users/_homework_base_info.html.erb
@@ -95,6 +95,11 @@
标题:<%=homework.name %>
<% if homework.homework_type == 2 %>
- 来源:<%=homework.course.name %> - <% if homework.homework_type == 2 && homework.homework_detail_programing %> + 适用课程:<%=homework.applicable_syllabus %> + <% if homework.homework_type == 2 %> 编程语言:<%=homework.language_name %> <% end %> 贡献者:<%=homework.user.show_name %> @@ -30,11 +30,12 @@
- 测试集:<%=homework.homework_tests.count %>组
+ 输入输出样例:<%=homework.homework_bank_tests.where(:test_type => 0).count %>组
- <% elsif homework.homework_type ==3 && homework.homework_detail_group %>
+ <% elsif homework.homework_type == 3 %>
+ 测试集:<%=homework.homework_bank_tests.where(:test_type => 1).count %>组
- 分组人数:<%=homework.homework_detail_group.min_num %> - <%=homework.homework_detail_group.max_num %>人
+ 分组人数:<%=homework.min_num %> - <%=homework.max_num %>人
<% end %>
<% end %>
diff --git a/app/views/users/_homework_opr.html.erb b/app/views/users/_homework_opr.html.erb
index ec3781232..650e35744 100644
--- a/app/views/users/_homework_opr.html.erb
+++ b/app/views/users/_homework_opr.html.erb
@@ -14,7 +14,7 @@
<%= user_for_homework_common activity,is_teacher,work %>
-<% if !is_teacher && !work.nil? && work.user == User.current && activity.end_time < Date.today %>
+<% if !is_teacher && !work.nil? && work.user == User.current && activity.end_time < Time.now %>
<%=link_to "追加附件", student_work_index_url_in_org(activity.id, 2, 1), :class => 'c_blue', :title => "可追加作品修订附件" %>
diff --git a/app/views/users/_homework_repository_detail.html.erb b/app/views/users/_homework_repository_detail.html.erb
index c90617f5b..0d7bb9f26 100644
--- a/app/views/users/_homework_repository_detail.html.erb
+++ b/app/views/users/_homework_repository_detail.html.erb
@@ -11,10 +11,37 @@
<%=@homework.description.html_safe %> <% if @homework.homework_type == 2 %> +
+
+ + 输入输出样例:<%=@homework.homework_bank_tests.where(:test_type => 0).count %>组 + + <% if @homework.homework_bank_tests.where(:test_type => 0).count > 0 %> + <% @homework.homework_bank_tests.where(:test_type => 0 ).each_with_index do |sample, index| %> + #<%= index + 1 %> +
- 测试集:<%=@homework.homework_tests.count %>组 + 测试集:<%=@homework.homework_bank_tests.where(:test_type => 1).count %>组 - <% if @homework.user == User.current && @homework.homework_tests.count > 0 %> + <% if @homework.user == User.current && @homework.homework_bank_tests.where(:test_type => 1).count > 0 %>
- 分组人数:<%=@homework.homework_detail_group.min_num %> - <%=@homework.homework_detail_group.max_num %>人 + 分组人数:<%=@homework.min_num %> - <%=@homework.max_num %>人 <% end %>- <% if type == "1" %> - <%=link_to homework.name, student_work_index_path(:homework => homework), :class => 'linkGrey5', :target => "_blank" %> - <% else %> + <%# if type == "1" %> + <%#=link_to homework.name, student_work_index_path(:homework => homework), :class => 'linkGrey5', :target => "_blank" %> + <%# else %> <%=homework.name %> - <% end %> + <%# end %>- +
- 来源:
+ 适用课程:
- <%=link_to homework.course.name.to_s + "(#{current_time_and_term_short(homework.course)})", course_path(homework.course), :class => 'hw_cgrey', :target => '_blank' %> + <%= homework.applicable_syllabus %> + <%#=link_to homework.course.name.to_s + "(#{current_time_and_term_short(homework.course)})", course_path(homework.course), :class => 'hw_cgrey', :target => '_blank' %> <% if type == "2" %> @@ -37,17 +38,22 @@ <% end %> 引用数:<%= homework.quotes %> - <% if homework.publish_time.nil? %> - 发布时间: - - - <% else %> - 发布时间:<%= format_date(homework.publish_time) %> - <% end %> + <%# if homework.publish_time.nil? %> + + <%# else %> + 创建时间:<%= format_date(homework.created_at) %> + <%# end %>
+
<%= content.to_s.html_safe %>
+
+ <% if defined?(samples) && !samples.empty? %>
+
+
+ <% end %>
输入输出样例:<%= samples.count %>组 + <% samples.each_with_index do |sample, index| %> + #<%= index + 1 %> +
+
<%= link_to image_tag(url_to_avatar(activity.user), :width => "50", :height => "50"), user_path(activity.user), :alt => "用户头像" %>
diff --git a/app/views/users/_user_message_applied_school_action.html.erb b/app/views/users/_user_message_applied_school_action.html.erb
index b4b0cdb6d..d08601d64 100644
--- a/app/views/users/_user_message_applied_school_action.html.erb
+++ b/app/views/users/_user_message_applied_school_action.html.erb
@@ -3,7 +3,7 @@
“<%= ma.name %>”的申请,已通过审核。谢谢!
<% elsif ma.status == 2 %>
-
+
“<%= ma.applied.name %>”的申请,因名称不符合规范,系统已将其更改为“<%= ma.name %>”。谢谢!
<% elsif ma.status == 3 %>
diff --git a/app/views/users/_user_message_contest.html.erb b/app/views/users/_user_message_contest.html.erb
index 12292620f..04b83d09c 100644
--- a/app/views/users/_user_message_contest.html.erb
+++ b/app/views/users/_user_message_contest.html.erb
@@ -25,7 +25,7 @@
<%=link_to user.show_name, user_path(user),
:class => "newsBlue homepageNewsPublisher", :target => '_blank' %>
- <%= user.user_extensions.school_id.blank? ? "" : "来自"+user.user_extensions.school.name+"," %>
+ <%= user.user_extensions.school_id.blank? || user.user_extensions.school.nil? ? "" : "来自"+user.user_extensions.school.name+"," %>
申请以"<%= role_str%>"的身份加入竞赛:
diff --git a/app/views/users/_user_programing_attr.html.erb b/app/views/users/_user_programing_attr.html.erb
index d1e750ccb..e6fb89f8b 100644
--- a/app/views/users/_user_programing_attr.html.erb
+++ b/app/views/users/_user_programing_attr.html.erb
@@ -1,76 +1,155 @@
- 截止时间:<%= @homework.end_time %>
+ 截止时间:<%= format_time @homework.end_time %>
<%= @homework.user.show_name %>
diff --git a/app/views/users/reply_detail.js.erb b/app/views/users/reply_detail.js.erb
index 91828ef0f..e7e69507d 100644
--- a/app/views/users/reply_detail.js.erb
+++ b/app/views/users/reply_detail.js.erb
@@ -38,6 +38,8 @@ $("#activity_post_reply_<%= @user_activity_id%>").html("<%= escape_javascript(re
<% else %>
window.location.href = "<%=issue_path(@root) %>";
<% end %>
+<% elsif @type == 'TrainingTask' %>
+ window.location.href = "<%= training_task_path(@root) %>";
<% elsif @type == 'OrgDocumentComment' %>
<% if @user_activity_id.to_i != @root.id %>
$("#activity_post_reply_<%= @user_activity_id %>").html("<%= escape_javascript(render :partial => 'organizations/org_document_post_reply', :locals => {:activity => @root, :user_activity_id => @user_activity_id}) %>");
diff --git a/app/views/users/reply_to_comment.js.erb b/app/views/users/reply_to_comment.js.erb
index 22ae8e3fd..49a624e28 100644
--- a/app/views/users/reply_to_comment.js.erb
+++ b/app/views/users/reply_to_comment.js.erb
@@ -1,10 +1,10 @@
-if($("#comment_reply_<%=@parent_id %> #reply_message_<%= @reply.id%>").length > 0) {
- $("#comment_reply_<%=@parent_id %> #reply_message_<%= @reply.id%>").replaceWith("<%= escape_javascript(render :partial => 'users/reply_to_comment', :locals => {:reply => @reply}) %>");
+if($("#comment_reply_<%=@parent_id %> #reply_message_<%= @reply.id %>").length > 0) {
+ $("#comment_reply_<%=@parent_id %> #reply_message_<%= @reply.id %>").replaceWith("<%= escape_javascript(render :partial => 'users/reply_to_comment', :locals => {:reply => @reply}) %>");
$("#comment_reply_<%=@parent_id %> #reply_iconup_<%=@reply.id %>").show();
$(function(){
- sd_create_editor_from_data(<%= @reply.id%>,null,"100%", "<%= @reply.class.to_s %>");
+ sd_create_editor_from_data(<%= @reply.id %>,null,"100%", "<%= @reply.class.to_s %>");
});
-}else if($("#comment_reply_<%=@parent_id %> #reply_to_message_<%= @reply.id%>").length >0) {
- $("#comment_reply_<%=@parent_id %> #reply_to_message_<%= @reply.id%>").replaceWith("");
- $("#comment_reply_<%=@parent_id %> #reply_iconup_<%=@reply.id %>").hide();
+}else if($("#comment_reply_<%= @parent_id %> #reply_to_message_<%= @reply.id %>").length >0) {
+ $("#comment_reply_<%= @parent_id %> #reply_to_message_<%= @reply.id %>").replaceWith("");
+ $("#comment_reply_<%= @parent_id %> #reply_iconup_<%= @reply.id %>").hide();
}
\ No newline at end of file
diff --git a/app/views/users/user_commit_homework.html.erb b/app/views/users/user_commit_homework.html.erb
index 1d1d0ef14..834e53700 100644
--- a/app/views/users/user_commit_homework.html.erb
+++ b/app/views/users/user_commit_homework.html.erb
@@ -53,7 +53,7 @@
- 测试集设置:
-
- 温馨提示:您可以在发布作业后,在作业"模拟答题"中进行标准代码的检测。
-
- <% if edit_mode && homework.is_program_homework? %>
- <% homework.homework_tests.each_with_index do |test, index| %>
-
\ No newline at end of file
diff --git a/app/views/users/all_journals.js.erb b/app/views/users/all_journals.js.erb
index bcba9b5fb..05467dd7f 100644
--- a/app/views/users/all_journals.js.erb
+++ b/app/views/users/all_journals.js.erb
@@ -1,17 +1,55 @@
<% if params[:type] == 'HomeworkCommon' || params[:type] == 'Work' %>
-$('#reply_div_<%= @user_activity_id %>').html('<%=escape_javascript(render :partial => 'users/news_replies', :locals => {:comments => @journals, :type => @type, :is_teacher => @is_teacher, :user_activity_id => @user_activity_id, :activity_id => params[:id].to_i}) %>');
+ $('#reply_div_<%= @user_activity_id %>').html('<%= escape_javascript(render :partial => 'users/news_replies',
+ :locals => {:comments => @journals,
+ :type => @type,
+ :is_teacher => @is_teacher,
+ :user_activity_id => @user_activity_id,
+ :activity_id => params[:id].to_i}) %>');
<% elsif params[:type] == 'JournalsForMessage' %>
-$('#reply_div_<%= @user_activity_id %>').html('<%=escape_javascript(render :partial => 'users/message_replies', :locals => {:comments => @journals,:user_activity_id => @user_activity_id, :type => @type, :activity_id =>params[:id].to_i}) %>');
+ $('#reply_div_<%= @user_activity_id %>').html('<%= escape_javascript(render :partial => 'users/message_replies',
+ :locals => {:comments => @journals,
+ :user_activity_id => @user_activity_id,
+ :type => @type,
+ :activity_id =>params[:id].to_i}) %>');
<% elsif params[:type] == 'Message' %>
-$('#reply_div_<%= params[:div_id].to_i %>').html('<%=escape_javascript(render :partial => 'users/message_replies', :locals => {:comments => @journals,:user_activity_id => @user_activity_id, :type => @type, :activity_id => params[:id].to_i}) %>');
+ $('#reply_div_<%= params[:div_id].to_i %>').html('<%= escape_javascript(render :partial => 'users/message_replies',
+ :locals => {:comments => @journals,
+ :user_activity_id => @user_activity_id,
+ :type => @type,
+ :activity_id => params[:id].to_i}) %>');
<% elsif params[:type] == 'BlogComment' %>
-$('#reply_div_<%= params[:div_id].to_i %>').html('<%=escape_javascript(render :partial => 'users/message_replies', :locals => {:comments => @journals,:user_activity_id => @user_activity_id, :type => @type, :activity_id => params[:id].to_i}) %>');
+ $('#reply_div_<%= params[:div_id].to_i %>').html('<%=escape_javascript(render :partial => 'users/message_replies',
+ :locals => {:comments => @journals,
+ :user_activity_id => @user_activity_id,
+ :type => @type,
+ :activity_id => params[:id].to_i}) %>');
<% elsif params[:type] == 'OrgDocumentComment' %>
-$('#reply_div_<%= params[:div_id].to_i %>').html('<%=escape_javascript(render :partial => 'users/message_replies', :locals => {:comments => @journals, :user_activity_id => @user_activity_id, :type => @type, :activity_id => params[:id].to_i}) %>');
+ $('#reply_div_<%= params[:div_id].to_i %>').html('<%= escape_javascript(render :partial => 'users/message_replies',
+ :locals => {:comments => @journals,
+ :user_activity_id => @user_activity_id,
+ :type => @type,
+ :activity_id => params[:id].to_i}) %>');
<% elsif params[:type] == 'News' || params[:type] == 'Issue' || params[:type] == 'Syllabus' %>
-$('#reply_div_<%= params[:div_id].to_i %>').html('<%=escape_javascript(render :partial => 'users/news_replies', :locals => {:comments => @journals, :user_activity_id => @user_activity_id, :type => @type, :activity_id => params[:id].to_i}) %>');
+ $('#reply_div_<%= params[:div_id].to_i %>').html('<%= escape_javascript(render :partial => 'users/news_replies',
+ :locals => {:comments => @journals,
+ :user_activity_id => @user_activity_id,
+ :type => @type,
+ :activity_id => params[:id].to_i}) %>');
<% elsif params[:type] == 'is_project_issue' %>
-$('#reply_div_<%= params[:div_id].to_i %>').html('<%=escape_javascript(render :partial => 'projects/project_issue_expand_show', :locals => {:comments => @journals, :user_activity_id => @user_activity_id, :activity => @activity}) %>');
+ $('#reply_div_<%= params[:div_id].to_i %>').html('<%= escape_javascript(render :partial => 'projects/project_issue_expand_show',
+ :locals => {:comments => @journals,
+ :user_activity_id => @user_activity_id,
+ :activity => @activity}) %>');
+<% elsif params[:type] == 'is_project_training_task' %>
+$('#reply_div_<%= params[:div_id].to_i %>').html('<%= escape_javascript(render :partial => 'projects/project_issue_expand_show',
+ :locals => {:comments => @journals,
+ :user_activity_id => @user_activity_id,
+ :activity => @activity}) %>');
+sd_create_editor_from_data(<%= @user_activity_id %>, null, "100%", "UserActivity");
<% elsif params[:type] == 'is_project_message' %>
-$('#reply_div_<%= params[:div_id].to_i %>').html('<%=escape_javascript(render :partial => 'projects/project_message_replies', :locals => {:comments => @journals,:user_activity_id => @user_activity_id, :type => @type, :activity_id => params[:id].to_i}) %>');
+ $('#reply_div_<%= params[:div_id].to_i %>').html('<%= escape_javascript(render :partial => 'projects/project_message_replies',
+ :locals => {:comments => @journals,
+ :user_activity_id => @user_activity_id,
+ :type => @type,
+ :activity_id => params[:id].to_i}) %>');
<% end %>
diff --git a/app/views/users/new_user_commit_homework.html.erb b/app/views/users/new_user_commit_homework.html.erb
index 25d411536..399eb4aae 100644
--- a/app/views/users/new_user_commit_homework.html.erb
+++ b/app/views/users/new_user_commit_homework.html.erb
@@ -79,7 +79,7 @@
<%= @homework.name %>
-
-
-
+
+
+
+ 输入输出示例:
+ 温馨提示:请至少输入一组样例供学生参考。
+
+
+ <% if edit_mode && homework.is_program_homework? && homework.homework_samples.count > 0 %>
+ <% homework.homework_samples.each_with_index do |sample, index| %>
+
- <% end %>
- <% else %>
-
- <% end %>
+
+
+
+ <% end %>
+ <% else %>
+
+ <% end %>
+
+ 测试集设置:
+
+ 温馨提示:您可以在发布作业后,在作业"模拟答题"中进行标准代码的检测。
+
+
+ <% if edit_mode && homework.is_program_homework? %>
+ <% homework.homework_tests.each_with_index do |test, index| %>
+
+ <% end %>
+ <% else %>
+
+ <% end %>
+
- <%= @homework.name %> 截止时间:<%= @homework.end_time %>
+ <%= @homework.name %> 截止时间:<%= format_time @homework.end_time %>
<%= @homework.user.show_name %>
<%= @homework.description %>
+ |