diff --git a/1234567 b/1234567
index dfd7e3ee3..459204fe5 100644
--- a/1234567
+++ b/1234567
@@ -1 +1 @@
-{"access_token":"7MBMEBoE6sSC15bIHZYAZSxj47yCKlbWEVjrkUgEJxPP3K083tbhc1RIWmxGu3WoB5dAXxK_yd4l1jrcvt6YrsTcOfFGRirOHVfzrpvhsQgxOoxcdc7YljfO_dnwUtWgFTAcAIALZG","expires_in":7200,"got_token_at":1460189856}
\ No newline at end of file
+{"access_token":"q51KZUeA6_-CCCH-Buy1mxFmRjcrCViHgk2mHHHqEDbjuA_pgCM1IyW1DASYvpzyB06xHiarujo3rz1Ucq3GRoXdgQ7hAoFCzkL_q3Z5vczLjwAjowAVwmulYE-cAij8ATUfADAWPQ","expires_in":7200,"got_token_at":1460601163}
\ No newline at end of file
diff --git a/app/api/mobile/entities/user.rb b/app/api/mobile/entities/user.rb
index 16048c61a..8c6a839b3 100644
--- a/app/api/mobile/entities/user.rb
+++ b/app/api/mobile/entities/user.rb
@@ -13,7 +13,7 @@ module Mobile
else
case f
when :img_url
- url_to_avatar(u)
+ "/images/#{url_to_avatar(u)}"
when :gender
u.nil? || u.user_extensions.nil? || u.user_extensions.gender.nil? ? 0 : u.user_extensions.gender
when :work_unit
@@ -24,6 +24,8 @@ module Mobile
u.nil? || u.user_extensions.nil? ? "" : u.user_extensions.brief_introduction
when :student_num
u.nil? || u.user_extensions.nil? ? "" : u.user_extensions.student_id
+ when :realname
+ u.nil? ? "" : get_user_realname(u)
end
end
end
@@ -37,7 +39,7 @@ module Mobile
#昵称
expose :nickname
#真名
- expose :realname
+ user_expose :realname
#性别
user_expose :gender
#我的二维码
diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb
index e1e99447d..a61a9f580 100644
--- a/app/controllers/admin_controller.rb
+++ b/app/controllers/admin_controller.rb
@@ -557,4 +557,14 @@ class AdminController < ApplicationController
end
end
+ #代码测试列表
+ def code_work_tests
+ @code_work_tests = StudentWorkTest.find_by_sql("select a.* ,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.created_at desc")
+ #@code_work_tests = StudentWorkTest.order('created_at desc')
+ @code_work_tests = paginateHelper @code_work_tests,30
+ @page = (params['page'] || 1).to_i - 1
+ respond_to do |format|
+ format.html
+ end
+ end
end
diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb
index eb6c7e184..a2d165492 100644
--- a/app/controllers/courses_controller.rb
+++ b/app/controllers/courses_controller.rb
@@ -883,6 +883,7 @@ class CoursesController < ApplicationController
@course_activities = course_activities.order('updated_at desc').limit(10).offset(@page * 10)
end
@type = params[:type]
+
respond_to do |format|
format.js
format.html{render :layout => 'base_courses'}
@@ -923,6 +924,66 @@ class CoursesController < ApplicationController
end
end
+ def search_homework_member homeworks,name
+ if name == ""
+ select_homework = homeworks
+ else
+ name = name.downcase
+ select_homework = homeworks.select{ |homework|
+ homework.user[:login].to_s.downcase.include?(name) || homework.user.user_extensions[:student_id].to_s.downcase.include?(name) || (homework.user[:lastname].to_s.downcase + homework.user[:firstname].to_s.downcase).include?(name)
+ }
+ end
+ select_homework
+ end
+
+ # 作业查重
+ def code_repeat
+ #代码查重新加的
+ @order,@b_sort,@name,@group = params[:order] || "score",params[:sort] || "desc",params[:name] || "",params[:group]
+
+ @is_teacher = User.current.allowed_to?(:as_teacher,@course) || User.current.admin?
+ @homework = HomeworkCommon.find params[:homework]
+ #order("#{@order} #{@b_sort}"
+ @student_works = search_homework_member @homework.student_works.select("student_works.*,IF(final_score is null,null,IF(final_score = 0, 0, final_score - absence_penalty - late_penalty)) as score").order("simi_value desc"),@name
+
+ @works_hash = {}
+
+ @student_works.each do |tmpwork|
+ @works_hash[tmpwork.id] = tmpwork
+ end
+
+ #respond_to do |format|
+ #format.html {render :layout => 'base_courses'}
+ #end
+ end
+
+ def show_comparecode
+
+ src_id = params[:src_id]
+ dst_id = params[:dst_id]
+
+ src_work = StudentWork.where("id =?", src_id).first
+
+ @homework = HomeworkCommon.find params[:homework_id]
+
+ @src_code = src_work.description
+ src_user = User.where("id =?", src_work.user_id).first
+
+ @src_username = src_user.try(:realname) != " " ? src_user.lastname + src_user.firstname : src_user.try(:login)
+
+ #descriotion user name
+
+ dst_work = StudentWork.where("id =?", dst_id).first
+ @dst_code = dst_work.description
+ dst_user = User.where("id =?", dst_work.user_id).first
+
+ @dst_username = dst_user.try(:realname) != " " ? dst_user.lastname + dst_user.firstname : dst_user.try(:login)
+
+ respond_to do |format|
+ format.js
+ end
+ end
+
#根据已有课程复制课程
#param id:已有课程ID
def copy_course
@@ -1077,7 +1138,7 @@ class CoursesController < ApplicationController
sql_select = ""
if groupid == 0
sql_select = "SELECT members.*,(
- SELECT SUM(IF(student_works.final_score IS NULL,NULL,IF(student_works.final_score =0,0,student_works.final_score - student_works.absence_penalty - student_works.late_penalty)))
+ SELECT SUM(IF(student_works.final_score IS NULL,NULL,IF(student_works.final_score =0,0,IF((student_works.final_score - student_works.absence_penalty - student_works.late_penalty) < 0 , 0, student_works.final_score - student_works.absence_penalty - student_works.late_penalty))))
FROM student_works,homework_commons
WHERE student_works.homework_common_id = homework_commons.id
AND homework_commons.course_id = #{@course.id}
@@ -1089,7 +1150,7 @@ class CoursesController < ApplicationController
WHERE members.course_id = #{@course.id} ORDER BY score #{score_sort_by}"
else
sql_select = "SELECT members.*,(
- SELECT SUM(IF(student_works.final_score IS NULL,NULL,IF(student_works.final_score =0,0,student_works.final_score - student_works.absence_penalty - student_works.late_penalty)))
+ SELECT SUM(IF(student_works.final_score IS NULL,NULL,IF(student_works.final_score =0,0,IF((student_works.final_score - student_works.absence_penalty - student_works.late_penalty) < 0 , 0, student_works.final_score - student_works.absence_penalty - student_works.late_penalty))))
FROM student_works,homework_commons
WHERE student_works.homework_common_id = homework_commons.id
AND homework_commons.course_id = #{@course.id}
diff --git a/app/controllers/homework_common_controller.rb b/app/controllers/homework_common_controller.rb
index 091e2b86b..e52b8434b 100644
--- a/app/controllers/homework_common_controller.rb
+++ b/app/controllers/homework_common_controller.rb
@@ -17,9 +17,11 @@ class HomeworkCommonController < ApplicationController
@page = params[:page] ? params[:page].to_i + 1 : 0
@is_teacher = User.current.logged? && (User.current.admin? || User.current.allowed_to?(:as_teacher,@course))
if @is_teacher
- @homeworks = @course.homework_commons.order("created_at desc").limit(10).offset(@page * 10)
+ @homeworks = @course.homework_commons.order("updated_at desc").limit(10).offset(@page * 10)
+ @homework_commons = @course.homework_commons.order("created_at desc").limit(10).offset(@page * 10)
else
- @homeworks = @course.homework_commons.where("publish_time <= '#{Date.today}'").order("created_at desc").limit(10).offset(@page * 10)
+ @homeworks = @course.homework_commons.where("publish_time <= '#{Date.today}'").order("updated_at desc").limit(10).offset(@page * 10)
+ @homework_commons = @course.homework_commons.where("publish_time <= '#{Date.today}'").order("created_at desc").limit(10).offset(@page * 10)
end
@is_student = User.current.logged? && (User.current.admin? || (User.current.member_of_course?(@course) && !@is_teacher))
@is_new = params[:is_new]
diff --git a/app/controllers/organizations_controller.rb b/app/controllers/organizations_controller.rb
index a24bcd9a4..e1d623d5a 100644
--- a/app/controllers/organizations_controller.rb
+++ b/app/controllers/organizations_controller.rb
@@ -352,8 +352,13 @@ class OrganizationsController < ApplicationController
if !params[:name].nil?
condition = "%#{params[:name].strip}%".gsub(" ","")
end
- sql = "select courses.* from courses inner join members on courses.id = members.course_id where members.user_id = #{User.current.id} and courses.is_public = 1 and courses.name like '#{condition}'"+
- "and courses.id not in (select distinct org_courses.course_id from org_courses where org_courses.organization_id = #{@organization.id}) and courses.is_delete=0"
+ if User.current.admin?
+ sql = "select courses.* from courses where courses.is_public = 1 and courses.name like '#{condition}'"+
+ "and courses.id not in (select distinct org_courses.course_id from org_courses where org_courses.organization_id = #{@organization.id}) and courses.is_delete=0"
+ else
+ sql = "select courses.* from courses inner join members on courses.id = members.course_id where members.user_id = #{User.current.id} and courses.is_public = 1 and courses.name like '#{condition}'"+
+ "and courses.id not in (select distinct org_courses.course_id from org_courses where org_courses.organization_id = #{@organization.id}) and courses.is_delete=0"
+ end
#user_courses = Course.find_by_sql(sql)
@courses = Course.find_by_sql(sql)
# @added_course_ids = @organization.courses.map(&:id)
@@ -396,8 +401,13 @@ class OrganizationsController < ApplicationController
if !params[:name].nil?
condition = "%#{params[:name].strip}%".gsub(" ","")
end
- sql = "select projects.* from projects inner join members on projects.id = members.project_id where members.user_id = #{User.current.id} and projects.status != 9 and projects.is_public = 1 and projects.name like '#{condition}'" +
+ if User.current.admin?
+ sql = "select projects.* from projects where projects.status != 9 and projects.is_public = 1 and projects.name like '#{condition}'" +
" and projects.id not in (select org_projects.project_id from org_projects where organization_id = #{@organization.id}) and status=1"
+ else
+ sql = "select projects.* from projects inner join members on projects.id = members.project_id where members.user_id = #{User.current.id} and projects.status != 9 and projects.is_public = 1 and projects.name like '#{condition}'" +
+ " and projects.id not in (select org_projects.project_id from org_projects where organization_id = #{@organization.id}) and status=1"
+ end
#user_projects = Course.find_by_sql(sql)
@projects = Course.find_by_sql(sql)
# @added_course_ids = @organization.projects.map(&:id)
diff --git a/app/controllers/student_work_controller.rb b/app/controllers/student_work_controller.rb
index 8c69dfa21..25dfd4876 100644
--- a/app/controllers/student_work_controller.rb
+++ b/app/controllers/student_work_controller.rb
@@ -5,7 +5,7 @@ class StudentWorkController < ApplicationController
include ApplicationHelper
require 'bigdecimal'
require "base64"
- before_filter :find_homework, :only => [:new, :index, :create, :student_work_absence_penalty, :absence_penalty_list, :evaluation_list, :program_test,:program_test_ex,:set_score_rule,:forbidden_anonymous_comment,:delete_work,:new_student_work_project,:student_work_project,:cancel_relate_project,:search_course_students]
+ before_filter :find_homework, :only => [:new, :index, :create, :student_work_absence_penalty, :absence_penalty_list, :evaluation_list, :program_test,:program_test_ex,:code_repeattest,:set_score_rule,:forbidden_anonymous_comment,:delete_work,:new_student_work_project,:student_work_project,:cancel_relate_project,:search_course_students]
before_filter :find_work, :only => [:edit, :update, :show, :destroy, :add_score, :praise_student_work,:retry_work,:revise_attachment]
before_filter :member_of_course, :only => [:new, :create, :show, :add_score, :praise_student_work]
before_filter :author_of_work, :only => [:edit, :update, :destroy]
@@ -81,6 +81,8 @@ class StudentWorkController < ApplicationController
#根据传入的tIndex确定是第几次测试
#之后如果觉得很卡 可以改成将结果传回JS再以参数形式传回来
def program_test_ex
+ tStarttime = Time.now
+
is_test = params[:is_test] == 'true'
resultObj = {status: 0, results: [], error_msg: '', time: Time.now.strftime('%Y-%m-%d %T'),tseq:1,tcount:1,testid:1} #保存每测试一次返回的结果
@@ -134,6 +136,16 @@ 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
+ end
+
+ if result["results"][0]["status"].to_i == 2
+ result["status"] = 2
+ end
status = result["status"]
if index == 1
student_work_test = student_work.student_work_tests.build(status: status,
@@ -162,6 +174,11 @@ 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} 毫秒"
+
#渲染返回结果
render :json => resultObj
end
@@ -169,6 +186,106 @@ class StudentWorkController < ApplicationController
end
end
+ #找出该作业的所有提交作业
+ def find_all_student_work_by_homeid()
+ all_studentwork = StudentWork.where("homework_common_id =?", @homework.id)
+
+ all_studentwork
+ end
+
+ def request_code_repeattest(src)
+ url = "#{Redmine::Configuration['jplag_server']}api/realtime_test.json"
+
+ factor = []
+ src.each do |test|
+ factor << {work_id: test.id, des: test.description,created_at:test.created_at.to_i}
+ end
+
+ solutions = {
+ homeid:@homework.id,
+ language:@homework.homework_detail_programing.language,
+ factor: factor
+ }
+ uri = URI(url)
+ body = solutions.to_json
+
+ logger.debug "send body"
+ logger.debug body
+
+ 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
+
+ #代码查重 status: 0完成 -2不需要查重 -1查重失败不支持该语言
+ def code_repeattest
+ tStarttime = Time.now
+ logger.debug "code_repeattest start is #{tStarttime}}"
+ resultObj = {status: -2}
+
+ @homework = HomeworkCommon.find params[:homework]
+
+ all_studentwork = find_all_student_work_by_homeid()
+
+ if all_studentwork == nil
+ resultObj[:status] = -2
+ elsif all_studentwork.count <= 1
+ resultObj[:status] = -2
+ else
+
+ #@homework.homework_detail_programing.language、id、description
+ logger.debug "time1 is #{Time.now.usec} "
+ result = request_code_repeattest(all_studentwork)
+ logger.debug "time2 is #{Time.now.usec} "
+
+ resultObj[:status] = result['status'].to_i
+ # resultObj[:results] = result['results']
+
+ #Time.now, simi_id = simiworkid , simi_value = simivalue
+ if resultObj[:status] == 0
+ @homework.simi_time = Time.now
+ resultObj[:comparetime] = @homework.simi_time
+ @homework.update_column('simi_time', @homework.simi_time)
+
+ logger.debug "time3 is #{Time.now.usec} "
+ result['results'].each do |key,value|
+ if value['simiworkid'].to_i > 0
+ @student_work = StudentWork.where("id =?", key.to_i).first
+ @student_work.update_column('simi_id', value['simiworkid'].to_i)
+ @student_work.update_column('simi_value', value['simivalue'].to_i)
+ end
+ # sqlstr = "update student_works set simi_id=#{value['simiworkid']},simi_value=#{value['simivalue']} where id=#{key.to_i} "
+ # dbh.execute(sqlstr)
+
+ end
+ logger.debug "time4 is #{Time.now.usec} "
+ end
+ end
+ tEndtime = Time.now
+ logger.debug "code_repeattest end is #{tEndtime}}"
+ tUsedtime = (tEndtime.to_i-tStarttime.to_i)*1000000+(tEndtime.usec - tStarttime.usec)
+ logger.debug "code_repeattest userd utime is #{tUsedtime}"
+ 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")
+ else
+ resultObj[:comparetime] = @homework.simi_time
+ end
+
+ render :json => resultObj
+ end
def index
# 作业消息状态更新
@@ -351,6 +468,7 @@ class StudentWorkController < ApplicationController
render_403
return
end
+
@student_work_count = (search_homework_member @homework.student_works.select("student_works.*,IF(final_score is null,null,IF(final_score = 0, 0, final_score - absence_penalty - late_penalty)) as score").order("#{@order} #{@b_sort}"),@name).count
end
@@ -1152,6 +1270,7 @@ class StudentWorkController < ApplicationController
request["Content-Type"] = "application/json"
client.request(request)
end
+
JSON.parse(res.body)
end
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index ff85e08eb..a15f37274 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -1122,13 +1122,13 @@ class UsersController < ApplicationController
#显示更多用户课程
def user_courses4show
@page = params[:page].to_i + 1
- @courses = @user.courses.visible.where("is_delete =?", 0).select("courses.*,(SELECT MAX(created_at) FROM `course_activities` WHERE course_activities.course_id = courses.id) AS a").order("a desc").limit(5).offset(@page * 5)
+ @courses = @user.courses.visible.where("is_delete =?", 0).select("courses.*,(SELECT MAX(updated_at) FROM `course_activities` WHERE course_activities.course_id = courses.id) AS a").order("a desc").limit(5).offset(@page * 5)
end
#显示更多用户项目
def user_projects4show
@page = params[:page].to_i + 1
- @projects = @user.projects.visible.select("projects.*,(SELECT MAX(created_at) FROM `forge_activities` WHERE forge_activities.project_id = projects.id) AS a").order("a desc").limit(5).offset(@page * 5)
+ @projects = @user.projects.visible.select("projects.*,(SELECT MAX(updated_at) FROM `forge_activities` WHERE forge_activities.project_id = projects.id) AS a").order("a desc").limit(5).offset(@page * 5)
end
def user_course_activities
diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb
index fdfd19f64..ba00dfbc3 100644
--- a/app/controllers/wechats_controller.rb
+++ b/app/controllers/wechats_controller.rb
@@ -143,7 +143,7 @@ class WechatsController < ActionController::Base
url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=#{Wechat.config.appid}&redirect_uri=#{login_wechat_url}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect"
article.item title: "#{n[:title]}",
description: n[:content],
- pic_url: 'http://wechat.trustie.net/images/trustie_logo2.png',
+ pic_url: 'https://www.trustie.net/images/trustie_logo2.png',
url: url
end
end
diff --git a/app/helpers/api_helper.rb b/app/helpers/api_helper.rb
index bd7ba8751..49640d889 100644
--- a/app/helpers/api_helper.rb
+++ b/app/helpers/api_helper.rb
@@ -27,6 +27,10 @@ module ApiHelper
location
end
+ def get_user_realname user
+ name = user.lastname + user.firstname
+ name.empty? || name.nil? || name == " " ? user.login : name
+ end
def get_assigned_homeworks(homeworks, n, index)
homeworks += homeworks
diff --git a/app/helpers/courses_helper.rb b/app/helpers/courses_helper.rb
index 64531a6f4..3a6b347b3 100644
--- a/app/helpers/courses_helper.rb
+++ b/app/helpers/courses_helper.rb
@@ -850,7 +850,7 @@ module CoursesHelper
# 学生按作业总分排序,取前8个
def hero_homework_score(course, score_sort_by)
sql_select = "SELECT members.*,(
- SELECT SUM(IF(student_works.final_score is null,null,IF(student_works.final_score = 0, 0, student_works.final_score - student_works.absence_penalty - student_works.late_penalty)))
+ SELECT SUM(IF(student_works.final_score IS NULL,NULL,IF(student_works.final_score =0,0,IF((student_works.final_score - student_works.absence_penalty - student_works.late_penalty) < 0 , 0, student_works.final_score - student_works.absence_penalty - student_works.late_penalty))))
FROM student_works,homework_commons
WHERE student_works.homework_common_id = homework_commons.id
AND homework_commons.course_id = #{course.id}
diff --git a/app/models/blog_comment.rb b/app/models/blog_comment.rb
index 5187839e8..62451591f 100644
--- a/app/models/blog_comment.rb
+++ b/app/models/blog_comment.rb
@@ -78,48 +78,13 @@ class BlogComment < ActiveRecord::Base
#博客回复微信模板消息
def blog_wechat_message
- # 发布博客
- unless self.parent_id.nil?
- uw = UserWechat.where(user_id: self.parent.author_id).first
- #unless uw.nil? && self.parent.author_id != User.current.id
- unless uw.nil?
- data = {
- touser:uw.openid,
- template_id:"A_3f5v90-zK73V9Kijm-paDkl9S-NuM8Cf-1UJi92_c",
- url:"http://www.trustie.net/",
- topcolor:"#FF0000",
- data:{
- first: {
- value:"您的博客有新回复了",
- color:"#173177"
- },
- keyword1:{
- value:self.author.try(:realname),
- color:"#173177"
- },
- keyword2:{
- value:format_time(self.created_at),
- color:"#173177"
- },
- keyword3:{
- value:self.content.html_safe,
- color:"#173177"
- },
- remark:{
- value:"具体内容请点击详情查看网站",
- color:"#173177"
- }
- }
- }
- logger.info "start send template message: #{data}"
- begin
- req = Wechat.api.template_message_send Wechat::Message.to(uw.openid).template(data)
- rescue Exception => e
- logger.error "[blog_comment] ===> #{e}"
- end
- logger.info "send over. #{req}"
+ ws = WechatService.new
+ if self.parent_id.nil?
+ self.author.watcher_users.each do |watcher|
+ ws.message_update_template watcher.id, "#{l(:label_new_blog_template)}", self.author.try(:realname) + " 发表了博客:" + self.title.html_safe, format_time(self.created_at)
end
+ else
+ ws.comment_template self.parent.author_id, "#{l(:label_blog_comment_template)}", self.author.try(:realname), format_time(self.created_at), self.content.html_safe
end
-
end
end
diff --git a/app/models/comment.rb b/app/models/comment.rb
index b87203a50..9a752129b 100644
--- a/app/models/comment.rb
+++ b/app/models/comment.rb
@@ -16,6 +16,8 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class Comment < ActiveRecord::Base
+ require 'net/http'
+ require 'json'
include Redmine::SafeAttributes
include ApplicationHelper
has_many_kindeditor_assets :assets, :dependent => :destroy
@@ -39,13 +41,16 @@ class Comment < ActiveRecord::Base
after_destroy :down_course_score
def act_as_system_message
+ ws = WechatService.new
if self.commented.course
if self.author_id != self.commented.author_id
self.course_messages << CourseMessage.new(:user_id => self.commented.author_id, :course_id => self.commented.course.id, :viewed => false)
+ ws.comment_template self.commented.author_id, "#{l(:label_notice_comment_template)}", self.author.try(:realname), format_time(self.created_on), self.comments.html_safe
end
else # 项目相关
if self.author_id != self.commented.author_id
self.forge_messages << ForgeMessage.new(:user_id => self.commented.author_id, :project_id => self.commented.project.id, :viewed => false)
+ ws.comment_template self.commented.author_id, "#{l(:label_news_comment_template)}", self.author.try(:realname), format_time(self.created_on), self.comments.html_safe
end
end
end
diff --git a/app/models/homework_common.rb b/app/models/homework_common.rb
index ab687c869..54f13e57e 100644
--- a/app/models/homework_common.rb
+++ b/app/models/homework_common.rb
@@ -2,7 +2,7 @@
#老师布置的作业表
#homework_type: 0:普通作业;1:匿评作业;2:编程作业
class HomeworkCommon < ActiveRecord::Base
- # attr_accessible :name, :user_id, :description, :publish_time, :end_time, :homework_type, :late_penalty, :course_id
+ # attr_accessible :name, :user_id, :description, :publish_time, :end_time, :homework_type, :late_penalty, :course_id,:simi_time
require 'net/http'
require 'json'
include Redmine::SafeAttributes
@@ -59,6 +59,8 @@ class HomeworkCommon < ActiveRecord::Base
self.course.members.each do |m|
# if m.user_id != self.user_id
self.course_messages << CourseMessage.new(:user_id => m.user_id, :course_id => self.course_id, :viewed => false)
+ ws = WechatService.new
+ ws.homework_template(m.user_id, "#{l(:label_new_homework_template)}", self.course.name, self.name.html_safe, self.end_time.to_s + " 23:59:59")
# end
end
end
@@ -104,44 +106,8 @@ class HomeworkCommon < ActiveRecord::Base
#修改作业后发送微信模板消息
def wechat_message
self.course.members.each do |member|
- uw = UserWechat.where("user_id=?", member.user_id).first
- unless uw.nil?
- data = {
- touser:uw.openid,
- template_id:"3e5Dj2GIx8MOcMyRKpTUEQnM7Tg0ASSCNc01NS9HCGI",
- url:"http://www.trustie.net/",
- topcolor:"#FF0000",
- data:{
- first: {
- value:"您的作业已被修改",
- color:"#173177"
- },
- keyword1:{
- value:self.course.name,
- color:"#173177"
- },
- keyword2:{
- value:self.name,
- color:"#173177"
- },
- keyword3:{
- value:self.end_time.to_s + "23:59:59",
- color:"#173177"
- },
- remark:{
- value:"具体内容请点击详情查看网站",
- color:"#173177"
- }
- }
- }
- logger.info "start send template message: #{data}"
- begin
- req = Wechat.api.template_message_send Wechat::Message.to(uw.openid).template(data)
- rescue Exception => e
- logger.error "[homework_common] ===> #{e}"
- end
- logger.info "send over. #{req}"
- end
+ ws = WechatService.new
+ ws.homework_template(member.user_id, "#{l(:label_update_homework_template)}", self.course.name, self.name.html_safe, self.end_time.to_s + " 23:59:59")
end
end
diff --git a/app/models/issue.rb b/app/models/issue.rb
index 0d72407ba..5124dd54b 100644
--- a/app/models/issue.rb
+++ b/app/models/issue.rb
@@ -1,3 +1,4 @@
+#encoding: utf-8
# Redmine - project management software
# Copyright (C) 2006-2013 Jean-Philippe Lang
#
@@ -16,6 +17,8 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class Issue < ActiveRecord::Base
+ require 'net/http'
+ require 'json'
include Redmine::SafeAttributes
include Redmine::Utils::DateCalculation
include UserScoreHelper
@@ -156,6 +159,8 @@ class Issue < ActiveRecord::Base
# 指派给自己的缺陷不提示消息
unless self.author_id == self.assigned_to_id
self.forge_messages << ForgeMessage.new(:user_id => self.assigned_to_id, :project_id => self.project_id, :viewed => false)
+ ws = WechatService.new
+ ws.message_update_template self.assigned_to_id, "#{l(:label_new_issue_template)}", self.author.try(:realname) + " 给您指派了缺陷:" + self.subject.html_safe, format_time(self.created_on)
end
if self.tracker_id == 5
self.project.members.each do |m|
diff --git a/app/models/journal.rb b/app/models/journal.rb
index e56c8b043..80d585b06 100644
--- a/app/models/journal.rb
+++ b/app/models/journal.rb
@@ -239,44 +239,7 @@ class Journal < ActiveRecord::Base
#缺陷回复微信模板消息
def issue_wechat_message
- uw = UserWechat.where(user_id: self.issue.author_id).first
- #unless uw.nil? && self.issue.author_id != User.current.id
- unless uw.nil?
- data = {
- touser:uw.openid,
- template_id:"A_3f5v90-zK73V9Kijm-paDkl9S-NuM8Cf-1UJi92_c",
- url:"http://www.trustie.net/",
- topcolor:"#FF0000",
- data:{
- first: {
- value:"您的缺陷有新回复了",
- color:"#173177"
- },
- keyword1:{
- value:self.user.try(:realname),
- color:"#173177"
- },
- keyword2:{
- value:format_time(self.created_on),
- color:"#173177"
- },
- keyword3:{
- value:self.notes.html_safe,
- color:"#173177"
- },
- remark:{
- value:"具体内容请点击详情查看网站",
- color:"#173177"
- }
- }
- }
- logger.info "start send template message: #{data}"
- begin
- req = Wechat.api.template_message_send Wechat::Message.to(uw.openid).template(data)
- rescue Exception => e
- logger.error "[journal] ===> #{e}"
- end
- logger.info "send over. #{req}"
- end
+ ws = WechatService.new
+ ws.comment_template self.issue.author_id, "#{l(:label_issue_comment_template)}", self.user.try(:realname), format_time(self.created_on), self.notes.html_safe
end
end
diff --git a/app/models/journals_for_message.rb b/app/models/journals_for_message.rb
index f207db8a8..799af8f74 100644
--- a/app/models/journals_for_message.rb
+++ b/app/models/journals_for_message.rb
@@ -256,7 +256,8 @@ class JournalsForMessage < ActiveRecord::Base
end
end
if self.jour_type == 'HomeworkCommon'
- journal_wechat_message '您的作业有新回复了',self.jour.user_id
+ ws = WechatService.new
+ ws.comment_template self.jour.user_id, "#{l(:label_homework_comment_template)}", self.user.try(:realname), format_time(self.created_on), self.notes.html_safe
end
end
@@ -264,12 +265,13 @@ class JournalsForMessage < ActiveRecord::Base
# 用户留言消息通知
def act_as_user_feedback_message
# 主留言
+ ws = WechatService.new
if self.jour_type == 'Principal'
receivers = []
if self.reply_id == 0
if self.user_id != self.jour_id # 过滤自己给自己的留言消息
receivers << self.jour
- journal_wechat_message "您有新留言了",self.jour_id
+ ws.message_update_template self.jour_id, "#{l(:label_new_journals_template)}", self.notes.html_safe, format_time(self.created_on)
end
else # 留言回复
reply_to = User.find(self.reply_id)
@@ -279,12 +281,11 @@ class JournalsForMessage < ActiveRecord::Base
if self.user_id != self.parent.jour_id && self.reply_id != self.parent.jour_id # 给东家发信息,如果回复的对象是东家则不发
receivers << self.parent.jour
end
- journal_wechat_message "您的留言有新回复了",self.reply_id
+ ws.comment_template self.reply_id, "#{l(:label_journals_comment_template)}", self.user.try(:realname), format_time(self.created_on), self.notes.html_safe
end
receivers.each do |r|
self.user_feedback_messages << UserFeedbackMessage.new(:user_id => r.id, :journals_for_message_id => self.id, :journals_for_message_type => "Principal", :viewed => false)
end
-
end
end
@@ -305,48 +306,4 @@ class JournalsForMessage < ActiveRecord::Base
down_course_score_num(self.jour.course_id, self.user_id, "HomeworkCommon")
end
end
-
- #微信模板消息
- def journal_wechat_message type, user_id
- uw = UserWechat.where(user_id: user_id).first
- #unless uw.nil? && self.reply_id != User.current.id
- unless uw.nil?
- data = {
- touser:uw.openid,
- template_id:"A_3f5v90-zK73V9Kijm-paDkl9S-NuM8Cf-1UJi92_c",
- url:"http://www.trustie.net/",
- topcolor:"#FF0000",
- data:{
- first: {
- value:type,
- color:"#173177"
- },
- keyword1:{
- value:self.user.try(:realname),
- color:"#173177"
- },
- keyword2:{
- value:format_time(self.created_on),
- color:"#173177"
- },
- keyword3:{
- value:self.notes.html_safe,
- color:"#173177"
- },
- remark:{
- value:"具体内容请点击详情查看网站",
- color:"#173177"
- }
- }
- }
- logger.info "start send template message: #{data}"
- begin
- req = Wechat.api.template_message_send Wechat::Message.to(uw.openid).template(data)
- rescue Exception => e
- logger.error "[journal_for_message] ===> #{e}"
- end
- logger.info "send over. #{req}"
- end
- end
-
end
diff --git a/app/models/mailer.rb b/app/models/mailer.rb
index 4b7180857..664e5cfac 100644
--- a/app/models/mailer.rb
+++ b/app/models/mailer.rb
@@ -17,8 +17,6 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class Mailer < ActionMailer::Base
- require 'net/http'
- require 'json'
layout 'mailer'
helper :application
helper :issues
@@ -642,9 +640,6 @@ class Mailer < ActionMailer::Base
mail :to => recipients,
:subject => "[ #{l(:label_user_homework)} : #{homework_common.name} #{l(:label_memo_create_succ)}]",
:filter => true
- @homework_common.course.members.each do |member|
- mail_wechat_message member.user_id, "3e5Dj2GIx8MOcMyRKpTUEQnM7Tg0ASSCNc01NS9HCGI", "您的课程有新作业了", @homework_common.course.name, @homework_common.name, @homework_common.end_time.to_s + " 23:59:59"
- end
end
# Builds a Mail::Message object used to email recipients of a news' project when a news item is added.
@@ -710,8 +705,6 @@ class Mailer < ActionMailer::Base
mail :to => recipients,
:subject => "[#{news.course.name}] #{l(:label_news)}: #{news.title}",
:filter => true
-
- mail_wechat_message news.author_id, "A_3f5v90-zK73V9Kijm-paDkl9S-NuM8Cf-1UJi92_c", "您的课程通知有新回复了", @author.try(:realname), format_time(comment.created_on), comment.comments.html_safe
end
end
@@ -736,14 +729,7 @@ class Mailer < ActionMailer::Base
:cc => cc,
:subject => "[#{message.board.project.name} - #{message.board.name} - msg#{message.root.id}] #{message.subject}",
:filter => true
- if message.parent_id == nil
- message.project.members.each do |member|
- mail_wechat_message member.user_id, "oKzFCdk7bsIHnGbscA__N8LPQrBkUShvpjV3-kuwWDQ", "项目讨论区有新帖子发布了", message.subject, @author.try(:realname), format_time(message.created_on)
- end
- else
- mail_wechat_message message.parent.author_id, "A_3f5v90-zK73V9Kijm-paDkl9S-NuM8Cf-1UJi92_c", "您的帖子有新回复了", @author.try(:realname), format_time(message.created_on), message.content.html_safe
- end
- elsif message.course
+ elsif message.course
redmine_headers 'Course' => message.course.id,
'Topic-Id' => (message.parent_id || message.id)
@author = message.author
@@ -758,14 +744,7 @@ class Mailer < ActionMailer::Base
:cc => cc,
:subject => "[#{message.board.course.name} - #{message.board.name} - msg#{message.root.id}] #{message.subject}",
:filter => true
- if message.parent_id == nil
- message.course.members.each do |member|
- mail_wechat_message member.user_id, "oKzFCdk7bsIHnGbscA__N8LPQrBkUShvpjV3-kuwWDQ", "课程问答区有新帖子发布了", message.subject, @author.try(:realname), format_time(message.created_on)
- end
- else
- mail_wechat_message message.parent.author_id, "A_3f5v90-zK73V9Kijm-paDkl9S-NuM8Cf-1UJi92_c", "您的帖子有新回复了", @author.try(:realname), format_time(message.created_on), message.content.html_safe
end
- end
end
# Builds a Mail::Message object used to email the recipients of a project of the specified wiki content was added.
@@ -1119,48 +1098,4 @@ class Mailer < ActionMailer::Base
1.upto(len) { |i| newpass << chars[rand(chars.size-1)] }
return newpass
end
-
- #微信模板消息
- def mail_wechat_message user_id, template_id, first, key1, key2, key3, remark="具体内容请点击详情查看网站"
- uw = UserWechat.where(user_id: user_id).first
- logger.info "mail_wechat_message #{user_id} #{uw}"
- unless uw.nil?
- data = {
- touser:uw.openid,
- template_id:template_id,
- url:"http://www.trustie.net/",
- topcolor:"#FF0000",
- data:{
- first: {
- value:first,
- color:"#173177"
- },
- keyword1:{
- value:key1,
- color:"#173177"
- },
- keyword2:{
- value:key2,
- color:"#173177"
- },
- keyword3:{
- value:key3,
- color:"#173177"
- },
- remark:{
- value:remark,
- color:"#173177"
- }
- }
- }
-
- logger.info "start send template message: #{data}"
- begin
- req = Wechat.api.template_message_send Wechat::Message.to(uw.openid).template(data)
- rescue Exception => e
- logger.error "[mailer] ===> #{e}"
- end
- logger.info "send over. #{req}"
- end
- end
end
diff --git a/app/models/member.rb b/app/models/member.rb
index 9eac21fa7..e19e1f0df 100644
--- a/app/models/member.rb
+++ b/app/models/member.rb
@@ -158,7 +158,7 @@ class Member < ActiveRecord::Base
end
def student_work_score_sum
- sql_select = "SELECT (SUM(IF(student_works.final_score IS NULL,NULL,IF(student_works.final_score =0,0,student_works.final_score - student_works.absence_penalty - student_works.late_penalty)))) as score
+ sql_select = "SELECT (SUM(IF(student_works.final_score IS NULL,NULL,IF(student_works.final_score =0,0,IF((student_works.final_score - student_works.absence_penalty - student_works.late_penalty) < 0 , 0, student_works.final_score - student_works.absence_penalty - student_works.late_penalty))))) AS score
FROM student_works,homework_commons
WHERE student_works.homework_common_id = homework_commons.id
AND homework_commons.course_id = #{self.course_id}
diff --git a/app/models/message.rb b/app/models/message.rb
index d697db236..2f4637042 100644
--- a/app/models/message.rb
+++ b/app/models/message.rb
@@ -1,3 +1,4 @@
+#encoding: utf-8
# Redmine - project management software
# Copyright (C) 2006-2013 Jean-Philippe Lang
#
@@ -16,6 +17,8 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class Message < ActiveRecord::Base
+ require 'net/http'
+ require 'json'
include Redmine::SafeAttributes
include UserScoreHelper
include ApplicationHelper
@@ -257,17 +260,20 @@ class Message < ActiveRecord::Base
# 主贴项目成员都能收到
# 回帖:帖子的发布人收到
def act_as_system_message
+ ws = WechatService.new
if self.course
if self.parent_id.nil? # 主贴
self.course.members.each do |m|
if self.author.allowed_to?(:as_teacher, self.course) && m.user_id != self.author_id # 老师 自己的帖子不给自己发送消息
self.course_messages << CourseMessage.new(:user_id => m.user_id, :course_id => self.board.course_id, :viewed => false)
+ ws.topic_publish_template m.user_id, "#{l(:label_course_topic_template)}", self.subject, self.author.try(:realname), format_time(self.created_on)
end
end
else # 回帖
self.course.members.each do |m|
if m.user_id == Message.find(self.parent_id).author_id && m.user_id != self.author_id # 只针对主贴回复,回复自己的帖子不发消息
self.course_messages << CourseMessage.new(:user_id => m.user_id, :course_id => self.board.course_id, :viewed => false)
+ ws.comment_template m.user_id, "#{l(:label_topic_comment_template)}", self.author.try(:realname), format_time(self.created_on), self.content.html_safe
end
end
end
@@ -276,12 +282,14 @@ class Message < ActiveRecord::Base
self.project.members.each do |m|
if m.user_id != self.author_id
self.forge_messages << ForgeMessage.new(:user_id => m.user_id, :project_id => self.board.project_id, :viewed => false)
+ ws.topic_publish_template m.user_id, "#{l(:label_project_topic_template)}", self.subject, self.author.try(:realname), format_time(self.created_on)
end
end
else # 回帖
self.project.members.each do |m|
if m.user_id == Message.find(self.parent_id).author_id && m.user_id != self.author_id # 只针对主贴回复,回复自己的帖子不发消息
self.forge_messages << ForgeMessage.new(:user_id => m.user_id, :project_id => self.board.project_id, :viewed => false)
+ ws.comment_template m.user_id, "#{l(:label_topic_comment_template)}", self.author.try(:realname), format_time(self.created_on), self.content.html_safe
end
end
end
diff --git a/app/models/news.rb b/app/models/news.rb
index 6746d90cd..25a70095f 100644
--- a/app/models/news.rb
+++ b/app/models/news.rb
@@ -1,3 +1,4 @@
+#encoding: utf-8
# Redmine - project management software
# Copyright (C) 2006-2013 Jean-Philippe Lang
#
@@ -16,6 +17,8 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class News < ActiveRecord::Base
+ require 'net/http'
+ require 'json'
include Redmine::SafeAttributes
belongs_to :project,:touch => true
include ApplicationHelper
@@ -167,6 +170,8 @@ class News < ActiveRecord::Base
self.course.members.each do |m|
if m.user_id != self.author_id
self.course_messages << CourseMessage.new(:user_id => m.user_id, :course_id => self.course_id, :viewed => false)
+ ws = WechatService.new
+ ws.message_update_template m.user_id, "#{l(:label_new_notice_template)}", self.author.try(:realname) + " 发布了通知:" + self.title.html_safe, format_time(self.created_on)
end
end
else
diff --git a/app/models/student_work.rb b/app/models/student_work.rb
index 144f3859f..82b1ad4a1 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, :is_test
+ attr_accessible :name, :description, :homework_common_id, :user_id, :final_score, :teacher_score, :student_score, :teaching_asistant_score, :project_id, :is_test, :simi_id, :simi_value
belongs_to :homework_common
belongs_to :user
diff --git a/app/services/wechat_service.rb b/app/services/wechat_service.rb
new file mode 100644
index 000000000..ae097ad4a
--- /dev/null
+++ b/app/services/wechat_service.rb
@@ -0,0 +1,114 @@
+#encoding: utf-8
+class WechatService
+
+ def template_data(openid, template_id, first, key1, key2, key3, remark="具体内容请点击详情查看网站")
+ data = {
+ touser:openid,
+ template_id:template_id,
+ url:"https://www.trustie.net/",
+ topcolor:"#FF0000",
+ data:{
+ first: {
+ value:first,
+ color:"#173177"
+ },
+ keyword1:{
+ value:key1,
+ color:"#173177"
+ },
+ keyword2:{
+ value:key2,
+ color:"#173177"
+ },
+ keyword3:{
+ value:key3,
+ color:"#173177"
+ },
+ remark:{
+ value:remark,
+ color:"#173177"
+ }
+ }
+ }
+ data
+ end
+
+ def homework_template(user_id, first, key1, key2, key3, remark="具体内容请点击详情查看网站")
+ uw = UserWechat.where(user_id: user_id).first
+ unless uw.nil?
+ data = template_data uw.openid,"3e5Dj2GIx8MOcMyRKpTUEQnM7Tg0ASSCNc01NS9HCGI",first, key1, key2, key3, remark
+ begin
+ req = Wechat.api.template_message_send Wechat::Message.to(uw.openid).template(data)
+ rescue Exception => e
+ Rails.logger.error "[homework] ===> #{e}"
+ end
+ Rails.logger.info "send over. #{req}"
+ end
+ end
+
+ def topic_publish_template(user_id, first, key1, key2, key3, remark="具体内容请点击详情查看网站")
+ uw = UserWechat.where(user_id: user_id).first
+ unless uw.nil?
+ data = template_data uw.openid,"oKzFCdk7bsIHnGbscA__N8LPQrBkUShvpjV3-kuwWDQ",first, key1, key2, key3, remark
+ Rails.logger.info "start send template message: #{data}"
+ begin
+ req = Wechat.api.template_message_send Wechat::Message.to(uw.openid).template(data)
+ rescue Exception => e
+ Rails.logger.error "[topic_publish] ===> #{e}"
+ end
+ Rails.logger.info "send over. #{req}"
+ end
+ end
+
+ def comment_template(user_id, first, key1, key2, key3, remark="具体内容请点击详情查看网站")
+ uw = UserWechat.where(user_id: user_id).first
+ unless uw.nil?
+ data = template_data uw.openid,"A_3f5v90-zK73V9Kijm-paDkl9S-NuM8Cf-1UJi92_c",first, key1, key2, key3, remark
+ Rails.logger.info "start send template message: #{data}"
+ begin
+ req = Wechat.api.template_message_send Wechat::Message.to(uw.openid).template(data)
+ rescue Exception => e
+ Rails.logger.error "[comment] ===> #{e}"
+ end
+ Rails.logger.info "send over. #{req}"
+ end
+ end
+
+ def message_update_template(user_id, first, key1, key2, remark="具体内容请点击详情查看网站")
+ uw = UserWechat.where(user_id: user_id).first
+ unless uw.nil?
+ data = {
+ touser:uw.openid,
+ template_id:"YTyNPZnQD8uZFBFq-Q6cCOWaq5LA9vL6RFlF2JuD5Cg",
+ url:"https://www.trustie.net/",
+ topcolor:"#FF0000",
+ data:{
+ first: {
+ value:first,
+ color:"#173177"
+ },
+ keyword1:{
+ value:key1,
+ color:"#173177"
+ },
+ keyword2:{
+ value:key2,
+ color:"#173177"
+ },
+ remark:{
+ value:remark,
+ color:"#173177"
+ }
+ }
+ }
+
+ Rails.logger.info "start send template message: #{data}"
+ begin
+ req = Wechat.api.template_message_send Wechat::Message.to(uw.openid).template(data)
+ rescue Exception => e
+ Rails.logger.error "[message_update] ===> #{e}"
+ end
+ Rails.logger.info "send over. #{req}"
+ end
+ end
+end
\ No newline at end of file
diff --git a/app/views/admin/code_work_tests.html.erb b/app/views/admin/code_work_tests.html.erb
new file mode 100644
index 000000000..df7de6bf0
--- /dev/null
+++ b/app/views/admin/code_work_tests.html.erb
@@ -0,0 +1,96 @@
+
+ <%=l(:label_code_work_tests)%>
+
+
+
+
+
+
+
+
+
+<% html_title(l(:label_code_work_tests)) -%>
\ No newline at end of file
diff --git a/app/views/courses/_compare_code_tips_1.html.erb b/app/views/courses/_compare_code_tips_1.html.erb
new file mode 100644
index 000000000..696c40a48
--- /dev/null
+++ b/app/views/courses/_compare_code_tips_1.html.erb
@@ -0,0 +1,101 @@
+
+
+ <%if @homework.simi_time != nil %>
+
<%="您上次查重的时间为"+Time.parse(@homework.simi_time.to_s).strftime("%Y-%m-%d %H:%M")%>
+ <%end%>
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/views/courses/_compare_code_tips_2.html.erb b/app/views/courses/_compare_code_tips_2.html.erb
new file mode 100644
index 000000000..f926a1a84
--- /dev/null
+++ b/app/views/courses/_compare_code_tips_2.html.erb
@@ -0,0 +1,22 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/views/courses/_show_compare_code.html.erb b/app/views/courses/_show_compare_code.html.erb
new file mode 100644
index 000000000..39f8e0565
--- /dev/null
+++ b/app/views/courses/_show_compare_code.html.erb
@@ -0,0 +1,16 @@
+
+<% content_for :header_tags do %>
+ <%= javascript_include_tag "/assets/codemirror/codemirror_python_ruby_c" %>
+ <%= stylesheet_link_tag "/assets/codemirror/codemirror" %>
+ <%= stylesheet_link_tag "/assets/codemirror/merge" %>
+ <%= javascript_include_tag "https://cdnjs.cloudflare.com/ajax/libs/diff_match_patch/20121119/diff_match_patch.js"%>
+ <%= javascript_include_tag "/assets/codemirror/merge" %>
+<% end %>
+
+
+ <%=src_name%>
+ <%=dst_name%>
+ <%= src_code if src_code%>
+ <%= dst_code if dst_code%>
+
+
diff --git a/app/views/courses/_show_member_score.html.erb b/app/views/courses/_show_member_score.html.erb
index 612f408d7..a8bec9d50 100644
--- a/app/views/courses/_show_member_score.html.erb
+++ b/app/views/courses/_show_member_score.html.erb
@@ -24,7 +24,7 @@
<% final_score = @member_score.homework_common_score(homework_common).first%>
- <%= final_score.nil? || final_score.final_score.nil? ? "--" : format("%0.2f", final_score.final_score) %>
+ <%= final_score.nil? || final_score.final_score.nil? ? "--" : format("%0.2f", final_score.final_score < 0 ? 0 : final_score.final_score) %>
<% end %>
diff --git a/app/views/courses/code_repeat.html.erb b/app/views/courses/code_repeat.html.erb
new file mode 100644
index 000000000..9e026c293
--- /dev/null
+++ b/app/views/courses/code_repeat.html.erb
@@ -0,0 +1,79 @@
+
+
查重结果
+
+
+
+ - 作品名称
+ - 姓名
+ - 学号
+ - 时间
+ - 作品名称
+ - 姓名
+ - 学号
+ - 时间
+ - 相似度
+ - 对比
+
+
+ <%if @homework.homework_type == 2 %>
+ <% @student_works.each do |student_work|%>
+
+ <% student_work_name = student_work.name.nil? || student_work.name.empty? ? student_work.user.show_name + '的作品' : student_work.name%>
+
+ - <%=student_work_name%>
+ - <%=student_work.user.show_name%>
+ - <%= student_work.user.user_extensions.nil? ? "--" : student_work.user.user_extensions.student_id%>
+ - <%= Time.parse(format_time(student_work.created_at)).strftime("%m-%d %H:%M")%>
+ <% if student_work.simi_id > 0 && @works_hash[student_work.simi_id] %>
+ <% simi_student_work = @works_hash[student_work.simi_id] %>
+ <% simi_student_work_name = simi_student_work.name.nil? || simi_student_work.name.empty? ? simi_student_work.user.show_name + '的作品' : simi_student_work.name%>
+ - <%=simi_student_work_name%>
+ - <%=simi_student_work.user.show_name%>
+ - <%= simi_student_work.user.user_extensions.nil? ? "--" : simi_student_work.user.user_extensions.student_id%>
+ - <%= Time.parse(format_time(simi_student_work.created_at)).strftime("%m-%d %H:%M")%>
+ <% if student_work.simi_value >= 90 %>
+ - <%=student_work.simi_value%>%
+ <% else %>
+ - <%=student_work.simi_value%>%
+ <% end %>
+
+
+
+ -
+ <%= link_to("查看", show_comparecode_course_path(:homework_id => @homework.id,:src_id => student_work.id,:dst_id => student_work.simi_id),:class => "cha-btn",:remote => true ) %>
+
+ <%else%>
+ - 无
+ - --
+ - --
+ - --
+ - --
+ <% end %>
+
+ <%end%>
+ <%end%>
+
+
+
+
+
\ No newline at end of file
diff --git a/app/views/courses/show_comparecode.js.erb b/app/views/courses/show_comparecode.js.erb
new file mode 100644
index 000000000..5cfae9428
--- /dev/null
+++ b/app/views/courses/show_comparecode.js.erb
@@ -0,0 +1,101 @@
+$("#ajax-modal").html('<%= escape_javascript( render :partial => 'courses/show_compare_code' ,:locals => {:src_code=> @src_code,:src_name=> @src_username,:dst_name=> @dst_username, :dst_code=> @dst_code,})%>');
+showModal('ajax-modal', '1250px');
+$('#ajax-modal').siblings().remove();
+$('#ajax-modal').before("");
+$('#ajax-modal').parent().css("top","20%").css("left","20%").css("position","absolute");
+//$('#ajax-modal').parent().addClass("resourceUploadPopup");
+$('#ajax-modal').css("padding-left","16px").css("padding-bottom","16px").css("padding-top","10px");
+
+function closeModal(){
+ hideModal($(".program-compare-code"));
+}
+
+var program_name = "text/x-csrc";
+var language = <%= @homework.language.to_i %>;
+if (language == 1) {
+ program_name = 'text/x-csrc';
+} else if(language==2){
+ program_name = 'text/x-c++src';
+}else if(language==3){
+ program_name = 'text/x-cython';
+} else if(language==4){
+ program_name = 'text/x-java';
+}
+//
+//var editor_1 = CodeMirror(document.getElementById("program-code_1"), {
+// mode: {name: program_name,
+// version: 2,
+// singleLineStringErrors: false},
+// lineNumbers: true,
+// indentUnit: 2,
+// matchBrackets: true,
+// readOnly: true,
+// value: $("#program-src_1").text()
+// }
+//);
+//
+//var editor_2 = CodeMirror(document.getElementById("program-code_2"), {
+// mode: {name: program_name,
+// version: 2,
+// singleLineStringErrors: false},
+// lineNumbers: true,
+// indentUnit: 2,
+// matchBrackets: true,
+// readOnly: true,
+// value: $("#program-src_2").text()
+// }
+//);
+
+var value, orig1, orig2, dv, panes = 2, highlight = true, connect = null, collapse = false;
+function initUI() {
+ if (value == null) return;
+ var target = document.getElementById("program-compare-code");
+ target.innerHTML = "";
+ dv = CodeMirror.MergeView(target, {
+ value: value,
+ origLeft: panes == 3 ? orig1 : null,
+ orig: orig2,
+ lineNumbers: true,
+ mode: program_name,
+ highlightDifferences: highlight,
+ connect: connect,
+ collapseIdentical: collapse
+ });
+}
+
+function toggleDifferences() {
+ dv.setShowDifferences(highlight = !highlight);
+}
+
+
+value = $("#program-src_1").text();
+orig1 = $("#program-src_1").text();
+orig2 = $("#program-src_2").text();
+initUI();
+
+
+function mergeViewHeight(mergeView) {
+ function editorHeight(editor) {
+ if (!editor) return 0;
+ return editor.getScrollInfo().height;
+ }
+ return Math.max(editorHeight(mergeView.leftOriginal()),
+ editorHeight(mergeView.editor()),
+ editorHeight(mergeView.rightOriginal()));
+}
+
+function resize(mergeView) {
+ var height = mergeViewHeight(mergeView);
+ for(;;) {
+ if (mergeView.leftOriginal())
+ mergeView.leftOriginal().setSize(null, height);
+ mergeView.editor().setSize(null, height);
+ if (mergeView.rightOriginal())
+ mergeView.rightOriginal().setSize(null, height);
+
+ var newHeight = mergeViewHeight(mergeView);
+ if (newHeight >= height) break;
+ else height = newHeight;
+ }
+ mergeView.wrap.style.height = height + "px";
+}
\ No newline at end of file
diff --git a/app/views/homework_common/index.html.erb b/app/views/homework_common/index.html.erb
index ac4ac9853..6a3528e51 100644
--- a/app/views/homework_common/index.html.erb
+++ b/app/views/homework_common/index.html.erb
@@ -39,7 +39,21 @@