From cadb5f3f153ffa36176ecb47bb3e1a721326a1ba Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Sat, 9 Apr 2016 18:14:43 +0800 Subject: [PATCH 01/28] =?UTF-8?q?=E6=9B=B4=E6=8D=A2=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=99=A8=E8=87=B3test.course.trustie.net?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1234567 | 1 - config/menu.yml | 2 +- public/javascripts/wechat/app.js | 4 ++-- 3 files changed, 3 insertions(+), 4 deletions(-) delete mode 100644 1234567 diff --git a/1234567 b/1234567 deleted file mode 100644 index 1aa01764f..000000000 --- a/1234567 +++ /dev/null @@ -1 +0,0 @@ -{"access_token":"G4QG7VJgF8Vmm71kLgC1XgHvyeXK-ZZrikaG7sPBrKuw6vgbYzV2FPYuNq3wNp7e-hsyfDI--rTlVspQXZk5bRK_CsZl8wWvuiPazV9mznGpOBGE5zVR8WOtvlqhylpHIMBdABABFU","expires_in":7200,"got_token_at":1460179500} \ No newline at end of file diff --git a/config/menu.yml b/config/menu.yml index 224ad23dd..dc6e2b2c9 100644 --- a/config/menu.yml +++ b/config/menu.yml @@ -2,7 +2,7 @@ button: - type: "view" name: "最新动态" - url: "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxc09454f171153c2d&redirect_uri=http://wechat.trustie.net/assets/wechat/app.html#/activities?response_type=code&scope=snsapi_base&state=123#wechat_redirect" + url: "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxc09454f171153c2d&redirect_uri=http://test.course.trustie.net/assets/wechat/app.html#/activities?response_type=code&scope=snsapi_base&state=123#wechat_redirect" - type: "click" name: "意见返馈" diff --git a/public/javascripts/wechat/app.js b/public/javascripts/wechat/app.js index 25cb0f169..dc4e552ca 100644 --- a/public/javascripts/wechat/app.js +++ b/public/javascripts/wechat/app.js @@ -1,5 +1,5 @@ var app = angular.module('wechat', ['ngRoute','ngCookies']); -var apiUrl = 'http://wechat.trustie.net/api/v1/'; +var apiUrl = 'http://test.course.trustie.net/api/v1/'; var debug = false; //调试标志,如果在本地请置为true if(debug===true){ @@ -10,7 +10,7 @@ app.factory('auth', function($http,$routeParams, $cookies, $q){ var _openid = ''; if(debug===true){ - _openid = "6"; + _openid = "oCnvgvz8R7QheXE-R9Kkr39j8Ndg"; } var getOpenId = function() { From 73ad787e23e0e06e20a14069b76737b2d515b89b Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Sat, 9 Apr 2016 22:48:10 +0800 Subject: [PATCH 02/28] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=88=B0=E6=AD=A3?= =?UTF-8?q?=E5=BC=8F=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/menu.yml | 2 +- public/javascripts/wechat/app.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/config/menu.yml b/config/menu.yml index dc6e2b2c9..34e124845 100644 --- a/config/menu.yml +++ b/config/menu.yml @@ -2,7 +2,7 @@ button: - type: "view" name: "最新动态" - url: "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxc09454f171153c2d&redirect_uri=http://test.course.trustie.net/assets/wechat/app.html#/activities?response_type=code&scope=snsapi_base&state=123#wechat_redirect" + url: "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxc09454f171153c2d&redirect_uri=http://www.trustie.net/assets/wechat/app.html#/activities?response_type=code&scope=snsapi_base&state=123#wechat_redirect" - type: "click" name: "意见返馈" diff --git a/public/javascripts/wechat/app.js b/public/javascripts/wechat/app.js index dc4e552ca..4dce14c3a 100644 --- a/public/javascripts/wechat/app.js +++ b/public/javascripts/wechat/app.js @@ -1,5 +1,5 @@ var app = angular.module('wechat', ['ngRoute','ngCookies']); -var apiUrl = 'http://test.course.trustie.net/api/v1/'; +var apiUrl = '/api/v1/'; var debug = false; //调试标志,如果在本地请置为true if(debug===true){ From 7c5d62b8a841ac8c7ad3b4757066e03851f45a0e Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Sat, 9 Apr 2016 23:16:22 +0800 Subject: [PATCH 03/28] =?UTF-8?q?=E5=A4=B4=E5=83=8Furl=E4=B8=8D=E6=98=BE?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/mobile/entities/user.rb | 2 +- public/javascripts/wechat/app.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/api/mobile/entities/user.rb b/app/api/mobile/entities/user.rb index 16048c61a..66808c2a6 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 diff --git a/public/javascripts/wechat/app.js b/public/javascripts/wechat/app.js index 4dce14c3a..129d3168d 100644 --- a/public/javascripts/wechat/app.js +++ b/public/javascripts/wechat/app.js @@ -3,7 +3,7 @@ var apiUrl = '/api/v1/'; var debug = false; //调试标志,如果在本地请置为true if(debug===true){ - apiUrl = 'http://localhost:3000/api/v1/'; + apiUrl = 'http://www.trustie.net/api/v1/'; } app.factory('auth', function($http,$routeParams, $cookies, $q){ @@ -63,7 +63,7 @@ app.factory('rms', function(){ app.controller('ActivityController',function($scope, $http, auth, rms, common){ $scope.replaceUrl = function(url){ - return "http://www.trustie.net/" + url; + return url; }; console.log("ActivityController load"); From 055ba00de5e34d655d7ed36894f778af50012509 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Sat, 9 Apr 2016 23:20:24 +0800 Subject: [PATCH 04/28] =?UTF-8?q?=E7=BB=91=E5=AE=9A=E6=88=90=E5=8A=9F?= =?UTF-8?q?=E5=90=8E=E5=85=B3=E9=97=AD=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 2 +- app/views/wechats/bind.html.erb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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/views/wechats/bind.html.erb b/app/views/wechats/bind.html.erb index ada22cd69..718ba9aeb 100644 --- a/app/views/wechats/bind.html.erb +++ b/app/views/wechats/bind.html.erb @@ -7,7 +7,7 @@ From f82ad97a68d4ad9a31ec4ba794c588fa8b87b44f Mon Sep 17 00:00:00 2001 From: txz Date: Mon, 11 Apr 2016 15:11:01 +0800 Subject: [PATCH 05/28] =?UTF-8?q?=E8=AF=A6=E6=83=85=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E5=9B=9E=E5=A4=8D=E6=A1=86=E5=AE=BD=E5=BA=A6=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/wechat/blog_detail.html | 4 +++- public/assets/wechat/course_discussion.html | 4 +++- public/assets/wechat/course_notice.html | 4 +++- public/assets/wechat/homework_detail.html | 4 +++- public/assets/wechat/issue_detail.html | 4 +++- public/assets/wechat/jour_message_detail.html | 4 +++- public/assets/wechat/project_discussion.html | 4 +++- public/stylesheets/weui/weixin.css | 3 ++- 8 files changed, 23 insertions(+), 8 deletions(-) diff --git a/public/assets/wechat/blog_detail.html b/public/assets/wechat/blog_detail.html index 92e03ef0c..6af2f3c3e 100644 --- a/public/assets/wechat/blog_detail.html +++ b/public/assets/wechat/blog_detail.html @@ -36,7 +36,9 @@
- +
+ +
diff --git a/public/assets/wechat/course_discussion.html b/public/assets/wechat/course_discussion.html index 680e92f5d..d1b708718 100644 --- a/public/assets/wechat/course_discussion.html +++ b/public/assets/wechat/course_discussion.html @@ -36,7 +36,9 @@
- +
+ +
diff --git a/public/assets/wechat/course_notice.html b/public/assets/wechat/course_notice.html index 6bc5a790c..3048d219c 100644 --- a/public/assets/wechat/course_notice.html +++ b/public/assets/wechat/course_notice.html @@ -36,7 +36,9 @@
- +
+ +
diff --git a/public/assets/wechat/homework_detail.html b/public/assets/wechat/homework_detail.html index abc92f133..f61b963a9 100644 --- a/public/assets/wechat/homework_detail.html +++ b/public/assets/wechat/homework_detail.html @@ -38,7 +38,9 @@
- +
+ +
diff --git a/public/assets/wechat/issue_detail.html b/public/assets/wechat/issue_detail.html index fc9591692..9391539f1 100644 --- a/public/assets/wechat/issue_detail.html +++ b/public/assets/wechat/issue_detail.html @@ -38,7 +38,9 @@
- +
+ +
diff --git a/public/assets/wechat/jour_message_detail.html b/public/assets/wechat/jour_message_detail.html index ac0705ac3..515e2216f 100644 --- a/public/assets/wechat/jour_message_detail.html +++ b/public/assets/wechat/jour_message_detail.html @@ -34,7 +34,9 @@
- +
+ +
diff --git a/public/assets/wechat/project_discussion.html b/public/assets/wechat/project_discussion.html index 3fa7b0949..0619ad5bf 100644 --- a/public/assets/wechat/project_discussion.html +++ b/public/assets/wechat/project_discussion.html @@ -36,7 +36,9 @@
- +
+ +
diff --git a/public/stylesheets/weui/weixin.css b/public/stylesheets/weui/weixin.css index 33e4e51ae..f587a3e50 100644 --- a/public/stylesheets/weui/weixin.css +++ b/public/stylesheets/weui/weixin.css @@ -59,5 +59,6 @@ a.underline {text-decoration:underline;} .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-input {width:100%; height:28px; line-height:28px; border:1px solid #e6e6e6; outline:none; border-radius:3px;} +.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;} \ No newline at end of file From 275895f80530d9be6b8f2adc92dec521111e036a Mon Sep 17 00:00:00 2001 From: cxt Date: Tue, 12 Apr 2016 11:00:47 +0800 Subject: [PATCH 06/28] =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E7=9A=84=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/comment.rb | 4 +++ app/models/homework_common.rb | 40 ++--------------------- app/models/journal.rb | 40 +---------------------- app/models/journals_for_message.rb | 51 ++---------------------------- app/models/message.rb | 7 ++++ config/locales/zh.yml | 27 +++++++++++++++- config/menu.yml | 2 +- 7 files changed, 44 insertions(+), 127 deletions(-) diff --git a/app/models/comment.rb b/app/models/comment.rb index b87203a50..59835cfc9 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 @@ -42,10 +44,12 @@ class Comment < ActiveRecord::Base 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) + Wechat.api.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) + Wechat.api.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..c34c63f2d 100644 --- a/app/models/homework_common.rb +++ b/app/models/homework_common.rb @@ -59,6 +59,7 @@ 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) + Wechat.api.homework_template(m.user_id, "#{l(:label_new_homework_template)}", self.course.name, self.name, self.end_time.to_s + " 23:59:59") # end end end @@ -104,44 +105,7 @@ 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 + Wechat.api.homework_template(member.user_id, "#{l(:label_update_homework_template)}", self.course.name, self.name, self.end_time.to_s + " 23:59:59") end end diff --git a/app/models/journal.rb b/app/models/journal.rb index e56c8b043..95aab7f96 100644 --- a/app/models/journal.rb +++ b/app/models/journal.rb @@ -239,44 +239,6 @@ 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 + Wechat.api.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..c975bcaa6 100644 --- a/app/models/journals_for_message.rb +++ b/app/models/journals_for_message.rb @@ -256,7 +256,7 @@ class JournalsForMessage < ActiveRecord::Base end end if self.jour_type == 'HomeworkCommon' - journal_wechat_message '您的作业有新回复了',self.jour.user_id + Wechat.api.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 @@ -269,7 +269,7 @@ class JournalsForMessage < ActiveRecord::Base if self.reply_id == 0 if self.user_id != self.jour_id # 过滤自己给自己的留言消息 receivers << self.jour - journal_wechat_message "您有新留言了",self.jour_id + Wechat.api.comment_template self.jour_id, "#{l(:label_new_journals_template)}", self.user.try(:realname), format_time(self.created_on), self.notes.html_safe end else # 留言回复 reply_to = User.find(self.reply_id) @@ -279,12 +279,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 + Wechat.api.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 +304,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/message.rb b/app/models/message.rb index d697db236..2ff900858 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 @@ -262,12 +265,14 @@ class Message < ActiveRecord::Base 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) + Wechat.api.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) + Wechat.api.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 +281,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) + Wechat.api.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) + Wechat.api.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/config/locales/zh.yml b/config/locales/zh.yml index e67ca806d..8990f2490 100644 --- a/config/locales/zh.yml +++ b/config/locales/zh.yml @@ -2123,4 +2123,29 @@ zh: label_resource_download_times: 下载次数 label_resource_upload_author: 上传者 label_resource_belongs_course: 所属课程 - label_resource_belongs_project: 所属项目 \ No newline at end of file + label_resource_belongs_project: 所属项目 + + #微信模板消息 + label_new_homework_template: 您的课程有新作业了 + label_update_homework_template: 您的作业已被修改 + label_course_topic_template: 课程问答区有新帖子发布了 + label_topic_comment_template: 您的帖子有新回复了 + label_project_topic_template: 项目讨论区有新帖子发布了 + label_issue_comment_template: 您的缺陷有新回复了 + label_notice_comment_template: 您的课程通知有新回复了 + label_news_comment_template: 您的项目新闻有新回复了 + label_homework_comment_template: 您的作业有新回复了 + label_new_journals_template: 您有新留言了 + label_journals_comment_template: 您的留言有新回复了 + label_resource_name: 您的课程有新作业了 + label_resource_name: 您的课程有新作业了 + label_resource_name: 您的课程有新作业了 + label_resource_name: 您的课程有新作业了 + label_resource_name: 您的课程有新作业了 + label_resource_name: 您的课程有新作业了 + label_resource_name: 您的课程有新作业了 + label_resource_name: 您的课程有新作业了 + label_resource_name: 您的课程有新作业了 + label_resource_name: 您的课程有新作业了 + + diff --git a/config/menu.yml b/config/menu.yml index 34e124845..e289a8cac 100644 --- a/config/menu.yml +++ b/config/menu.yml @@ -13,7 +13,7 @@ button: - type: "view" name: "进入网站" - url: "http://www.trustie.net/" + url: "https://www.trustie.net/" - type: "view" name: "使用手册" From 3665597153895b73373e6cbd8c998c8b9015397c Mon Sep 17 00:00:00 2001 From: txz Date: Tue, 12 Apr 2016 14:56:17 +0800 Subject: [PATCH 07/28] =?UTF-8?q?=E8=AF=A6=E6=83=85=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E6=8E=92=E7=89=88=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1234567 | 1 + public/assets/wechat/activities.html | 6 ++++- public/assets/wechat/blog_detail.html | 7 +++--- public/assets/wechat/course_discussion.html | 15 ++++++++---- public/assets/wechat/course_notice.html | 15 ++++++++---- public/assets/wechat/homework_detail.html | 23 ++++++++++++------- public/assets/wechat/issue_detail.html | 21 +++++++++++------ public/assets/wechat/jour_message_detail.html | 5 ++-- public/assets/wechat/project_discussion.html | 15 ++++++++---- public/javascripts/wechat/app.js | 4 ++-- public/stylesheets/weui/weixin.css | 3 +++ 11 files changed, 75 insertions(+), 40 deletions(-) create mode 100644 1234567 diff --git a/1234567 b/1234567 new file mode 100644 index 000000000..f492d2490 --- /dev/null +++ b/1234567 @@ -0,0 +1 @@ +{"access_token":"ONE7uqb5MhyuYiOtMkzUMPJs8krCiQeBjWek_Q9glYtfCH-kkQKzv84dgxUv5VLBnb5zdKajWDyHqocvu71UwlVuVFhsXs9MwbVdCu1i4l2L5vKCkhNE5GuyO6WisXfvKOUfAEAYCI","expires_in":7200,"got_token_at":1460441290} \ No newline at end of file diff --git a/public/assets/wechat/activities.html b/public/assets/wechat/activities.html index 376fdcf6a..f5eded3ee 100644 --- a/public/assets/wechat/activities.html +++ b/public/assets/wechat/activities.html @@ -9,7 +9,11 @@
- +
diff --git a/public/assets/wechat/blog_detail.html b/public/assets/wechat/blog_detail.html index 6af2f3c3e..b3b97f047 100644 --- a/public/assets/wechat/blog_detail.html +++ b/public/assets/wechat/blog_detail.html @@ -3,12 +3,11 @@
-
- - +
{{blog.title}}
+
{{blog.user.realname}}发表博客
-
+
{{blog.created_at}} diff --git a/public/assets/wechat/course_discussion.html b/public/assets/wechat/course_discussion.html index d1b708718..9c70dfcfc 100644 --- a/public/assets/wechat/course_discussion.html +++ b/public/assets/wechat/course_discussion.html @@ -3,11 +3,16 @@
-
- - -
-
+
{{discussion.subject}}
+ + + + + + + +
发布者:{{discussion.user.realname}}
来   源:{{discussion.course_project_name}}  |  课程问答区
+
diff --git a/public/assets/wechat/course_notice.html b/public/assets/wechat/course_notice.html index 3048d219c..750543e03 100644 --- a/public/assets/wechat/course_notice.html +++ b/public/assets/wechat/course_notice.html @@ -3,11 +3,16 @@
-
- - -
-
+
{{news.title}}
+ + + + + + + +
发布者:{{news.author.realname}}
来   源:{{news.course_name}}  |  课程通知
+
diff --git a/public/assets/wechat/homework_detail.html b/public/assets/wechat/homework_detail.html index f61b963a9..708d8b420 100644 --- a/public/assets/wechat/homework_detail.html +++ b/public/assets/wechat/homework_detail.html @@ -3,14 +3,21 @@
-
- - -
-
-
- 迟交扣分:{{homework.late_penalty}}分 匿评开启时间:{{homework.evaluation_start}}
- 缺评扣分:{{homework.absence_penalty}}分/作品 匿评关闭时间:{{homework.evaluation_end}} +
{{homework.name}}
+ + + + + + + +
发布者:{{homework.author.realname}}
来   源:{{homework.course_name}}  |  课程作业
+
+
+ 迟交扣分:{{homework.late_penalty}}分
+ 缺评扣分:{{homework.absence_penalty}}分/作品
+ 匿评开启时间:{{homework.evaluation_start}}
+ 匿评关闭时间:{{homework.evaluation_end}}
{{homework.publish_time}} diff --git a/public/assets/wechat/issue_detail.html b/public/assets/wechat/issue_detail.html index 9391539f1..38f732e6f 100644 --- a/public/assets/wechat/issue_detail.html +++ b/public/assets/wechat/issue_detail.html @@ -3,14 +3,21 @@
-
- - -
+
{{issue.subject}}
+ + + + + + + +
发布者:{{issue.author.realname}}
来   源:{{issue.project_name}}  |  项目缺陷
-
- 状态:{{issue.issue_status}} 优先级:{{issue.issue_priority}}
- 指派给:{{issue.issue_assigned_to}} 完成度:{{issue.done_ratio}}% +
+ 状   态:{{issue.issue_status}}
+ 优先级:{{issue.issue_priority}}
+ 指派给:{{issue.issue_assigned_to}}
+ 完成度:{{issue.done_ratio}}%
{{issue.created_on}} diff --git a/public/assets/wechat/jour_message_detail.html b/public/assets/wechat/jour_message_detail.html index 515e2216f..7ce14e4a8 100644 --- a/public/assets/wechat/jour_message_detail.html +++ b/public/assets/wechat/jour_message_detail.html @@ -2,9 +2,8 @@
-
- - +
{{message.user.realname}}给您留言了
+
{{message.created_on}}
diff --git a/public/assets/wechat/project_discussion.html b/public/assets/wechat/project_discussion.html index 0619ad5bf..185d06784 100644 --- a/public/assets/wechat/project_discussion.html +++ b/public/assets/wechat/project_discussion.html @@ -3,11 +3,16 @@
-
- - -
-
+
{{discussion.subject}}
+ + + + + + + +
发布者:{{discussion.user.realname}}
来   源:{{discussion.course_project_name}}  |  项目讨论区
+
diff --git a/public/javascripts/wechat/app.js b/public/javascripts/wechat/app.js index 4dce14c3a..ddfede164 100644 --- a/public/javascripts/wechat/app.js +++ b/public/javascripts/wechat/app.js @@ -1,6 +1,6 @@ var app = angular.module('wechat', ['ngRoute','ngCookies']); var apiUrl = '/api/v1/'; -var debug = false; //调试标志,如果在本地请置为true +var debug = true; //调试标志,如果在本地请置为true if(debug===true){ apiUrl = 'http://localhost:3000/api/v1/'; @@ -10,7 +10,7 @@ app.factory('auth', function($http,$routeParams, $cookies, $q){ var _openid = ''; if(debug===true){ - _openid = "oCnvgvz8R7QheXE-R9Kkr39j8Ndg"; + _openid = "1"; } var getOpenId = function() { diff --git a/public/stylesheets/weui/weixin.css b/public/stylesheets/weui/weixin.css index f587a3e50..3872bb649 100644 --- a/public/stylesheets/weui/weixin.css +++ b/public/stylesheets/weui/weixin.css @@ -33,6 +33,8 @@ a.underline {text-decoration:underline;} .hidden {overflow:hidden; white-space:nowrap; text-overflow:ellipsis;} .inline-block {display:inline-block;} .undis {display:none;} +.text-nowrap {white-space:nowrap;} +.v-top {vertical-align:top;} /*动态样式*/ .post-container {width:100%;} @@ -40,6 +42,7 @@ a.underline {text-decoration:underline;} .post-main {padding:10px; color:#9a9a9a;} .post-avatar {width:45px; height:45px; margin-right:10px;} .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;} From 2898805aa78c55ea4280b88475637f15bf04c537 Mon Sep 17 00:00:00 2001 From: cxt Date: Tue, 12 Apr 2016 15:12:40 +0800 Subject: [PATCH 08/28] =?UTF-8?q?=E5=9B=9E=E5=A4=8D=E7=9A=84=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1234567 | 1 + app/models/blog_comment.rb | 42 +++---------------- app/models/homework_common.rb | 4 +- app/models/issue.rb | 4 ++ app/models/journals_for_message.rb | 2 +- app/models/mailer.rb | 67 +----------------------------- app/models/news.rb | 4 ++ config/locales/zh.yml | 8 ++-- 8 files changed, 22 insertions(+), 110 deletions(-) create mode 100644 1234567 diff --git a/1234567 b/1234567 new file mode 100644 index 000000000..2954ee65a --- /dev/null +++ b/1234567 @@ -0,0 +1 @@ +{"access_token":"8_uw_0k7gzuGR_jM5OHas7VXxNKScuDVYDAFT0MCXckv53f9QBUtlUxs4baMASygfA-Y45NVaeEFefOcfB8xcyBRdyZjVrEj_A7fr9qxYxWT7RCB8J4whon2_uE5np28JQVcABAFMR","expires_in":7200,"got_token_at":1460444599} \ No newline at end of file diff --git a/app/models/blog_comment.rb b/app/models/blog_comment.rb index cfe6fe3f3..8f618476a 100644 --- a/app/models/blog_comment.rb +++ b/app/models/blog_comment.rb @@ -78,44 +78,12 @@ class BlogComment < ActiveRecord::Base #博客回复微信模板消息 def blog_wechat_message - 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}" + if self.parent_id.nil? + self.author.watcher_users.each do |watcher| + Wechat.api.message_update_template watcher.id, "#{l(:label_new_blog_template)}", self.author.try(:realname) + " 发表了博客:" + self.title.html_safe, format_time(self.created_at) end - logger.info "send over. #{req}" + else + Wechat.api.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/homework_common.rb b/app/models/homework_common.rb index c34c63f2d..2774295a1 100644 --- a/app/models/homework_common.rb +++ b/app/models/homework_common.rb @@ -59,7 +59,7 @@ 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) - Wechat.api.homework_template(m.user_id, "#{l(:label_new_homework_template)}", self.course.name, self.name, self.end_time.to_s + " 23:59:59") + Wechat.api.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 @@ -105,7 +105,7 @@ class HomeworkCommon < ActiveRecord::Base #修改作业后发送微信模板消息 def wechat_message self.course.members.each do |member| - Wechat.api.homework_template(member.user_id, "#{l(:label_update_homework_template)}", self.course.name, self.name, self.end_time.to_s + " 23:59:59") + Wechat.api.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..45347b5ad 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,7 @@ 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) + Wechat.api.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/journals_for_message.rb b/app/models/journals_for_message.rb index c975bcaa6..ce18e1bdb 100644 --- a/app/models/journals_for_message.rb +++ b/app/models/journals_for_message.rb @@ -269,7 +269,7 @@ class JournalsForMessage < ActiveRecord::Base if self.reply_id == 0 if self.user_id != self.jour_id # 过滤自己给自己的留言消息 receivers << self.jour - Wechat.api.comment_template self.jour_id, "#{l(:label_new_journals_template)}", self.user.try(:realname), format_time(self.created_on), self.notes.html_safe + Wechat.api.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) 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/news.rb b/app/models/news.rb index 6746d90cd..967516e65 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,7 @@ 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) + Wechat.api.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/config/locales/zh.yml b/config/locales/zh.yml index 8990f2490..4f0c6b701 100644 --- a/config/locales/zh.yml +++ b/config/locales/zh.yml @@ -2137,10 +2137,10 @@ zh: label_homework_comment_template: 您的作业有新回复了 label_new_journals_template: 您有新留言了 label_journals_comment_template: 您的留言有新回复了 - label_resource_name: 您的课程有新作业了 - label_resource_name: 您的课程有新作业了 - label_resource_name: 您的课程有新作业了 - label_resource_name: 您的课程有新作业了 + label_blog_comment_template: 您的博客有新回复了 + label_new_blog_template: 您的课程有新作业了 + label_new_issue_template: 您有新缺陷了 + label_new_notice_template: 您的课程有新通知了 label_resource_name: 您的课程有新作业了 label_resource_name: 您的课程有新作业了 label_resource_name: 您的课程有新作业了 From 1882cd8f4f8ab28e91efd9603fdfc856008f8b2a Mon Sep 17 00:00:00 2001 From: cxt Date: Tue, 12 Apr 2016 15:42:59 +0800 Subject: [PATCH 09/28] =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=A7=93=E5=90=8D?= =?UTF-8?q?=E4=B8=8D=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/mobile/entities/user.rb | 4 +++- app/helpers/api_helper.rb | 4 ++++ public/javascripts/wechat/app.js | 4 ++-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/app/api/mobile/entities/user.rb b/app/api/mobile/entities/user.rb index 16048c61a..e33c6a845 100644 --- a/app/api/mobile/entities/user.rb +++ b/app/api/mobile/entities/user.rb @@ -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/helpers/api_helper.rb b/app/helpers/api_helper.rb index bd7ba8751..274bfc552 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? ? user.login : name + end def get_assigned_homeworks(homeworks, n, index) homeworks += homeworks diff --git a/public/javascripts/wechat/app.js b/public/javascripts/wechat/app.js index ddfede164..713c98863 100644 --- a/public/javascripts/wechat/app.js +++ b/public/javascripts/wechat/app.js @@ -1,6 +1,6 @@ var app = angular.module('wechat', ['ngRoute','ngCookies']); var apiUrl = '/api/v1/'; -var debug = true; //调试标志,如果在本地请置为true +var debug = false; //调试标志,如果在本地请置为true if(debug===true){ apiUrl = 'http://localhost:3000/api/v1/'; @@ -10,7 +10,7 @@ app.factory('auth', function($http,$routeParams, $cookies, $q){ var _openid = ''; if(debug===true){ - _openid = "1"; + _openid = "2"; } var getOpenId = function() { From 70afbb3323db186ed1f8c5ac4c0a5eded3a2c016 Mon Sep 17 00:00:00 2001 From: cxt Date: Tue, 12 Apr 2016 15:46:56 +0800 Subject: [PATCH 10/28] =?UTF-8?q?=E5=A7=93=E5=90=8D=E7=9A=84=E5=88=A4?= =?UTF-8?q?=E6=96=AD=E3=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/api_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/helpers/api_helper.rb b/app/helpers/api_helper.rb index 274bfc552..49640d889 100644 --- a/app/helpers/api_helper.rb +++ b/app/helpers/api_helper.rb @@ -29,7 +29,7 @@ module ApiHelper def get_user_realname user name = user.lastname + user.firstname - name.empty? || name.nil? ? user.login : name + name.empty? || name.nil? || name == " " ? user.login : name end def get_assigned_homeworks(homeworks, n, index) From 38c182d76a28ab40a05f5d78802c6587fe398234 Mon Sep 17 00:00:00 2001 From: txz Date: Tue, 12 Apr 2016 15:51:18 +0800 Subject: [PATCH 11/28] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E5=8F=91=E5=B8=83?= =?UTF-8?q?=E8=80=85=E7=9C=9F=E5=90=8D=E4=B8=BA=E7=A9=BA=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E6=98=B5=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/wechat/homework_detail.html | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/public/assets/wechat/homework_detail.html b/public/assets/wechat/homework_detail.html index 708d8b420..776ecb4ce 100644 --- a/public/assets/wechat/homework_detail.html +++ b/public/assets/wechat/homework_detail.html @@ -6,7 +6,9 @@
{{homework.name}}
- + From 5a3b68816ae277bbdb6080e97e7f1f1d4acdad37 Mon Sep 17 00:00:00 2001 From: cxt Date: Tue, 12 Apr 2016 15:57:18 +0800 Subject: [PATCH 12/28] =?UTF-8?q?=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/blog_comment.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/blog_comment.rb b/app/models/blog_comment.rb index ba31cc320..359522f9a 100644 --- a/app/models/blog_comment.rb +++ b/app/models/blog_comment.rb @@ -81,7 +81,7 @@ class BlogComment < ActiveRecord::Base if self.parent_id.nil? self.author.watcher_users.each do |watcher| Wechat.api.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 Wechat.api.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 From a6f4b7f5055d35a694c547bab28d3025ae0df69d Mon Sep 17 00:00:00 2001 From: cxt Date: Tue, 12 Apr 2016 16:23:52 +0800 Subject: [PATCH 13/28] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/javascripts/wechat/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/javascripts/wechat/app.js b/public/javascripts/wechat/app.js index 136557634..5c60681a0 100644 --- a/public/javascripts/wechat/app.js +++ b/public/javascripts/wechat/app.js @@ -3,7 +3,7 @@ var apiUrl = '/api/v1/'; var debug = false; //调试标志,如果在本地请置为true if(debug===true){ - apiUrl = 'http://www.trustie.net/api/v1/'; + apiUrl = 'https://test.course.trustie.net/api/v1/'; } app.factory('auth', function($http,$routeParams, $cookies, $q){ From 59f49f586be04c25e1b3e9897f49e192da708396 Mon Sep 17 00:00:00 2001 From: cxt Date: Tue, 12 Apr 2016 16:32:53 +0800 Subject: [PATCH 14/28] =?UTF-8?q?=E4=B8=8A=E7=BA=BF=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/menu.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/menu.yml b/config/menu.yml index e289a8cac..fe2159e8c 100644 --- a/config/menu.yml +++ b/config/menu.yml @@ -2,7 +2,7 @@ button: - type: "view" name: "最新动态" - url: "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxc09454f171153c2d&redirect_uri=http://www.trustie.net/assets/wechat/app.html#/activities?response_type=code&scope=snsapi_base&state=123#wechat_redirect" + url: "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxc09454f171153c2d&redirect_uri=https://test.course.trustie.net/assets/wechat/app.html#/activities?response_type=code&scope=snsapi_base&state=123#wechat_redirect" - type: "click" name: "意见返馈" From 7fcd229f854070faacc51d9f6bd93c3d4327e87f Mon Sep 17 00:00:00 2001 From: cxt Date: Wed, 13 Apr 2016 10:09:54 +0800 Subject: [PATCH 15/28] =?UTF-8?q?=E5=88=86=E7=BB=84=E4=BD=9C=E4=B8=9A--?= =?UTF-8?q?=E4=BD=9C=E5=93=81=E5=88=97=E8=A1=A8=E4=B8=AD=EF=BC=9A=E7=82=B9?= =?UTF-8?q?=E5=87=BB=E5=85=B3=E8=81=94=E7=9A=84=E9=A1=B9=E7=9B=AE=E8=B7=B3?= =?UTF-8?q?=E8=BD=AC=E8=87=B3=E8=AF=A5=E9=A1=B9=E7=9B=AE=E4=B8=BB=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../student_work/_evaluation_un_work.html.erb | 18 ++++++++++++------ .../student_work/_evaluation_work.html.erb | 16 +++++++++++----- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/app/views/student_work/_evaluation_un_work.html.erb b/app/views/student_work/_evaluation_un_work.html.erb index 884bb8eb1..57dd786eb 100644 --- a/app/views/student_work/_evaluation_un_work.html.erb +++ b/app/views/student_work/_evaluation_un_work.html.erb @@ -5,8 +5,8 @@
  • <%= link_to(image_tag(url_to_avatar(student_work.user),:width =>"40",:height => "40"),user_activities_path(student_work.user)) %>
  • -
    -
  • +
    +
  • <% student_work_name = student_work.name.nil? || student_work.name.empty? ? student_work.user.show_name + '的作品' : student_work.name%>
    <%= link_to student_work_name,"javascript:void(0)" ,:title => student_work_name, :class => "linkGrey f14 StudentName break_word #{@homework.homework_type == 2 ? '' : 'width165'}"%> @@ -14,7 +14,7 @@
  • <% if @homework.homework_type != 3 %> -
      +
      • <%= student_work.user.show_name%>
      • @@ -24,9 +24,15 @@
      <% elsif @homework.homework_type == 3 && @homework.homework_detail_group.base_on_project == 1 %>
        -
      • - <%= student_work.project.name %> -
      • + <% if student_work.project.is_public || User.current.member_of?(student_work.project) || User.current.admin? %> +
      • + <%= link_to( student_work.project.name, project_path(student_work.project.id))%> +
      • + <% else %> +
      • + <%= student_work.project.name %> +
      • + <% end %>
      <% end %> diff --git a/app/views/student_work/_evaluation_work.html.erb b/app/views/student_work/_evaluation_work.html.erb index f97a8dd2d..ad2ee56c3 100644 --- a/app/views/student_work/_evaluation_work.html.erb +++ b/app/views/student_work/_evaluation_work.html.erb @@ -18,9 +18,9 @@ <%= link_to student_work_name, student_work_path(student_work),:remote => true,:title => student_work_name, :class => "linkGrey f14 StudentName break_word w230"%>
  • -
  • +
  • <% if @homework.homework_type != 3 %> -
      +
      • <%= student_work.user.show_name%>
      • @@ -30,9 +30,15 @@
      <% elsif @homework.homework_type == 3 && @homework.homework_detail_group.base_on_project == 1 %>
        -
      • - <%= student_work.project.name %> -
      • + <% if student_work.project.is_public || User.current.member_of?(student_work.project) || User.current.admin? %> +
      • + <%= link_to( student_work.project.name, project_path(student_work.project.id))%> +
      • + <% else %> +
      • + <%= student_work.project.name %> +
      • + <% end %>
      <% end %> From fcd168465861bf850cb2cdad91bdc2e785e9cbd0 Mon Sep 17 00:00:00 2001 From: cxt Date: Wed, 13 Apr 2016 11:20:38 +0800 Subject: [PATCH 16/28] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E6=8C=89=E6=9B=B4=E6=96=B0=E6=97=B6=E9=97=B4=E6=8E=92=E5=BA=8F?= =?UTF-8?q?=20=20=E4=BD=9C=E4=B8=9A=E5=88=97=E8=A1=A8=E5=B7=A6=E4=B8=8A?= =?UTF-8?q?=E8=A7=92=E6=B7=BB=E5=8A=A0=E4=BD=9C=E4=B8=9A=E7=9A=84=E4=B8=8B?= =?UTF-8?q?=E6=8B=89=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/homework_common_controller.rb | 6 ++++-- app/views/homework_common/index.html.erb | 16 +++++++++++++++- public/stylesheets/public.css | 2 +- 3 files changed, 20 insertions(+), 4 deletions(-) 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/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 @@
      -
      作业
      + +
      <%= render :partial => 'homework_search_form',:locals => {:course=>@course} %>
      diff --git a/public/stylesheets/public.css b/public/stylesheets/public.css index 9d37dc1cb..e48e9fad2 100644 --- a/public/stylesheets/public.css +++ b/public/stylesheets/public.css @@ -225,7 +225,7 @@ a.c_green{ color:#28be6c;} .c_dblue{ color:#09658c;} .b_blue{background:#64bdd9;} .b_green{background:#28be6c;} -.b_w{ background:#fff;} +.b_w{ background:#fff !important;} /*add by Tim*/ .fontGrey {color:#cecece;} From 4d581d07b85064937a358ec1ccbc67199ab2f0cc Mon Sep 17 00:00:00 2001 From: cxt Date: Wed, 13 Apr 2016 14:14:41 +0800 Subject: [PATCH 17/28] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E5=8F=91=E5=B8=83?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E9=80=89=E4=B8=AD=E7=A6=81=E7=94=A8=E5=8C=BF?= =?UTF-8?q?=E8=AF=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/users/_user_homework_form.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/users/_user_homework_form.html.erb b/app/views/users/_user_homework_form.html.erb index 54fe4396b..9689ecda0 100644 --- a/app/views/users/_user_homework_form.html.erb +++ b/app/views/users/_user_homework_form.html.erb @@ -173,7 +173,7 @@
      <% if !edit_mode || edit_mode && homework.homework_detail_manual.comment_status < 2 %>
      - + 禁用匿评
      <% end %> From f5122d7ef0cc898b6c00bd26c8afbe76a3ef3854 Mon Sep 17 00:00:00 2001 From: cxt Date: Wed, 13 Apr 2016 14:52:18 +0800 Subject: [PATCH 18/28] =?UTF-8?q?=E5=BE=AE=E4=BF=A1url=E5=88=87=E6=8D=A2?= =?UTF-8?q?=E5=88=B0=E6=AD=A3=E5=BC=8F=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/menu.yml | 2 +- public/javascripts/wechat/app.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/config/menu.yml b/config/menu.yml index fe2159e8c..d129f7aff 100644 --- a/config/menu.yml +++ b/config/menu.yml @@ -2,7 +2,7 @@ button: - type: "view" name: "最新动态" - url: "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxc09454f171153c2d&redirect_uri=https://test.course.trustie.net/assets/wechat/app.html#/activities?response_type=code&scope=snsapi_base&state=123#wechat_redirect" + url: "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxc09454f171153c2d&redirect_uri=https://www.trustie.net/assets/wechat/app.html#/activities?response_type=code&scope=snsapi_base&state=123#wechat_redirect" - type: "click" name: "意见返馈" diff --git a/public/javascripts/wechat/app.js b/public/javascripts/wechat/app.js index 5c60681a0..3970ce790 100644 --- a/public/javascripts/wechat/app.js +++ b/public/javascripts/wechat/app.js @@ -3,7 +3,7 @@ var apiUrl = '/api/v1/'; var debug = false; //调试标志,如果在本地请置为true if(debug===true){ - apiUrl = 'https://test.course.trustie.net/api/v1/'; + apiUrl = 'https://www.trustie.net/api/v1/'; } app.factory('auth', function($http,$routeParams, $cookies, $q){ From a21ea98b37a48668e86c464209556fc7957f102c Mon Sep 17 00:00:00 2001 From: cxt Date: Wed, 13 Apr 2016 15:14:35 +0800 Subject: [PATCH 19/28] =?UTF-8?q?=E4=B8=AA=E4=BA=BA=E4=B8=BB=E9=A1=B5?= =?UTF-8?q?=E4=B8=AD=E7=9A=84=E8=AF=BE=E7=A8=8B=E5=88=97=E8=A1=A8=E5=87=BA?= =?UTF-8?q?=E7=8E=B0=E9=87=8D=E5=A4=8D=E8=AF=BE=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/users_controller.rb | 4 ++-- app/views/layouts/_user_courses.html.erb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 52a610bc5..a715493af 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1124,13 +1124,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/views/layouts/_user_courses.html.erb b/app/views/layouts/_user_courses.html.erb index 872d842be..20bccfef3 100644 --- a/app/views/layouts/_user_courses.html.erb +++ b/app/views/layouts/_user_courses.html.erb @@ -70,6 +70,6 @@ <% if courses.size == 5%>
    • - +
    • <% end%> \ No newline at end of file From 42f960922a08479a25047646c814a1982297b2a7 Mon Sep 17 00:00:00 2001 From: cxt Date: Wed, 13 Apr 2016 15:39:05 +0800 Subject: [PATCH 20/28] =?UTF-8?q?=E4=B8=AA=E4=BA=BA=E4=B8=BB=E9=A1=B5?= =?UTF-8?q?=E7=9A=84=E9=A1=B9=E7=9B=AE=E6=8E=92=E5=BA=8F=E6=8C=89=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E6=97=B6=E9=97=B4=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/layouts/new_base_user.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/layouts/new_base_user.html.erb b/app/views/layouts/new_base_user.html.erb index c90c69f75..090db06dd 100644 --- a/app/views/layouts/new_base_user.html.erb +++ b/app/views/layouts/new_base_user.html.erb @@ -217,7 +217,7 @@ <%=link_to "", new_project_path(:host=> Setting.host_name), :class => "homepageMenuSetting fr", :style => "margin-right:10px;", :title => "新建项目"%> <% end%>
      - <% 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)%> + <% 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)%>
        <%= render :partial => 'layouts/user_projects', :locals => {:projects => projects,:user => @user, :page => 0} %> From 062af3c57a747e0c77e23a4d399d65b91d6adf22 Mon Sep 17 00:00:00 2001 From: cxt Date: Wed, 13 Apr 2016 16:11:57 +0800 Subject: [PATCH 21/28] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E7=A7=AF=E5=88=86?= =?UTF-8?q?=E5=87=BA=E7=8E=B0=E8=B4=9F=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/courses_controller.rb | 4 ++-- app/helpers/courses_helper.rb | 2 +- app/models/member.rb | 2 +- app/views/courses/_show_member_score.html.erb | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index dfa30915e..cccbb3387 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -1079,7 +1079,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} @@ -1091,7 +1091,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/helpers/courses_helper.rb b/app/helpers/courses_helper.rb index 37c7deb4c..7dd39e8cb 100644 --- a/app/helpers/courses_helper.rb +++ b/app/helpers/courses_helper.rb @@ -865,7 +865,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/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/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 %> From 288935384477b57531eac60856157a7df4e28a3f Mon Sep 17 00:00:00 2001 From: cxt Date: Wed, 13 Apr 2016 16:27:20 +0800 Subject: [PATCH 22/28] =?UTF-8?q?=E4=BD=9C=E5=93=81=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E4=B8=AD=E7=9A=84=E2=80=9C=E6=9C=AA=E5=8F=82=E4=B8=8E=E2=80=9D?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0tip=EF=BC=9A=E2=80=9C=E8=AF=A5=E4=BD=9C?= =?UTF-8?q?=E5=93=81=E6=9C=AA=E8=A2=AB=E5=8C=BF=E8=AF=84=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/student_work/_evaluation_un_work.html.erb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/views/student_work/_evaluation_un_work.html.erb b/app/views/student_work/_evaluation_un_work.html.erb index 57dd786eb..0a3796758 100644 --- a/app/views/student_work/_evaluation_un_work.html.erb +++ b/app/views/student_work/_evaluation_un_work.html.erb @@ -63,7 +63,11 @@ <% if @homework.anonymous_comment == 0%>
      • - <%= student_work.student_score.nil? ? "未参与" : format("%.1f",student_work.student_score)%> + <% if student_work.student_score.nil? %> + 未参与 + <% else %> + <%=format("%.1f",student_work.student_score) %> + <% end %> <% unless student_work.student_score.nil?%> (<%= student_work.student_works_scores.where(:reviewer_role => 3).count%>) From f97699037b766a7cb7164c1c2f87633a351ab332 Mon Sep 17 00:00:00 2001 From: cxt Date: Wed, 13 Apr 2016 16:58:44 +0800 Subject: [PATCH 23/28] =?UTF-8?q?=E5=86=B2=E7=AA=81=E8=A7=A3=E5=86=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/layouts/new_base_user.html.erb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/views/layouts/new_base_user.html.erb b/app/views/layouts/new_base_user.html.erb index c6231de11..14c739009 100644 --- a/app/views/layouts/new_base_user.html.erb +++ b/app/views/layouts/new_base_user.html.erb @@ -232,10 +232,10 @@ <% if @user.projects.visible.count > 0 project_order_ids = "(" + - ForgeActivity.find_by_sql("SELECT p.project_id, p.created_at FROM - (SELECT fa.project_id, MAX(fa.created_at) AS created_at FROM forge_activities fa WHERE fa.project_id IN (" + @user.projects.visible.select('projects.id').map{|p| p.id}.join(',') + ") + ForgeActivity.find_by_sql("SELECT p.project_id, p.updated_at FROM + (SELECT fa.project_id, MAX(fa.updated_at) AS updated_at FROM forge_activities fa WHERE fa.project_id IN (" + @user.projects.visible.select('projects.id').map{|p| p.id}.join(',') + ") GROUP BY fa.project_id) AS p - ORDER BY p.created_at DESC limit 5").map {|p| p.project_id}.join(",") + ")" + ORDER BY p.updated_at DESC limit 5").map {|p| p.project_id}.join(",") + ")" projects = Project.where("projects.id in #{project_order_ids}") else projects = [] From 13576ca477ce30bbd8d5e88d5f93959fcdd8333b Mon Sep 17 00:00:00 2001 From: txz Date: Thu, 14 Apr 2016 09:43:43 +0800 Subject: [PATCH 24/28] app.js --- public/javascripts/wechat/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/javascripts/wechat/app.js b/public/javascripts/wechat/app.js index 3970ce790..bedd79ed4 100644 --- a/public/javascripts/wechat/app.js +++ b/public/javascripts/wechat/app.js @@ -10,7 +10,7 @@ app.factory('auth', function($http,$routeParams, $cookies, $q){ var _openid = ''; if(debug===true){ - _openid = "2"; + _openid = "1"; } var getOpenId = function() { From 76cfa836668f5a785d4ae0a953364d022e453da5 Mon Sep 17 00:00:00 2001 From: cxt Date: Thu, 14 Apr 2016 10:47:53 +0800 Subject: [PATCH 25/28] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1234567 | 2 +- app/models/blog_comment.rb | 7 +- app/models/comment.rb | 5 +- app/models/homework_common.rb | 6 +- app/models/issue.rb | 3 +- app/models/journal.rb | 3 +- app/models/journals_for_message.rb | 8 +- app/models/message.rb | 9 ++- app/models/news.rb | 3 +- app/services/wechat_service.rb | 113 +++++++++++++++++++++++++++++ 10 files changed, 141 insertions(+), 18 deletions(-) create mode 100644 app/services/wechat_service.rb diff --git a/1234567 b/1234567 index 62c5e6df2..459204fe5 100644 --- a/1234567 +++ b/1234567 @@ -1 +1 @@ -{"access_token":"ONE7uqb5MhyuYiOtMkzUMPJs8krCiQeBjWek_Q9glYtfCH-kkQKzv84dgxUv5VLBnb5zdKajWDyHqocvu71UwlVuVFhsXs9MwbVdCu1i4l2L5vKCkhNE5GuyO6WisXfvKOUfAEAYCI","expires_in":7200,"got_token_at":1460441290} +{"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/models/blog_comment.rb b/app/models/blog_comment.rb index 359522f9a..62451591f 100644 --- a/app/models/blog_comment.rb +++ b/app/models/blog_comment.rb @@ -77,13 +77,14 @@ class BlogComment < ActiveRecord::Base end #博客回复微信模板消息 - def blog_wechat_message + def blog_wechat_message + ws = WechatService.new if self.parent_id.nil? self.author.watcher_users.each do |watcher| - Wechat.api.message_update_template watcher.id, "#{l(:label_new_blog_template)}", self.author.try(:realname) + " 发表了博客:" + self.title.html_safe, format_time(self.created_at) + 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 - Wechat.api.comment_template self.parent.author_id, "#{l(:label_blog_comment_template)}", self.author.try(:realname), format_time(self.created_at), self.content.html_safe + 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 59835cfc9..9a752129b 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -41,15 +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) - Wechat.api.comment_template self.commented.author_id, "#{l(:label_notice_comment_template)}", self.author.try(:realname), format_time(self.created_on), self.comments.html_safe + 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) - Wechat.api.comment_template self.commented.author_id, "#{l(:label_news_comment_template)}", self.author.try(:realname), format_time(self.created_on), self.comments.html_safe + 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 2774295a1..663bd6065 100644 --- a/app/models/homework_common.rb +++ b/app/models/homework_common.rb @@ -59,7 +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) - Wechat.api.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") + 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 @@ -105,7 +106,8 @@ class HomeworkCommon < ActiveRecord::Base #修改作业后发送微信模板消息 def wechat_message self.course.members.each do |member| - Wechat.api.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") + 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 45347b5ad..5124dd54b 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -159,7 +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) - Wechat.api.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) + 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 95aab7f96..80d585b06 100644 --- a/app/models/journal.rb +++ b/app/models/journal.rb @@ -239,6 +239,7 @@ class Journal < ActiveRecord::Base #缺陷回复微信模板消息 def issue_wechat_message - Wechat.api.comment_template self.issue.author_id, "#{l(:label_issue_comment_template)}", self.user.try(:realname), format_time(self.created_on), self.notes.html_safe + 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 ce18e1bdb..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' - Wechat.api.comment_template self.jour.user_id, "#{l(:label_homework_comment_template)}", self.user.try(:realname), format_time(self.created_on), self.notes.html_safe + 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 - Wechat.api.message_update_template self.jour_id, "#{l(:label_new_journals_template)}", self.notes.html_safe, format_time(self.created_on) + 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,7 +281,7 @@ class JournalsForMessage < ActiveRecord::Base if self.user_id != self.parent.jour_id && self.reply_id != self.parent.jour_id # 给东家发信息,如果回复的对象是东家则不发 receivers << self.parent.jour end - Wechat.api.comment_template self.reply_id, "#{l(:label_journals_comment_template)}", self.user.try(:realname), format_time(self.created_on), self.notes.html_safe + 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) diff --git a/app/models/message.rb b/app/models/message.rb index 2ff900858..2f4637042 100644 --- a/app/models/message.rb +++ b/app/models/message.rb @@ -260,19 +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) - Wechat.api.topic_publish_template m.user_id, "#{l(:label_course_topic_template)}", self.subject, self.author.try(:realname), format_time(self.created_on) + 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) - Wechat.api.comment_template m.user_id, "#{l(:label_topic_comment_template)}", self.author.try(:realname), format_time(self.created_on), self.content.html_safe + 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 @@ -281,14 +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) - Wechat.api.topic_publish_template m.user_id, "#{l(:label_project_topic_template)}", self.subject, self.author.try(:realname), format_time(self.created_on) + 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) - Wechat.api.comment_template m.user_id, "#{l(:label_topic_comment_template)}", self.author.try(:realname), format_time(self.created_on), self.content.html_safe + 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 967516e65..25a70095f 100644 --- a/app/models/news.rb +++ b/app/models/news.rb @@ -170,7 +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) - Wechat.api.message_update_template m.user_id, "#{l(:label_new_notice_template)}", self.author.try(:realname) + " 发布了通知:" + self.title.html_safe, format_time(self.created_on) + 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/services/wechat_service.rb b/app/services/wechat_service.rb new file mode 100644 index 000000000..e0a5feca8 --- /dev/null +++ b/app/services/wechat_service.rb @@ -0,0 +1,113 @@ +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 From d33f839b955a4750d269821b2391510fa741127e Mon Sep 17 00:00:00 2001 From: cxt Date: Thu, 14 Apr 2016 10:57:37 +0800 Subject: [PATCH 26/28] =?UTF-8?q?=E4=B8=AD=E6=96=87=E5=AD=97=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/wechat_service.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/services/wechat_service.rb b/app/services/wechat_service.rb index e0a5feca8..ae097ad4a 100644 --- a/app/services/wechat_service.rb +++ b/app/services/wechat_service.rb @@ -1,3 +1,4 @@ +#encoding: utf-8 class WechatService def template_data(openid, template_id, first, key1, key2, key3, remark="具体内容请点击详情查看网站") From a8dce5e520bf0d7a404e0cf9d89bbc3778cd29cc Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Thu, 14 Apr 2016 11:29:22 +0800 Subject: [PATCH 27/28] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=9F=A5=E9=87=8D?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=A2=9E=E5=8A=A0,=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=91=98=E7=95=8C=E9=9D=A2=E5=A2=9E=E5=8A=A0=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E5=88=97=E8=A1=A8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/admin_controller.rb | 10 + app/controllers/courses_controller.rb | 61 ++ app/controllers/student_work_controller.rb | 121 ++- app/models/homework_common.rb | 2 +- app/models/student_work.rb | 2 +- app/views/admin/code_work_tests.html.erb | 96 +++ .../courses/_compare_code_tips_1.html.erb | 101 +++ .../courses/_compare_code_tips_2.html.erb | 22 + app/views/courses/_show_compare_code.html.erb | 16 + app/views/courses/code_repeat.html.erb | 79 ++ app/views/courses/show_comparecode.js.erb | 101 +++ .../student_work/_evaluation_work.html.erb | 6 +- .../_programing_work_show.html.erb | 13 +- .../student_work/_student_work_list.html.erb | 146 ++++ .../student_work/show_allwork_test.html.erb | 2 + .../users/new_user_commit_homework.html.erb | 23 +- app/views/users/user_commit_homework.html.erb | 22 +- config/locales/zh.yml | 5 +- config/routes.rb | 6 +- ...20160330094039_add_simi_id_to_homeworks.rb | 6 + ...95711_add_simi_time_to_homework_commons.rb | 5 + db/schema.rb | 5 +- lib/redmine.rb | 1 + public/assets/codemirror/merge.css | 113 +++ public/assets/codemirror/merge.js | 774 ++++++++++++++++++ public/javascripts/course.js | 5 +- public/javascripts/homework.js | 3 +- public/stylesheets/application.css | 23 + public/stylesheets/courses.css | 11 + 29 files changed, 1737 insertions(+), 43 deletions(-) create mode 100644 app/views/admin/code_work_tests.html.erb create mode 100644 app/views/courses/_compare_code_tips_1.html.erb create mode 100644 app/views/courses/_compare_code_tips_2.html.erb create mode 100644 app/views/courses/_show_compare_code.html.erb create mode 100644 app/views/courses/code_repeat.html.erb create mode 100644 app/views/courses/show_comparecode.js.erb create mode 100644 app/views/student_work/show_allwork_test.html.erb create mode 100644 db/migrate/20160330094039_add_simi_id_to_homeworks.rb create mode 100644 db/migrate/20160330095711_add_simi_time_to_homework_commons.rb create mode 100644 public/assets/codemirror/merge.css create mode 100644 public/assets/codemirror/merge.js diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb index c7aa42b9e..8009feac1 100644 --- a/app/controllers/admin_controller.rb +++ b/app/controllers/admin_controller.rb @@ -556,4 +556,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 515b94392..942b3b2d2 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -885,6 +885,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'} @@ -925,6 +926,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 diff --git a/app/controllers/student_work_controller.rb b/app/controllers/student_work_controller.rb index 32867090c..ae78bf920 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/models/homework_common.rb b/app/models/homework_common.rb index f8e222b0f..283fea058 100644 --- a/app/models/homework_common.rb +++ b/app/models/homework_common.rb @@ -1,7 +1,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 include Redmine::SafeAttributes include ApplicationHelper 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/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)%> +

        + +  + + +
        +
  • 发布者:{{homework.author.realname}} + {{homework.author.realname}} + {{homework.author.nickname}}
    来   源:
    + + + + + + + + + + + + + + <% @code_work_tests.each do |test| %> + "> + + + + + + + + + + <% end %> + +
    + 作业id + + 平均等待时间 + + 语言 + + 提交测试时间 + + 答题状态 + + 测试集数 + + 最小耗时 + + 最大耗时 +
    + <%=link_to(test.homeworkid, student_work_index_path(:homework => test.homeworkid))%> + + <% 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+"毫秒" %> + <% else %> + <%="未记录"%> + <% end %> + + <%=%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")%> + + <% if test.status == 0 %> + <%= "答题正确" %> + <% elsif test.status == -2 %> + <%= "编译错误" %> + <% elsif test.status == 2 || test.results.last['status'] == 2 %> + <%= "超时" %> + <% 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+"毫秒"%> + <% end %> +
    +
    + + + +<% 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 @@ +
    +
    +

    <%=des%>

    +
    + 确定 +
    +
    +
    +
    +
    + + \ 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%>

    + + +
    +
    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/student_work/_evaluation_work.html.erb b/app/views/student_work/_evaluation_work.html.erb index f97a8dd2d..1e96a2771 100644 --- a/app/views/student_work/_evaluation_work.html.erb +++ b/app/views/student_work/_evaluation_work.html.erb @@ -1,10 +1,10 @@
      <% if @homework.homework_type != 3 %> - <% is_my_work = student_work.user == User.current%> + <% is_my_work = student_work.user == User.current%> <% else %> - <% pro = @homework.student_work_projects.where(:user_id => User.current.id).first %> - <% is_my_work = pro && pro.student_work_id == student_work.id%> + <% pro = @homework.student_work_projects.where(:user_id => User.current.id).first %> + <% is_my_work = pro && pro.student_work_id == student_work.id%> <% end %>
      • diff --git a/app/views/student_work/_programing_work_show.html.erb b/app/views/student_work/_programing_work_show.html.erb index 6009dfbb5..bc516f994 100644 --- a/app/views/student_work/_programing_work_show.html.erb +++ b/app/views/student_work/_programing_work_show.html.erb @@ -1,3 +1,4 @@ +
          @@ -69,16 +70,14 @@ 正确输出:
          <%=x["output"]%>
          - <% if x["status"].to_i == 2 %> - 耗时: -
          <%=x["time_used"]%>毫秒
          - <% end %> + 耗时: +
          <%=x["time_used"]==0?1:x["time_used"]%>毫秒
          <% else %> - 测试正确! - - +   + 耗时: +
          <%=x["time_used"]==0?1:x["time_used"]%>毫秒
          <% end %> diff --git a/app/views/student_work/_student_work_list.html.erb b/app/views/student_work/_student_work_list.html.erb index 8b2f57723..db15e94fb 100644 --- a/app/views/student_work/_student_work_list.html.erb +++ b/app/views/student_work/_student_work_list.html.erb @@ -18,6 +18,9 @@
        + <%if @homework.homework_type == 2 %> + 代码查重 + <% end %> <%= select_tag(:student_work_in_group,options_for_select(course_group_list(@course),@group), {:class => "classSplit"}) unless course_group_list(@course).empty? %> <% end%> @@ -45,6 +48,7 @@
        <% end%> \ No newline at end of file diff --git a/app/views/student_work/show_allwork_test.html.erb b/app/views/student_work/show_allwork_test.html.erb new file mode 100644 index 000000000..139597f9c --- /dev/null +++ b/app/views/student_work/show_allwork_test.html.erb @@ -0,0 +1,2 @@ + + diff --git a/app/views/users/new_user_commit_homework.html.erb b/app/views/users/new_user_commit_homework.html.erb index f8635194d..e84b7a95e 100644 --- a/app/views/users/new_user_commit_homework.html.erb +++ b/app/views/users/new_user_commit_homework.html.erb @@ -2,7 +2,6 @@ <%= javascript_include_tag "/assets/codemirror/codemirror_python_ruby_c" %> <%= javascript_include_tag 'homework','baiduTemplate' %> <%= stylesheet_link_tag "/assets/codemirror/codemirror" %> - <% end %>