diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb index d1d9fbdf5..e6e0ec087 100644 --- a/app/controllers/admin_controller.rb +++ b/app/controllers/admin_controller.rb @@ -595,11 +595,33 @@ class AdminController < ApplicationController #代码测试列表 def code_work_tests - @code_work_tests = StudentWorkTest.find_by_sql("select status,results,created_at, student_work_id from student_work_tests order by id desc ") - #@code_work_tests = StudentWorkTest.find_by_sql("select a.status,a.results,a.created_at ,b.id as homeworkid,d.language from student_work_tests as a , homework_commons as b ,student_works as c, homework_detail_programings as d where a.student_work_id = c.id and b.id = c.homework_common_id and c.homework_common_id = d.homework_common_id order by a.id desc ") - #@code_work_tests = StudentWorkTest.order('created_at desc') + #求出所有条数 + tCount = CodeTests.count() + + #设置个空的数组 以便paginateHelper来分页 + @code_work_tests = [] + if tCount >= 1 + @code_work_tests[tCount-1] = {} + end @code_work_tests = paginateHelper @code_work_tests,30 @page = (params['page'] || 1).to_i - 1 + + #取出需要的那一页数据 + tStart = @page*30 + @code_work_tests = CodeTests.find_by_sql("select * from code_tests order by id desc limit #{tStart},30 ") + + #取出各个作业是否是模拟答题的 + is_test = {} + @code_work_tests.each do |test| + if is_test[test['student_work_id']] != nil + test['is_test'] = is_test[test['student_work_id']] + else + test['is_test'] = StudentWork.find(test['student_work_id']).is_test + #test['is_test'] = CodeTests.find_by_sql("select is_test from student_works where id = #{test['student_work_id']}").first['is_test'] + is_test[test['student_work_id']] = test['is_test'] + end + end + respond_to do |format| format.html end diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb index 1dacffb6f..fe3c3272a 100644 --- a/app/controllers/attachments_controller.rb +++ b/app/controllers/attachments_controller.rb @@ -660,8 +660,8 @@ class AttachmentsController < ApplicationController end def has_login - unless @attachment && @attachment.container_type == "Organization" - unless @attachment && @attachment.container_type == "PhoneAppVersion" + unless (@attachment && @attachment.container_type == "Organization").nil? + unless (@attachment && @attachment.container_type == "PhoneAppVersion").nil? render_403 if !User.current.logged? && !(@attachment.container_type == 'OrgSubfield' && @attachment.container.organization.allow_guest_download) && !(@attachment.container_type == 'OrgDocumentComment' && @attachment.container.organization.allow_guest_download) end end diff --git a/app/controllers/student_work_controller.rb b/app/controllers/student_work_controller.rb index 5a841d473..9d2548a36 100644 --- a/app/controllers/student_work_controller.rb +++ b/app/controllers/student_work_controller.rb @@ -100,8 +100,17 @@ class StudentWorkController < ApplicationController test = @homework.homework_tests[index - 1] #请求测试 - result = test_realtime_ex(test, params[:src]) + begin + result = test_realtime_ex(test, params[:src]) + rescue Timeout::Error + tEndtime = Time.now + tUsedtime = (tEndtime.to_i-tStarttime.to_i)*1000+(tEndtime.usec - tStarttime.usec)/1000 + logger.debug "program_test_ex user wait time = #{tUsedtime} 毫秒" + #status 0:答案正确 -3http超时 -2:编译错误 -1:答案错误 2:程序运行超时 + CodeTests.create(:homework_id=>@homework.id,:language=>@homework.homework_detail_programing.language,:status=>-3,:wait_time=>tUsedtime,:student_work_id=>student_work.id) + + end if result["status"].to_i != -2 #result["results"].first['output'] = result["results"].first['output'].gsub(" ","□") #result["results"].first['result'] = result["results"].first['result'].gsub(" ","□") @@ -116,11 +125,19 @@ class StudentWorkController < ApplicationController resultObj[:results] = result["results"].first #本次测试结果 resultObj[:error_msg] = result["error_msg"] #编译错误时的信息 + #该状态用于存入CodeTests + tmpstatus = -1 if result["status"].to_i == -2 #编译错误 resultObj[:results] = result["error_msg"] resultObj[:status] = -2 + tmpstatus = -2 elsif result["results"][0]["status"].to_i == 2 resultObj[:status] = 2 + tmpstatus = 2 + end + + if result["status"] == 0 + tmpstatus = 0 end unless student_work.save @@ -136,9 +153,6 @@ class StudentWorkController < ApplicationController end #每次从数据库取出上次的结果加上本次的结果再存入数据库 - tEndtime = Time.now - tUsedtime = (tEndtime.to_i-tStarttime.to_i)*1000+(tEndtime.usec - tStarttime.usec)/1000 - if result["status"].to_i != -2 result["results"].first['user_wait'] = tUsedtime @@ -175,11 +189,19 @@ class StudentWorkController < ApplicationController resultObj[:index] = student_work.student_work_tests.count end + #将每次用户等待时间都存起来以便管理界面显示用 tEndtime = Time.now tUsedtime = (tEndtime.to_i-tStarttime.to_i)*1000+(tEndtime.usec - tStarttime.usec)/1000 - logger.debug "program_test_ex user wait time = #{tUsedtime} 毫秒" + time_used = 0 + if result["status"].to_i != -2 + #至少一毫秒 + time_used = result["results"].first['time_used'] == 0 ? 1:result["results"].first['time_used'] + end + #0:答案正确 -3http超时 -2:编译错误 -1:答案错误 2:程序运行超时 + CodeTests.create(:homework_id=>@homework.id,:language=>@homework.homework_detail_programing.language,:status=>tmpstatus,:time_used=>time_used,:wait_time=>tUsedtime,:student_work_id=>student_work.id) + #渲染返回结果 render :json => resultObj end @@ -223,6 +245,7 @@ class StudentWorkController < ApplicationController JSON.parse(res.body) end + #点击代码查重按钮 def work_canrepeat @homework_id = params[:homework] @course_id = params[:course_id] @@ -280,13 +303,14 @@ class StudentWorkController < ApplicationController render :json => resultObj end + #上次代码查重时间 def last_codecomparetime resultObj = {status: 0} @homework = HomeworkCommon.find params[:homework] #转换一下 if @homework.simi_time != nil - resultObj[:comparetime] = Time.parse(@homework.simi_time.to_s).strftime("%Y-%m-%d %H:%M") + resultObj[:comparetime] = Time.parse(@homework.simi_time.to_s).strftime("%Y-%m-%d %H:%M:%S") else resultObj[:comparetime] = 0 end @@ -1277,7 +1301,6 @@ class StudentWorkController < ApplicationController request["Content-Type"] = "application/json" client.request(request) end - JSON.parse(res.body) end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index f0f959830..606c9b5fd 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -120,59 +120,52 @@ module ApplicationHelper case type when "HomeworkCommon" if course_contributor_score.nil? - CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :message_num => 0, :message_reply_num => 0, - :news_reply_num => 0, :resource_num => 0, :journal_num => 0, :journal_reply_num => 0, :homework_journal_num => 1) + CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :homework_journal_num => 1) else - score = course_contributor_score.homework_journal_num + 1 + score = course_contributor_score.homework_journal_num.to_i + 1 course_contributor_score.update_attributes(:homework_journal_num => score) end # 课程留言 when "Course" if course_contributor_score.nil? - CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :message_num => 0, :message_reply_num => 0, - :news_reply_num => 0, :resource_num => 0, :journal_num => 1, :journal_reply_num => 0) + CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :journal_num => 1) else - score = course_contributor_score.journal_num + 1 + score = course_contributor_score.journal_num.to_i + 1 course_contributor_score.update_attributes(:journal_num => score) end when "Message" if course_contributor_score.nil? - CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :message_num => 1, :message_reply_num => 0, - :news_reply_num => 0, :resource_num => 0, :journal_num => 0, :journal_reply_num => 0) + CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :message_num => 1) else - score = course_contributor_score.message_num + 1 + score = course_contributor_score.message_num.to_i + 1 course_contributor_score.update_attributes(:message_num => score) end when "MessageReply" if course_contributor_score.nil? - CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :message_num => 0, :message_reply_num => 1, - :news_reply_num => 0, :resource_num => 0, :journal_num => 0, :journal_reply_num => 0) + CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :message_reply_num => 1) else - score = course_contributor_score.message_reply_num + 1 + score = course_contributor_score.message_reply_num.to_i + 1 course_contributor_score.update_attributes(:message_reply_num => score) end when "NewReply" if course_contributor_score.nil? - CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :message_num => 0, :message_reply_num => 0, - :news_reply_num => 1, :resource_num => 0, :journal_num => 0, :journal_reply_num => 0) + CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :news_reply_num => 1) else - score = course_contributor_score.news_reply_num + 1 + score = course_contributor_score.news_reply_num.to_i + 1 course_contributor_score.update_attributes(:news_reply_num => score) end when "News" if course_contributor_score.nil? - CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :message_num => 0, :message_reply_num => 0, - :news_reply_num => 0, :news_num => 1, :resource_num => 0, :journal_num => 0, :journal_reply_num => 0) + CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :news_num => 1) else - score = course_contributor_score.news_num + 1 + score = course_contributor_score.news_num.to_i + 1 course_contributor_score.update_attributes(:news_num => score) end when "Attachment" if course_contributor_score.nil? - CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :message_num => 0, :message_reply_num => 0, - :news_reply_num => 0, :news_num => 0, :resource_num => 1, :journal_num => 0, :journal_reply_num => 0) + CourseContributorScore.create(:course_id => course_id, :user_id => user_id, :resource_num => 1) else - score = course_contributor_score.resource_num + 1 + score = course_contributor_score.resource_num.to_i + 1 course_contributor_score.update_attributes(:resource_num => score) end end @@ -184,38 +177,38 @@ module ApplicationHelper case type when "HomeworkCommon" unless course_contributor_score.nil? - score = course_contributor_score.homework_journal_num - 1 + score = course_contributor_score.homework_journal_num.to_i - 1 course_contributor_score.update_attribute(:homework_journal_num, score < 0 ? 0 : score) end # 课程留言 when "Course" unless course_contributor_score.nil? - score = course_contributor_score.journal_num - 1 + score = course_contributor_score.journal_num.to_i - 1 course_contributor_score.update_attribute(:journal_num, score < 0 ? 0 : score) end when "Message" unless course_contributor_score.nil? - score = course_contributor_score.message_num - 1 + score = course_contributor_score.message_num.to_i - 1 course_contributor_score.update_attribute(:message_num, score < 0 ? 0 : score) end when "MessageReply" unless course_contributor_score.nil? - score = course_contributor_score.message_reply_num - 1 + score = course_contributor_score.message_reply_num.to_i - 1 course_contributor_score.update_attribute(:message_reply_num, score < 0 ? 0 : score) end when "NewReply" unless course_contributor_score.nil? - score = course_contributor_score.news_reply_num - 1 + score = course_contributor_score.news_reply_num.to_i - 1 course_contributor_score.update_attribute(:news_reply_num, score < 0 ? 0 : score) end when "News" unless course_contributor_score.nil? - score = course_contributor_score.news_num - 1 + score = course_contributor_score.news_num.to_i - 1 course_contributor_score.update_attribute(:news_num, score < 0 ? 0 : score) end when "Attachment" unless course_contributor_score.nil? - score = course_contributor_score.resource_num - 1 + score = course_contributor_score.resource_num.to_i - 1 course_contributor_score.update_attribute(:resource_num, score < 0 ? 0 : score) end end diff --git a/app/models/code_tests.rb b/app/models/code_tests.rb new file mode 100644 index 000000000..f5a358b07 --- /dev/null +++ b/app/models/code_tests.rb @@ -0,0 +1,3 @@ +class CodeTests < ActiveRecord::Base + attr_accessible :homework_id, :language, :status, :time_used, :wait_time, :student_work_id +end diff --git a/app/models/message.rb b/app/models/message.rb index 5dc5dcc2e..e6df9493b 100644 --- a/app/models/message.rb +++ b/app/models/message.rb @@ -80,12 +80,10 @@ class Message < ActiveRecord::Base validates_length_of :subject, :maximum => 255 validate :cannot_reply_to_locked_topic, :on => :create - after_create :add_author_as_watcher, :reset_counters!, :add_boards_count + # after_create :add_author_as_watcher, :reset_counters!, :add_boards_count after_update :update_messages_board, :update_activity after_destroy :reset_counters!,:down_user_score,:delete_kindeditor_assets, :decrease_boards_count, :down_course_score - - after_create :act_as_activity,:act_as_course_activity,:be_user_score,:act_as_forge_activity, - :act_as_system_message, :send_mail, :act_as_student_score, act_as_at_message(:content, :author_id) + after_create :act_as_course_activity, :act_as_forge_activity, :act_as_student_score, act_as_at_message(:content, :author_id), :add_author_as_watcher, :reset_counters!, :add_boards_count #before_save :be_user_score scope :visible, lambda {|*args| @@ -137,11 +135,11 @@ class Message < ActiveRecord::Base if self.project && !project.project_score.nil? # 讨论区 if self.parent_id.nil? - count = self.project.project_score.board_num + 1 - self.project.project_score.update_attribute(:board_num, count) + count = self.project.project_score.board_num.to_i + 1 + self.project.project_score.update_column(:board_num, count) else # 回复 - count = self.project.project_score.board_message_num + 1 - self.project.project_score.update_attribute(:board_message_num, count) + count = self.project.project_score.board_message_num.to_i + 1 + self.project.project_score.update_column(:board_message_num, count) end end end diff --git a/app/models/student_work_test.rb b/app/models/student_work_test.rb index 0246ecabf..54d5ab07a 100644 --- a/app/models/student_work_test.rb +++ b/app/models/student_work_test.rb @@ -1,6 +1,6 @@ # encoding: utf-8 class StudentWorkTest < ActiveRecord::Base - attr_accessible :student_work_id, :results, :status, :src + attr_accessible :student_work_id, :results, :status, :src, :uwait_time belongs_to :student_work serialize :results, Array diff --git a/app/views/admin/code_work_tests.html.erb b/app/views/admin/code_work_tests.html.erb index 29fb588c2..cb113f1e6 100644 --- a/app/views/admin/code_work_tests.html.erb +++ b/app/views/admin/code_work_tests.html.erb @@ -10,51 +10,51 @@ - 作业id - - - 平均等待时间 + 作业id - 语言 + 作品id - - 提交测试时间 + + 用户等待时间 - 答题状态 + 语言 - - 测试集数 + + 测试完成时间 - - 最小耗时 + + 答题状态 - 最大耗时 + 耗时 <% @code_work_tests.each do |test| %> - <% infos = StudentWorkTest.find_by_sql("select a.homework_common_id as homeworkid,b.language from student_works as a, homework_detail_programings as b where a.id = #{test.student_work_id} and a.homework_common_id = b.homework_common_id - ").first %> - <% if infos != nil %> + <% if test['homework_id'] != nil %> "> - - <%=link_to(infos.homeworkid, student_work_index_path(:homework => infos.homeworkid))%> + '> + <%=link_to(test['homework_id'], student_work_index_path(:homework => test['homework_id']))%> + + '> + <% if !test['is_test'] %> + <%=link_to(test['student_work_id'], student_work_index_path(:homework => test['homework_id'],:student_work_id=>test['student_work_id']))%> + <% else %> + <%=link_to(test['student_work_id'], new_user_commit_homework_users_path(homework_id: test['homework_id'], is_test: true))%> + <% end %> - <% if test.status != -2 && test.results.first['user_wait'] %> - <% wait_time = 0 %> - <% test.results.each do |result| wait_time = wait_time + result['user_wait'] end %> - <%=(wait_time/test.results.count).to_s+"毫秒" %> + <% if test.wait_time != 0 %> + <%=test.wait_time.to_s+"毫秒" %> <% else %> <%="未记录"%> <% end %> - <%=%W(C C++ Python Java).at(infos.language.to_i - 1)%> + <%=%W(C C++ Python Java).at(test['language'].to_i - 1)%> <%=Time.parse(test.created_at.to_s).strftime("%Y-%m-%d %H:%M:%S")%> @@ -64,26 +64,17 @@ <%= "答题正确" %> <% elsif test.status == -2 %> <%= "编译错误" %> - <% elsif test.status == 2 || test.results.last['status'] == 2 %> - <%= "超时" %> + <% elsif test.status == 2 %> + <%= "代码超时" %> + <% elsif test.status == -3 %> + <%= "请求超时" %> <% else %> <%= "答题错误" %> <% end %> - <% if test.status != -2 %> - <%=test.results.count%> - <% end %> - - - <% if test.status != -2 %> - <%test.results = test.results.sort_by {|result| result['time_used'] }%> - <%=test.results.first['time_used'] == 0 ? "1毫秒":test.results.first['time_used'].to_s+"毫秒"%> - <% end %> - - - <% if test.status != -2 %> - <%=test.results.last['time_used'] == 0 ? "1毫秒":test.results.last['time_used'].to_s+"毫秒"%> + <% if test.time_used > 0 %> + <%=test.time_used.to_s+"毫秒"%> <% end %> diff --git a/app/views/courses/code_repeat.html.erb b/app/views/courses/code_repeat.html.erb index 0748dc30f..87cf539fa 100644 --- a/app/views/courses/code_repeat.html.erb +++ b/app/views/courses/code_repeat.html.erb @@ -2,8 +2,8 @@

