From cb6750cd0143be1cca0db89c48cfc52fcde463a6 Mon Sep 17 00:00:00 2001 From: Tim Date: Fri, 5 Aug 2016 14:50:10 +0800 Subject: [PATCH 01/98] =?UTF-8?q?=E8=BE=93=E5=85=A5=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E5=BF=98=E8=AE=B0=E5=AF=86=E7=A0=81=E5=92=8C=E7=BB=91=E5=AE=9A?= =?UTF-8?q?=E6=8C=89=E9=92=AE=E9=87=8D=E5=90=88=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/wechat/login.html | 2 +- public/stylesheets/weui/weixin.css | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/public/assets/wechat/login.html b/public/assets/wechat/login.html index 61c9b9de3..05d844ca8 100644 --- a/public/assets/wechat/login.html +++ b/public/assets/wechat/login.html @@ -17,7 +17,7 @@
确定绑定
-
忘记密码?
+
忘记密码?
diff --git a/public/stylesheets/weui/weixin.css b/public/stylesheets/weui/weixin.css index 8eabdd420..59bdcd7d9 100644 --- a/public/stylesheets/weui/weixin.css +++ b/public/stylesheets/weui/weixin.css @@ -230,8 +230,7 @@ a.underline {text-decoration:underline;} .login-box{display:inline-block; width:14px; height:14px; line-height:14px; text-align:center; vertical-align:middle; border:1px solid #ccc; background:#fff; border-radius:3px; color:#fff; cursor:pointer;} .login-box.checked{background:#63c360; border:1px solid #63c360;} .login-box.checked:after{content:url(/images/wechat/checked.png);} -.forget-psw-wrap {width:60px; margin:0 auto;} -.forget-psw {position:fixed; bottom:10px;} +.forget-psw-wrap {width:60px; margin:30px auto;} /*二级回复*/ .mult-reply-container{ border:solid 1px #f3ddb3; background:#fffef4; padding:4px;color:#999;} From 762fdfe634db4914e6256c1303a686d526695065 Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Fri, 5 Aug 2016 20:31:51 +0800 Subject: [PATCH 02/98] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/mobile/apis/courses.rb | 12 ++++++++++++ app/api/mobile/entities/course.rb | 4 ++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/app/api/mobile/apis/courses.rb b/app/api/mobile/apis/courses.rb index 575048211..369185ca2 100644 --- a/app/api/mobile/apis/courses.rb +++ b/app/api/mobile/apis/courses.rb @@ -167,8 +167,20 @@ module Mobile requires :course_id, type: Integer, desc: "课程id" end get 'teachers' do + + course = Course.find(params[:course_id]) + cs = CoursesService.new teachers = cs.course_teacher_or_student_list({role: '1'}, params[:course_id],current_user) + + teachers.each do |m| + if m[:id] == course.tea_id + teachers.delete(m) + teachers.insert(0,m) + break + end + end + present :data, teachers, with: Mobile::Entities::User present :status, 0 end diff --git a/app/api/mobile/entities/course.rb b/app/api/mobile/entities/course.rb index aaf5dd78b..925c4d7a7 100644 --- a/app/api/mobile/entities/course.rb +++ b/app/api/mobile/entities/course.rb @@ -65,9 +65,9 @@ module Mobile end member = course.members.where("user_id=#{current_user.id} and course_id=#{course.id}")[0] - roleName = member.roles[0].name if member + role_ids = member.role_ids if member - if roleName && (roleName == "TeachingAsistant" || roleName == "Teacher" ) + if role_ids && (role_ids.include?(7) || role_ids.include?(9) ) can_setting = true end From 2b7ff3c76bba05508ac188ab8d0a7bb2902d0b71 Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Tue, 9 Aug 2016 09:23:06 +0800 Subject: [PATCH 03/98] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=90=84=E4=B8=AA?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E9=AA=8C=E8=AF=81=E7=BB=91=E5=AE=9A=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E7=9A=84=E6=96=B9=E5=BC=8F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/mobile/apis/users.rb | 6 ++-- app/controllers/wechats_controller.rb | 28 ++++++++++++++----- app/models/homework_common.rb | 2 +- app/services/projects_service.rb | 7 ++++- config/routes.rb | 1 + public/assets/wechat/join_project.html | 7 +++++ .../wechat/controllers/activity.js | 4 +++ .../javascripts/wechat/controllers/class.js | 3 +- .../wechat/controllers/class_list.js | 6 ++-- .../wechat/controllers/edit_class.js | 4 ++- .../wechat/controllers/edit_class_member.js | 4 ++- .../wechat/controllers/edit_project_member.js | 4 ++- .../wechat/controllers/join_class.js | 4 ++- .../wechat/controllers/join_project.js | 4 ++- .../wechat/controllers/myresource.js | 4 ++- .../wechat/controllers/new_class.js | 4 ++- .../wechat/controllers/new_project.js | 4 ++- .../javascripts/wechat/controllers/project.js | 2 ++ .../wechat/controllers/project_list.js | 6 ++-- .../wechat/controllers/review_class_member.js | 4 ++- .../controllers/review_project_member.js | 4 ++- .../wechat/controllers/send_class_list.js | 4 ++- public/javascripts/wechat/others/factory.js | 17 +++++++++-- 23 files changed, 104 insertions(+), 29 deletions(-) diff --git a/app/api/mobile/apis/users.rb b/app/api/mobile/apis/users.rb index 9b1be37c3..34558563d 100644 --- a/app/api/mobile/apis/users.rb +++ b/app/api/mobile/apis/users.rb @@ -27,7 +27,8 @@ module Mobile post 'wxbind' do openid = session[:wechat_openid] logger.debug "openid ============== #{openid}" - raise "无法获取到openid,请在微信中打开本页面" unless openid + # raise "无法获取到openid,请在微信中打开本页面" unless openid + raise "请在微信中关注公众号'Trustie创新实践平台'后再打开本页面" unless openid uw = UserWechat.where(openid: openid).first raise "此微信号已绑定用户(#{uw.user.login}), 不能重复绑定" if uw @@ -56,7 +57,8 @@ module Mobile openid = session[:wechat_openid] logger.debug "openid ============== #{openid}" - raise "无法获取到openid,请在微信中打开本页面" unless openid + # raise "无法获取到openid,请在微信中打开本页面" unless openid + raise "请在微信中关注Trustie创新实践平台后再打开本页面" unless openid us = UsersService.new diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index c5ef8c24e..cbeaf851d 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -284,7 +284,7 @@ class WechatsController < ActionController::Base end news = (1..1).each_with_object([]) { |n, memo| memo << { title: '恭喜您成功加入班级,开始学习吧!', - content: "课程名称:#{course.name}\n班级名称:#{course.name}\n任课老师:#{course.teacher.show_name}\n进入班级,和小伙伴愉快的学习吧!"} } + content: "课程名称:#{course.syllabus.name}\n班级名称:#{course.name}\n任课老师:#{course.teacher.show_name}\n进入班级,和小伙伴愉快的学习吧!"} } return request.reply.news(news) do |article, n, index| # article is return object url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=#{Wechat.config.appid}&redirect_uri=#{ROOT_URL+'/wechat/user_activities#/class?id='+course.id.to_s}&response_type=code&scope=snsapi_base&state=myclass#wechat_redirect" pic_url = "#{ROOT_URL}/images/wechat/class.jpg" @@ -333,7 +333,9 @@ class WechatsController < ActionController::Base code = params[:code] || session[:wechat_code] openid = get_openid_from_code(code) - raise "无法获取到微信openid" unless openid + # raise "无法获取到微信openid" unless openid + + raise "请在微信中关注Trustie创新实践平台后再打开本页面" unless openid uw = UserWechat.where(openid: openid).first raise "还未绑定trustie帐户" unless uw @@ -349,13 +351,25 @@ class WechatsController < ActionController::Base end end + def is_bind + begin + code = params[:code] || session[:wechat_code] + open_id = get_openid_from_code(code) + raise "还未绑定trustie帐户" unless user_binded?(open_id) + render :json => {status: 0} + rescue Exception=>e + render :json => {status: -1, message: e.message} + end + end + def bind begin code = params[:code] || session[:wechat_code] openid = get_openid_from_code(code) - raise "无法获取到openid,请在微信中打开本页面" unless openid + # raise "无法获取到openid,请在微信中打开本页面" unless openid + raise "请在微信中关注Trustie创新实践平台后再打开本页面" unless openid raise "此微信号已绑定用户,不能重复绑定" if user_binded?(openid) user, last_login_on = User.try_to_login(params[:username], params[:password]) @@ -399,9 +413,9 @@ class WechatsController < ActionController::Base render 'wechats/open_wechat', layout: nil and return end - unless user_binded?(open_id) - @path = '/login' - else + # unless user_binded?(open_id) + # @path = '/login' + # else if params[:state] == 'myclass' @course_id = params[:id]; elsif params[:state] == 'myproject' @@ -412,7 +426,7 @@ class WechatsController < ActionController::Base if params[:code] redirect_to "/wechat/user_activities##{@path}?id=#{params[:id]}" and return end - end + # end render 'wechats/user_activities', layout: nil end diff --git a/app/models/homework_common.rb b/app/models/homework_common.rb index a915b1545..79297cf81 100644 --- a/app/models/homework_common.rb +++ b/app/models/homework_common.rb @@ -63,7 +63,7 @@ class HomeworkCommon < ActiveRecord::Base count = ShieldWechatMessage.where("container_type='User' and container_id=#{m.user_id} and shield_type='Course' and shield_id=#{self.course_id}").count if count == 0 ws = WechatService.new - ws.homework_message_notice(m.user_id, "homework", self.id, "#{m.user.show_name},#{l(:label_new_homework_template)}:", self.course.name, "新作业:"+ self.name.html_safe, "作业内容请点击“详情”查看。") + ws.homework_message_notice(m.user_id, "homework", self.id, "#{m.user.show_name},#{l(:label_new_homework_template)}", self.course.name, "新作业:"+ self.name.html_safe, "作业内容请点击“详情”查看。") end # end end diff --git a/app/services/projects_service.rb b/app/services/projects_service.rb index 1b342c122..aead2b3c6 100644 --- a/app/services/projects_service.rb +++ b/app/services/projects_service.rb @@ -239,7 +239,12 @@ class ProjectsService if apply_message if user.member_of?(project) message = "已经是该项目的成员了" - applied_messages.update_all(:status=>7) + u_member = project.member_principals.includes(:roles, :principal).where("user_id=?",params[:user_id]).first + if u_member.member_roles[0].role_id == 5 + applied_messages.update_all(:status=>5) + else + applied_messages.update_all(:status=>7) + end else applied_project = apply_message.applied ap_role = applied_project.try(:role) diff --git a/config/routes.rb b/config/routes.rb index b7a743591..397530806 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1325,6 +1325,7 @@ RedmineApp::Application.routes.draw do get :user_activities post :bind post :get_bind + post :is_bind end end diff --git a/public/assets/wechat/join_project.html b/public/assets/wechat/join_project.html index c2c0ec993..61be93cfd 100644 --- a/public/assets/wechat/join_project.html +++ b/public/assets/wechat/join_project.html @@ -9,6 +9,13 @@
  • +
    + 提示 + +
    取消 确定 diff --git a/public/javascripts/wechat/controllers/activity.js b/public/javascripts/wechat/controllers/activity.js index 7066da4d9..179845863 100644 --- a/public/javascripts/wechat/controllers/activity.js +++ b/public/javascripts/wechat/controllers/activity.js @@ -2,6 +2,10 @@ app.controller('ActivityController', ['$anchorScroll', '$location','$scope', '$http', '$timeout', 'auth', 'rms', 'common','alertService', function($anchorScroll, $location,$scope, $http, $timeout, auth, rms, common, alertService){ + + common.checklogin(); + + $scope.replaceUrl = function(url){ return url; }; diff --git a/public/javascripts/wechat/controllers/class.js b/public/javascripts/wechat/controllers/class.js index 04807b2dd..a32c581c9 100644 --- a/public/javascripts/wechat/controllers/class.js +++ b/public/javascripts/wechat/controllers/class.js @@ -1,4 +1,5 @@ -app.controller('ClassController', ['$scope', 'config','$http', 'auth','$location','$routeParams','alertService','rms', function($scope, config, $http, auth, $location, $routeParams,alertService,rms){ +app.controller('ClassController', ['$scope', 'config','$http', 'auth','$location','$routeParams','alertService','rms','common', function($scope, config, $http, auth, $location, $routeParams,alertService,rms,common){ + common.checkLogin(); var vm = $scope; var courseid = $routeParams.id; diff --git a/public/javascripts/wechat/controllers/class_list.js b/public/javascripts/wechat/controllers/class_list.js index 48e778f9d..d6b1ec68f 100644 --- a/public/javascripts/wechat/controllers/class_list.js +++ b/public/javascripts/wechat/controllers/class_list.js @@ -3,8 +3,10 @@ */ -app.controller('ClassListController', ['$scope', 'config', 'auth', '$http', '$location', 'alertService','rms', - function ($scope, config, auth, $http, $location, alertService,rms) { +app.controller('ClassListController', ['$scope', 'config', 'auth', '$http', '$location', 'alertService','rms','common' + function ($scope, config, auth, $http, $location, alertService,rms,common) { + common.checkLogin(); + var vm = $scope; vm.syllabuses = rms.get('syllabuses') || []; diff --git a/public/javascripts/wechat/controllers/edit_class.js b/public/javascripts/wechat/controllers/edit_class.js index 0a09ce1e3..30c78e35a 100644 --- a/public/javascripts/wechat/controllers/edit_class.js +++ b/public/javascripts/wechat/controllers/edit_class.js @@ -1,6 +1,8 @@ -app.controller('EditClassController', ['$scope', '$http', 'auth', 'config', 'alertService','$location','$routeParams','rms', function($scope, $http, auth, config, alertService, $location,$routeParams, rms){ +app.controller('EditClassController', ['$scope', '$http', 'auth', 'config', 'alertService','$location','$routeParams','rms','common', function($scope, $http, auth, config, alertService, $location,$routeParams, rms,common){ + common.checkLogin(); + var vm = $scope; vm.syllabus = rms.get('current_edit_syllobus'); diff --git a/public/javascripts/wechat/controllers/edit_class_member.js b/public/javascripts/wechat/controllers/edit_class_member.js index b3c28ea0b..7b28e1f4a 100644 --- a/public/javascripts/wechat/controllers/edit_class_member.js +++ b/public/javascripts/wechat/controllers/edit_class_member.js @@ -1,6 +1,8 @@ -app.controller('EditClassMemberController', ['$scope', '$http', 'auth', 'config', 'alertService','$location','$routeParams','rms', function($scope, $http, auth, config, alertService, $location,$routeParams, rms){ +app.controller('EditClassMemberController', ['$scope', '$http', 'auth', 'config', 'alertService','$location','$routeParams','rms','common', function($scope, $http, auth, config, alertService, $location,$routeParams, rms,common){ + common.checkLogin(); + var vm = $scope; // vm.current_edit_member = rms.get('current_edit_member'); diff --git a/public/javascripts/wechat/controllers/edit_project_member.js b/public/javascripts/wechat/controllers/edit_project_member.js index 3fd24f04e..d5b8788d8 100644 --- a/public/javascripts/wechat/controllers/edit_project_member.js +++ b/public/javascripts/wechat/controllers/edit_project_member.js @@ -1,6 +1,8 @@ -app.controller('EditProjectMemberController', ['$scope', '$http', 'auth', 'config', 'alertService','$location','$routeParams','rms', function($scope, $http, auth, config, alertService, $location,$routeParams, rms){ +app.controller('EditProjectMemberController', ['$scope', '$http', 'auth', 'config', 'alertService','$location','$routeParams','rms','common', function($scope, $http, auth, config, alertService, $location,$routeParams, rms,common){ + common.checkLogin(); + var vm = $scope; // vm.current_edit_member = rms.get('current_edit_member'); diff --git a/public/javascripts/wechat/controllers/join_class.js b/public/javascripts/wechat/controllers/join_class.js index 3f1a28387..3992a8ae3 100644 --- a/public/javascripts/wechat/controllers/join_class.js +++ b/public/javascripts/wechat/controllers/join_class.js @@ -1,6 +1,8 @@ -app.controller('JoinClassController', ['$scope', '$http', 'auth', 'config', 'alertService','$location','$routeParams','rms','wx', function($scope, $http, auth, config, alertService, $location,$routeParams, rms,wx){ +app.controller('JoinClassController', ['$scope', '$http', 'auth', 'config', 'alertService','$location','$routeParams','rms','wx','common', function($scope, $http, auth, config, alertService, $location,$routeParams, rms,wx,common){ + common.checkLogin(); + var vm = $scope; // vm.current_edit_member = rms.get('current_edit_member'); diff --git a/public/javascripts/wechat/controllers/join_project.js b/public/javascripts/wechat/controllers/join_project.js index f27c535c5..915277d3b 100644 --- a/public/javascripts/wechat/controllers/join_project.js +++ b/public/javascripts/wechat/controllers/join_project.js @@ -1,6 +1,8 @@ -app.controller('JoinProjectController', ['$scope', '$http', 'auth', 'config', 'alertService','$location','$routeParams','rms','wx', function($scope, $http, auth, config, alertService, $location,$routeParams, rms,wx){ +app.controller('JoinProjectController', ['$scope', '$http', 'auth', 'config', 'alertService','$location','$routeParams','rms','wx','common', function($scope, $http, auth, config, alertService, $location,$routeParams, rms,wx,common){ + common.checkLogin(); + var vm = $scope; // vm.current_edit_member = rms.get('current_edit_member'); diff --git a/public/javascripts/wechat/controllers/myresource.js b/public/javascripts/wechat/controllers/myresource.js index b5489c065..706827b8e 100644 --- a/public/javascripts/wechat/controllers/myresource.js +++ b/public/javascripts/wechat/controllers/myresource.js @@ -1,4 +1,6 @@ -app.controller('MyResourceController', ['$scope', '$http', 'auth', 'config', '$location', 'rms', function($scope, $http, auth, config, $location,rms){ +app.controller('MyResourceController', ['$scope', '$http', 'auth', 'config', '$location', 'rms','common', function($scope, $http, auth, config, $location,rms,common){ + common.checkLogin(); + var vm = $scope; // vm.menus = ['课件', '作业', '测验']; vm.menus = ['课件', '作业']; diff --git a/public/javascripts/wechat/controllers/new_class.js b/public/javascripts/wechat/controllers/new_class.js index 5e9f339a1..0a8ea25b2 100644 --- a/public/javascripts/wechat/controllers/new_class.js +++ b/public/javascripts/wechat/controllers/new_class.js @@ -1,6 +1,8 @@ -app.controller('NewClassController', ['$scope', '$http', 'auth', 'config', 'alertService','$location','rms', function($scope, $http, auth, config, alertService, $location,rms){ +app.controller('NewClassController', ['$scope', '$http', 'auth', 'config', 'alertService','$location','rms','common', function($scope, $http, auth, config, alertService, $location,rms,common){ + common.checkLogin(); + var vm = $scope; vm.alertService = alertService.create(); diff --git a/public/javascripts/wechat/controllers/new_project.js b/public/javascripts/wechat/controllers/new_project.js index 6eb6a1caa..a73da1419 100644 --- a/public/javascripts/wechat/controllers/new_project.js +++ b/public/javascripts/wechat/controllers/new_project.js @@ -1,6 +1,8 @@ -app.controller('NewProjectController', ['$scope', '$http', 'auth', 'config', 'alertService','$location','rms', function($scope, $http, auth, config, alertService, $location,rms){ +app.controller('NewProjectController', ['$scope', '$http', 'auth', 'config', 'alertService','$location','rms','common', function($scope, $http, auth, config, alertService, $location,rms,common){ + common.checkLogin(); + var vm = $scope; vm.alertService = alertService.create(); diff --git a/public/javascripts/wechat/controllers/project.js b/public/javascripts/wechat/controllers/project.js index f4a3b5c5c..d1a641546 100644 --- a/public/javascripts/wechat/controllers/project.js +++ b/public/javascripts/wechat/controllers/project.js @@ -1,4 +1,6 @@ app.controller('ProjectController', ['$scope', 'config','$http','$timeout', 'auth','$location','$routeParams','alertService','rms','common', function($scope, config, $http,$timeout, auth, $location, $routeParams,alertService,rms,common){ + common.checkLogin(); + $scope.replaceUrl = function(url){ return url; }; diff --git a/public/javascripts/wechat/controllers/project_list.js b/public/javascripts/wechat/controllers/project_list.js index 6ff7495e4..395215b25 100644 --- a/public/javascripts/wechat/controllers/project_list.js +++ b/public/javascripts/wechat/controllers/project_list.js @@ -3,8 +3,10 @@ */ -app.controller('ProjectListController', ['$scope', 'config', 'auth', '$http', '$location', 'alertService','rms', - function ($scope, config, auth, $http, $location, alertService,rms) { +app.controller('ProjectListController', ['$scope', 'config', 'auth', '$http', '$location', 'alertService','rms','common', + function ($scope, config, auth, $http, $location, alertService,rms,common) { + common.checkLogin(); + var vm = $scope; // vm.projects = rms.get('projects') || []; vm.projects = []; diff --git a/public/javascripts/wechat/controllers/review_class_member.js b/public/javascripts/wechat/controllers/review_class_member.js index 44704c32d..d7f63a9bf 100644 --- a/public/javascripts/wechat/controllers/review_class_member.js +++ b/public/javascripts/wechat/controllers/review_class_member.js @@ -1,6 +1,8 @@ -app.controller('ReviewClassMemberController', ['$scope', '$http', 'auth', 'config', 'alertService','$location','$routeParams','rms', function($scope, $http, auth, config, alertService, $location,$routeParams, rms){ +app.controller('ReviewClassMemberController', ['$scope', '$http', 'auth', 'config', 'alertService','$location','$routeParams','rms','common', function($scope, $http, auth, config, alertService, $location,$routeParams, rms,common){ + common.checkLogin(); + var vm = $scope; // vm.current_edit_member = rms.get('current_edit_member'); diff --git a/public/javascripts/wechat/controllers/review_project_member.js b/public/javascripts/wechat/controllers/review_project_member.js index 2428c09d0..e74cf0286 100644 --- a/public/javascripts/wechat/controllers/review_project_member.js +++ b/public/javascripts/wechat/controllers/review_project_member.js @@ -1,6 +1,8 @@ -app.controller('ReviewProjectMemberController', ['$scope', '$http', 'auth', 'config', 'alertService','$location','$routeParams','rms', function($scope, $http, auth, config, alertService, $location,$routeParams, rms){ +app.controller('ReviewProjectMemberController', ['$scope', '$http', 'auth', 'config', 'alertService','$location','$routeParams','rms','common', function($scope, $http, auth, config, alertService, $location,$routeParams, rms,common){ + common.checkLogin(); + var vm = $scope; // vm.current_edit_member = rms.get('current_edit_member'); diff --git a/public/javascripts/wechat/controllers/send_class_list.js b/public/javascripts/wechat/controllers/send_class_list.js index bc81cfc08..0e7b912c6 100644 --- a/public/javascripts/wechat/controllers/send_class_list.js +++ b/public/javascripts/wechat/controllers/send_class_list.js @@ -1,4 +1,6 @@ -app.controller('SendClassListController', ['$scope', '$http','$routeParams', 'config','auth','alertService', 'rms', function($scope, $http, $routeParams, config, auth, alertService,rms){ +app.controller('SendClassListController', ['$scope', '$http','$routeParams', 'config','auth','alertService', 'rms','common', function($scope, $http, $routeParams, config, auth, alertService,rms,common){ + common.checkLogin(); + var vm = $scope; var send_id = $routeParams.id; diff --git a/public/javascripts/wechat/others/factory.js b/public/javascripts/wechat/others/factory.js index 7ac0a3bdb..4af20c452 100644 --- a/public/javascripts/wechat/others/factory.js +++ b/public/javascripts/wechat/others/factory.js @@ -93,7 +93,7 @@ app.factory('rms', function(){ return {save: save, get: get}; }); -app.factory('common', ['$http', 'auth', '$routeParams','rms','config','wx', function($http, auth, $routeParams,rms,config,wx){ +app.factory('common', ['$http', 'auth', '$routeParams','rms','config','wx','$location', function($http, auth, $routeParams,rms,config,wx,$location){ var addCommonReply = function(id, type, data, cb){ if(!data.comment || data.comment.length<=0){ @@ -390,5 +390,18 @@ app.factory('common', ['$http', 'auth', '$routeParams','rms','config','wx', func }); }; - return {init: init, addCommonReply: addCommonReply, loadCommonData: loadCommonData, addCommonPraise: addCommonPraise, decreaseCommonPraise: decreaseCommonPraise, wxConfig: wxConfig}; + var checkLogin = function(){ + $http.post( + '/wechat/is_bind', + {} ///不用传code了,都由服务器来处理 + ).then(function(response){ + console.log(response.data); + if(response.data.status != 0){ + $location.path("/login"); + return; + } + }); + }; + + return {init: init, addCommonReply: addCommonReply, loadCommonData: loadCommonData, addCommonPraise: addCommonPraise, decreaseCommonPraise: decreaseCommonPraise, wxConfig: wxConfig, checkLogin: checkLogin}; }]); From 61ba668818d70f7f9362e5fe17c23b47bdb09cc5 Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Tue, 9 Aug 2016 09:30:30 +0800 Subject: [PATCH 04/98] =?UTF-8?q?=E5=87=BD=E6=95=B0=E5=86=99=E9=94=99?= =?UTF-8?q?=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/javascripts/wechat/controllers/activity.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/javascripts/wechat/controllers/activity.js b/public/javascripts/wechat/controllers/activity.js index 179845863..df1a57b1c 100644 --- a/public/javascripts/wechat/controllers/activity.js +++ b/public/javascripts/wechat/controllers/activity.js @@ -3,7 +3,7 @@ app.controller('ActivityController', ['$anchorScroll', '$location','$scope', '$http', '$timeout', 'auth', 'rms', 'common','alertService', function($anchorScroll, $location,$scope, $http, $timeout, auth, rms, common, alertService){ - common.checklogin(); + common.checkLogin(); $scope.replaceUrl = function(url){ From bd908af7651e8d6aa0ec7bd07251778a7cde78a3 Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Tue, 9 Aug 2016 09:33:34 +0800 Subject: [PATCH 05/98] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8A=A5=E9=94=99BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/javascripts/wechat/controllers/class_list.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/javascripts/wechat/controllers/class_list.js b/public/javascripts/wechat/controllers/class_list.js index d6b1ec68f..cc5b12ff6 100644 --- a/public/javascripts/wechat/controllers/class_list.js +++ b/public/javascripts/wechat/controllers/class_list.js @@ -3,7 +3,7 @@ */ -app.controller('ClassListController', ['$scope', 'config', 'auth', '$http', '$location', 'alertService','rms','common' +app.controller('ClassListController', ['$scope', 'config', 'auth', '$http', '$location', 'alertService','rms','common', function ($scope, config, auth, $http, $location, alertService,rms,common) { common.checkLogin(); From b53979d91c25fe20c102ad3118e48ad5b6b8706e Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Tue, 9 Aug 2016 10:20:21 +0800 Subject: [PATCH 06/98] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E5=A4=B4=E5=83=8F=E4=B8=8D=E6=98=BE=E7=A4=BA=E7=9A=84BUG?= =?UTF-8?q?=EF=BC=8C=E5=8A=A8=E6=80=81=E6=9A=82=E6=97=B6=E5=85=A8=E9=83=A8?= =?UTF-8?q?=E5=8E=BB=E6=8E=89=E8=AE=A4=E8=AF=81=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/mobile/apis/issues.rb | 2 +- app/api/mobile/apis/journal_for_messages.rb | 2 +- app/api/mobile/apis/messages.rb | 2 +- app/api/mobile/apis/newss.rb | 2 +- app/api/mobile/apis/whomeworks.rb | 2 +- public/assets/wechat/class.html | 6 +++--- public/assets/wechat/edit_class_member.html | 2 +- public/assets/wechat/edit_project_member.html | 2 +- public/assets/wechat/project.html | 10 +++++----- public/assets/wechat/review_class_member.html | 2 +- public/assets/wechat/review_project_member.html | 2 +- 11 files changed, 17 insertions(+), 17 deletions(-) diff --git a/app/api/mobile/apis/issues.rb b/app/api/mobile/apis/issues.rb index 36b558652..c0f705f4f 100644 --- a/app/api/mobile/apis/issues.rb +++ b/app/api/mobile/apis/issues.rb @@ -8,7 +8,7 @@ module Mobile desc "get special issuse" post ':id' do - authenticate! + # authenticate! user = current_user #0一级回复的更多 1 二级回复的更多 diff --git a/app/api/mobile/apis/journal_for_messages.rb b/app/api/mobile/apis/journal_for_messages.rb index 6ac484513..138e93340 100644 --- a/app/api/mobile/apis/journal_for_messages.rb +++ b/app/api/mobile/apis/journal_for_messages.rb @@ -7,7 +7,7 @@ module Mobile desc "get special journal" post ':id' do - authenticate! + # authenticate! user = current_user #0一级回复的更多 1 二级回复的更多 diff --git a/app/api/mobile/apis/messages.rb b/app/api/mobile/apis/messages.rb index ceda5058f..98bd6bd5d 100644 --- a/app/api/mobile/apis/messages.rb +++ b/app/api/mobile/apis/messages.rb @@ -7,7 +7,7 @@ module Mobile desc "get special topic" post ':id' do - authenticate! + # authenticate! user = current_user #0一级回复的更多 1 二级回复的更多 diff --git a/app/api/mobile/apis/newss.rb b/app/api/mobile/apis/newss.rb index 6e012ca4b..63194e6f6 100644 --- a/app/api/mobile/apis/newss.rb +++ b/app/api/mobile/apis/newss.rb @@ -7,7 +7,7 @@ module Mobile desc "get special news" post ':id' do - authenticate! + # authenticate! user = current_user #0一级回复的更多 1 二级回复的更多 diff --git a/app/api/mobile/apis/whomeworks.rb b/app/api/mobile/apis/whomeworks.rb index 9d03eed9f..5924c158b 100644 --- a/app/api/mobile/apis/whomeworks.rb +++ b/app/api/mobile/apis/whomeworks.rb @@ -7,7 +7,7 @@ module Mobile desc "get one homework" post ':id' do - authenticate! + # authenticate! user = current_user #0一级回复的更多 1 二级回复的更多 diff --git a/public/assets/wechat/class.html b/public/assets/wechat/class.html index 051adba7e..f93168206 100644 --- a/public/assets/wechat/class.html +++ b/public/assets/wechat/class.html @@ -31,7 +31,7 @@
    授课老师
    - {{teacher.name}} + {{teacher.name}} 管理员 助教 @@ -39,7 +39,7 @@
    - {{reviewer.name}} + {{reviewer.name}} 待审批 ▶
    @@ -47,7 +47,7 @@
    我的同学
    - {{student.name}} + {{student.name}}
    diff --git a/public/assets/wechat/edit_class_member.html b/public/assets/wechat/edit_class_member.html index c20ed5acb..f27ab76cb 100644 --- a/public/assets/wechat/edit_class_member.html +++ b/public/assets/wechat/edit_class_member.html @@ -2,7 +2,7 @@
    角色变更
    -
    {{current_edit_member.user.realname == "" ? current_edit_member.user.name : current_edit_member.user.realname}}
    +
    {{current_edit_member.user.realname == "" ? current_edit_member.user.name : current_edit_member.user.realname}}
    角色
    • diff --git a/public/assets/wechat/edit_project_member.html b/public/assets/wechat/edit_project_member.html index 8677844b7..51294f43e 100644 --- a/public/assets/wechat/edit_project_member.html +++ b/public/assets/wechat/edit_project_member.html @@ -2,7 +2,7 @@
      角色变更
      -
      {{current_edit_member.user.real_name == "" ? current_edit_member.user.name : current_edit_member.user.real_name}}
      +
      {{current_edit_member.user.real_name == "" ? current_edit_member.user.name : current_edit_member.user.real_name}}
      角色
      • diff --git a/public/assets/wechat/project.html b/public/assets/wechat/project.html index 0ea8a3117..f6fcb4b49 100644 --- a/public/assets/wechat/project.html +++ b/public/assets/wechat/project.html @@ -110,30 +110,30 @@
      管理人员({{project_master_members.length}})
      - {{master.user.real_name == "" ? master.user.name : master.user.real_name }} + {{master.user.real_name == "" ? master.user.name : master.user.real_name }}
      - {{user.real_name == "" ? user.name : user.real_name }} + {{user.real_name == "" ? user.name : user.real_name }} 待审批 ▶
      开发人员({{project_develop_members.length}})
      - {{develop.user.real_name == "" ? develop.user.name : develop.user.real_name}} + {{develop.user.real_name == "" ? develop.user.name : develop.user.real_name}}
      - {{user.real_name == "" ? user.name : user.real_name}} + {{user.real_name == "" ? user.name : user.real_name}} 待审批 ▶
      报告人员({{project_report_members.length}})
      - {{report.user.real_name == "" ? report.user.name : report.user.real_name}} + {{report.user.real_name == "" ? report.user.name : report.user.real_name}}
      diff --git a/public/assets/wechat/review_class_member.html b/public/assets/wechat/review_class_member.html index 06ce99018..e066c48f0 100644 --- a/public/assets/wechat/review_class_member.html +++ b/public/assets/wechat/review_class_member.html @@ -3,7 +3,7 @@
      {{current_course.name}}
      -
      {{current_review_member.realname == "" ? current_review_member.name : current_review_member.realname}}
      +
      {{current_review_member.realname == "" ? current_review_member.name : current_review_member.realname}}
      角色
      • diff --git a/public/assets/wechat/review_project_member.html b/public/assets/wechat/review_project_member.html index d50a04fa4..bcbbb50b6 100644 --- a/public/assets/wechat/review_project_member.html +++ b/public/assets/wechat/review_project_member.html @@ -3,7 +3,7 @@
        {{current_project.name}}
        -
        {{current_review_member.realname == "" ? current_review_member.name : current_review_member.realname}}
        +
        {{current_review_member.realname == "" ? current_review_member.name : current_review_member.realname}}
        角色
        • From c787bb5bcdc7d005a5317d6b47856a704000a471 Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Tue, 9 Aug 2016 10:55:16 +0800 Subject: [PATCH 07/98] =?UTF-8?q?=E5=8A=A8=E6=80=81=E5=8E=BB=E6=8E=89?= =?UTF-8?q?=E8=AE=A4=E8=AF=81=EF=BC=8C=E5=8A=A0=E4=B8=8A=E5=87=BA=E9=94=99?= =?UTF-8?q?=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/mobile/apis/activities.rb | 85 +++++++++++---------- app/api/mobile/apis/blog_comments.rb | 23 +++--- app/api/mobile/apis/issues.rb | 25 +++--- app/api/mobile/apis/journal_for_messages.rb | 25 +++--- app/api/mobile/apis/messages.rb | 25 +++--- app/api/mobile/apis/newss.rb | 25 +++--- app/api/mobile/apis/whomeworks.rb | 33 ++++---- 7 files changed, 138 insertions(+), 103 deletions(-) diff --git a/app/api/mobile/apis/activities.rb b/app/api/mobile/apis/activities.rb index b4fb90ea7..4d07c23f8 100644 --- a/app/api/mobile/apis/activities.rb +++ b/app/api/mobile/apis/activities.rb @@ -13,50 +13,55 @@ module Mobile requires :container_type, type: String end post do - authenticate! + begin + authenticate! - user = current_user + user = current_user - container_type = params[:container_type] ? params[:container_type] : "All" + container_type = params[:container_type] ? params[:container_type] : "All" - if container_type == "All" || container_type == "Project" - shield_project_ids = ShieldActivity.select("shield_id").where("container_type='User' and container_id=#{user.id} and shield_type='Project'").map(&:shield_id) - user_project_ids = (user.projects.where("status = 1").map{|project| project.id}-shield_project_ids).empty? ? "(-1)" : "(" + (user.projects.where("status = 1").map{|project| project.id}-shield_project_ids).join(",") + ")" - project_types = "('Message','Issue','Project')" + if container_type == "All" || container_type == "Project" + shield_project_ids = ShieldActivity.select("shield_id").where("container_type='User' and container_id=#{user.id} and shield_type='Project'").map(&:shield_id) + user_project_ids = (user.projects.where("status = 1").map{|project| project.id}-shield_project_ids).empty? ? "(-1)" : "(" + (user.projects.where("status = 1").map{|project| project.id}-shield_project_ids).join(",") + ")" + project_types = "('Message','Issue','Project')" + end + + if container_type == "All" || container_type == "Course" + shield_course_ids = ShieldActivity.select("shield_id").where("container_type='User' and container_id=#{user.id} and shield_type='Course'").map(&:shield_id) + user_course_ids = (user.courses.where("is_delete = 0").map{|course| course.id}-shield_course_ids).empty? ? "(-1)" : "(" + (user.courses.where("is_delete = 0").map{|course| course.id}-shield_course_ids).join(",") + ")" + course_types = "('Message','News','HomeworkCommon','Poll','Course')" + end + + page = params[:page] ? params[:page] : 0 + principal_types = "JournalsForMessage" + watched_user_ids = User.watched_by(user.id).count == 0 ? " " : ("," + User.watched_by(user.id).map{|u| u.id.to_s }.join(',')) + user_ids = "(" + user.id.to_s + watched_user_ids + ")" + watched_user_blog_ids = Blog.select("id").where("author_id in #{user_ids}").count == 0 ? " " :Blog.select("id").where("author_id in #{user_ids}").map { |blog| blog.id}.join(",") + blog_ids = "(" + watched_user_blog_ids + ")" + + if container_type == "Course" + activities = UserActivity.where("(container_type = 'Course' and container_id in #{user_course_ids} and act_type in #{course_types})").order('updated_at desc') + elsif container_type == "Project" + activities = UserActivity.where("(container_type = 'Project' and container_id in #{user_project_ids} and act_type in #{project_types})").order('updated_at desc') + else + activities = UserActivity.where("(container_type = 'Project' and container_id in #{user_project_ids} and act_type in #{project_types})" + + "or (container_type = 'Course' and container_id in #{user_course_ids} and act_type in #{course_types}) "+ + "or (container_type = 'Principal' and act_type= '#{principal_types}' and container_id = #{user.id}) " + + "or (container_type = 'Blog' and act_type= 'BlogComment' and container_id in #{blog_ids})").order('updated_at desc') + end + all_count = activities.count + activities = activities.limit(10).offset(page * 10) + count = activities.count + present :data, activities, with: Mobile::Entities::Activity,user: user + present :all_count, all_count + present :count, count + present :page, page + present :status, 0 + present :container_type, container_type + rescue Exception=>e + present :status, -1 + present :message, e.message end - - if container_type == "All" || container_type == "Course" - shield_course_ids = ShieldActivity.select("shield_id").where("container_type='User' and container_id=#{user.id} and shield_type='Course'").map(&:shield_id) - user_course_ids = (user.courses.where("is_delete = 0").map{|course| course.id}-shield_course_ids).empty? ? "(-1)" : "(" + (user.courses.where("is_delete = 0").map{|course| course.id}-shield_course_ids).join(",") + ")" - course_types = "('Message','News','HomeworkCommon','Poll','Course')" - end - - page = params[:page] ? params[:page] : 0 - principal_types = "JournalsForMessage" - watched_user_ids = User.watched_by(user.id).count == 0 ? " " : ("," + User.watched_by(user.id).map{|u| u.id.to_s }.join(',')) - user_ids = "(" + user.id.to_s + watched_user_ids + ")" - watched_user_blog_ids = Blog.select("id").where("author_id in #{user_ids}").count == 0 ? " " :Blog.select("id").where("author_id in #{user_ids}").map { |blog| blog.id}.join(",") - blog_ids = "(" + watched_user_blog_ids + ")" - - if container_type == "Course" - activities = UserActivity.where("(container_type = 'Course' and container_id in #{user_course_ids} and act_type in #{course_types})").order('updated_at desc') - elsif container_type == "Project" - activities = UserActivity.where("(container_type = 'Project' and container_id in #{user_project_ids} and act_type in #{project_types})").order('updated_at desc') - else - activities = UserActivity.where("(container_type = 'Project' and container_id in #{user_project_ids} and act_type in #{project_types})" + - "or (container_type = 'Course' and container_id in #{user_course_ids} and act_type in #{course_types}) "+ - "or (container_type = 'Principal' and act_type= '#{principal_types}' and container_id = #{user.id}) " + - "or (container_type = 'Blog' and act_type= 'BlogComment' and container_id in #{blog_ids})").order('updated_at desc') - end - all_count = activities.count - activities = activities.limit(10).offset(page * 10) - count = activities.count - present :data, activities, with: Mobile::Entities::Activity,user: user - present :all_count, all_count - present :count, count - present :page, page - present :status, 0 - present :container_type, container_type end end end diff --git a/app/api/mobile/apis/blog_comments.rb b/app/api/mobile/apis/blog_comments.rb index 39b6a486a..ddfd65524 100644 --- a/app/api/mobile/apis/blog_comments.rb +++ b/app/api/mobile/apis/blog_comments.rb @@ -7,17 +7,22 @@ module Mobile desc "get special topic" post ':id' do - user = current_user + begin + user = current_user - #0一级回复的更多 1 二级回复的更多 - type = params[:type] || 0 - page = params[:page] || 0 + #0一级回复的更多 1 二级回复的更多 + type = params[:type] || 0 + page = params[:page] || 0 - blog = BlogComment.find params[:id] - present :data, blog, with: Mobile::Entities::BlogComment,user: user,type: type,page: page - present :type, type - present :page, page - present :status, 0 + blog = BlogComment.find params[:id] + present :data, blog, with: Mobile::Entities::BlogComment,user: user,type: type,page: page + present :type, type + present :page, page + present :status, 0 + rescue Exception=>e + present :status, -1 + present :message, e.message + end end end end diff --git a/app/api/mobile/apis/issues.rb b/app/api/mobile/apis/issues.rb index c0f705f4f..9223332e9 100644 --- a/app/api/mobile/apis/issues.rb +++ b/app/api/mobile/apis/issues.rb @@ -8,17 +8,22 @@ module Mobile desc "get special issuse" post ':id' do - # authenticate! - user = current_user + begin + # authenticate! + user = current_user - #0一级回复的更多 1 二级回复的更多 - type = params[:type] || 0 - page = params[:page] || 0 - issue = Issue.find params[:id] - present :data, issue, with: Mobile::Entities::Issue,user: user,type: type,page: page - present :type, type - present :page, page - present :status, 0 + #0一级回复的更多 1 二级回复的更多 + type = params[:type] || 0 + page = params[:page] || 0 + issue = Issue.find params[:id] + present :data, issue, with: Mobile::Entities::Issue,user: user,type: type,page: page + present :type, type + present :page, page + present :status, 0 + rescue Exception=>e + present :status, -1 + present :message, e.message + end end end end diff --git a/app/api/mobile/apis/journal_for_messages.rb b/app/api/mobile/apis/journal_for_messages.rb index 138e93340..d835d61c5 100644 --- a/app/api/mobile/apis/journal_for_messages.rb +++ b/app/api/mobile/apis/journal_for_messages.rb @@ -7,18 +7,23 @@ module Mobile desc "get special journal" post ':id' do - # authenticate! - user = current_user + begin + # authenticate! + user = current_user - #0一级回复的更多 1 二级回复的更多 - type = params[:type] || 0 - page = params[:page] || 0 + #0一级回复的更多 1 二级回复的更多 + type = params[:type] || 0 + page = params[:page] || 0 - jour = JournalsForMessage.find params[:id] - present :data, jour, with: Mobile::Entities::Jours,user: user,type: type,page: page - present :type, type - present :page, page - present :status, 0 + jour = JournalsForMessage.find params[:id] + present :data, jour, with: Mobile::Entities::Jours,user: user,type: type,page: page + present :type, type + present :page, page + present :status, 0 + rescue Exception=>e + present :status, -1 + present :message, e.message + end end end end diff --git a/app/api/mobile/apis/messages.rb b/app/api/mobile/apis/messages.rb index 98bd6bd5d..1e20ea38f 100644 --- a/app/api/mobile/apis/messages.rb +++ b/app/api/mobile/apis/messages.rb @@ -7,17 +7,22 @@ module Mobile desc "get special topic" post ':id' do - # authenticate! - user = current_user + begin + # authenticate! + user = current_user - #0一级回复的更多 1 二级回复的更多 - type = params[:type] || 0 - page = params[:page] || 0 - message = Message.find params[:id] - present :data, message, with: Mobile::Entities::Message,user: user,type: type,page: page - present :type, type - present :page, page - present :status, 0 + #0一级回复的更多 1 二级回复的更多 + type = params[:type] || 0 + page = params[:page] || 0 + message = Message.find params[:id] + present :data, message, with: Mobile::Entities::Message,user: user,type: type,page: page + present :type, type + present :page, page + present :status, 0 + rescue Exception=>e + present :status, -1 + present :message, e.message + end end end end diff --git a/app/api/mobile/apis/newss.rb b/app/api/mobile/apis/newss.rb index 63194e6f6..dfe6b5718 100644 --- a/app/api/mobile/apis/newss.rb +++ b/app/api/mobile/apis/newss.rb @@ -7,17 +7,22 @@ module Mobile desc "get special news" post ':id' do - # authenticate! - user = current_user + begin + # authenticate! + user = current_user - #0一级回复的更多 1 二级回复的更多 - type = params[:type] || 0 - page = params[:page] || 0 - news = News.find params[:id] - present :data, news, with: Mobile::Entities::News,user: user,type: type,page: page - present :type, type - present :page, page - present :status, 0 + #0一级回复的更多 1 二级回复的更多 + type = params[:type] || 0 + page = params[:page] || 0 + news = News.find params[:id] + present :data, news, with: Mobile::Entities::News,user: user,type: type,page: page + present :type, type + present :page, page + present :status, 0 + rescue Exception=>e + present :status, -1 + present :message, e.message + end end end end diff --git a/app/api/mobile/apis/whomeworks.rb b/app/api/mobile/apis/whomeworks.rb index 5924c158b..79d04739f 100644 --- a/app/api/mobile/apis/whomeworks.rb +++ b/app/api/mobile/apis/whomeworks.rb @@ -7,23 +7,28 @@ module Mobile desc "get one homework" post ':id' do - # authenticate! - user = current_user + begin + # authenticate! + user = current_user - #0一级回复的更多 1 二级回复的更多 - type = params[:type] || 0 - page = params[:page] || 0 + #0一级回复的更多 1 二级回复的更多 + type = params[:type] || 0 + page = params[:page] || 0 - if type == 0 - homework = HomeworkCommon.find params[:id] - present :data, homework, with: Mobile::Entities::Whomework,user: user,type: type,page: page,comment_type: "homework" - else - jour = JournalsForMessage.find params[:id] - present :data, jour, with: Mobile::Entities::Jours,user: user,type: type,page: page,comment_type: "homework" + if type == 0 + homework = HomeworkCommon.find params[:id] + present :data, homework, with: Mobile::Entities::Whomework,user: user,type: type,page: page,comment_type: "homework" + else + jour = JournalsForMessage.find params[:id] + present :data, jour, with: Mobile::Entities::Jours,user: user,type: type,page: page,comment_type: "homework" + end + present :type, type + present :page, page + present :status, 0 + rescue Exception=>e + present :status, -1 + present :message, e.message end - present :type, type - present :page, page - present :status, 0 end end end From 001b48869dd0a3e4c676c67e33b4054a5fb06c8f Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Tue, 9 Aug 2016 14:09:13 +0800 Subject: [PATCH 08/98] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=EF=BC=9A=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E4=B8=80=E4=BA=9B=E5=A4=B4=E5=83=8F=E7=9A=84=E8=B7=AF?= =?UTF-8?q?=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/courses_service.rb | 2 +- app/services/homework_service.rb | 2 +- app/services/projects_service.rb | 4 ++-- app/services/users_service.rb | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/services/courses_service.rb b/app/services/courses_service.rb index c6854f3dd..73ca91590 100644 --- a/app/services/courses_service.rb +++ b/app/services/courses_service.rb @@ -97,7 +97,7 @@ class CoursesService end users = [] @members.each do |m| - img_url = url_to_avatar(m.user) + img_url = "/images/"+url_to_avatar(m.user) gender = m.user.user_extensions.gender.nil? ? 0 : m.user.user_extensions.gender work_unit = get_user_work_unit m.user location = get_user_location m.user diff --git a/app/services/homework_service.rb b/app/services/homework_service.rb index dd42795b1..04680f76f 100644 --- a/app/services/homework_service.rb +++ b/app/services/homework_service.rb @@ -256,7 +256,7 @@ class HomeworkService jours = @homework.journals_for_messages.where("is_comprehensive_evaluation = 3 or is_comprehensive_evaluation is null").order("created_on DESC") jours.each do |jour| user = jour.user - img_url = url_to_avatar(jour.user) + img_url = "/images/"+url_to_avatar(jour.user) datetime = jour.created_on content = jour.notes end diff --git a/app/services/projects_service.rb b/app/services/projects_service.rb index aead2b3c6..4de9143bf 100644 --- a/app/services/projects_service.rb +++ b/app/services/projects_service.rb @@ -181,7 +181,7 @@ class ProjectsService user = User.find(m.applied_user_id) if user - img_url = url_to_avatar(user) + img_url = "/images/"+url_to_avatar(user) gender = user.user_extensions.gender.nil? ? 0 : user.user_extensions.gender work_unit = get_user_work_unit user location = get_user_location user @@ -210,7 +210,7 @@ class ProjectsService status = applied_message.status user = User.find(params[:user_id]) if user - img_url = url_to_avatar(user) + img_url = "/images/"+url_to_avatar(user) gender = user.user_extensions.gender.nil? ? 0 : user.user_extensions.gender work_unit = get_user_work_unit user location = get_user_location user diff --git a/app/services/users_service.rb b/app/services/users_service.rb index ab1bb2ec4..5789befe5 100644 --- a/app/services/users_service.rb +++ b/app/services/users_service.rb @@ -80,7 +80,7 @@ class UsersService #id用户id def show_user(params) @user = User.find(params[:id]) - img_url = url_to_avatar(@user) + img_url = "/images/"+url_to_avatar(@user) gender = @user.user_extensions.gender.nil? ? 0 : @user.user_extensions.gender work_unit = get_user_work_unit @user location = get_user_location @user @@ -224,7 +224,7 @@ class UsersService membership.sort! {|older, newer| newer.created_on <=> older.created_on } course_list = [] membership.each do |mp| - course_list << {:course => mp.course,:img_url => url_to_avatar(mp.course),:current_user_is_member => current_user.member_of_course?(mp.course),:current_user_is_teacher => is_course_teacher(current_user,mp.course)} + course_list << {:course => mp.course,:img_url => "/images/"+url_to_avatar(mp.course),:current_user_is_member => current_user.member_of_course?(mp.course),:current_user_is_teacher => is_course_teacher(current_user,mp.course)} end course_list end From 66357c40244a283a21f1cd607c038daaacb0a270 Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Tue, 9 Aug 2016 17:01:06 +0800 Subject: [PATCH 09/98] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=88=86=E4=BA=AB?= =?UTF-8?q?=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/mobile/apis/issues.rb | 3 +++ app/api/mobile/apis/journal_for_messages.rb | 10 ++++++++ app/api/mobile/apis/messages.rb | 14 +++++++++++ app/api/mobile/apis/newss.rb | 10 ++++++++ app/api/mobile/apis/whomeworks.rb | 4 ++++ .../wechat/controllers/activity.js | 2 +- public/javascripts/wechat/controllers/blog.js | 1 + .../wechat/controllers/course_notice.js | 1 + .../wechat/controllers/discussion.js | 1 + .../wechat/controllers/homework.js | 1 + .../wechat/controllers/invite_code.js | 5 +++- .../javascripts/wechat/controllers/issue.js | 1 + .../wechat/controllers/journals.js | 1 + .../wechat/controllers/project_invite_code.js | 6 ++++- public/javascripts/wechat/others/factory.js | 24 +++++++++++++++---- public/javascripts/wechat/others/routes.js | 14 +++++------ 16 files changed, 84 insertions(+), 14 deletions(-) diff --git a/app/api/mobile/apis/issues.rb b/app/api/mobile/apis/issues.rb index 9223332e9..dfd5a3335 100644 --- a/app/api/mobile/apis/issues.rb +++ b/app/api/mobile/apis/issues.rb @@ -12,6 +12,8 @@ module Mobile # authenticate! user = current_user + #is_public true 公开 false 私有 1公开 0私有 + #0一级回复的更多 1 二级回复的更多 type = params[:type] || 0 page = params[:page] || 0 @@ -19,6 +21,7 @@ module Mobile present :data, issue, with: Mobile::Entities::Issue,user: user,type: type,page: page present :type, type present :page, page + present :is_public, issue.project.is_public present :status, 0 rescue Exception=>e present :status, -1 diff --git a/app/api/mobile/apis/journal_for_messages.rb b/app/api/mobile/apis/journal_for_messages.rb index d835d61c5..0ef875780 100644 --- a/app/api/mobile/apis/journal_for_messages.rb +++ b/app/api/mobile/apis/journal_for_messages.rb @@ -16,9 +16,19 @@ module Mobile page = params[:page] || 0 jour = JournalsForMessage.find params[:id] + + is_public = 1 + + if jour.jour_type == "Project" + is_public = jour.project.is_public + elsif jour.jour_type == "Course" + is_public = jour.course.is_public + end + present :data, jour, with: Mobile::Entities::Jours,user: user,type: type,page: page present :type, type present :page, page + present :is_public, is_public present :status, 0 rescue Exception=>e present :status, -1 diff --git a/app/api/mobile/apis/messages.rb b/app/api/mobile/apis/messages.rb index 1e20ea38f..963d2f4ab 100644 --- a/app/api/mobile/apis/messages.rb +++ b/app/api/mobile/apis/messages.rb @@ -15,9 +15,23 @@ module Mobile type = params[:type] || 0 page = params[:page] || 0 message = Message.find params[:id] + + is_public = 1 + type_name = "" + + if message.project + is_public = message.project.is_public + type_name = "project" + elsif message.course + is_public = message.course.is_public + type_name = "course" + end + present :data, message, with: Mobile::Entities::Message,user: user,type: type,page: page present :type, type present :page, page + present :is_public, is_public + present :type_name, type_name present :status, 0 rescue Exception=>e present :status, -1 diff --git a/app/api/mobile/apis/newss.rb b/app/api/mobile/apis/newss.rb index dfe6b5718..907958631 100644 --- a/app/api/mobile/apis/newss.rb +++ b/app/api/mobile/apis/newss.rb @@ -15,9 +15,19 @@ module Mobile type = params[:type] || 0 page = params[:page] || 0 news = News.find params[:id] + + is_public = 1 + + if news.project + is_public = news.project.is_public + elsif news.project + is_public = news.project.is_public + end + present :data, news, with: Mobile::Entities::News,user: user,type: type,page: page present :type, type present :page, page + present :is_public, is_public present :status, 0 rescue Exception=>e present :status, -1 diff --git a/app/api/mobile/apis/whomeworks.rb b/app/api/mobile/apis/whomeworks.rb index 79d04739f..572ce5e0b 100644 --- a/app/api/mobile/apis/whomeworks.rb +++ b/app/api/mobile/apis/whomeworks.rb @@ -15,8 +15,11 @@ module Mobile type = params[:type] || 0 page = params[:page] || 0 + is_public = 1 + if type == 0 homework = HomeworkCommon.find params[:id] + is_public = homework.course.is_public present :data, homework, with: Mobile::Entities::Whomework,user: user,type: type,page: page,comment_type: "homework" else jour = JournalsForMessage.find params[:id] @@ -24,6 +27,7 @@ module Mobile end present :type, type present :page, page + present :is_public, is_public present :status, 0 rescue Exception=>e present :status, -1 diff --git a/public/javascripts/wechat/controllers/activity.js b/public/javascripts/wechat/controllers/activity.js index df1a57b1c..3f75d9e99 100644 --- a/public/javascripts/wechat/controllers/activity.js +++ b/public/javascripts/wechat/controllers/activity.js @@ -146,7 +146,7 @@ app.controller('ActivityController', rms.save("activities",$scope.activities); rms.save("course_activities",$scope.course_activities); rms.save("project_activities",$scope.project_activities); - $location.path('/'+type+'/'+act_id); + $location.path("/"+type).search({id: act_id}); }; $scope.addPraise = function(act){ diff --git a/public/javascripts/wechat/controllers/blog.js b/public/javascripts/wechat/controllers/blog.js index 5fb61151d..21c1cf345 100644 --- a/public/javascripts/wechat/controllers/blog.js +++ b/public/javascripts/wechat/controllers/blog.js @@ -7,6 +7,7 @@ app.controller('BlogController', scope: $scope, type: 'blog_comments', replyType: 'BlogComment', + urlName: 'blog_comment', loadCallback: function(data){ console.log(data.data); diff --git a/public/javascripts/wechat/controllers/course_notice.js b/public/javascripts/wechat/controllers/course_notice.js index 77d2e6ab0..e9760b322 100644 --- a/public/javascripts/wechat/controllers/course_notice.js +++ b/public/javascripts/wechat/controllers/course_notice.js @@ -6,6 +6,7 @@ app.controller('CourseNoticeController', ['$scope', '$http', '$routeParams', 'au scope: $scope, type: 'newss', replyType: 'News', + urlName: 'course_notice', loadCallback: function(data){ $scope.news = data.data; }, diff --git a/public/javascripts/wechat/controllers/discussion.js b/public/javascripts/wechat/controllers/discussion.js index 60bfb3ee3..6a755be11 100644 --- a/public/javascripts/wechat/controllers/discussion.js +++ b/public/javascripts/wechat/controllers/discussion.js @@ -5,6 +5,7 @@ app.controller('DiscussionController', ['$scope', '$http', '$routeParams', 'auth scope: $scope, type: 'messages', replyType: 'Message', + urlName: 'discussion', loadCallback: function(data){ console.log(data.data); diff --git a/public/javascripts/wechat/controllers/homework.js b/public/javascripts/wechat/controllers/homework.js index 2898fc27f..89dbe14bb 100644 --- a/public/javascripts/wechat/controllers/homework.js +++ b/public/javascripts/wechat/controllers/homework.js @@ -5,6 +5,7 @@ app.controller('HomeworkController', ['$scope', '$http', '$routeParams', 'auth', scope: $scope, type: 'whomeworks', replyType: 'HomeworkCommon', + urlName: 'homework', loadCallback: function(data){ console.log(data.data); diff --git a/public/javascripts/wechat/controllers/invite_code.js b/public/javascripts/wechat/controllers/invite_code.js index db8b99ae7..867c9bce4 100644 --- a/public/javascripts/wechat/controllers/invite_code.js +++ b/public/javascripts/wechat/controllers/invite_code.js @@ -14,8 +14,11 @@ app.controller('InviteCodeController', ['$scope','$http', '$routeParams','config vm.course = response.data.data; var desc = "班级邀请:"+vm.course.name+" 班级"; + var link = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxc09454f171153c2d" + + "&redirect_uri=https://test.forge.trustie.net/wechat/user_activities?id="+vm.course.id+ + "&response_type=code&scope=snsapi_base&state=invite_code&connect_redirect=1#wechat_redirect"; - common.wxConfig("",desc,""); + common.wxConfig("",desc,"",link); // wx.ready(function(){ // wx.onMenuShareTimeline({ diff --git a/public/javascripts/wechat/controllers/issue.js b/public/javascripts/wechat/controllers/issue.js index ae0cc4450..91938cb7e 100644 --- a/public/javascripts/wechat/controllers/issue.js +++ b/public/javascripts/wechat/controllers/issue.js @@ -5,6 +5,7 @@ app.controller('IssueController', ['$scope', '$http', '$routeParams', 'auth', 'c scope: $scope, type: 'issues', replyType: 'Issue', + urlName: 'issues', loadCallback: function(data){ console.log(data); $scope.issue = data.data; diff --git a/public/javascripts/wechat/controllers/journals.js b/public/javascripts/wechat/controllers/journals.js index 23f3b908b..3825dc86e 100644 --- a/public/javascripts/wechat/controllers/journals.js +++ b/public/javascripts/wechat/controllers/journals.js @@ -4,6 +4,7 @@ app.controller('JournalsController', ['$scope', '$http', '$routeParams', 'auth', scope: $scope, type: 'journal_for_messages', replyType: 'JournalsForMessage', + urlName: 'journal_for_message', loadCallback: function(data){ console.log(data.data); diff --git a/public/javascripts/wechat/controllers/project_invite_code.js b/public/javascripts/wechat/controllers/project_invite_code.js index dea2e9d64..e82bb44a8 100644 --- a/public/javascripts/wechat/controllers/project_invite_code.js +++ b/public/javascripts/wechat/controllers/project_invite_code.js @@ -15,7 +15,11 @@ app.controller('ProjectInviteCodeController', ['$scope','$http', '$routeParams', var desc = "项目邀请:"+vm.project.name+" 项目"; - common.wxConfig("",desc,""); + var link = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxc09454f171153c2d" + + "&redirect_uri=https://test.forge.trustie.net/wechat/user_activities?id="+vm.project.id+ + "&response_type=code&scope=snsapi_base&state=project_invite_code&connect_redirect=1#wechat_redirect"; + + common.wxConfig("",desc,"",link); // wx.ready(function(){ // wx.onMenuShareTimeline({ diff --git a/public/javascripts/wechat/others/factory.js b/public/javascripts/wechat/others/factory.js index 4af20c452..ad42eb27c 100644 --- a/public/javascripts/wechat/others/factory.js +++ b/public/javascripts/wechat/others/factory.js @@ -238,7 +238,23 @@ app.factory('common', ['$http', 'auth', '$routeParams','rms','config','wx','$loc console.log("desc = "+desc); console.log("imgUrl= "+imgUrl); - wxConfig(title,desc,imgUrl); + var link = ""; + + if(args.urlName == "discussion"){ + var urlName = response.data.type_name + "_discussion"; + link = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxc09454f171153c2d" + + "&redirect_uri=https://test.forge.trustie.net/wechat/user_activities?id="+response.data.data.act_id+ + "&response_type=code&scope=snsapi_base&state="+urlName+"&connect_redirect=1#wechat_redirect"; + } + else{ + link = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxc09454f171153c2d" + + "&redirect_uri=https://test.forge.trustie.net/wechat/user_activities?id="+response.data.data.act_id+ + "&response_type=code&scope=snsapi_base&state="+args.urlName+"&connect_redirect=1#wechat_redirect"; + } + + console.log("link= "+link); + + wxConfig(title,desc,imgUrl,link); //--------------分享内容定制------------- args.loadCallback(response.data); @@ -345,7 +361,7 @@ app.factory('common', ['$http', 'auth', '$routeParams','rms','config','wx','$loc }; - var wxConfig = function(title,desc,imgUrl){ + var wxConfig = function(title,desc,imgUrl,link){ if(title == null || title == ""){ title = 'Trustie创新实践平台'; @@ -362,7 +378,7 @@ app.factory('common', ['$http', 'auth', '$routeParams','rms','config','wx','$loc wx.ready(function(){ wx.onMenuShareTimeline({ title: title, // 分享标题 -// link: 'http://www.trustie.net/', // 分享链接 + link: link, // 分享链接 imgUrl: imgUrl, // 分享图标 success: function () { console.log("share successed."); @@ -375,7 +391,7 @@ app.factory('common', ['$http', 'auth', '$routeParams','rms','config','wx','$loc wx.onMenuShareAppMessage({ title: title, // 分享标题 desc: desc, // 分享描述 -// link: '', // 分享链接 + link: link, // 分享链接 // imgUrl: '', // 分享图标 imgUrl: imgUrl, // 分享图标 // type: '', // 分享类型,music、video或link,不填默认为link diff --git a/public/javascripts/wechat/others/routes.js b/public/javascripts/wechat/others/routes.js index 70d1491f4..7b4a0320b 100644 --- a/public/javascripts/wechat/others/routes.js +++ b/public/javascripts/wechat/others/routes.js @@ -23,13 +23,13 @@ app.config(['$routeProvider',"$httpProvider", "$locationProvider",'config', func controller: 'RegController' }) .when('/activites', makeRoute('activities.html', 'ActivityController')) - .when('/issues/:id', makeRoute('issue_detail.html', 'IssueController')) - .when('/project_discussion/:id', makeRoute('project_discussion.html', 'DiscussionController')) - .when('/homework/:id', makeRoute('homework_detail.html', 'HomeworkController')) - .when('/course_notice/:id', makeRoute('course_notice.html', 'CourseNoticeController')) - .when('/course_discussion/:id', makeRoute('course_discussion.html', 'DiscussionController')) - .when('/journal_for_message/:id', makeRoute('jour_message_detail.html', 'JournalsController')) - .when('/blog_comment/:id', makeRoute('blog_detail.html', 'BlogController')) + .when('/issues', makeRoute('issue_detail.html', 'IssueController')) + .when('/project_discussion', makeRoute('project_discussion.html', 'DiscussionController')) + .when('/homework', makeRoute('homework_detail.html', 'HomeworkController')) + .when('/course_notice', makeRoute('course_notice.html', 'CourseNoticeController')) + .when('/course_discussion', makeRoute('course_discussion.html', 'DiscussionController')) + .when('/journal_for_message', makeRoute('jour_message_detail.html', 'JournalsController')) + .when('/blog_comment', makeRoute('blog_detail.html', 'BlogController')) .when('/class', makeRoute('class.html', 'ClassController')) .when('/new_class', makeRoute('new_class.html', 'NewClassController')) .when('/edit_class', makeRoute('edit_class.html', 'EditClassController')) From e85f9373c878e422de9d0a33f44003b472211bc0 Mon Sep 17 00:00:00 2001 From: Tim Date: Wed, 10 Aug 2016 15:37:08 +0800 Subject: [PATCH 10/98] =?UTF-8?q?=E7=82=B9=E5=9B=9E=E5=A4=8D=E6=8C=89?= =?UTF-8?q?=E9=92=AE=E5=9B=9E=E5=A4=8D=E6=A1=86=E8=8E=B7=E5=8F=96=E7=84=A6?= =?UTF-8?q?=E7=82=B9=EF=BC=9B=E7=8F=AD=E7=BA=A7=E9=80=9A=E7=9F=A5=E5=86=85?= =?UTF-8?q?=E5=AE=B9=E5=86=97=E4=BD=99=EF=BC=9B=E7=8F=AD=E7=BA=A7=E3=80=81?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E9=82=80=E8=AF=B7=E6=96=87=E5=AD=97=E6=9B=B4?= =?UTF-8?q?=E5=8F=8B=E5=96=84=EF=BC=9B=E7=8F=AD=E7=BA=A7=E3=80=81=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E4=B8=AD=E4=BA=BA=E6=95=B0=E5=90=8E=E7=AE=AD=E5=A4=B4?= =?UTF-8?q?=E4=B8=8E=E4=BA=BA=E6=95=B0=E5=AF=B9=E9=BD=90=EF=BC=9B=E9=82=80?= =?UTF-8?q?=E8=AF=B7=E7=A0=81=E6=8F=90=E7=A4=BA=E5=A2=9E=E5=8A=A0=E9=97=B4?= =?UTF-8?q?=E8=B7=9D=EF=BC=9B=E5=9B=9E=E5=A4=8D=E4=B8=AD@=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E9=93=BE=E6=8E=A5=EF=BC=9B=E4=BA=8C=E7=BB=B4=E7=A0=81?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E5=A2=9E=E5=8A=A0=E9=BB=98=E8=AE=A4=E5=8A=A0?= =?UTF-8?q?=E5=85=A5=E8=BA=AB=E4=BB=BD=E6=8F=90=E7=A4=BA=EF=BC=9B=E5=85=AC?= =?UTF-8?q?=E4=BC=97=E5=8F=B7=E8=81=94=E7=B3=BB=E6=88=91=E4=BB=AC=E6=96=87?= =?UTF-8?q?=E5=AD=97=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 2 +- app/models/news.rb | 2 +- public/assets/wechat/app.html | 2 ++ public/assets/wechat/blog_detail.html | 4 ++-- public/assets/wechat/class_list.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/invite_code.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/assets/wechat/project_invite_code.html | 4 +++- public/assets/wechat/project_list.html | 4 ++-- public/images/wechat/wx_logo.jpg | Bin 0 -> 31716 bytes .../wechat/controllers/invite_code.js | 2 +- .../wechat/controllers/project_invite_code.js | 2 +- .../wechat/directives/at_delete_link.js | 17 +++++++++++++++++ .../wechat/directives/input_focus.js | 14 ++++++++++++++ public/javascripts/wechat/others/factory.js | 2 +- public/stylesheets/weui/weixin.css | 3 ++- 21 files changed, 64 insertions(+), 26 deletions(-) create mode 100644 public/images/wechat/wx_logo.jpg create mode 100644 public/javascripts/wechat/directives/at_delete_link.js create mode 100644 public/javascripts/wechat/directives/input_focus.js diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index cbeaf851d..1a4c4d340 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -137,7 +137,7 @@ class WechatsController < ActionController::Base on :fallback, respond: 'fallback message' on :click, with: 'FEEDBACK' do |request, key| - request.reply.text "如有反馈问题,请直接切换至输入框,发微信给我们即可" + request.reply.text "如有问题反馈,请您:\n1、直接切换至输入框,发微信给我们。\n2、加入QQ群:173184401,我们直接互动。\n欢迎大家积极反馈,谢谢啦!" end on :click, with: 'MY_NEWS' do |request, key| diff --git a/app/models/news.rb b/app/models/news.rb index 54f6fce08..489a231c8 100644 --- a/app/models/news.rb +++ b/app/models/news.rb @@ -173,7 +173,7 @@ class News < ActiveRecord::Base count = ShieldWechatMessage.where("container_type='User' and container_id=#{m.user_id} and shield_type='Course' and shield_id=#{self.course_id}").count if count == 0 ws = WechatService.new - content = strip_html self.author.try(:realname) + " 发布了通知:" + self.title.html_safe, 200 + content = self.title.html_safe, 200 ws.class_notice m.user_id, "course_notice", self.id, "#{l(:label_new_notice_template)}", self.course.name, self.author.show_name, format_time(self.created_on), content, "点击查看通知详情" end end diff --git a/public/assets/wechat/app.html b/public/assets/wechat/app.html index 74af26cfe..d49caedd5 100644 --- a/public/assets/wechat/app.html +++ b/public/assets/wechat/app.html @@ -37,6 +37,8 @@ + + diff --git a/public/assets/wechat/blog_detail.html b/public/assets/wechat/blog_detail.html index ee9e968d2..f17a384f4 100644 --- a/public/assets/wechat/blog_detail.html +++ b/public/assets/wechat/blog_detail.html @@ -25,13 +25,13 @@
          {{blog.praise_count}}
          {{blog.praise_count}}
        - -
        +
        diff --git a/public/assets/wechat/class_list.html b/public/assets/wechat/class_list.html index ece31ceeb..9ac70cc0a 100644 --- a/public/assets/wechat/class_list.html +++ b/public/assets/wechat/class_list.html @@ -10,7 +10,7 @@
      • - > + > {{course.member_count}}人
      @@ -25,7 +25,7 @@
    • - > + > {{course.member_count}}人
    diff --git a/public/assets/wechat/course_discussion.html b/public/assets/wechat/course_discussion.html index 9ef7bc429..ab71aa887 100644 --- a/public/assets/wechat/course_discussion.html +++ b/public/assets/wechat/course_discussion.html @@ -23,14 +23,14 @@
    {{discussion.praise_count}}
    {{discussion.praise_count}}
    -
    -
    +
    diff --git a/public/assets/wechat/course_notice.html b/public/assets/wechat/course_notice.html index b2771100b..59f9afa5f 100644 --- a/public/assets/wechat/course_notice.html +++ b/public/assets/wechat/course_notice.html @@ -22,14 +22,14 @@
    {{news.praise_count}}
    {{news.praise_count}}
    -
    -
    +
    diff --git a/public/assets/wechat/homework_detail.html b/public/assets/wechat/homework_detail.html index 599774dfc..49fa52b49 100644 --- a/public/assets/wechat/homework_detail.html +++ b/public/assets/wechat/homework_detail.html @@ -27,13 +27,13 @@
    {{homework.praise_count}}
    {{homework.praise_count}}
    - -
    +
    diff --git a/public/assets/wechat/invite_code.html b/public/assets/wechat/invite_code.html index a1b225fc9..3aaa00bbe 100644 --- a/public/assets/wechat/invite_code.html +++ b/public/assets/wechat/invite_code.html @@ -11,6 +11,8 @@

    + 3.通过“加入班级”菜单输入邀请码加入班级(长按邀请码可以复制哦~)
    + 4.扫码默认以学生身份加入班级 +
    \ No newline at end of file diff --git a/public/assets/wechat/issue_detail.html b/public/assets/wechat/issue_detail.html index 852103b81..2d33367cf 100644 --- a/public/assets/wechat/issue_detail.html +++ b/public/assets/wechat/issue_detail.html @@ -28,14 +28,14 @@
    {{issue.praise_count}}
    {{issue.praise_count}}
    -
    -
    +
    diff --git a/public/assets/wechat/jour_message_detail.html b/public/assets/wechat/jour_message_detail.html index 78760da71..643bce4f5 100644 --- a/public/assets/wechat/jour_message_detail.html +++ b/public/assets/wechat/jour_message_detail.html @@ -22,14 +22,14 @@
    {{message.praise_count}}
    {{message.praise_count}}
    -
    -
    +
    diff --git a/public/assets/wechat/project_discussion.html b/public/assets/wechat/project_discussion.html index cc3d4b1c8..b2be0b263 100644 --- a/public/assets/wechat/project_discussion.html +++ b/public/assets/wechat/project_discussion.html @@ -23,7 +23,7 @@
    {{discussion.praise_count}}
    {{discussion.praise_count}}
    -
    + @@ -31,7 +31,7 @@
    -
    +
    diff --git a/public/assets/wechat/project_invite_code.html b/public/assets/wechat/project_invite_code.html index a17b8fe85..7685d7aef 100644 --- a/public/assets/wechat/project_invite_code.html +++ b/public/assets/wechat/project_invite_code.html @@ -11,6 +11,8 @@

    + 3.通过“加入项目”菜单输入邀请码加入项目(长按邀请码可以复制哦~)
    + 4.扫码默认以报告人员身份加入项目 +
    \ No newline at end of file diff --git a/public/assets/wechat/project_list.html b/public/assets/wechat/project_list.html index 1d385dabf..d9313b6a7 100644 --- a/public/assets/wechat/project_list.html +++ b/public/assets/wechat/project_list.html @@ -7,7 +7,7 @@
    - > + > {{project.member_count}}人
    @@ -20,7 +20,7 @@
    - > + > {{project.member_count}}人
    diff --git a/public/images/wechat/wx_logo.jpg b/public/images/wechat/wx_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8faeef27a4ed1f72da67b813928d77719b8a10b8 GIT binary patch literal 31716 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 S{4lEV#lJMJ|M6YoZ+{1Ba2G28 literal 0 HcmV?d00001 diff --git a/public/javascripts/wechat/controllers/invite_code.js b/public/javascripts/wechat/controllers/invite_code.js index 867c9bce4..71826d54d 100644 --- a/public/javascripts/wechat/controllers/invite_code.js +++ b/public/javascripts/wechat/controllers/invite_code.js @@ -13,7 +13,7 @@ app.controller('InviteCodeController', ['$scope','$http', '$routeParams','config console.log(response.data); vm.course = response.data.data; - var desc = "班级邀请:"+vm.course.name+" 班级"; + var desc = "您的好友邀请您加入班级:\n"+vm.course.name+"\n和小伙伴一起踏上便捷的学习之旅吧!"; var link = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxc09454f171153c2d" + "&redirect_uri=https://test.forge.trustie.net/wechat/user_activities?id="+vm.course.id+ "&response_type=code&scope=snsapi_base&state=invite_code&connect_redirect=1#wechat_redirect"; diff --git a/public/javascripts/wechat/controllers/project_invite_code.js b/public/javascripts/wechat/controllers/project_invite_code.js index e82bb44a8..0729e882e 100644 --- a/public/javascripts/wechat/controllers/project_invite_code.js +++ b/public/javascripts/wechat/controllers/project_invite_code.js @@ -13,7 +13,7 @@ app.controller('ProjectInviteCodeController', ['$scope','$http', '$routeParams', console.log(response.data); vm.project = response.data.data; - var desc = "项目邀请:"+vm.project.name+" 项目"; + var desc = "您的好友邀请您加入项目:\n"+vm.project.name+"\n和小伙伴一起踏上便捷的研发之旅吧!"; var link = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxc09454f171153c2d" + "&redirect_uri=https://test.forge.trustie.net/wechat/user_activities?id="+vm.project.id+ diff --git a/public/javascripts/wechat/directives/at_delete_link.js b/public/javascripts/wechat/directives/at_delete_link.js new file mode 100644 index 000000000..15190c327 --- /dev/null +++ b/public/javascripts/wechat/directives/at_delete_link.js @@ -0,0 +1,17 @@ +/** + * Created by ttang on 2016/8/10. + */ +app.directive('atDeleteLink',["$timeout",function(timer){ + return{ + restrict: 'A', + scope: {}, + link: function(scope, element){ + timer(function(){ + $(".at a").each(function(){ + var atText = $(this).text(); + $(this).parent().html(atText); + }); + }) + } + } +}]); diff --git a/public/javascripts/wechat/directives/input_focus.js b/public/javascripts/wechat/directives/input_focus.js new file mode 100644 index 000000000..38cc01ec9 --- /dev/null +++ b/public/javascripts/wechat/directives/input_focus.js @@ -0,0 +1,14 @@ +/** + * Created by ttang on 2016/8/10. + */ +app.directive('inputFocus',function(){ + return{ + restrict: 'A', + scope: {}, + link: function(scope, element){ + element.on('click',function(){ + $("#postInput1").focus(); + }); + } + } +}); \ No newline at end of file diff --git a/public/javascripts/wechat/others/factory.js b/public/javascripts/wechat/others/factory.js index ad42eb27c..adce0699f 100644 --- a/public/javascripts/wechat/others/factory.js +++ b/public/javascripts/wechat/others/factory.js @@ -372,7 +372,7 @@ app.factory('common', ['$http', 'auth', '$routeParams','rms','config','wx','$loc } if(imgUrl == null || imgUrl == ""){ - imgUrl = 'http://www.trustie.net/images/logo2.png'; + imgUrl = 'http://www.trustie.net/images/wechat/wx_logo.jpg'; } wx.ready(function(){ diff --git a/public/stylesheets/weui/weixin.css b/public/stylesheets/weui/weixin.css index 59bdcd7d9..234dc367b 100644 --- a/public/stylesheets/weui/weixin.css +++ b/public/stylesheets/weui/weixin.css @@ -178,7 +178,7 @@ a.underline {text-decoration:underline;} .invitation-code-wrap {text-align:center; font-size:18px; color:#3b3b3b; padding:16px;} .share-code-wrap {width:100%; background-color:#efeff4;} .share-code-btn, .finish-btn {width:145px; height:35px; color:#fff; font-size:15px; line-height:35px; text-align:center; vertical-align:middle; background-color:#ff7239; margin:18px auto 20px auto; border-radius:50px; display:block;} -.share-code-instruction {max-width:228px; font-size:12px; color:#666; line-height:20px; margin:0 auto;} +.share-code-instruction {max-width:228px; font-size:12px; color:#666; line-height:20px; margin:20px auto 30px;} /*20160613班级详情*/ .class-detail-name, .blue-title {width:100%; height:45px; line-height:45px; vertical-align:middle; background-color:#3b94d6; color:#fff; font-size:18px; text-align:center;} @@ -216,6 +216,7 @@ a.underline {text-decoration:underline;} .border-bottom-none {border-bottom:none !important;} .border-top-none {border-top:none !important;} .students-amount {height:14px; line-height:14px; vertical-align:middle; padding:2px 5px; background-color:#e6e6e6; border-radius:10px;} +.amount-arrow {height:14px; line-height:14px; vertical-align:middle; margin-top:12px;} .new-class-btn {font-size:15px; color:#fff; background-color:#3b94d6; padding:10px 40px; border-radius:20px; display:inline-block; margin:0 auto;} .join-class-btn {font-size:15px; color:#444; background-color:#ccc; padding:10px 40px; border-radius:20px; display:inline-block; margin:0 auto;} .new-class-input {width:60%; color:#555; height:16px; line-height:16px; vertical-align:middle; border:none; outline:none; padding:8px 0;} From 57737ff15d7bd698fb77b57a03490c1658a69dc3 Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Wed, 10 Aug 2016 16:08:30 +0800 Subject: [PATCH 11/98] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E7=BB=86=E8=8A=82?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/mobile/entities/course.rb | 9 ++++ app/api/mobile/entities/project.rb | 10 +++++ app/controllers/members_controller.rb | 8 +++- app/controllers/users_controller.rb | 33 +++++++++++--- app/services/courses_service.rb | 41 ++++++++++++++++- app/services/projects_service.rb | 26 +++++++++++ app/services/syllabuses_service.rb | 2 +- app/services/wechat_service.rb | 36 ++++++++++++++- config/wechat.yml.template | 2 + config/wechat.yml.test | 2 + public/assets/wechat/activities.html | 44 +++++++------------ public/assets/wechat/blog_detail.html | 6 +-- public/assets/wechat/course_discussion.html | 6 +-- public/assets/wechat/course_notice.html | 4 +- public/assets/wechat/homework_detail.html | 6 +-- public/assets/wechat/issue_detail.html | 4 +- public/assets/wechat/jour_message_detail.html | 6 +-- public/assets/wechat/login_tip.html | 0 public/assets/wechat/project.html | 8 ++-- public/assets/wechat/project_discussion.html | 6 +-- public/assets/wechat/reg.html | 5 ++- .../wechat/controllers/review_class_member.js | 7 ++- .../controllers/review_project_member.js | 7 ++- .../wechat/directives/form_validate.js | 14 ++++++ public/javascripts/wechat/others/factory.js | 12 +++++ 25 files changed, 236 insertions(+), 68 deletions(-) create mode 100644 public/assets/wechat/login_tip.html diff --git a/app/api/mobile/entities/course.rb b/app/api/mobile/entities/course.rb index 925c4d7a7..fc78cc14e 100644 --- a/app/api/mobile/entities/course.rb +++ b/app/api/mobile/entities/course.rb @@ -76,6 +76,15 @@ module Mobile end can_setting end + expose :is_member, if: lambda { |instance, options| options[:user] } do |instance, options| + current_user = options[:user] + if instance[:course] + course = instance[:course] + else + course = instance + end + current_user.member_of_course?(course) + end expose :teacher, using: Mobile::Entities::User do |c, opt| if c.is_a? ::Course c.teacher diff --git a/app/api/mobile/entities/project.rb b/app/api/mobile/entities/project.rb index 073f7cd0f..8da151b42 100644 --- a/app/api/mobile/entities/project.rb +++ b/app/api/mobile/entities/project.rb @@ -23,6 +23,16 @@ module Mobile current_user.id == instance.user_id end + expose :is_member, if: lambda { |instance, options| options[:user] } do |instance, options| + current_user = options[:user] + if instance[:project] + project = instance[:project] + else + project = instance + end + current_user.member_of?(project) + end + expose :member_count, if: lambda { |instance, options| options[:user] } do |instance, options| instance.members.count diff --git a/app/controllers/members_controller.rb b/app/controllers/members_controller.rb index f14416442..d661350c6 100644 --- a/app/controllers/members_controller.rb +++ b/app/controllers/members_controller.rb @@ -84,7 +84,8 @@ class MembersController < ApplicationController # 添加成功后,申请人收到消息 AppliedMessage.create(:user_id => @applied_message.applied_user_id, :applied_type => "AppliedProject", :applied_id => applied_project.id , :status => 6, :viewed => false, :applied_user_id => @applied_message.user_id, :role => applied_project.role, :project_id => applied_project.project_id) - + ps = ProjectsService.new + ps.send_wechat_join_project_notice user,project,ap_role,0 # 添加成功后,批准人收到消息 # AppliedMessage.create(:user_id => @applied_message.user_id, :applied_type => "AppliedProject", :applied_id => applied_project.id , # :status => 7, :viewed => true, :applied_user_id => @applied_message.applied_user_id, :role => applied_project.role, :project_id => applied_project.project_id) @@ -114,6 +115,11 @@ class MembersController < ApplicationController @applied_message = AppliedMessage.find(params[:applied_message_id]) # AppliedMessage.create(:user_id => @applied_message.user_id, :applied_type => "AppliedProject", :applied_id => applied_project.id ,:status => 5, # :viewed => true, :applied_user_id => @applied_message.applied_user_id, :role => applied_project.role, :project_id => applied_project.project_id) + ps = ProjectsService.new + user = User.find(@applied_message.applied_user_id) + ap_role = applied_project.try(:role) + ps.send_wechat_join_project_notice user,project,ap_role,1 + applied_project.delete end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 2f1d6a4db..f721f6b8a 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -352,14 +352,14 @@ class UsersController < ApplicationController def dealwith_apply_request @msg = CourseMessage.find(params[:msg_id]) #CourseMessage content存的是role 7教辅 9 教师 + apply_user = User.find(@msg.course_message_id) + ids = @msg.content.split(",") # [@msg.content] msg content保存的是申请的职位角色 + integer_ids = [] + ids.each do |role_id| + integer_ids << role_id.to_i + end case params[:agree] when 'Y' - apply_user = User.find(@msg.course_message_id) - ids = @msg.content.split(",") # [@msg.content] msg content保存的是申请的职位角色 - integer_ids = [] - ids.each do |role_id| - integer_ids << role_id.to_i - end if apply_user.member_of_course?(Course.find(@msg.course_id)) #将角色改为老师或者教辅 member = Course.find(@msg.course_id).members.where(:user_id=>apply_user.id).all[0] @@ -382,11 +382,32 @@ class UsersController < ApplicationController Course.find(@msg.course_id).members << members CourseMessage.create(:user_id => @msg.course_message_id, :course_id => @msg.course_id, :viewed => false,:content=> @msg.content,:course_message_id=>User.current.id,:content=>@msg.content,:course_message_type=>'CourseRequestDealResult',:status=>1) @msg.update_attributes(:status=>1,:viewed=>1) + + if integer_ids.include?(9) + cs = CoursesService.new + c = Course.find(@msg.course_id) + cs.send_wechat_join_class_notice apply_user,c,9,0 + else + cs = CoursesService.new + c = Course.find(@msg.course_id) + cs.send_wechat_join_class_notice apply_user,c,7,0 + end end when 'N' CourseMessage.create(:user_id => @msg.course_message_id, :course_id => @msg.course_id, :viewed => false,:content=> @msg.content,:course_message_id=>User.current.id,:content=>@msg.content,:course_message_type=>'CourseRequestDealResult',:status=>2) @msg.update_attributes(:status=>2,:viewed=>1) + + if integer_ids.include?(9) + cs = CoursesService.new + c = Course.find(@msg.course_id) + cs.send_wechat_join_class_notice apply_user,c,9,1 + else + cs = CoursesService.new + c = Course.find(@msg.course_id) + cs.send_wechat_join_class_notice apply_user,c,7,1 + end + end respond_to do |format| format.js diff --git a/app/services/courses_service.rb b/app/services/courses_service.rb index 73ca91590..81fe9c5f4 100644 --- a/app/services/courses_service.rb +++ b/app/services/courses_service.rb @@ -108,14 +108,14 @@ class CoursesService end #双重身份 学生列表中不显示 - unless (params[:role] == '2' && role_ids.length >= 2) + # unless (params[:role] == '2' && role_ids.length >= 2) users << {:id => m.user.id, :img_url => img_url, :nickname => m.user.login, :gender => gender, :work_unit => work_unit, :mail => m.user.mail, :location => location, role_name: m.roles.first.name, name: m.user.show_name, roles_id: role_ids.include?(7) ? 7 : (role_ids.include?(9) ? 9 : 10 ), :brief_introduction => m.user.user_extensions.brief_introduction,:realname=>m.user.realname} - end + # end end users @@ -223,16 +223,20 @@ class CoursesService end if integer_ids.include?(9) message = "您已同意教师"+apply_user.show_name+",加入班级" + send_wechat_join_class_notice apply_user,c,9,0 else message = "您已同意助教"+apply_user.show_name+",加入班级" + send_wechat_join_class_notice apply_user,c,7,0 end else CourseMessage.create(:user_id => apply_user.id, :course_id => c.id, :viewed => false,:content=> messages.content,:course_message_id=>current_user.id,:course_message_type=>'CourseRequestDealResult',:status=>2) messages.update_attributes(:status=>2,:viewed=>1) if integer_ids.include?(9) message = "您已拒绝教师"+apply_user.show_name+",加入班级" + send_wechat_join_class_notice apply_user,c,9,1 else message = "您已拒绝助教"+apply_user.show_name+",加入班级" + send_wechat_join_class_notice apply_user,c,7,1 end end status = 0 @@ -528,6 +532,37 @@ class CoursesService {:state => @state,:course => course} end + #加入班级结果 + def send_wechat_join_class_notice user,course,role_id,result + count = ShieldWechatMessage.where("container_type='User' and container_id=#{user.id} and shield_type='Course' and shield_id=#{course.id}").count + if count == 0 + ws = WechatService.new + if role_id == 10 && result == 0 + title = "恭喜您加入班级成功。" + ws.join_class_notice user.id, "class", course.id,title, course.syllabus.name,course.name,course.teacher.show_name, "点击查看班级详情。" + else + + role_name = role_id == 7 ? "助教" : "教师" + result_name = result == 0 ? "通过" : "被拒绝" + content = "您以"+role_name+"身份加入班级的申请已"+result_name+"。" + + if result == 0 + title = "恭喜您加入班级成功。" + remark = "点击查看班级详情。" + uid = 0 + type = "class" + else + title = "很遗憾您未能成功加入班级。" + remark = "点击查看申请详情。" + uid = user.id + type = "review_class_member" + end + ws = WechatService.new + ws.class_notice user.id, type, course.id, title, course.name, user.show_name, format_time(Time.now), content, remark,uid + end + end + end + #多个角色加入课程 def join_course_roles params,current_user course = Course.find_by_invite_code(params[:invite_code]) if params[:invite_code] @@ -587,6 +622,7 @@ class CoursesService course.members << members StudentsForCourse.create(:student_id => current_user.id, :course_id => course.id) @state = 0 + send_wechat_join_class_notice current_user,course,10,0 else is_stu = false if role_ids.include?("10") @@ -595,6 +631,7 @@ class CoursesService course.members << members StudentsForCourse.create(:student_id => current_user.id, :course_id =>course.id) is_stu = true + send_wechat_join_class_notice current_user,course,10,0 end #如果已经发送过消息了,那么就要给个提示 if CourseMessage.where("course_message_type = 'JoinCourseRequest' and user_id = #{course.tea_id} and content = '#{role_str}' and course_message_id = #{current_user.id} and course_id = #{course.id} and status = 0").count != 0 diff --git a/app/services/projects_service.rb b/app/services/projects_service.rb index 4de9143bf..2b72fed69 100644 --- a/app/services/projects_service.rb +++ b/app/services/projects_service.rb @@ -117,6 +117,27 @@ class ProjectsService ] end + #加入项目结果 + def send_wechat_join_project_notice user,project,role_id,result + count = ShieldWechatMessage.where("container_type='User' and container_id=#{user.id} and shield_type='Project' and shield_id=#{project.id}").count + if count == 0 + result_name = result == 0 ? "已同意" : "已拒绝" + if result == 0 + title = "恭喜您加入项目成功。" + remark = "点击查看项目详情。" + uid = 0 + type = "project" + else + title = "很遗憾您未能成功加入项目。" + remark = "点击查看申请详情。" + uid = user.id + type = "review_project_member" + end + ws = WechatService.new + ws.join_project_notice user.id, "project", project.id,title, project.name,result_name, remark,uid + end + end + def join_project params,current_user status = -1 project = Project.find_by_invite_code(params[:invite_code]) if params[:invite_code] @@ -146,6 +167,7 @@ class ProjectsService project.project_infos << project_info status = 0 + send_wechat_join_project_notice current_user,project,5,0 else if !AppliedProject.where(:project_id => project.id, :user_id => current_user.id).first.nil? status = 8 @@ -271,6 +293,8 @@ class ProjectsService message = "您已同意"+rolename+user.show_name+",加入项目" + send_wechat_join_project_notice user,project,ap_role,0 + else #拒绝 AppliedMessage.create(:user_id => user.id, :applied_type => "AppliedProject", :applied_id => applied_project.id ,:status => 4, @@ -280,6 +304,8 @@ class ProjectsService applied_project.delete message = "您已拒绝"+rolename+user.show_name+",加入项目" + + send_wechat_join_project_notice user,project,ap_role,1 end status = 0 diff --git a/app/services/syllabuses_service.rb b/app/services/syllabuses_service.rb index fcb70653b..9ca7457a0 100644 --- a/app/services/syllabuses_service.rb +++ b/app/services/syllabuses_service.rb @@ -72,7 +72,7 @@ class SyllabusesService if count == 0 ws = WechatService.new title = "恭喜您创建班级成功。" - ws.create_class_notice user.id, "create_course_notice", course.id,title, course.name, user.show_name, 0, "点击查看班级详情。" + ws.create_class_notice user.id, "create_course_notice", course.id,title, course.name, user.show_name, 1, "点击查看班级详情。" end end diff --git a/app/services/wechat_service.rb b/app/services/wechat_service.rb index 9a6351391..4b120eaa0 100644 --- a/app/services/wechat_service.rb +++ b/app/services/wechat_service.rb @@ -111,11 +111,15 @@ class WechatService end end - def two_keys_template(openid, template_id, type, id, first, key1, key2, remark="") + def two_keys_template(openid, template_id, type, id, first, key1, key2, remark="",uid) + tmpurl = "#{Setting.protocol}://#{Setting.host_name}/wechat/user_activities#/#{type}/#{id}" + if uid && uid != 0 + tmpurl = "#{Setting.protocol}://#{Setting.host_name}/wechat/user_activities#/#{type}?id=#{id}"+ "&user_id="+uid.to_s + end data = { touser:openid, template_id:template_id, - url:"#{Setting.protocol}://#{Setting.host_name}/wechat/user_activities#/#{type}/#{id}",#/assets/wechat/app.html#/#{type}/#{id} + url:tmpurl,#/assets/wechat/app.html#/#{type}/#{id} topcolor:"#FF0000", data:{ first: { @@ -292,6 +296,19 @@ class WechatService end end + def join_class_notice(user_id, type, id, first, key1, key2, key3,remark="") + uw = UserWechat.where(user_id: user_id).first + unless uw.nil? + data = three_keys_template uw.openid,Wechat.config.join_class_notice, type, id, 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 "[join_class__notice] ===> #{e}" + end + Rails.logger.info "send over. #{req}" + end + end + def create_class_notice(user_id, type, id, first, key1, key2, key3, remark="") uw = UserWechat.where(user_id: user_id).first unless uw.nil? @@ -383,4 +400,19 @@ class WechatService end end + def join_project_notice(user_id, type, id, first, key1, key2,remark="",uid=0) + uw = UserWechat.where(user_id: user_id).first + unless uw.nil? + data = two_keys_template uw.openid,Wechat.config.join_project_notice, type, id, first, key1, key2,remark,uid + begin + req = Wechat.api.template_message_send Wechat::Message.to(uw.openid).template(data) + rescue Exception => e + Rails.logger.error "[join_project_notice] ===> #{e}" + end + Rails.logger.info "send over. #{req}" + end + + + end + end \ No newline at end of file diff --git a/config/wechat.yml.template b/config/wechat.yml.template index 68e6ed62e..f55640d97 100644 --- a/config/wechat.yml.template +++ b/config/wechat.yml.template @@ -23,6 +23,8 @@ default: &default create_class_notice: "2GtJJGzzNlNy2i0UrsjEDlvfSVIUXQfSo47stpcQAVw" create_project_notice: "jYu0iimbDpgWYZaTLXioZe2lvqoWTdKnUPyphTJ1mxs" project_review_notice: "kdb-8UlMjTc3z51Qcf8g2vY4i_nE4OGKZAucdQma_2E" + join_class_notice: "0V2vhhp5co7drgoyqn3WXUUTQ9xwYrnVcMma7ika6o0" + join_project_notice: "TtXvy0XMIQyCgpnXHhoB8t-x0QIfy-78gAJXsGf9afg" production: <<: *default diff --git a/config/wechat.yml.test b/config/wechat.yml.test index 8dbd9850f..a49282c1a 100644 --- a/config/wechat.yml.test +++ b/config/wechat.yml.test @@ -23,6 +23,8 @@ default: &default create_class_notice: "9CDIvHIKiGwPEQWRw_-wieec1o50tMXQPPZIfECKu0I" create_project_notice: "R2ZaQKJfDJgujPcHWPzadKHIRkIyj2CjX2o_qIuRqig" project_review_notice: "ip192wVXTav3qchgUn9_7B6lFfTlCZjwL7A1tncTOuc" + join_class__notice: "umHZyT8n6KPf3emf4sTJ66I8OB_TJTzjYhxDbJUgUis" + join_project_notice: "3KnMQEMUCmQWkB5JvzrpmguEwnN8bvUHUdpOTudxv_M" production: <<: *default diff --git a/public/assets/wechat/activities.html b/public/assets/wechat/activities.html index fbdfb1152..a4aa9a4c7 100644 --- a/public/assets/wechat/activities.html +++ b/public/assets/wechat/activities.html @@ -26,8 +26,7 @@
    @@ -64,8 +63,7 @@
    @@ -100,8 +98,7 @@
    @@ -136,7 +133,7 @@
    - +
    @@ -153,8 +150,7 @@
    @@ -192,8 +188,7 @@
    @@ -226,7 +221,7 @@
    - +
    @@ -243,8 +238,7 @@
    @@ -280,8 +274,7 @@
    @@ -326,8 +319,7 @@
    @@ -364,8 +356,7 @@
    @@ -400,8 +391,7 @@
    @@ -436,7 +426,7 @@
    - +
    @@ -460,8 +450,7 @@
    @@ -499,8 +488,7 @@
    @@ -533,7 +521,7 @@
    - +
    diff --git a/public/assets/wechat/blog_detail.html b/public/assets/wechat/blog_detail.html index ee9e968d2..7df2cb237 100644 --- a/public/assets/wechat/blog_detail.html +++ b/public/assets/wechat/blog_detail.html @@ -8,7 +8,7 @@
    @@ -38,7 +38,7 @@
    {{journal.lasted_comment}}
    @@ -48,7 +48,7 @@
    点击展开更多楼层
    {{reply_bottom.lasted_comment}}
    diff --git a/public/assets/wechat/course_discussion.html b/public/assets/wechat/course_discussion.html index 9ef7bc429..a59294791 100644 --- a/public/assets/wechat/course_discussion.html +++ b/public/assets/wechat/course_discussion.html @@ -8,7 +8,7 @@
    @@ -36,7 +36,7 @@
    {{journal.lasted_comment}}
    @@ -47,7 +47,7 @@
    点击展开更多楼层
    {{reply_bottom.lasted_comment}}
    diff --git a/public/assets/wechat/course_notice.html b/public/assets/wechat/course_notice.html index b2771100b..73f6bcfb0 100644 --- a/public/assets/wechat/course_notice.html +++ b/public/assets/wechat/course_notice.html @@ -7,7 +7,7 @@
    @@ -35,7 +35,7 @@
    {{comments.created_on}}
    diff --git a/public/assets/wechat/homework_detail.html b/public/assets/wechat/homework_detail.html index 599774dfc..43d120950 100644 --- a/public/assets/wechat/homework_detail.html +++ b/public/assets/wechat/homework_detail.html @@ -7,7 +7,7 @@
    @@ -40,7 +40,7 @@
    {{journal.lasted_comment}}
    @@ -51,7 +51,7 @@
    点击展开更多楼层
    {{reply_bottom.lasted_comment}}
    diff --git a/public/assets/wechat/issue_detail.html b/public/assets/wechat/issue_detail.html index 852103b81..927de8432 100644 --- a/public/assets/wechat/issue_detail.html +++ b/public/assets/wechat/issue_detail.html @@ -8,7 +8,7 @@
    @@ -41,7 +41,7 @@
    {{journal.created_on}}
    diff --git a/public/assets/wechat/jour_message_detail.html b/public/assets/wechat/jour_message_detail.html index 78760da71..1c004aa59 100644 --- a/public/assets/wechat/jour_message_detail.html +++ b/public/assets/wechat/jour_message_detail.html @@ -7,7 +7,7 @@
    @@ -36,7 +36,7 @@
    {{journal.lasted_comment}}
    @@ -46,7 +46,7 @@
    点击展开更多楼层
    {{reply_bottom.lasted_comment}}
    diff --git a/public/assets/wechat/login_tip.html b/public/assets/wechat/login_tip.html new file mode 100644 index 000000000..e69de29bb diff --git a/public/assets/wechat/project.html b/public/assets/wechat/project.html index f6fcb4b49..3af3ce9c6 100644 --- a/public/assets/wechat/project.html +++ b/public/assets/wechat/project.html @@ -15,8 +15,7 @@
    @@ -54,8 +53,7 @@
    @@ -88,7 +86,7 @@
    - +
    diff --git a/public/assets/wechat/project_discussion.html b/public/assets/wechat/project_discussion.html index cc3d4b1c8..0db2393ad 100644 --- a/public/assets/wechat/project_discussion.html +++ b/public/assets/wechat/project_discussion.html @@ -7,7 +7,7 @@
    @@ -37,7 +37,7 @@
    {{journal.lasted_comment}}
    @@ -47,7 +47,7 @@
    点击展开更多楼层
    {{reply_bottom.lasted_comment}}
    diff --git a/public/assets/wechat/reg.html b/public/assets/wechat/reg.html index 26a17931f..71b05a399 100644 --- a/public/assets/wechat/reg.html +++ b/public/assets/wechat/reg.html @@ -27,9 +27,10 @@
    diff --git a/public/javascripts/wechat/controllers/review_class_member.js b/public/javascripts/wechat/controllers/review_class_member.js index d7f63a9bf..5bf8a36fd 100644 --- a/public/javascripts/wechat/controllers/review_class_member.js +++ b/public/javascripts/wechat/controllers/review_class_member.js @@ -80,6 +80,11 @@ app.controller('ReviewClassMemberController', ['$scope', '$http', 'auth', 'confi }; vm.goClassMemberList = function(){ - $location.path("/class").search({id: course_id,tag: 1}); + if(vm.current_course.is_member){ + $location.path("/class").search({id: course_id,tag: 1}); + } + else{ + $location.path("/class_list"); + } }; }] ); \ No newline at end of file diff --git a/public/javascripts/wechat/controllers/review_project_member.js b/public/javascripts/wechat/controllers/review_project_member.js index e74cf0286..2254a8340 100644 --- a/public/javascripts/wechat/controllers/review_project_member.js +++ b/public/javascripts/wechat/controllers/review_project_member.js @@ -92,6 +92,11 @@ app.controller('ReviewProjectMemberController', ['$scope', '$http', 'auth', 'con rms.save("review_master_members",[]); rms.save("review_develop_members",[]); rms.save("tab_num",null); - $location.path("/project").search({id: project_id,tag: 1}); + if(vm.current_project.is_member){ + $location.path("/project").search({id: project_id,tag: 1}); + } + else{ + $location.path("/project_list") + } }; }] ); \ No newline at end of file diff --git a/public/javascripts/wechat/directives/form_validate.js b/public/javascripts/wechat/directives/form_validate.js index 553560c56..7b5657428 100644 --- a/public/javascripts/wechat/directives/form_validate.js +++ b/public/javascripts/wechat/directives/form_validate.js @@ -7,4 +7,18 @@ app.directive('pwdconfirm', function(){ } } } +}); + +app.directive('unconfirm', function(){ + return { + require: 'ngModel', + link: function(scope, elm, attrs, ctrl){ + ctrl.$validators.unconfirm = function(modelValue, viewValue) { + if(viewValue == ""){ + return true; + } + return (/^[a-zA-Z\d]\w{0,23}[a-zA-Z\d]{0,1}$/.test(viewValue)); + } + } + } }); \ No newline at end of file diff --git a/public/javascripts/wechat/others/factory.js b/public/javascripts/wechat/others/factory.js index ad42eb27c..7acea6938 100644 --- a/public/javascripts/wechat/others/factory.js +++ b/public/javascripts/wechat/others/factory.js @@ -95,6 +95,18 @@ app.factory('rms', function(){ app.factory('common', ['$http', 'auth', '$routeParams','rms','config','wx','$location', function($http, auth, $routeParams,rms,config,wx,$location){ var addCommonReply = function(id, type, data, cb){ + //先判断有没有绑定 + $http.post( + '/wechat/is_bind', + {} ///不用传code了,都由服务器来处理 + ).then(function(response){ + console.log(response.data); + if(response.data.status != 0){ + $location.path("/login_tip"); + } + }); + + if(!data.comment || data.comment.length<=0){ return; From b5af6f2c7fbdd8bae72dd6a4571b4bb11d48f24a Mon Sep 17 00:00:00 2001 From: Tim Date: Wed, 10 Aug 2016 16:45:31 +0800 Subject: [PATCH 12/98] =?UTF-8?q?=E7=BB=91=E5=AE=9A=E8=AF=B4=E6=98=8E?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/wechat/login_tip.html | 14 ++++++++++++++ public/images/wechat/trustie_QR.jpg | Bin 0 -> 159318 bytes public/stylesheets/weui/weixin.css | 8 +++++++- 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 public/images/wechat/trustie_QR.jpg diff --git a/public/assets/wechat/login_tip.html b/public/assets/wechat/login_tip.html index e69de29bb..7d16f009f 100644 --- a/public/assets/wechat/login_tip.html +++ b/public/assets/wechat/login_tip.html @@ -0,0 +1,14 @@ +
    +
    + +
    友情提示
    +
    +
      +
    • 您还没有绑定,不能直接回复
    • +
    • 绑定
    • +
    • 想要实时接收动态?
      长按二维码,关注公众号
    • +
    • +
    +
    +
    + diff --git a/public/images/wechat/trustie_QR.jpg b/public/images/wechat/trustie_QR.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2b0c38f8b7f56b57c7a4012381ace0baec4c62fb GIT binary patch literal 159318 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 a_V<|lJtlwKz~46Tw+;ML8xZ@g_P+o(f`Zuq literal 0 HcmV?d00001 diff --git a/public/stylesheets/weui/weixin.css b/public/stylesheets/weui/weixin.css index 234dc367b..2fbf9c082 100644 --- a/public/stylesheets/weui/weixin.css +++ b/public/stylesheets/weui/weixin.css @@ -87,6 +87,7 @@ a.underline {text-decoration:underline;} .btn-disabled {background-color:#ccc !important;} .btn2 {width:145px; height:35px; color:#fff; font-size:15px; line-height:35px; text-align:center; vertical-align:middle; margin:18px auto 20px auto; border-radius:50px; display:block;} .btn3 {width:145px; height:35px; color:#fff; font-size:15px; line-height:35px; text-align:center; vertical-align:middle; border-radius:50px; display:block;} +.btn4 {width:150px; height:40px; line-height:40px; vertical-align:middle; text-align:center; color:#fff; display:inline-block; border-radius:5px;} .fixed-bottom-btn {position:fixed; bottom:5px; left:50%; transform:translate(-50%,0);} /*tab*/ @@ -247,4 +248,9 @@ a.underline {text-decoration:underline;} /*新建说明*/ .new-tip {line-height:2;} -.new-tip li {position:relative; padding-left:10px;} \ No newline at end of file +.new-tip li {position:relative; padding-left:10px;} + +/*20160810绑定说明*/ +.ac-wrap {text-align:center;} +.ac-content {display:inline-block; line-height:2;} +.ac-content li {position:relative; text-align:left; padding-left:5px;} \ No newline at end of file From 8d753f55dc790f8657277d24696b323717675b5f Mon Sep 17 00:00:00 2001 From: Tim Date: Wed, 10 Aug 2016 17:10:22 +0800 Subject: [PATCH 13/98] =?UTF-8?q?=E7=8F=AD=E7=BA=A7=E3=80=81=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E5=8A=A8=E6=80=81=E5=A2=9E=E5=8A=A0=E2=80=9C=E7=A7=81?= =?UTF-8?q?=E6=9C=89=E5=86=85=E5=AE=B9=EF=BC=8C=E8=B0=A8=E6=85=8E=E4=BC=A0?= =?UTF-8?q?=E6=92=AD=E2=80=9D=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/wechat/course_discussion.html | 1 + public/assets/wechat/course_notice.html | 1 + public/assets/wechat/homework_detail.html | 1 + public/assets/wechat/issue_detail.html | 1 + public/assets/wechat/project_discussion.html | 1 + 5 files changed, 5 insertions(+) diff --git a/public/assets/wechat/course_discussion.html b/public/assets/wechat/course_discussion.html index 1bb2371c2..4dc6c17b5 100644 --- a/public/assets/wechat/course_discussion.html +++ b/public/assets/wechat/course_discussion.html @@ -5,6 +5,7 @@
    +
    私有内容,请谨慎传播