From ad0b14b7684990e8240ac79caf1f480355a9a20c Mon Sep 17 00:00:00 2001
From: guange <8863824@gmail.com>
Date: Wed, 26 Aug 2015 22:11:39 +0800
Subject: [PATCH 01/19] schema
---
db/schema.rb | 1 +
1 file changed, 1 insertion(+)
diff --git a/db/schema.rb b/db/schema.rb
index 6aa6da41d..e2eec5d6b 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -1535,6 +1535,7 @@ ActiveRecord::Schema.define(:version => 20150826061843) do
t.string "identity_url"
t.string "mail_notification", :default => "", :null => false
t.string "salt", :limit => 64
+ t.integer "gid"
end
add_index "users", ["auth_source_id"], :name => "index_users_on_auth_source_id"
From 3ae4d012849cb7c56be40310e554da139c0b23d9 Mon Sep 17 00:00:00 2001
From: guange <8863824@gmail.com>
Date: Wed, 26 Aug 2015 20:23:17 +0800
Subject: [PATCH 02/19] .
---
app/controllers/homework_common_controller.rb | 45 ++++++++-----------
app/views/homework_common/new.html.erb | 25 +++++++++++
2 files changed, 44 insertions(+), 26 deletions(-)
diff --git a/app/controllers/homework_common_controller.rb b/app/controllers/homework_common_controller.rb
index 87c1e288b..2e9925916 100644
--- a/app/controllers/homework_common_controller.rb
+++ b/app/controllers/homework_common_controller.rb
@@ -115,23 +115,16 @@ class HomeworkCommonController < ApplicationController
end
end
- # uri = URI('http://test.gitlab.trustie.net/api/questions.json')
- # req = Net::HTTP::Post.new(uri, initheader = {'Content-Type' =>'application/json'})
- # req.body = question.to_json
- # res = Net::HTTP.start(uri.hostname, uri.port) do |http|
- # http.request(req)
+ # uri = URI('http://192.168.80.21:8080/api/questions.json')
+ # body = question.to_json
+ # res = Net::HTTP.new(uri.host, uri.port).start do |client|
+ # request = Net::HTTP::Post.new(uri.path)
+ # request.body = body
+ # request["Content-Type"] = "application/json"
+ # client.request(request)
# end
-
- uri = URI('http://192.168.80.21:8080/api/questions.json')
- body = question.to_json
- res = Net::HTTP.new(uri.host, uri.port).start do |client|
- request = Net::HTTP::Post.new(uri.path)
- request.body = body
- request["Content-Type"] = "application/json"
- client.request(request)
- end
- result = JSON.parse(res.body)
- homework_detail_programing.question_id = result["id"] if result["status"] && result["status"] == 0
+ # result = JSON.parse(res.body)
+ # homework_detail_programing.question_id = result["id"] if result["status"] && result["status"] == 0
homework.homework_detail_programing = homework_detail_programing
else
@@ -254,15 +247,15 @@ class HomeworkCommonController < ApplicationController
question[:input] << test.input
question[:output] << test.output
end
- uri = URI("http://192.168.80.21:8080/api/questions/#{@homework_detail_programing.question_id}.json")
- body = question.to_json
- res = Net::HTTP.new(uri.host, uri.port).start do |client|
- request = Net::HTTP::Put.new(uri.path)
- request.body = body
- request["Content-Type"] = "application/json"
- client.request(request)
- end
- result = JSON.parse(res.body)
+ # uri = URI("http://192.168.80.21:8080/api/questions/#{@homework_detail_programing.question_id}.json")
+ # body = question.to_json
+ # res = Net::HTTP.new(uri.host, uri.port).start do |client|
+ # request = Net::HTTP::Put.new(uri.path)
+ # request.body = body
+ # request["Content-Type"] = "application/json"
+ # client.request(request)
+ # end
+ # result = JSON.parse(res.body)
end
@homework.save_attachments(params[:attachments])
@@ -406,4 +399,4 @@ class HomeworkCommonController < ApplicationController
student_works += student_works
student_works[index + 1 .. index + n]
end
-end
\ No newline at end of file
+end
diff --git a/app/views/homework_common/new.html.erb b/app/views/homework_common/new.html.erb
index 6fc0fff0e..464490462 100644
--- a/app/views/homework_common/new.html.erb
+++ b/app/views/homework_common/new.html.erb
@@ -14,4 +14,29 @@
<%= link_to '取消',homework_common_index_path(:course => @course.id),:class => 'grey_btn fl'%>
<% end%>
+
+
+
+
+ <%= form_for("new_homework_common",:url => next_step_homework_common_index_path) do |f|%>
+
+
+ 请选择将要发布的作业类型
+
+
+
+ 人工评分的作业(支持匿名互评、灵活设置评分比例)
+
+
+
+
+ 自动评测的编程作业(支持C/C++程序的自动评分)
+
+
+
+ 下一步
+
+ <% end%>
+
+
From 1462ea09f3057f8ff2bd9b5f3d664d2954fb417d Mon Sep 17 00:00:00 2001
From: guange <8863824@gmail.com>
Date: Fri, 28 Aug 2015 12:04:49 +0800
Subject: [PATCH 03/19] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E4=BB=A3=E7=A0=81?=
=?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=AE=8C=E6=88=90?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/controllers/student_work_controller.rb | 83 +++++++++++++++++--
app/models/homework_common.rb | 2 +
app/models/homework_detail_programing.rb | 4 +
app/models/homework_test.rb | 1 -
app/models/student_work.rb | 2 +-
app/models/student_work_test.rb | 11 +--
app/views/student_work/new.html.erb | 80 +++++++++++++++++-
config/routes.rb | 1 +
...0150828011415_change_student_work_tests.rb | 13 +++
db/schema.rb | 6 +-
public/javascripts/homework.js | 24 ++++++
public/stylesheets/public.css | 46 ++++++++++
12 files changed, 253 insertions(+), 20 deletions(-)
create mode 100644 db/migrate/20150828011415_change_student_work_tests.rb
create mode 100644 public/javascripts/homework.js
diff --git a/app/controllers/student_work_controller.rb b/app/controllers/student_work_controller.rb
index 1af832b79..fb4c39931 100644
--- a/app/controllers/student_work_controller.rb
+++ b/app/controllers/student_work_controller.rb
@@ -3,13 +3,43 @@ class StudentWorkController < ApplicationController
include StudentWorkHelper
require 'bigdecimal'
require "base64"
- before_filter :find_homework, :only => [:new, :index, :create, :student_work_absence_penalty, :absence_penalty_list, :evaluation_list]
+ before_filter :find_homework, :only => [:new, :index, :create, :student_work_absence_penalty, :absence_penalty_list, :evaluation_list, :program_test]
before_filter :find_work, :only => [:edit, :update, :show, :destroy, :add_score, :praise_student_work]
before_filter :member_of_course, :only => [:index, :new, :create, :show, :add_score, :praise_student_work]
before_filter :author_of_work, :only => [:edit, :update, :destroy]
before_filter :teacher_of_course, :only => [:student_work_absence_penalty, :absence_penalty_list, :evaluation_list]
protect_from_forgery :except => :set_program_score
+ ###
+ def program_test
+ resultObj = {status: 0, results: [], error_msg: ''}
+ student_work = find_or_save_student_work
+ unless student_work
+ resultObj[:status] = 100
+ 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
+ student_work.student_work_tests.build(status: result["status"], results: results)
+ unless student_work.save
+ resultObj[:status] = 200
+ else
+ resultObj[:status] = result["status"].to_i
+ end
+
+ end
+ end
+
+ render :json => resultObj
+ end
+
def index
#设置作业对应的forge_messages表的viewed字段
query_student_work = @homework.course_messages
@@ -102,14 +132,9 @@ class StudentWorkController < ApplicationController
end
def new
- student_work = @homework.student_works.where("user_id = ?",User.current.id).first
- if student_work.nil?
- @stundet_work = StudentWork.new
- respond_to do |format|
- format.html
- end
- else
- render_403
+ @student_work = @homework.student_works.where("user_id = ?",User.current.id).first
+ if @student_work.nil?
+ @student_work = StudentWork.new
end
end
@@ -584,4 +609,44 @@ class StudentWorkController < ApplicationController
book.write xls_report
xls_report.string
end
+
+ def find_or_save_student_work
+ student_work = @homework.student_works.where(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
+ )
+ unless @homework.save
+ else
+ student_work = @homework.student_works.where(user_id: User.current.id).first
+ end
+ end
+ student_work
+ end
+
+
+ def test_realtime(student_work, src)
+ url = "http://192.168.41.130:3000/api/realtime_test.json"
+
+ factor = []
+ @homework.homework_tests.each do |test|
+ factor << {input: test.input, output: test.output}
+ end
+ solutions = {
+ src:src,
+ language:@homework.homework_detail_programing.language,
+ factor: factor
+ }
+ uri = URI(url)
+ body = solutions.to_json
+ res = Net::HTTP.new(uri.host, uri.port).start do |client|
+ request = Net::HTTP::Post.new(uri.path)
+ request.body = body
+ request["Content-Type"] = "application/json"
+ client.request(request)
+ end
+ JSON.parse(res.body)
+ end
end
\ No newline at end of file
diff --git a/app/models/homework_common.rb b/app/models/homework_common.rb
index 217c7d770..1c066495f 100644
--- a/app/models/homework_common.rb
+++ b/app/models/homework_common.rb
@@ -56,4 +56,6 @@ class HomeworkCommon < ActiveRecord::Base
Mailer.run.homework_added(self)
end
+ delegate :language_name, :to => :homework_detail_programing
+
end
diff --git a/app/models/homework_detail_programing.rb b/app/models/homework_detail_programing.rb
index 4c7134806..e5938d091 100644
--- a/app/models/homework_detail_programing.rb
+++ b/app/models/homework_detail_programing.rb
@@ -2,4 +2,8 @@ class HomeworkDetailPrograming < ActiveRecord::Base
attr_accessible :language, :standard_code, :homework_common_id
belongs_to :homework_common
+
+ def language_name
+ %W(c c++).at(self.language.to_i - 1)
+ end
end
diff --git a/app/models/homework_test.rb b/app/models/homework_test.rb
index df2848194..b4d8a4262 100644
--- a/app/models/homework_test.rb
+++ b/app/models/homework_test.rb
@@ -2,5 +2,4 @@ class HomeworkTest < ActiveRecord::Base
attr_accessible :input, :output, :homework_common_id,:result,:error_msg
belongs_to :homework_common
- has_many :student_work_test
end
diff --git a/app/models/student_work.rb b/app/models/student_work.rb
index b95c11c11..6e39c954a 100644
--- a/app/models/student_work.rb
+++ b/app/models/student_work.rb
@@ -7,7 +7,7 @@ class StudentWork < ActiveRecord::Base
has_many :student_works_evaluation_distributions, :dependent => :destroy
has_many :student_works_scores, :dependent => :destroy
belongs_to :project
- has_many :student_work_test
+ has_many :student_work_tests, order: 'id desc'
before_destroy :delete_praise
diff --git a/app/models/student_work_test.rb b/app/models/student_work_test.rb
index 413528b82..00484a820 100644
--- a/app/models/student_work_test.rb
+++ b/app/models/student_work_test.rb
@@ -1,12 +1,12 @@
# encoding: utf-8
class StudentWorkTest < ActiveRecord::Base
- attr_accessible :student_work_id, :homework_test_id, :result, :error_msg
-
- belongs_to :homework_test
+ attr_accessible :student_work_id, :results, :status
belongs_to :student_work
+ serialize :results, Array
+
def status_to_s
- case self.result.to_i
+ case self.status.to_i
when -1
'编译出错'
when -2
@@ -33,10 +33,11 @@ class StudentWorkTest < ActiveRecord::Base
end
def test_score
- if self.result.to_i == 0
+ if self.status.to_i == 0
format("%.1f",100.0 / self.student_work.homework_common.homework_tests.count)
else
0
end
end
+
end
diff --git a/app/views/student_work/new.html.erb b/app/views/student_work/new.html.erb
index c72f9d422..a7d3332b3 100644
--- a/app/views/student_work/new.html.erb
+++ b/app/views/student_work/new.html.erb
@@ -1,3 +1,8 @@
+<% content_for :header_tags do %>
+ <%= javascript_include_tag 'homework' %>
+<% end %>
+
+<% if @homework.homework_type == 1 %>
+
+