查重结果

diff --git a/app/views/student_work/_programing_work_show.html.erb b/app/views/student_work/_programing_work_show.html.erb index becec239a..eb16dc807 100644 --- a/app/views/student_work/_programing_work_show.html.erb +++ b/app/views/student_work/_programing_work_show.html.erb @@ -69,7 +69,7 @@
<%=x["result"].force_encoding("UTF-8")%> 
正确输出: -
<%=x["output"]%>
+
<%=x["output"].force_encoding("UTF-8")%>
耗时:
<%=x["time_used"]==0?1:x["time_used"]%>毫秒
diff --git a/app/views/student_work/_student_work_list.html.erb b/app/views/student_work/_student_work_list.html.erb index ac06d900e..e0b6def7a 100644 --- a/app/views/student_work/_student_work_list.html.erb +++ b/app/views/student_work/_student_work_list.html.erb @@ -14,14 +14,14 @@ <% end %> <%if @is_teacher || @homework.homework_detail_manual.comment_status == 3 || @homework.is_open == 1%> -
+
+ <%= select_tag(:student_work_in_group,options_for_select(course_group_list(@course),@group), {:class => "classSplit fl mr20"}) unless course_group_list(@course).empty? %> <%if @homework.homework_type == 2 && @is_teacher %> - <%= link_to "代码查重", work_canrepeat_student_work_index_path(homework:@homework.id, course_id:@course.id), class: 'BlueCirBtn fr',:remote => true %> + <%= link_to "代码查重", work_canrepeat_student_work_index_path(homework:@homework.id, course_id:@course.id), class: 'BlueCirBtn fl',:remote => true %> <% end %> - <%= select_tag(:student_work_in_group,options_for_select(course_group_list(@course),@group), {:class => "classSplit"}) unless course_group_list(@course).empty? %> <% end%>
@@ -50,8 +50,12 @@ \ No newline at end of file diff --git a/app/views/student_work/work_canrepeat.js.erb b/app/views/student_work/work_canrepeat.js.erb index 090f63fd2..4c7cb8489 100644 --- a/app/views/student_work/work_canrepeat.js.erb +++ b/app/views/student_work/work_canrepeat.js.erb @@ -81,7 +81,7 @@ test_repeat(); <% else%> $("#ajax-modal").html('<%= escape_javascript( render :partial => 'courses/compare_code_tips_1',:locals => {:homework=> @homework,:courseid=>@course_id })%>'); - $('#compare-tips-1').html('您上次查重的时间为<%= Time.parse(@homework.simi_time.to_s).strftime("%Y-%m-%d %H-%M-%S")%>'); + $('#compare-tips-1').html('您上次查重的时间为<%= Time.parse(@homework.simi_time.to_s).strftime("%Y-%m-%d %H:%M:%S")%>'); showModal('ajax-modal', '580px'); $('#ajax-modal').siblings().remove(); $('#ajax-modal').before(""); diff --git a/app/views/users/new_user_commit_homework.html.erb b/app/views/users/new_user_commit_homework.html.erb index e84b7a95e..1f8d3ca26 100644 --- a/app/views/users/new_user_commit_homework.html.erb +++ b/app/views/users/new_user_commit_homework.html.erb @@ -143,9 +143,9 @@ 测试错误! <% end %> 您的输出: -
<%=x["result"]%> 
+
<%=x["result"].force_encoding("UTF-8")%> 
正确输出: -
<%= x["output"] %>
+
<%= x["output"].force_encoding("UTF-8") %>
 耗时:
