diff --git a/app/controllers/student_work_controller.rb b/app/controllers/student_work_controller.rb index 9f8d25c7e..593d6bf53 100644 --- a/app/controllers/student_work_controller.rb +++ b/app/controllers/student_work_controller.rb @@ -14,8 +14,8 @@ class StudentWorkController < ApplicationController def program_test is_test = params[:is_test] == 'true' resultObj = {status: 0, results: [], error_msg: '', time: Time.now.strftime('%Y-%m-%d %T')} - unless is_test - student_work = find_or_save_student_work + + student_work = find_or_save_student_work(is_test) unless student_work resultObj[:status] = 100 @@ -42,26 +42,6 @@ class StudentWorkController < ApplicationController end end - - else - if @homework.homework_type == 2 && @homework.homework_detail_programing - result = test_realtime(student_work, params[:src]) - logger.debug result - resultObj[:status] = result["status"] - resultObj[:results] = result["results"] - resultObj[:error_msg] = result["error_msg"] - results = result["results"] - if result["status"].to_i == -2 #编译错误 - results = [result["error_msg"]] - end - - resultObj[:status] = result["status"].to_i - resultObj[:time] = Time.now.strftime('%Y-%m-%d %T') - resultObj[:index] = 0 - end - - end - render :json => resultObj end @@ -182,24 +162,23 @@ class StudentWorkController < ApplicationController def create if params[:student_work] - stundet_work = StudentWork.find(params[:student_work_id]) if params[:student_work_id] - stundet_work ||= StudentWork.new - stundet_work.name = params[:student_work][:name] - stundet_work.description = params[:student_work][:description] - stundet_work.project_id = params[:student_work][:project_id] - stundet_work.homework_common_id = @homework.id - stundet_work.user_id = User.current.id - stundet_work.save_attachments(params[:attachments]) + student_work = StudentWork.find(params[:student_work_id]) if params[:student_work_id] + student_work ||= StudentWork.new + student_work.name = params[:student_work][:name] + student_work.description = params[:student_work][:description] + student_work.project_id = params[:student_work][:project_id] + student_work.homework_common_id = @homework.id + student_work.user_id = User.current.id + student_work.save_attachments(params[:attachments]) if Time.parse(@homework.end_time.to_s).strftime("%Y-%m-%d") < Time.parse(Time.now.to_s).strftime("%Y-%m-%d") - stundet_work.late_penalty = @homework.late_penalty + student_work.late_penalty = @homework.late_penalty else - stundet_work.late_penalty = 0 + student_work.late_penalty = 0 end - render_attachment_warning_if_needed(stundet_work) - if stundet_work.save - if @homework.homework_type == 2 && @homework.homework_detail_programing #编程作业,学生提交作品后计算系统得分 - - end + render_attachment_warning_if_needed(student_work) + + if student_work.save + respond_to do |format| format.html { flash[:notice] = l(:notice_successful_create) @@ -640,15 +619,17 @@ class StudentWorkController < ApplicationController xls_report.string end - def find_or_save_student_work - student_work = @homework.student_works.where(user_id: User.current.id).first + def find_or_save_student_work(is_test) + student_work = StudentWork.where(homework_common_id: @homework.id, user_id: User.current.id).first if student_work.nil? @homework.student_works.build( name: params[:title], description: params[:src], - user_id: User.current.id + user_id: User.current.id, + is_test: is_test ) unless @homework.save + logger.debug @homework.errors.full_messages else student_work = @homework.student_works.where(user_id: User.current.id).first end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index deeb3c42f..150d7aa83 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -294,6 +294,7 @@ class UsersController < ApplicationController @page = params[:page] ? params[:page].to_i + 1 : 0 user_course_ids = @user.courses.empty? ? "(-1)" :"(" + @user.courses.visible.map{|course| course.id}.join(",") + ")" @homework_commons = HomeworkCommon.where("course_id in #{user_course_ids}").order("created_at desc").limit(10).offset(@page * 10) + @is_teacher = User.current.user_extensions && User.current.user_extensions.identity == 0 && User.current.allowed_to?(:add_course, nil, :global => true) respond_to do |format| format.js format.html {render :layout => 'new_base_user'} @@ -361,8 +362,15 @@ class UsersController < ApplicationController end def user_commit_homework - flash[:notice] = l(:notice_successful_create) - redirect_to student_work_index_url(:homework => params[:homework]) + homework = HomeworkCommon.find(params[:homework]) + student_work = homework.student_works.where(user_id: User.current.id).first + if student_work + student_work.save + flash[:notice] = l(:notice_successful_create) + redirect_to student_work_index_url(:homework => params[:homework]) + else + render_403 + end end def user_new_homework @@ -395,7 +403,7 @@ class UsersController < ApplicationController homework_detail_programing = HomeworkDetailPrograming.new homework.homework_detail_programing = homework_detail_programing homework_detail_programing.ta_proportion = params[:ta_proportion] || 0.6 - homework_detail_programing.language = params[:program][:language].to_i + homework_detail_programing.language = params[:language_type].to_i inputs = params[:program][:input] if Array === inputs diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index f4a70117f..4c78c03df 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -2359,7 +2359,7 @@ module ApplicationHelper link_to "提交作品", new_student_work_path(:homework => homework.id),:class => 'c_blue' else if homework.homework_type == 1 && homework.homework_detail_manual && homework.homework_detail_manual.comment_status != 1 #匿评作业,且作业状态不是在开启匿评之前 - link_to "修改作品", "", :class => 'c_blue', :title => "开启匿评后不可修改作品" + link_to "作品已交", "", :class => 'c_blue', :title => "开启匿评后不可修改作品" elsif homework.homework_type == 2 #编程作业不能修改作品 link_to "作品已交", student_work_index_path(:homework => homework.id),:class => 'c_blue',:title => "编程作业不可修改作品" else diff --git a/app/models/homework_common.rb b/app/models/homework_common.rb index 1c066495f..0bff38558 100644 --- a/app/models/homework_common.rb +++ b/app/models/homework_common.rb @@ -10,7 +10,7 @@ class HomeworkCommon < ActiveRecord::Base has_one :homework_detail_manual, :dependent => :destroy has_one :homework_detail_programing, :dependent => :destroy has_many :homework_tests, :dependent => :destroy - has_many :student_works, :dependent => :destroy + has_many :student_works, :dependent => :destroy, :conditions => "is_test=0" has_many :student_works_evaluation_distributions, :through => :student_works #一个作业的分配的匿评列表 has_many :acts, :class_name => 'Activity', :as => :act, :dependent => :destroy #用户活动 # 课程动态 @@ -56,6 +56,10 @@ class HomeworkCommon < ActiveRecord::Base Mailer.run.homework_added(self) end + def is_program_homework? + self.homework_type == 2 && self.homework_detail_programing + end + delegate :language_name, :to => :homework_detail_programing end diff --git a/app/models/student_work.rb b/app/models/student_work.rb index 6e39c954a..0a5c1b65c 100644 --- a/app/models/student_work.rb +++ b/app/models/student_work.rb @@ -1,6 +1,6 @@ #学生提交作品表 class StudentWork < ActiveRecord::Base - attr_accessible :name, :description, :homework_common_id, :user_id, :final_score, :teacher_score, :student_score, :teaching_asistant_score, :project_id + attr_accessible :name, :description, :homework_common_id, :user_id, :final_score, :teacher_score, :student_score, :teaching_asistant_score, :project_id, :is_test belongs_to :homework_common belongs_to :user @@ -10,10 +10,32 @@ class StudentWork < ActiveRecord::Base has_many :student_work_tests, order: 'id desc' before_destroy :delete_praise + before_save :set_program_score, :set_src acts_as_attachable def delete_praise PraiseTread.where("praise_tread_object_id = #{self.id} AND praise_tread_object_type = 'StudentWork'").destroy_all end + + def last_test + student_work_tests.order('id desc').first + end + + private + def set_program_score + if homework_common.is_program_homework? #编程作业,学生提交作品后计算系统得分 + #根据最后一次测试计算得分 + unless last_test + self.system_score = 0 + else + self.system_score = last_test.test_score + end + end + + end + def set_src + self.description = last_test.src if last_test + end + end diff --git a/app/models/student_work_test.rb b/app/models/student_work_test.rb index 96aa1d6c3..1cfb7f8b2 100644 --- a/app/models/student_work_test.rb +++ b/app/models/student_work_test.rb @@ -34,10 +34,19 @@ class StudentWorkTest < ActiveRecord::Base def test_score if self.status.to_i == 0 - format("%.1f",100.0 / self.student_work.homework_common.homework_tests.count) - else + 100 + elsif self.results.empty? 0 + else + get_success_count * 100 / self.results.count end end + private + def get_success_count + self.results.inject(0) do |sum, result| + sum += (result["status"].to_i == 0 ? 1 : 0) + end || 0 + end + end diff --git a/app/views/admin/latest_login_users.html.erb b/app/views/admin/latest_login_users.html.erb index c438dcebd..28ef8091e 100644 --- a/app/views/admin/latest_login_users.html.erb +++ b/app/views/admin/latest_login_users.html.erb @@ -70,18 +70,20 @@ <%=link_to(user.login, user_path(user)) %>
-
-
- 项目信息
-
-
-
- - <%= f.select :project,options_for_select(user_projects_option,@work.project_id), {},{:class => "bo02 mb10"} %> -
- +- - -
- - -- - <%= render :partial => 'attachments/new_form',:locals => {:container => @work} %> -
- -- 提交作品 - <%= link_to "返 回".html_safe, student_work_index_path(:homework => @homework), :class => "blue_btn grey_btn fl c_white mt10 ml10"%> -
- -
-
- <%= f.text_field "name", :required => true, :size => 60, :class => "bo fl", :maxlength => 200, :placeholder => "作品名称", :onkeyup => "regexStudentWorkName();" %>
- <% if @homework.homework_type != 2%>
-
- 项目信息
-
-
- <% end%>
-
- - <%= f.select :project_id,options_for_select(user_projects_option), {},{:class => "bo02 mb10"} %> -
- -- - <% if @homework.homework_type == 2 && @homework.homework_detail_programing%> - <%= f.text_area "description", :class => "w620 hwork_txt h400", :placeholder => "作品描述不能为空", :onkeyup => "regexStudentWorkDescription();", :value => @homework.homework_detail_programing.language == "1" ? c_stantard_code_student : c_stantard_code_student_%> - <% else %> - <%= f.text_area "description", :class => "w620 hwork_txt", :placeholder => "作品描述不能为空", :onkeyup => "regexStudentWorkDescription();"%> - <% end%> -
- - - - <% if @homework.homework_type != 2%> -- - <%= render :partial => 'attachments/new_form' %> -
- - <% end%> -- 提交作品 - <%= link_to "返 回".html_safe, student_work_index_path(:homework => @homework), :class => "blue_btn grey_btn fl c_white mt10 ml10"%> -
- -<%= @homework.description %>
-输入 2 1 1 4 4 2 3 6 5
-输出 15
-
注:迟交扣2分,缺评一个作品扣2分
-第<%= @student_work.student_work_tests.count - index%>次测试
<%= test.created_at.to_s(:db) %> - -