<%=x["time_used"]==0?1:x["time_used"]%>毫秒
diff --git a/db/migrate/20160418074429_delete_other_works.rb b/db/migrate/20160418074429_delete_other_works.rb new file mode 100644 index 000000000..54944a6ec --- /dev/null +++ b/db/migrate/20160418074429_delete_other_works.rb @@ -0,0 +1,11 @@ +class DeleteOtherWorks < ActiveRecord::Migration + def up + works = StudentWork.where("homework_common_id = 3253 and user_id = 10740 and final_score = 0") + unless works.empty? + works.destroy_all + end + end + + def down + end +end diff --git a/db/migrate/20160419061745_create_code_tests.rb b/db/migrate/20160419061745_create_code_tests.rb new file mode 100644 index 000000000..565378ccd --- /dev/null +++ b/db/migrate/20160419061745_create_code_tests.rb @@ -0,0 +1,13 @@ +class CreateCodeTests < ActiveRecord::Migration + def change + create_table :code_tests do |t| + t.integer :homework_id + t.integer :wait_time, default: 0 + t.integer :language + t.integer :status + t.integer :time_used, default: 0 + + t.timestamps + end + end +end diff --git a/db/migrate/20160419074016_add_student_work_id_to_code_tests.rb b/db/migrate/20160419074016_add_student_work_id_to_code_tests.rb new file mode 100644 index 000000000..d2fc6b1f4 --- /dev/null +++ b/db/migrate/20160419074016_add_student_work_id_to_code_tests.rb @@ -0,0 +1,5 @@ +class AddStudentWorkIdToCodeTests < ActiveRecord::Migration + def change + add_column :code_tests, :student_work_id, :integer,:default=>0 + end +end diff --git a/db/schema.rb b/db/schema.rb index 2fd7fd91d..14753784a 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,11 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20160408074854) do + + + +ActiveRecord::Schema.define(:version => 20160405021915) do +ActiveRecord::Schema.define(:version => 20160419074016) do create_table "activities", :force => true do |t| t.integer "act_id", :null => false @@ -334,6 +338,17 @@ ActiveRecord::Schema.define(:version => 20160408074854) do t.boolean "diff_all" end + create_table "code_tests", :force => true do |t| + t.integer "homework_id" + t.integer "wait_time", :default => 0 + t.integer "language" + t.integer "status" + t.integer "time_used", :default => 0 + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "student_work_id", :default => 0 + end + create_table "comments", :force => true do |t| t.string "commented_type", :limit => 30, :default => "", :null => false t.integer "commented_id", :default => 0, :null => false @@ -809,6 +824,7 @@ ActiveRecord::Schema.define(:version => 20160408074854) do t.integer "anonymous_comment", :default => 0 t.integer "quotes", :default => 0 t.integer "is_open", :default => 0 + t.datetime "simi_time" end add_index "homework_commons", ["course_id", "id"], :name => "index_homework_commons_on_course_id_and_id" @@ -1520,6 +1536,18 @@ ActiveRecord::Schema.define(:version => 20160408074854) do t.string "topic_resource" end + create_table "rep_statics", :force => true do |t| + t.integer "project_id" + t.integer "commits_num" + t.string "uname" + t.string "email" + t.integer "add" + t.integer "del" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "changeset" + end + create_table "repositories", :force => true do |t| t.integer "project_id", :default => 0, :null => false t.string "url", :default => "", :null => false @@ -1667,6 +1695,7 @@ ActiveRecord::Schema.define(:version => 20160408074854) do t.integer "status", :default => 9 t.text "results" t.text "src" + t.integer "uwait_time", :default => 0 end create_table "student_works", :force => true do |t| @@ -1685,6 +1714,8 @@ ActiveRecord::Schema.define(:version => 20160408074854) do t.integer "absence_penalty", :default => 0 t.float "system_score", :default => 0.0 t.boolean "is_test", :default => false + t.integer "simi_id" + t.integer "simi_value" end add_index "student_works", ["homework_common_id", "user_id"], :name => "index_student_works_on_homework_common_id_and_user_id" diff --git a/lib/tasks/sync_files.rake b/lib/tasks/sync_files.rake new file mode 100644 index 000000000..5c9326356 --- /dev/null +++ b/lib/tasks/sync_files.rake @@ -0,0 +1,38 @@ +require 'trustie/gitlab/sync' + +namespace :trustie do + namespace :files do + desc "sync course'file" + task :course => :environment do + # Course.all.each do |course| + # unless course.attachments.count.to_i == 0 + # attachment_count = Attachment.find_by_sql("SELECT * FROM `attachments` where container_id = #{course.id} and container_type ='Course'").count + # project_score = ProjectScore.where("project_id=?", project.id).first + # if project_score.nil? + # ProjectScore.create(:project_id => project.id, :attach_num => 0) + # else + # project_score.attach_num = attachment_count + # project_score.save + # end + # end + # end + end + + desc "sync project'file" + task :project => :environment do + Project.all.each do |project| + unless project.attachments.count.to_i == 0 + attachment_count = Attachment.find_by_sql("SELECT * FROM `attachments` where container_id = #{project.id} and container_type ='Project'").count + project_score = ProjectScore.where("project_id=?", project.id).first + if project_score.nil? + ProjectScore.create(:project_id => project.id, :attach_num => 0) + else + project_score.attach_num = attachment_count + project_score.save + end + end + end + end + + end +end diff --git a/public/app.html b/public/app.html index 5ebcdc286..90dc64956 100644 --- a/public/app.html +++ b/public/app.html @@ -14,6 +14,57 @@ +
diff --git a/public/assets/wechat/activities.html b/public/assets/wechat/activities.html index f5eded3ee..f87af796f 100644 --- a/public/assets/wechat/activities.html +++ b/public/assets/wechat/activities.html @@ -7,29 +7,32 @@
-
- - +
-
+ +
迟交扣分:{{act.homework_common_detail.late_penalty}}分 匿评开启时间:{{act.homework_common_detail.evaluation_start}}
缺评扣分:{{act.homework_common_detail.absence_penalty}}分/作品 匿评关闭时间:{{act.homework_common_detail.evaluation_end}}
- 点击展开 + 点击展开
- {{act.latest_update}} + {{act.activity_type_name}} + {{act.latest_update}} + + {{act.reply_count}} +
+
{{act.praise_count}}
+
{{act.praise_count}}
-
-
回复 ({{act.reply_count}})
-
赞 ({{act.praise_count}})
-
已赞 ({{act.praise_count}})
-
@@ -38,23 +41,25 @@
-
- - +
+ +
+
- 点击展开 + 点击展开
- {{act.latest_update}} + {{act.activity_type_name}} + {{act.latest_update}} + + {{act.reply_count}} +
+
{{act.praise_count}}
+
{{act.praise_count}}
-
-
回复 ({{act.reply_count}})
-
赞 ({{act.praise_count}})
-
已赞 ({{act.praise_count}})
-
@@ -63,23 +68,25 @@
-
- - +
+ +
+
- 点击展开 + 点击展开
- {{act.latest_update}} + {{act.activity_type_name}} + {{act.latest_update}} + + {{act.reply_count}} +
+
{{act.praise_count}}
+
{{act.praise_count}}
-
-
回复 ({{act.reply_count}})
-
赞 ({{act.praise_count}})
-
已赞 ({{act.praise_count}})
-
@@ -89,7 +96,7 @@
-
+
@@ -104,25 +111,27 @@
-
- - +
+ +
-
+ +
状态:{{act.issue_detail.issue_status}} 优先级:{{act.issue_detail.issue_priority}}
指派给:{{act.issue_detail.issue_assigned_to}} 完成度:{{act.issue_detail.done_ratio}}%
- 点击展开 + 点击展开
- {{act.latest_update}} + {{act.activity_type_name}} + {{act.latest_update}} + + {{act.reply_count}} +
+
{{act.praise_count}}
+
{{act.praise_count}}
-
-
回复 ({{act.reply_count}})
-
赞 ({{act.praise_count}})
-
已赞 ({{act.praise_count}})
-
@@ -132,23 +141,25 @@
-
- - +
+ +
-
+ +
- 点击展开 + 点击展开
- {{act.latest_update}} + {{act.activity_type_name}} + {{act.latest_update}} + + {{act.reply_count}} +
+
{{act.praise_count}}
+
{{act.praise_count}}
-
-
回复 ({{act.reply_count}})
-
赞 ({{act.praise_count}})
-
已赞 ({{act.praise_count}})
-
@@ -157,7 +168,7 @@
-
+
@@ -172,20 +183,23 @@
-
- - +
+ +
-
+
+

- 点击展开 + 点击展开 +
+ {{act.latest_update}} + + {{act.reply_count}} +
+
{{act.praise_count}}
+
{{act.praise_count}}
-
-
-
回复 ({{act.reply_count}})
-
赞 ({{act.praise_count}})
-
已赞 ({{act.praise_count}})
@@ -196,23 +210,24 @@
-
- - +
+ +
-
+ +
- 点击展开 + 点击展开
- {{act.latest_update}} + {{act.latest_update}} + + {{act.reply_count}} +
+
{{act.praise_count}}
+
{{act.praise_count}}
-
-
回复 ({{act.reply_count}})
-
赞 ({{act.praise_count}})
-
已赞 ({{act.praise_count}})
-
diff --git a/public/assets/wechat/blog_detail.html b/public/assets/wechat/blog_detail.html index b3b97f047..c1133f955 100644 --- a/public/assets/wechat/blog_detail.html +++ b/public/assets/wechat/blog_detail.html @@ -14,9 +14,9 @@
-
回复 ({{blog.comment_count}})
-
已赞 ({{blog.praise_count}})
-
赞 ({{blog.praise_count}})
+
回复 ({{blog.comment_count}})
+
已赞 ({{blog.praise_count}})
+
赞 ({{blog.praise_count}})
diff --git a/public/assets/wechat/course_discussion.html b/public/assets/wechat/course_discussion.html index 9c70dfcfc..3f095ab62 100644 --- a/public/assets/wechat/course_discussion.html +++ b/public/assets/wechat/course_discussion.html @@ -20,9 +20,9 @@
-
回复 ({{discussion.replies_count}})
-
已赞 ({{discussion.praise_count}})
-
赞 ({{discussion.praise_count}})
+
回复 ({{discussion.replies_count}})
+
已赞 ({{discussion.praise_count}})
+
赞 ({{discussion.praise_count}})
diff --git a/public/assets/wechat/course_notice.html b/public/assets/wechat/course_notice.html index 750543e03..3b7965733 100644 --- a/public/assets/wechat/course_notice.html +++ b/public/assets/wechat/course_notice.html @@ -20,9 +20,9 @@
-
回复 ({{news.comments_count}})
-
已赞 ({{news.praise_count}})
-
赞 ({{news.praise_count}})
+
回复 ({{news.comments_count}})
+
已赞 ({{news.praise_count}})
+
赞 ({{news.praise_count}})
diff --git a/public/assets/wechat/homework_detail.html b/public/assets/wechat/homework_detail.html index 776ecb4ce..fec0c4cff 100644 --- a/public/assets/wechat/homework_detail.html +++ b/public/assets/wechat/homework_detail.html @@ -26,9 +26,9 @@
-
回复 ({{homework.whomework_journal_count}})
-
已赞 ({{homework.praise_count}})
-
赞 ({{homework.praise_count}})
+
回复 ({{homework.whomework_journal_count}})
+
已赞 ({{homework.praise_count}})
+
赞 ({{homework.praise_count}})
diff --git a/public/assets/wechat/issue_detail.html b/public/assets/wechat/issue_detail.html index 38f732e6f..f61d803dd 100644 --- a/public/assets/wechat/issue_detail.html +++ b/public/assets/wechat/issue_detail.html @@ -24,9 +24,9 @@
-
回复 ({{issue.journals_count}})
-
已赞 ({{issue.praise_count}})
-
赞 ({{issue.praise_count}})
+
回复 ({{issue.journals_count}})
+
已赞 ({{issue.praise_count}})
+
赞 ({{issue.praise_count}})
diff --git a/public/assets/wechat/jour_message_detail.html b/public/assets/wechat/jour_message_detail.html index 7ce14e4a8..0bc87214b 100644 --- a/public/assets/wechat/jour_message_detail.html +++ b/public/assets/wechat/jour_message_detail.html @@ -11,9 +11,9 @@
-
回复 ({{message.reply_count}})
-
已赞 ({{message.praise_count}})
-
赞 ({{message.praise_count}})
+
回复 ({{message.reply_count}})
+
已赞 ({{message.praise_count}})
+
赞 ({{message.praise_count}})
diff --git a/public/assets/wechat/project_discussion.html b/public/assets/wechat/project_discussion.html index 185d06784..890b47a73 100644 --- a/public/assets/wechat/project_discussion.html +++ b/public/assets/wechat/project_discussion.html @@ -20,9 +20,9 @@
-
回复 ({{discussion.replies_count}})
-
已赞 ({{discussion.praise_count}})
-
赞 ({{discussion.praise_count}})
+
回复 ({{discussion.replies_count}})
+
已赞 ({{discussion.praise_count}})
+
赞 ({{discussion.praise_count}})
diff --git a/public/images/wechat/wechat_icon.png b/public/images/wechat/wechat_icon.png new file mode 100755 index 000000000..cbc3eb565 Binary files /dev/null and b/public/images/wechat/wechat_icon.png differ diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css index 5162bcb16..3764ceb04 100644 --- a/public/stylesheets/application.css +++ b/public/stylesheets/application.css @@ -2847,29 +2847,4 @@ img.school_avatar { } .admin_message_warn{font-size: 12px;color: red;} -a.btn_message_free{ background:#15BCCF; display:block; text-align:center; color:#fff; padding:3px 0; width:60px; margin-bottom:10px;margin-left: 58px;} - -/*20160401袁可------------------ 查重结果样式*/ -.conbox{ width:1000px; margin:0 auto; border:3px solid #f0f0f0; background:#fff;} -.conbox-h2{ font-size:16px; padding:10px 0; padding-left:25px;} -.chabox{ width:1000px;} -.chabox ul li{ float:left; width:82px; text-align:center; display:block;white-space:nowrap; overflow:hidden; text-overflow:ellipsis;} -.chabox ul li.chabox-w-401{ width:151px; display:block;white-space:nowrap; overflow:hidden; text-overflow:ellipsis;} -.chabox ul li.chabox-r-line{ border-right:1px solid #D1D1D1;} -.chabox-top{ width:1000px; } -.chabox-top li{ font-size:14px; font-weight:bold; line-height:40px; height:40px; background:#E4E4E4; color:#000;} -.chabox-con li{font-size:12px; line-height:35px; height:35px; color:#888; border-bottom:1px solid #DFDFDF;} -a.cha-btn{ display:block; width:50px; height:20px; line-height:20px; margin:0 auto; border:1px solid #269ac9; color:#269ac9;-webkit-border-radius: 3px;border-radius:3px; margin-top:8px;} -a:hover.cha-btn{ background:#269ac9; color:#fff;} -.chabox-header li{ font-size:14px; font-weight:bold; line-height:40px; height:40px; border-top:1px solid #E4E4E4; border-right:1px solid #E4E4E4; color:#000;} -.chabox ul li.chabox-w-500{ width:499px;} -.chabox ul li.chabox-w-40{ width:39px; border-right:1px solid #D1D1D1;} -.chabox ul li.chabox-txt-left{ text-align:left;text-indent:1em; } - -.contrast-box{ width:1200px;box-shadow: 0 0 5px #6B6B6B; background:#fff; margin:0 auto; } -.contrast-con{ width:599px; border-right:1px solid #D1D1D1; float:left;} -.contrast-con h3{font-size:14px; font-weight:bold; line-height:40px; height:40px; background:#E4E4E4; color:#000; text-align:center; display:block;white-space:nowrap; overflow:hidden; text-overflow:ellipsis;} -.contrast-txt{ padding:10px;} -.showCodeC{ width:580px; float:left;} - -.resourceClose {background:url(images/resource_icon_list.png) 0px -40px no-repeat; width:20px; height:20px; display:inline-block; position: absolute; z-index: 1000;} \ No newline at end of file +a.btn_message_free{ background:#15BCCF; display:block; text-align:center; color:#fff; padding:3px 0; width:60px; margin-bottom:10px;margin-left: 58px;} \ No newline at end of file diff --git a/public/stylesheets/nyan.css b/public/stylesheets/nyan.css index dc380f6ef..e9fd46adf 100644 --- a/public/stylesheets/nyan.css +++ b/public/stylesheets/nyan.css @@ -1452,3 +1452,28 @@ ul.contest-notification-list li span{ color: #136b3b !important; font-weight:normal !important; } + +/*20160401袁可------------------ 查重结果样式*/ +.conbox{ width:1000px; margin:0 auto; border:3px solid #f0f0f0; background:#fff;} +.conbox-h2{ font-size:16px; padding:10px 0; padding-left:25px;} +.chabox{ width:1000px;} +.chabox ul li{ float:left; width:82px; text-align:center; display:block;white-space:nowrap; overflow:hidden; text-overflow:ellipsis;} +.chabox ul li.chabox-w-401{ width:151px; display:block;white-space:nowrap; overflow:hidden; text-overflow:ellipsis;} +.chabox ul li.chabox-r-line{ border-right:1px solid #D1D1D1;} +.chabox-top{ width:1000px; } +.chabox-top li{ font-size:14px; font-weight:bold; line-height:40px; height:40px; background:#E4E4E4; color:#000;} +.chabox-con li{font-size:12px; line-height:35px; height:35px; color:#888; border-bottom:1px solid #DFDFDF;} +a.cha-btn{ display:block; width:50px; height:20px; line-height:20px; margin:0 auto; border:1px solid #269ac9; color:#269ac9;-webkit-border-radius: 3px;border-radius:3px; margin-top:8px;} +a:hover.cha-btn{ background:#269ac9; color:#fff;} +.chabox-header li{ font-size:14px; font-weight:bold; line-height:40px; height:40px; border-top:1px solid #E4E4E4; border-right:1px solid #E4E4E4; color:#000;} +.chabox ul li.chabox-w-500{ width:499px;} +.chabox ul li.chabox-w-40{ width:39px; border-right:1px solid #D1D1D1;} +.chabox ul li.chabox-txt-left{ text-align:left;text-indent:1em; } + +.contrast-box{ width:1200px;box-shadow: 0 0 5px #6B6B6B; background:#fff; margin:0 auto; } +.contrast-con{ width:599px; border-right:1px solid #D1D1D1; float:left;} +.contrast-con h3{font-size:14px; font-weight:bold; line-height:40px; height:40px; background:#E4E4E4; color:#000; text-align:center; display:block;white-space:nowrap; overflow:hidden; text-overflow:ellipsis;} +.contrast-txt{ padding:10px;} +.showCodeC{ width:580px; float:left;} + +.resourceClose {background:url(images/resource_icon_list.png) 0px -40px no-repeat; width:20px; height:20px; display:inline-block; position: absolute; z-index: 1000;} diff --git a/public/stylesheets/weui/weixin.css b/public/stylesheets/weui/weixin.css index d79ad16ae..92aeec9cf 100644 --- a/public/stylesheets/weui/weixin.css +++ b/public/stylesheets/weui/weixin.css @@ -4,6 +4,7 @@ /*基本样式*/ body,table,input,textarea,select,button { font-family: "微软雅黑","宋体";} h1,h2,h3,h4,h5,p {padding:0px; margin:0px;} +.f12 {font-size:12px;} .f13 {font-size:13px;} .f15 {font-size:15px;} .fb {font-weight:bold;} @@ -23,11 +24,13 @@ h1,h2,h3,h4,h5,p {padding:0px; margin:0px;} .c-grey3 {color:#555555;} a {color:#707070;} a.c-grey {color:#707070;} +a.c-grey2 {color:#9a9a9a;} a:link,a:visited{text-decoration:none;} a:hover,a:active{cursor:pointer;} a.link-blue {color:#269ac9;} a.underline {text-decoration:underline;} .border-radius {border-radius:5px;} +.w36 {width:36px;} .max-width-60 {max-width:60px;} .max-width-130 {max-width:130px;} .hidden {overflow:hidden; white-space:nowrap; text-overflow:ellipsis;} @@ -38,36 +41,39 @@ a.underline {text-decoration:underline;} /*动态样式*/ .post-container {width:100%;} -.post-wrapper {width:98%; border:1px solid #e6e6e6; border-radius:3px; background-color:#ffffff; margin:15px auto;} +.post-wrapper {width:98%; border-radius:3px; box-shadow:0px 0px 8px rgba(146, 153, 169, 0.5); background-color:#ffffff; margin:10px auto;} .post-main {padding:10px; color:#9a9a9a;} -.post-avatar {width:45px; height:45px; margin-right:10px;} +.post-avatar {width:40px; height:40px; margin-right:5px;} .post-title {font-size:13px; text-align:left;} .post-detail-info {font-size:13px; text-align:left; color:#9a9a9a;} .fl {float:left;} .fr {float:right;} .cl {clear:both; overflow:hidden;} .post-content {width:100%; font-size:13px; line-height:18px; height:90px; overflow:hidden; word-break:break-all; word-wrap:break-word;} +.post-content img {max-width:100%;} .post-interactive {width:100%; height:35px; line-height:35px; vertical-align:middle; border-top:1px solid #e6e6e6; background-color:#f8f9fb;} -.post-interactive-column {width:50%; text-align:center; float:left; font-size:13px;} -.post-interactive-reply {width:50%; text-align:center; float:left; font-size:13px;} +.post-interactive-column, +.post-interactive-reply, .post-interactive-praise {width:50%; text-align:center; float:left; font-size:13px;} .more-wrap {width:100%;} .more-events {width:98%; font-size:13px; text-align:center; margin:0 auto; padding: 5px 0; border:1px solid #e6e6e6; border-radius:3px; background-color:#f8f9fb; } .border-bottom {border-bottom:1px solid #e6e6e6;} -.post-reply-wrap {width:100%; line-height:18px; background-color:#f8f9fb;} -.post-input-wrap {width:100%; line-height:18px; background-color:#f8f9fb;} +.post-reply-wrap, .post-input-wrap {width:100%; line-height:18px; background-color:#f8f9fb;} .post-reply-row {padding:10px; color:#9a9a9a;} .post-reply-avatar {width:45px; height:30px; text-align:center; margin-right:10px;} .post-reply-user {font-size:13px; text-align:left; margin-bottom:10px;} .post-reply-content {font-size:13px; text-align:left; word-break:break-all; word-wrap:break-word; overflow:hidden;} -.post-reply-date {font-size:13px;} -.post-reply-trigger {font-size:13px;} +.post-reply-content img {max-width:100%;} +.post-reply-date, .post-reply-trigger {font-size:13px;} .post-input-container {padding-right:2px;} .post-reply-input {width:100%; height:28px; line-height:28px; border:1px solid #e6e6e6; outline:none; padding:0; margin:0; border-radius:3px;} .post-reply-submit {font-size:13px; padding:3px 8px; color:#fff; background-color:#269ac9; outline:none; border:none; display:inline-block;} +.reply-icon {background:url(/images/wechat/wechat_icon.png) -100px 1px no-repeat; width:20px; height:18px; display:inline-block; vertical-align:middle;} +.praise-icon {background:url(/images/wechat/wechat_icon.png) -100px -38px no-repeat; width:20px; height:18px; display:inline-block; vertical-align:middle;} +.praised-icon {background:url(/images/wechat/wechat_icon.png) -100px -76px no-repeat; width:20px; height:18px; display:inline-block; vertical-align:middle;} /* loading 弹框*/ .loading-bg {position:fixed; width:100%; height:100%; left:0; top:0; z-index:99; background:rgba(0, 0, 0, 0.3); overflow:hidden;} .loading-box {position:absolute; top:50%; background:white; width:160px; height:72px; left:50%; margin-top:-36px; margin-left:-80px; text-align:center;} .loading-box img {margin-top: 12px; text-align: center;} -.loading-box span {display: block;} \ No newline at end of file +.loading-box span {display: block;} diff --git a/spec/factories/code_tests.rb b/spec/factories/code_tests.rb new file mode 100644 index 000000000..b8eed45fb --- /dev/null +++ b/spec/factories/code_tests.rb @@ -0,0 +1,10 @@ +FactoryGirl.define do + factory :code_test, :class => 'CodeTests' do + homework_id 1 +wait_time 1 +language 1 +status 1 +time_used "MyString" + end + +end diff --git a/spec/models/code_tests_spec.rb b/spec/models/code_tests_spec.rb new file mode 100644 index 000000000..4e0d71cf3 --- /dev/null +++ b/spec/models/code_tests_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe CodeTests, :type => :model do + pending "add some examples to (or delete) #{__FILE__}" +end