From 24a6aabb6b4e9657f54c15eca9ca4a49f5bafc6b Mon Sep 17 00:00:00 2001 From: Tim Date: Fri, 29 Jul 2016 16:56:55 +0800 Subject: [PATCH 001/405] =?UTF-8?q?=E6=96=B0=E5=BB=BA=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E8=AF=B4=E6=98=8E=E5=88=97=E8=A1=A8=E5=9C=86=E7=82=B9=E5=A4=A7?= =?UTF-8?q?=E5=B0=8F=E4=B8=8E=E9=97=B4=E8=B7=9D=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/wechat/new_project.html | 14 +++++++------- public/stylesheets/weui/weixin.css | 5 +++-- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/public/assets/wechat/new_project.html b/public/assets/wechat/new_project.html index f121a281a..e14f17508 100644 --- a/public/assets/wechat/new_project.html +++ b/public/assets/wechat/new_project.html @@ -8,16 +8,16 @@
项目功能特性(微信版) 更多项目特性(浏览器版)
diff --git a/public/stylesheets/weui/weixin.css b/public/stylesheets/weui/weixin.css index c67cd2a75..3738f1dc4 100644 --- a/public/stylesheets/weui/weixin.css +++ b/public/stylesheets/weui/weixin.css @@ -241,5 +241,6 @@ a.underline {text-decoration:underline;} /*20160729项目说明*/ -.project-intro {line-height:2; width:140px; margin-left:auto; margin-right:auto;} -.project-intro li {list-style:disc; margin-left:20px;} \ No newline at end of file +.project-intro {line-height:2; width:120px; margin-left:auto; margin-right:auto;} +.project-intro li {position:relative;} +.project-intro-dot {font-size:25px; font-weight:bold; position:absolute; left:-10px; top:-13px;} \ No newline at end of file From 634213797241c10ac67922e6f6a785e2e914825b Mon Sep 17 00:00:00 2001 From: Tim Date: Fri, 29 Jul 2016 17:06:25 +0800 Subject: [PATCH 002/405] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E5=8A=A8=E6=80=81?= =?UTF-8?q?=E6=96=87=E5=AD=97=E8=BF=87=E5=A4=9A=E6=98=BE=E7=A4=BA=E7=9C=81?= =?UTF-8?q?=E7=95=A5=E5=8F=B7=EF=BC=9A=E4=B8=AD=E6=96=87=E7=9C=81=E7=95=A5?= =?UTF-8?q?=E5=8F=B7=EF=BC=8C=E8=8B=B1=E6=96=87=E5=8D=95=E8=AF=8D=E5=8F=AF?= =?UTF-8?q?=E8=83=BD=E8=A2=AB=E6=8B=86=E5=88=86=E6=98=BE=E7=A4=BA=E7=9C=81?= =?UTF-8?q?=E7=95=A5=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../javascripts/wechat/directives/ellipsis.js | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/public/javascripts/wechat/directives/ellipsis.js b/public/javascripts/wechat/directives/ellipsis.js index a5dcfa293..d3a67c557 100644 --- a/public/javascripts/wechat/directives/ellipsis.js +++ b/public/javascripts/wechat/directives/ellipsis.js @@ -1,25 +1,25 @@ -/** - * Created by Tim on 7/22/16. - */ -//app.directive('ellipsisShow',["$timeout",function(timer){ -// return{ -// restrict: 'A', -// scope: {}, -// link: function(scope, element){ -// timer(function() { -// var textSplit = element.text().split(" "); -// var newContent = []; -// element.text(""); -// for (var i = 0; i < textSplit.length; i++) { -// newContent = newContent + " " + textSplit[i]; -// element.text(newContent); -// if(element[0].scrollHeight >= 100){ -// newContent = newContent + " " + textSplit[i+1] + " " + textSplit[i+2] + " " + textSplit[i+3] + " " + textSplit[i+4] + "..."; -// element.text(newContent); -// break; -// } -// } -// }); -// } -// } -//}]); \ No newline at end of file +/** + * Created by Tim on 7/22/16. + */ +app.directive('ellipsisShow',["$timeout",function(timer){ + return{ + restrict: 'A', + scope: {}, + link: function(scope, element){ + timer(function() { + var textSplit = element.text().split(""); + var newContent = []; + element.text(""); + for (var i = 0; i < textSplit.length; i++) { + newContent = newContent + textSplit[i]; + element.text(newContent); + if(element[0].scrollHeight >= 100){ + newContent = newContent + textSplit[i+1] + textSplit[i+2] + textSplit[i+3] + textSplit[i+4] + "..."; + element.text(newContent); + break; + } + } + }); + } + } +}]); \ No newline at end of file From 9a3acdd1dbd7661ec8e1f221dad3b2c7743c4309 Mon Sep 17 00:00:00 2001 From: Tim Date: Fri, 29 Jul 2016 17:07:22 +0800 Subject: [PATCH 003/405] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/wechat/app.html | 110 +++++++++++++++++----------------- 1 file changed, 55 insertions(+), 55 deletions(-) diff --git a/public/assets/wechat/app.html b/public/assets/wechat/app.html index 00a55f553..74af26cfe 100644 --- a/public/assets/wechat/app.html +++ b/public/assets/wechat/app.html @@ -1,56 +1,56 @@ - - - - - 仅供本地调试使用 - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + 仅供本地调试使用 + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From b100651185fdb149572db01412b26e513e8aef01 Mon Sep 17 00:00:00 2001 From: Tim Date: Fri, 29 Jul 2016 17:09:53 +0800 Subject: [PATCH 004/405] =?UTF-8?q?=E6=8E=A7=E5=88=B6=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E8=BE=83=E5=A4=9A=E6=96=87=E5=AD=97=E5=90=8E=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E7=9C=81=E7=95=A5=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/javascripts/wechat/directives/ellipsis.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/javascripts/wechat/directives/ellipsis.js b/public/javascripts/wechat/directives/ellipsis.js index d3a67c557..1bc8491b3 100644 --- a/public/javascripts/wechat/directives/ellipsis.js +++ b/public/javascripts/wechat/directives/ellipsis.js @@ -14,7 +14,7 @@ app.directive('ellipsisShow',["$timeout",function(timer){ newContent = newContent + textSplit[i]; element.text(newContent); if(element[0].scrollHeight >= 100){ - newContent = newContent + textSplit[i+1] + textSplit[i+2] + textSplit[i+3] + textSplit[i+4] + "..."; + newContent = newContent + textSplit[i+1] + textSplit[i+2] + textSplit[i+3] + textSplit[i+4] + textSplit[i+5] + textSplit[i+6] + textSplit[i+7] + textSplit[i+8] + textSplit[i+9] + textSplit[i+10] + "..."; element.text(newContent); break; } From f0cf7adcdf081ff5d3938908f491407288632b76 Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Mon, 1 Aug 2016 11:14:03 +0800 Subject: [PATCH 005/405] =?UTF-8?q?=E5=8A=A0=E5=85=A5=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E9=82=80=E8=AF=B7=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/mobile/apis/projects.rb | 10 ++-- app/api/mobile/entities/project.rb | 4 +- app/controllers/wechats_controller.rb | 6 +-- app/models/project.rb | 12 +++++ app/services/projects_service.rb | 16 +++++-- public/images/wechat/project.jpg | Bin 0 -> 129191 bytes .../javascripts/wechat/controllers/project.js | 4 +- .../wechat/controllers/project_list.js | 44 +++++++++--------- 8 files changed, 58 insertions(+), 38 deletions(-) create mode 100644 public/images/wechat/project.jpg diff --git a/app/api/mobile/apis/projects.rb b/app/api/mobile/apis/projects.rb index 5ab0878d0..bdb824694 100644 --- a/app/api/mobile/apis/projects.rb +++ b/app/api/mobile/apis/projects.rb @@ -167,12 +167,12 @@ module Mobile post "join" do authenticate! - # ps = ProjectsService.new - # status = ps.join_project({role: "5", openid: params[:openid], invite_code: params[:invite_code]}, current_user) - # - # present :status, status + ps = ProjectsService.new + status = ps.join_project({role: "5", openid: params[:openid], invite_code: params[:invite_code]}, current_user) + + {status:status, message:ProjectsService::JoinProjectError.message(status)} - {status:-1, message: '该功能将在近日开放,敬请期待!' } + # {status:-1, message: '该功能将在近日开放,敬请期待!' } end end diff --git a/app/api/mobile/entities/project.rb b/app/api/mobile/entities/project.rb index 3e1899caa..073f7cd0f 100644 --- a/app/api/mobile/entities/project.rb +++ b/app/api/mobile/entities/project.rb @@ -4,8 +4,8 @@ module Mobile expose :name expose :id expose :user_id - # expose :invite_code - # expose :qrcode + expose :invite_code + expose :qrcode expose :can_setting, if: lambda { |instance, options| options[:user] } do |instance, options| current_user = options[:user] diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 23a443925..ebbe7c343 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -10,8 +10,8 @@ class WechatsController < ActionController::Base #邀请码 if join_class_request(request) sendBindClass(request, {invite_code: content}) - # elsif join_project_request(request) - # sendBindProject(request, {invite_code: content}) + elsif join_project_request(request) + sendBindProject(request, {invite_code: content}) else request.reply.text "您的意见已收到,非常感谢~ \n更多问题可以通过以下方式联系我们:\n官方QQ群:173184401\n我们会认真聆听您的意见和建议。" end @@ -284,7 +284,7 @@ class WechatsController < ActionController::Base content: "项目名称:#{project.name}\n发起人:#{creator.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#/project?id='+project.id.to_s}&response_type=code&scope=snsapi_base&state=myproject#wechat_redirect" - pic_url = "#{ROOT_URL}/images/wechat/class.jpg" + pic_url = "#{ROOT_URL}/images/wechat/project.jpg" article.item title: "#{n[:title]}", description: n[:content], pic_url: pic_url, diff --git a/app/models/project.rb b/app/models/project.rb index 67f010210..7085cf377 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -928,6 +928,18 @@ class Project < ActiveRecord::Base code end + def generate_qrcode + ticket = self.qrcode + if !ticket || ticket.size < 10 + response = Wechat.api.qrcode_create_scene(invite_code, 2592000) + logger.debug "response = #{response}" + self.qrcode = response['ticket'] + save! && reload + ticket = qrcode + end + ticket + end + private def after_parent_changed(parent_was) diff --git a/app/services/projects_service.rb b/app/services/projects_service.rb index 2441ea9e5..edc2f6816 100644 --- a/app/services/projects_service.rb +++ b/app/services/projects_service.rb @@ -114,7 +114,7 @@ class ProjectsService def join_project params,current_user status = -1 - project = project.find_by_invite_code(params[:invite_code]) if params[:invite_code] + project = Project.find_by_invite_code(params[:invite_code]) if params[:invite_code] if project if project[:is_delete] == 1 @@ -126,10 +126,18 @@ class ProjectsService else if params[:invite_code].present? members = [] - members << Member.new(:role_ids => [5], :user_id => current_user.id) + user_grades = [] + project_info = [] + + user_grades << UserGrade.new(:user_id => current_user.id, :project_id => project.id) + project.user_grades << user_grades unless user_grades.first.user_id.nil? + + members << Member.new(:role_ids => ["5"], :user_id => current_user.id) project.members << members - projectInfo = ProjectInfo.new(:user_id => current_user.id, :project_id => project.id) - projectInfo.save + + projectInfo << ProjectInfo.new(:user_id => current_user.id, :project_id => project.id) + project.project_infos << project_info + status = 0 else status = 4 diff --git a/public/images/wechat/project.jpg b/public/images/wechat/project.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5ac1cb67c3030d9de9ba8961549f5db2b4d075b1 GIT binary patch literal 129191 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≤No)labV3o!aTNQu-X zbwxDesLFl!Zjj+mr7&6iAtt`qkO8uM^9Zwm+h}NbGJ?H}qLE1Q4?t0ZVJCa6$dSeH^dCn?&xAT7_d}@Q|lDOJlGk$^JW`ztGNhX;xoFBl^xbZp;`U_@MRMh z`iuXC#od7h&Hu&8bm5m=wjrJ0g67Sg>HHH=@~i{pFcEG3LB1H?>zTQ$mAZp2AYP%0 z&ad|-hvJ*eYlqv_TyV!6r}_4@@uhgIDqbIyEo)d!)jx7sXVOlxpYf0QCj8Hb;(O1S z0H4mGBUFs61Jx26=N9x3F8rW$Dl0vaRwXVh;B(^0aap`L&?#&$Q|F3%TQtLv%YN~c zn`?^dMH1OpI z`E~t|w}gKc@BJTHE&jc!dXs`T>}Lq3PHPPM*ylyb%7jM0YQ~R-c+JkBl;nFJjUMEr zNuRA)pQ)25=xg|>lktdsPqWzo2A3T_~QEo8twLuhUTW4(4X~me|mMy1rnW5+KwWrUDvHq@PST%p6 zAcZI+)rCl!)tAa&96uZ(nO;PetG=n0OO{^kOV)Zt%Bw<&YS(lmFavuj+<;ebnxEj3x(0x`fK^YOtnf8;Q% zBKx<>@Rvatsy~KFXr+Vf!tH0Hp&(A-*ElV3Et)`F>PmX{Z-93EemIF?7OIp}R!6pL8uw+(TpJUo2cw2zGVyQk&ZtklscyueROWv?89UMR-1P<#na3WYlbGYUlaHyRpTuDlsjIm#5JV( zF&7VN=9s%hvAhM9s@8Q3TP{JrjQGbSD6%TXzrDNN9gRQKa7q87ZMmX4m{RBPr;8X> zU^I&yY`^fN`ZF0RU*fR}BED}WMcMcuFPvY+{UTDVkfeWZy1OgJRg1r~AS3GQ;oyLp9~K#|9t;U0slge zczen3peZAD=(@epvn@xz@SO>DUqsdMoGo(SBoS5#AS0Eby`2ch7q<&QT|M+NziK* zV9kdhtWPVUh;nb@R>V9^12j0TFk=4k*$g@3CmNbyDa>c8k5_TWw9Q-C#gj($_F)mq zrz`4);oLLc&4c)&>ragWrZOZAN>XK zra~xW?sj5tw?5}423|s;j>X{aFN1U#&KGyO`qz!n9r(AQgH#~6T-_f)gH7v`~7F^5$o&HDRL8Fkc_9G^0XYV8NJcQ(s!JWpCXvE;G>-=+F9N!^DNzVb7^6zu*iz7 zQtx+v2_^nA3N{i44`(}V?{#@??{FMKKNVlZG)7d+#(JPB{jQSl6IGTXf~d(CcC#0l;UoCabh^+686hF0yzym|h_Y=C^QW+==QDS~GPYmAs%^zV(z`cPN zLJyv+i9FV+EIB(eTi>R;sL@0fR;Fty&3fXpWmonuUvX3b)Kq7PeIgKz^{ws8zSNGn zT*Lgcw#wS3#ZMy;;WDpDZP>trbG;23!%2xf5jjJayB+O%BaW69sUWF57A2E4>ScHn z!p)=KHoK|oY}M!q<8@d(qwvigzsI%W3M;~!UEO~5KFR(zshly6U3Wt+EK5ev-hbIBa7ncQCvccjm4Pt?Z>K z=SW<)e-PZo2Za7#Y-X8JOq?w`xq8oJ7`t4cG*3obE&MnnD1D}$1683s zXPUD<;gi|4->44KH6%(Os*F#>kJmgsIPSc0(64x@pMOJQvX_IA6qI#`U!CGAb|+Mq z@e?20f!QwZ?+RpHEEo1|EYkMll?G~BcOnr(ugUEClLk08 z?u+ez51IpjB_azy9TLNicT^h*L5{3b>TX}JZnfVMPmPxnfHvuM)&|xsR~fG>vf;UZ z065~zXL+D#&p2Imh8v|KEYC#D91RO^B3f>a72pN8V`tWS1j89*dETn^3wX##5Uu*< z51>P^ixBD}#$ojb;NyJmc}fb}Vt`htB<7e@YRO?9V4?4cj~%UT61yml>~pfetOfHi zk5T5OU(a;Y5_>-PTDd2_=Z+$YtgKE{zvcS!+^Xfu(tgN)XK|V^mlKYS+l;k4vf0&? zH}?ijYWR_3;ZSMsuzd>*{XDgU1+m$zf01Hfb3AKf<^hk}wC;fLtsE`%+Mf!xHtkNo zp~*oMb&dnt+Gbb?&!_UrT-(f|4`I3Vhm8qbP`(~F44sPTvt>7;WBO7WXU_o zURulIo+h8G_nwG=ERhu@xIJhnSg#|{3tXuptAVSRU?2I_1L8$$q@PIB4(nRj?FBA| zsvm^{kN64G`%a5H&rTZJIF>1jAfo#voT_!Cg*7TTUkoOd^UTPS6{kc#Arr)WN3g^E z@uurJIXKBJ3Lnz7V286C{s6XF^<)92LyIK|kVA1$3pgIv{hD`f*^swx(_aYgbpBi|8Q!q8Qn7UhKnFv&vrO zi68OtI1hmNR<;B)rqQmaw7!XpncZ^=)(e(rmG)}ITj~dgwmndFF&iO|JDod6NFA#t zlc&VVcOi`de*jBo7xWZ#NuGKJO*vx|7B&0_fgZx`p4g?3!@;x1@DT?`V6Sd_V+Rb* zrz;u|xiyrA4vRsxK65j3e8SFn`-%;mt(Rbf)hG&bIR63M^K`x?%eH_^iRq~3S_TYG*VklNzZka{oczMCiSIKiNm!g!1QZ62TdFcosXL>juRv(ySs^WjIAWHS&RS$D2MNc8@yu6MPWgjJHjE@pBoF^xZXxNS55otb|Dy&DS`R|Kfm@w z%{kh~^+ClU_8SL4bF_h?qC7q1IuUFG+<`@!K&+dphxi$O-7TnYaCAO%{QU>ej&0}w z4usXu^7HH>cs!f#D_}VnzC2nX=-`5?&&0NdNiD9|u-6!a@N0qtQ3qO4*BaHKd=!3B zsRT1BC}pP={_Q;p(m&j*=aS-=bhadM6EPEf*mbENxss0}p0-YDlJ5Hn?f{{2CxjC* zdfCJC!ifXB=j%igAg4#WW}VfnX=5iutv{^Y)4pW}oN5{-4DY&K%%+KDy{XE3>-#cG zpUF#*BXFP%%yXKd9aFSy-rTw<`H@6kmn|yP=v~E6mha^>0KoUVh3dyh4>k%Rg1fh> z7@dQ4J202(rwn{<^sfaFxu3bIHD)Tncih1-Te`m95mJ_rWl-U7*|gAS@$^%XfnK`& zqcBz)evX2YI{H5Vx6a*|E`;%o%k+Xz>X&5?6 zqp=*K2_u3u=PxF-yw~rWR>m)%E{(%bS3GSGGrFx!*wcC~&!|Q8S?YvFvOvu7WrbC_ zRRw8VDXioPGG+wNvQ1;4saJt{SMzSm6`yr$ggjjIk}di1TfTry?~!~WIB3{GXYo*T zB)vK>2TvH`nBS;_IX?ifi3I*zCJgiC0+ZNUI$vV@`B?kND?!k0F(n#j3bLxha0k(^sbLvX7|S-nX&hD^?v`bGolg^TgG9oJE|a)sP!novz|bj zKOf#1_mF=O>Ntf6wD(#qeDbwCuO#GMna)S82k8&8gy==-L%*5ew$AUZBH0asjHsHo zV#%<4?H4h)DMGXAWMEls94&C=aWfzXmyDhrOT&0Q5Ar`+{cjppyx4Qa+VJ{y6Fy}}VV&3$`kOxMZ}PIN72Wd+tj*AQD@93)`_j?;afr6TpzJ12;*{ghN@GBwqf%0&9B zt<48*n~ax}tIkg_bbO#<}|7FhG+1aVvegMy5nU(!7Z-csT zDNoJvu+j_WJJeHiwFW;hECt#t%i?s zHcmX6^jYMr`}AWMQZ=Q&20h7m`FiE-kFT1RSti-kw{LseCVAnwjn~T;2LylfhfK0~ z8f$cH&At{U`}vM~$&Z)2Kj$_rk9xae=1HAGlh3)Ii@z%W;Q4V^{g3P3N&cty>@AKL z&TI+);pqS4VO+QBjcuK);tm=9o017^^-R3PwE5w7_bWn~h1KmM{1=kH+l4j(C-Cb# zPEW9@@3cFa_U-l5w6!^2e|!A@REK-qp1Q5=NAkqF{j zhesyZFWvLIEcy5r{GhJ--)xTRfHhm(2c6^1m)$+rP@X{?AfiZ*Z^vU&hP5_J```b~M|j z{a7zQF?`1YU=C>f?E|_Xukza}{hXaq%H5Ux&ldl)YF@ow^KJ5@%Gq!8KQmrhFZ)q_ z!N)V3%ueR?tj_kFeEyx*g4}TzXvQ7H T85bi3leuPLG?Ir@B;N!8*wigc literal 0 HcmV?d00001 diff --git a/public/javascripts/wechat/controllers/project.js b/public/javascripts/wechat/controllers/project.js index 0d6ca99f2..c4ff551a6 100644 --- a/public/javascripts/wechat/controllers/project.js +++ b/public/javascripts/wechat/controllers/project.js @@ -25,10 +25,10 @@ app.controller('ProjectController', ['$scope', 'config','$http','$timeout', 'aut //跳入邀请界面 vm.invite = function(){ - vm.alertService.showMessage('提示', "该功能将在近日开放,敬请期待!"); +// vm.alertService.showMessage('提示', "该功能将在近日开放,敬请期待!"); -// $location.path("/project_invite_code").search({id: projectid}); + $location.path("/project_invite_code").search({id: projectid}); }; //获取项目动态 diff --git a/public/javascripts/wechat/controllers/project_list.js b/public/javascripts/wechat/controllers/project_list.js index 058b7dde2..c5827f510 100644 --- a/public/javascripts/wechat/controllers/project_list.js +++ b/public/javascripts/wechat/controllers/project_list.js @@ -45,29 +45,29 @@ app.controller('ProjectListController', ['$scope', 'config', 'auth', '$http', '$ }; vm.joinProject = function () { - vm.alertService_1.showMessage('提示', "该功能将在近日开放,敬请期待!"); +// vm.alertService_1.showMessage('提示', "该功能将在近日开放,敬请期待!"); -// vm.alertService_3.showMessage('提示', '请输入6位项目邀请码(不区分大小写)', function(){ -// if (vm.alertService_3.invite && vm.alertService_3.invite.length == 6) { -// $http.post(config.apiUrl + "projects/join", { -// token: auth.token(), -// invite_code: vm.alertService_3.invite -// }).then(function (response) { -// console.log(response.data); -// if (response.data.status != 0) { -// vm.alertService_1.showMessage('提示', response.data.message); -// } else { -// vm.alertService_1.showMessage('提示', '加入项目成功'); -// vm.alertService_3.invite = ""; -// loadProjectList(); -// } -// }); -// } else { -// if(vm.alertService_3.invite){ -// vm.alertService_1.showMessage('提示', '邀请码格式不正确'); -// } -// } -// }); + vm.alertService_3.showMessage('提示', '请输入6位项目邀请码(不区分大小写)', function(){ + if (vm.alertService_3.invite && vm.alertService_3.invite.length == 6) { + $http.post(config.apiUrl + "projects/join", { + token: auth.token(), + invite_code: vm.alertService_3.invite + }).then(function (response) { + console.log(response.data); + if (response.data.status != 0) { + vm.alertService_1.showMessage('提示', response.data.message); + } else { + vm.alertService_1.showMessage('提示', '加入项目成功'); + vm.alertService_3.invite = ""; + loadProjectList(); + } + }); + } else { + if(vm.alertService_3.invite){ + vm.alertService_1.showMessage('提示', '邀请码格式不正确'); + } + } + }); }; vm.onSetting = function (project) { From bb0bfa21cc816003881d88d554311ce3ba31b7c6 Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Mon, 1 Aug 2016 11:18:01 +0800 Subject: [PATCH 006/405] =?UTF-8?q?=E5=8A=A0=E5=85=A5=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E9=82=80=E8=AF=B7=E7=A0=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index ebbe7c343..e0dcda93f 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -275,7 +275,7 @@ class WechatsController < ActionController::Base ps = ProjectsService.new status = ps.join_project({invite_code: project.invite_code}, user) if status[:state] != 0 - raise ProjectService::JoinProjectError.message(status) + raise ProjectsService::JoinProjectError.message(status) end creator = User.find(project.user_id) From 4c9e183cd05352f851d70e513654527286042a67 Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Mon, 1 Aug 2016 11:24:27 +0800 Subject: [PATCH 007/405] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E7=82=B9=E5=87=BB=E5=8A=A0=E5=85=A5=E9=A1=B9=E7=9B=AE=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index e0dcda93f..6ad45e14a 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -149,13 +149,13 @@ class WechatsController < ActionController::Base end on :click, with: 'JOIN_PROJECT' do |request, key| - request.reply.text "该功能将在近日开放,敬请期待!" - # uw = user_binded?(request[:FromUserName]) - # unless uw - # sendBind(request) - # else - # request.reply.text "请直接回复6位项目邀请码\n(不区分大小写):" - # end + # request.reply.text "该功能将在近日开放,敬请期待!" + uw = user_binded?(request[:FromUserName]) + unless uw + sendBind(request) + else + request.reply.text "请直接回复6位项目邀请码\n(不区分大小写):" + end end on :click, with: 'JOIN_CLASS' do |request, key| From 84f0069cbd579b4befad1883f8a7c5cecd1639ab Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Mon, 1 Aug 2016 11:30:25 +0800 Subject: [PATCH 008/405] =?UTF-8?q?=E6=89=93=E5=BC=80=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E9=82=80=E8=AF=B7=E7=A0=81=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/projects_service.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/services/projects_service.rb b/app/services/projects_service.rb index edc2f6816..282f4f713 100644 --- a/app/services/projects_service.rb +++ b/app/services/projects_service.rb @@ -13,8 +13,8 @@ class ProjectsService #显示项目 def show_project(params,current_user) project = Project.find(params[:id]) - # project.generate_invite_code - # project.generate_qrcode + project.generate_invite_code + project.generate_qrcode project end From c7f2ab0415742393ca19805e48525a408a54ec28 Mon Sep 17 00:00:00 2001 From: huang Date: Mon, 1 Aug 2016 13:51:11 +0800 Subject: [PATCH 009/405] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E8=8B=B1=E6=96=87=E5=90=8D=E5=AD=97=E7=9A=84=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E6=A0=87=E9=A2=98=E4=B8=BA=E2=80=9C=E4=B8=BA=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E8=AE=A8=E8=AE=BA=E5=8C=BA=E7=9A=84=E9=97=AE=E9=A2=98=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/project.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/models/project.rb b/app/models/project.rb index 67f010210..f66b07580 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -1224,8 +1224,7 @@ class Project < ActiveRecord::Base # 创建项目后在项目下同步创建一个讨论区 def create_board_sync @board = self.boards.build - self.name=" #{l(:label_borad_project) }" - @board.name = self.name + @board.name = " #{l(:label_borad_project) }" @board.description = self.name.to_s if @board.save logger.debug "[Project Model] ===> #{@board.to_json}" From fa43924330b4aab00015afe461f3147dd69fa8b7 Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Mon, 1 Aug 2016 13:54:10 +0800 Subject: [PATCH 010/405] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E4=BA=8C=E7=BB=B4=E7=A0=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/project.rb | 2 +- .../wechat/controllers/edit_class_member.js | 11 ++++------- .../wechat/controllers/edit_project_member.js | 11 ++++------- 3 files changed, 9 insertions(+), 15 deletions(-) diff --git a/app/models/project.rb b/app/models/project.rb index 7085cf377..86f670f33 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -934,7 +934,7 @@ class Project < ActiveRecord::Base response = Wechat.api.qrcode_create_scene(invite_code, 2592000) logger.debug "response = #{response}" self.qrcode = response['ticket'] - save! && reload + save! ticket = qrcode end ticket diff --git a/public/javascripts/wechat/controllers/edit_class_member.js b/public/javascripts/wechat/controllers/edit_class_member.js index cddc183c5..2a9987290 100644 --- a/public/javascripts/wechat/controllers/edit_class_member.js +++ b/public/javascripts/wechat/controllers/edit_class_member.js @@ -30,13 +30,10 @@ app.controller('EditClassMemberController', ['$scope', '$http', 'auth', 'config' console.log(vm.current_edit_member); vm.cancel = function(){ - vm.alertService.showMessage('提示', '您确定不对角色进行变更吗?', function(){ -// rms.save("project_master_members",[]); -// rms.save("project_develop_members",[]); -// rms.save("project_report_members",[]); - window.history.back(); -// $location.path("/project").search({id: project_id}); - }); +// vm.alertService.showMessage('提示', '您确定不对角色进行变更吗?', function(){ +// window.history.back(); +// }); + window.history.back(); }; vm.edit_member_role = function(){ diff --git a/public/javascripts/wechat/controllers/edit_project_member.js b/public/javascripts/wechat/controllers/edit_project_member.js index 1063c0b13..cae768080 100644 --- a/public/javascripts/wechat/controllers/edit_project_member.js +++ b/public/javascripts/wechat/controllers/edit_project_member.js @@ -31,13 +31,10 @@ app.controller('EditProjectMemberController', ['$scope', '$http', 'auth', 'confi console.log(vm.current_edit_member); vm.cancel = function(){ - vm.alertService.showMessage('提示', '您确定不对角色进行变更吗?', function(){ -// rms.save("project_master_members",[]); -// rms.save("project_develop_members",[]); -// rms.save("project_report_members",[]); - window.history.back(); -// $location.path("/project").search({id: project_id}); - }); +// vm.alertService.showMessage('提示', '您确定不对角色进行变更吗?', function(){ +// window.history.back(); +// }); + window.history.back(); }; vm.edit_member_role = function(){ From 5272f20de87a156e9c34b6060305213f6d3ed2f7 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Mon, 1 Aug 2016 13:56:37 +0800 Subject: [PATCH 011/405] =?UTF-8?q?=E5=8D=95=E4=BD=8D=E5=AE=A1=E6=A0=B8bug?= =?UTF-8?q?=E7=9A=84=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/admin_controller.rb | 24 +++++++++++-------- app/views/admin/has_applied_schools.html.erb | 6 ++--- .../users/_user_message_applied.html.erb | 2 +- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb index 935ca1d71..060f23ec4 100644 --- a/app/controllers/admin_controller.rb +++ b/app/controllers/admin_controller.rb @@ -612,43 +612,44 @@ class AdminController < ApplicationController end end - # 获取申请的高校列表 - # status: 0 未审批; 1 已批阅; + # 单位审核 + # 未审批tab页 + # status: 0 未审批; 1 已批阅; 2已更改; 3拒绝; def applied_schools @name = params[:name] || "" condition = "#{@name.strip}".gsub(" ","") @apply_status = ApplyAddSchools.where("status = 0 and name like '%#{condition}%'").order('created_at desc') @apply_count = @apply_status.count - @apply_pages = Paginator.new @apply_count, 30, params['page'] || 1 @apply_status = paginateHelper @apply_status, 30 - @page = (params['page'] || 1).to_i - 1 + respond_to do |format| format.html end end + # 单位审核 + # 已审批tab页 def has_applied_schools @name = params[:name] || "" condition = "#{@name.strip}".gsub(" ","") @has_apply_status = ApplyAddSchools.where("(status = 1 or status = 2) and name like '%#{condition}%'").order('created_at desc') @has_apply_count = @has_apply_status.count - @has_apply_pages = Paginator.new @has_apply_count, 30, params['page'] || 1 @has_apply_status = paginateHelper @has_apply_status, 30 - @page = (params['page'] || 1).to_i - 1 + respond_to do |format| format.html end end - # 批准未审批的高校 + # 单位审核:批准 # 消息发送,发送对象为申请人 - # status: 0表示未批准; status:1表示已批准; status: 2表示已更改; status: 3表示已拒绝 + # status: 0表示未批准; status:1表示已批准; status: 2表示已更改; status: 3表示已拒绝; def approve_applied_schools applied_school = ApplyAddSchools.find params[:id] applied_school.update_column('status', 1) unless applied_school.nil? @@ -661,7 +662,7 @@ class AdminController < ApplicationController end end - # 更改申请的高校名称 + # 单位审核:更改 # REDO: 修改该字段 # REDO: 同步修改使用了改名称的用户单位 def edit_applied_schools @@ -686,6 +687,7 @@ class AdminController < ApplicationController redirect_to unapplied_schools_url end + # 单位审核:更改功能搜索合法学校弹框 def all_schools apply_schools = ApplyAddSchools.where("status != 1") apply_school_ids = apply_schools.empty? ? "(-1)" : "(" + apply_schools.map{|sc| sc.school_id}.join(',') + ")" @@ -704,7 +706,7 @@ class AdminController < ApplicationController end end - # 删除申请的高校 + # 单位审核:删除 # REDO: destroy关联删除 # REDO: 删除确认提示,是否删除 # REDO: 给申请人发送消息 @@ -717,6 +719,8 @@ class AdminController < ApplicationController user.update_column("school_id", nil) end applied_school.school.destroy + + # 跳转当前页面 if params[:tip] == "unapplied" redirect_to unapplied_schools_url elsif params[:tip] == "applied" diff --git a/app/views/admin/has_applied_schools.html.erb b/app/views/admin/has_applied_schools.html.erb index 5be3517c8..1b6341fb3 100644 --- a/app/views/admin/has_applied_schools.html.erb +++ b/app/views/admin/has_applied_schools.html.erb @@ -26,7 +26,7 @@ 单位名称 - + 申请者 @@ -59,8 +59,8 @@ <% unless apply.school_id.nil? %> <% school_name = School.where("id=?", apply.school_id).first %> - <%= school_name %> - + <%= school_name.name %> + <% end %> diff --git a/app/views/users/_user_message_applied.html.erb b/app/views/users/_user_message_applied.html.erb index e543f6cee..fbe422242 100644 --- a/app/views/users/_user_message_applied.html.erb +++ b/app/views/users/_user_message_applied.html.erb @@ -24,7 +24,7 @@ 系统提示 ">您添加新的高校(单位):

  • - <%= ma.applied.name %>的申请,因名称不合法,系统已将其更改为“<%= ma.name %>” + “<%= ma.applied.name %>”的申请,因名称不合法,系统已将其更改为“<%= ma.name %>”
  • <%= time_tag(ma.created_at).html_safe %>
  • <% elsif ma.status == 3 %> From 3bc696a5972f46598f5cd33902a85856acbd6803 Mon Sep 17 00:00:00 2001 From: cxt Date: Mon, 1 Aug 2016 13:57:55 +0800 Subject: [PATCH 012/405] =?UTF-8?q?=E7=94=B3=E8=AF=B7=E5=AD=A6=E6=A0=A1?= =?UTF-8?q?=E7=9A=84=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/admin_controller.rb | 6 ++++-- db/schema.rb | 28 +++++++++++++++++++++++----- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb index 935ca1d71..0b165b7c5 100644 --- a/app/controllers/admin_controller.rb +++ b/app/controllers/admin_controller.rb @@ -676,7 +676,9 @@ class AdminController < ApplicationController users.each do |user| user.update_column("school_id", school[0].id) end - aas.school.destroy + if aas.school_id != school[0].id.to_i + aas.school.destroy + end aas.update_attribute(:school_id, school[0].id) rescue Exception => e puts e @@ -687,7 +689,7 @@ class AdminController < ApplicationController end def all_schools - apply_schools = ApplyAddSchools.where("status != 1") + apply_schools = ApplyAddSchools.where("status = 0") apply_school_ids = apply_schools.empty? ? "(-1)" : "(" + apply_schools.map{|sc| sc.school_id}.join(',') + ")" if !params[:search].nil? search = "%#{params[:search].to_s.strip.downcase}%" diff --git a/db/schema.rb b/db/schema.rb index c7d918346..d8b93da88 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20160725091759) do +ActiveRecord::Schema.define(:version => 20160729124833) do create_table "activities", :force => true do |t| t.integer "act_id", :null => false @@ -52,9 +52,24 @@ ActiveRecord::Schema.define(:version => 20160725091759) do add_index "api_keys", ["access_token"], :name => "index_api_keys_on_access_token" add_index "api_keys", ["user_id"], :name => "index_api_keys_on_user_id" + create_table "applied_messages", :force => true do |t| + t.integer "user_id" + t.integer "applied_id" + t.string "applied_type" + t.integer "viewed", :default => 0 + t.integer "status", :default => 0 + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.string "name" + t.integer "applied_user_id" + t.integer "role" + t.integer "project_id" + end + create_table "applied_projects", :force => true do |t| - t.integer "project_id", :null => false - t.integer "user_id", :null => false + t.integer "project_id", :null => false + t.integer "user_id", :null => false + t.integer "role", :default => 0 end create_table "apply_add_schools", :force => true do |t| @@ -1106,9 +1121,10 @@ ActiveRecord::Schema.define(:version => 20160725091759) do end create_table "member_roles", :force => true do |t| - t.integer "member_id", :null => false - t.integer "role_id", :null => false + t.integer "member_id", :null => false + t.integer "role_id", :null => false t.integer "inherited_from" + t.integer "is_current", :default => 1 end add_index "member_roles", ["member_id"], :name => "index_member_roles_on_member_id" @@ -1539,6 +1555,8 @@ ActiveRecord::Schema.define(:version => 20160725091759) do t.integer "boards_reply_count", :default => 0 t.integer "visits", :default => 0 t.integer "hot", :default => 0 + t.string "invite_code" + t.string "qrcode" end add_index "projects", ["lft"], :name => "index_projects_on_lft" From c1bd3b6bf129b1febcf7ae0d4f86822b6ec42567 Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Mon, 1 Aug 2016 14:30:31 +0800 Subject: [PATCH 013/405] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 6 ++++++ app/services/projects_service.rb | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 6ad45e14a..bf4e1fade 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -8,6 +8,8 @@ class WechatsController < ActionController::Base # default text responder when no other match on :text do |request, content| #邀请码 + logger.debug "!!!!!!!!!!!fankui" + logger.info request if join_class_request(request) sendBindClass(request, {invite_code: content}) elsif join_project_request(request) @@ -43,11 +45,15 @@ class WechatsController < ActionController::Base # When subscribe user scan scene_id in public account on :scan, with: 'scene_id' do |request, ticket| + logger.debug "!!!!!!!!!!!scene_id" + logger.info request sendBindClass(request, {ticket: ticket}) end # When no any on :scan responder can match subscribe user scaned scene_id on :event, with: 'scan' do |request| + logger.debug "!!!!!!!!!!!scan" + logger.info request if request[:EventKey].present? sendBindClass(request, {ticket: request[:Ticket]}) end diff --git a/app/services/projects_service.rb b/app/services/projects_service.rb index 282f4f713..2d5e3bf08 100644 --- a/app/services/projects_service.rb +++ b/app/services/projects_service.rb @@ -135,7 +135,7 @@ class ProjectsService members << Member.new(:role_ids => ["5"], :user_id => current_user.id) project.members << members - projectInfo << ProjectInfo.new(:user_id => current_user.id, :project_id => project.id) + project_info << ProjectInfo.new(:user_id => current_user.id, :project_id => project.id) project.project_infos << project_info status = 0 From 2c86ae3eb21582ff7d378a2856be89a66f88303d Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Mon, 1 Aug 2016 15:09:36 +0800 Subject: [PATCH 014/405] =?UTF-8?q?=E4=BA=8C=E7=BB=B4=E7=A0=81=E8=AF=86?= =?UTF-8?q?=E5=88=AB=20=E9=A1=B9=E7=9B=AE=E5=92=8C=E7=8F=AD=E7=BA=A7?= =?UTF-8?q?=E5=8C=BA=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 45 +++++++++++++++++++++++---- 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index bf4e1fade..118aea0f2 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -8,8 +8,6 @@ class WechatsController < ActionController::Base # default text responder when no other match on :text do |request, content| #邀请码 - logger.debug "!!!!!!!!!!!fankui" - logger.info request if join_class_request(request) sendBindClass(request, {invite_code: content}) elsif join_project_request(request) @@ -45,16 +43,18 @@ class WechatsController < ActionController::Base # When subscribe user scan scene_id in public account on :scan, with: 'scene_id' do |request, ticket| - logger.debug "!!!!!!!!!!!scene_id" - logger.info request sendBindClass(request, {ticket: ticket}) end # When no any on :scan responder can match subscribe user scaned scene_id on :event, with: 'scan' do |request| - logger.debug "!!!!!!!!!!!scan" - logger.info request if request[:EventKey].present? + + + + + + sendBindClass(request, {ticket: request[:Ticket]}) end end @@ -215,6 +215,39 @@ class WechatsController < ActionController::Base end end + def checkTicket(request,params) + begin + uw = user_binded?(request[:FromUserName]) + if !uw + return sendBind(request) + end + + course = nil + course = Course.where(qrcode: params[:ticket]).first if params[:ticket] + course = Course.where(invite_code: params[:invite_code]).first if params[:invite_code] + + if course + return join_class(params, uw.user, request) + else + project = nil + project = Project.where(qrcode: params[:ticket]).first if params[:ticket] + project = Project.where(invite_code: params[:invite_code]).first if params[:invite_code] + if project + return join_project(params, uw.user, request) + end + end + + raise "该二维码已失效!" + + rescue => e + logger.error e.inspect + logger.error e.backtrace.join("\n") + return request.reply.text e + end + + + end + def default_msg(request) uw = user_binded?(request[:FromUserName]) if uw && uw.user From 96b04f39b18e40fe4d31bd5d4ac2ccac077d76cd Mon Sep 17 00:00:00 2001 From: huang Date: Mon, 1 Aug 2016 15:33:47 +0800 Subject: [PATCH 015/405] =?UTF-8?q?pull=20requests=E6=A1=86=E6=9E=B6?= =?UTF-8?q?=E6=90=AD=E5=BB=BA=EF=BC=88=E8=B7=AF=E7=94=B1=E6=8E=A7=E5=88=B6?= =?UTF-8?q?=E5=99=A8=E3=80=81views=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/assets/javascripts/pull_rquests.js.coffee | 3 +++ app/assets/stylesheets/pull_rquests.css.scss | 3 +++ app/controllers/pull_rquests_controller.rb | 18 ++++++++++++++++++ app/helpers/pull_rquests_helper.rb | 2 ++ app/views/projects/_development_group.html.erb | 9 +++++++++ app/views/pull_rquests/index.html.erb | 0 app/views/pull_rquests/new.html.erb | 0 app/views/pull_rquests/show.html.erb | 1 + config/routes.rb | 7 +++++++ .../pull_rquests_controller_spec.rb | 5 +++++ 10 files changed, 48 insertions(+) create mode 100644 app/assets/javascripts/pull_rquests.js.coffee create mode 100644 app/assets/stylesheets/pull_rquests.css.scss create mode 100644 app/controllers/pull_rquests_controller.rb create mode 100644 app/helpers/pull_rquests_helper.rb create mode 100644 app/views/pull_rquests/index.html.erb create mode 100644 app/views/pull_rquests/new.html.erb create mode 100644 app/views/pull_rquests/show.html.erb create mode 100644 spec/controllers/pull_rquests_controller_spec.rb diff --git a/app/assets/javascripts/pull_rquests.js.coffee b/app/assets/javascripts/pull_rquests.js.coffee new file mode 100644 index 000000000..761567942 --- /dev/null +++ b/app/assets/javascripts/pull_rquests.js.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ diff --git a/app/assets/stylesheets/pull_rquests.css.scss b/app/assets/stylesheets/pull_rquests.css.scss new file mode 100644 index 000000000..89d608475 --- /dev/null +++ b/app/assets/stylesheets/pull_rquests.css.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the pull_rquests controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/controllers/pull_rquests_controller.rb b/app/controllers/pull_rquests_controller.rb new file mode 100644 index 000000000..2fcdf79df --- /dev/null +++ b/app/controllers/pull_rquests_controller.rb @@ -0,0 +1,18 @@ +class PullRquestsController < ApplicationController + before_filter :find_project + layout "base_projects" + + def index + + end + + def new + + end + + def find_project + @project = Project.find(params[:project_id]) + rescue ActiveRecord::RecordNotFound + render_404 + end +end diff --git a/app/helpers/pull_rquests_helper.rb b/app/helpers/pull_rquests_helper.rb new file mode 100644 index 000000000..1b3eef9a4 --- /dev/null +++ b/app/helpers/pull_rquests_helper.rb @@ -0,0 +1,2 @@ +module PullRquestsHelper +end diff --git a/app/views/projects/_development_group.html.erb b/app/views/projects/_development_group.html.erb index 2c7d36fb5..a218e368d 100644 --- a/app/views/projects/_development_group.html.erb +++ b/app/views/projects/_development_group.html.erb @@ -57,6 +57,15 @@ <% end %> +<% if User.current.member_of?(@project) %> + +<% end %> + @@ -22,7 +22,8 @@ - + + <% if User.current.try(:login) == qa.author_login || User.current.admin? || is_project_manager?(User.current.id, @project.id) %>
  • <%=link_to "编辑", edit_project_quality_analysi_path(qa, :project_id => @project.id), :remote => true, :class => "fontBlue2" %> / diff --git a/public/stylesheets/css/project.css b/public/stylesheets/css/project.css index bb1e382c9..c594c81fa 100644 --- a/public/stylesheets/css/project.css +++ b/public/stylesheets/css/project.css @@ -511,8 +511,9 @@ a:hover.upload_btn_grey{background:#8a8a8a;} .analysis-result-name {width:200px;} .analysis-result-version {width:90px; text-align:right;} .analysis-result-loc {width:60px; text-align:right;} -.analysis-result-debt {width:160px; text-align:right;} +.analysis-result-debt {width:80px; text-align:right;} .analysis-result-time {width:150px; text-align:right;} +.analysis-result-edit {width:80px; text-align:right;} .analysis-name-icon {background:url(/images/code-analysis-icon.png) -2px -148px no-repeat; width:16px; height:16px; display:inline-block; vertical-align:middle;} From 7c5240b38653fc597eae9525c3b363f97207d4c1 Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Thu, 11 Aug 2016 09:58:45 +0800 Subject: [PATCH 173/405] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=20=E6=B2=A1=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E5=8A=A8=E6=80=81=E5=9B=9E=E5=A4=8D=E4=BC=9A=E8=B7=B3?= =?UTF-8?q?=E5=88=B0=E7=BB=91=E5=AE=9A=E7=99=BB=E5=BD=95=E7=95=8C=E9=9D=A2?= =?UTF-8?q?=EF=BC=8C=E7=A7=81=E6=9C=89=E5=86=85=E5=AE=B9=E9=9C=80=E8=A6=81?= =?UTF-8?q?=E6=98=AF=E6=88=90=E5=91=98=E6=89=8D=E8=83=BD=E5=9B=9E=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/mobile/apis/new_comment.rb | 149 +++++++++++++----- app/api/mobile/apis/newss.rb | 4 +- app/services/courses_service.rb | 36 ++--- app/services/wechat_service.rb | 24 +-- config/wechat.yml.template | 1 - config/wechat.yml.test | 1 - public/assets/wechat/blog_detail.html | 2 +- public/assets/wechat/homework_detail.html | 2 +- public/assets/wechat/login_tip.html | 9 +- public/assets/wechat/reg.html | 2 +- .../javascripts/wechat/controllers/login.js | 10 +- .../wechat/controllers/login_tip..js | 7 + public/javascripts/wechat/controllers/reg.js | 7 +- public/javascripts/wechat/others/factory.js | 20 ++- public/javascripts/wechat/others/routes.js | 1 + 15 files changed, 181 insertions(+), 94 deletions(-) create mode 100644 public/javascripts/wechat/controllers/login_tip..js diff --git a/app/api/mobile/apis/new_comment.rb b/app/api/mobile/apis/new_comment.rb index 5b7159301..10308774f 100644 --- a/app/api/mobile/apis/new_comment.rb +++ b/app/api/mobile/apis/new_comment.rb @@ -14,66 +14,130 @@ module Mobile requires :token, type: String end post ':id' do - authenticate! + # authenticate! + status = 0 + tip = 0 #0班级1项目 type = params[:type] result = 1 if params[:content]!="" && current_user case type when "HomeworkCommon" homework_common = HomeworkCommon.find(params[:id]) - feedback = HomeworkCommon.add_homework_jour(current_user, params[:content], params[:id]) - if (feedback.errors.empty?) - homework_common.update_column(:updated_at, Time.now) - result = 2 + + #如果是私有的 并且不是成员则不能回复 + is_public = homework_common.course.is_public + if is_public == 0 && !current_user.member_of_course?(homework_common.course) + status = -1 + tip = 0 + else + feedback = HomeworkCommon.add_homework_jour(current_user, params[:content], params[:id]) + if (feedback.errors.empty?) + homework_common.update_column(:updated_at, Time.now) + result = 2 + end end + when "News" news = News.find(params[:id]) - comment = Comment.new - comment.comments = params[:content] - comment.author = current_user - if news.comments << comment - result = 2 + + if news.project + if news.project.is_public == false && !current_user.member_of?(news.project) + status = -1 + tip = 1 + end + elsif news.course + if news.course.is_public == 0 && !current_user.member_of_course?(news.course) + status = -1 + tip = 0 + end + end + + if status == 0 + comment = Comment.new + comment.comments = params[:content] + comment.author = current_user + if news.comments << comment + result = 2 + end end when "Message" message = Message.find(params[:id]) board = Board.find(message.board_id) - topic = message.root - reply = Message.new - reply.author = current_user - reply.board = board - reply.content = params[:content] - reply.parent_id = params[:id] - reply.subject = "RE: #{topic.subject}" - if topic.children << reply - result = 2 + + if message.project + if message.project.is_public == false && !current_user.member_of?(message.project) + status = -1 + tip = 1 + end + elsif message.course + if message.course.is_public == 0 && !current_user.member_of_course?(message.course) + status = -1 + tip = 0 + end + end + + if status == 0 + topic = message.root + reply = Message.new + reply.author = current_user + reply.board = board + reply.content = params[:content] + reply.parent_id = params[:id] + reply.subject = "RE: #{topic.subject}" + if topic.children << reply + result = 2 + end end when "JournalsForMessage" jour = JournalsForMessage.find params[:id] - parent_id = params[:id] - author_id = current_user.id - reply_user_id = jour.user_id - reply_id = params[:id] - content = params[:content] - options = {:user_id => author_id, - :status => true, - :m_parent_id => parent_id, - :m_reply_id => reply_id, - :reply_id => reply_user_id, - :notes => content, - :is_readed => false} - jfm = jour.user.add_jour(nil, nil, nil, options) - if jfm.errors.empty? - (JournalsForMessage.find parent_id).update_attribute(:updated_on,Time.now) - result = 2 + + if jour.jour_type == "Project" + if jour.project.is_public == false && !current_user.member_of?(jour.project) + status = -1 + tip = 1 + end + elsif jour.jour_type == "Course" + if jour.course.is_public == 0 && !current_user.member_of_course?(jour.course) + status = -1 + tip = 0 + end + end + + if status == 0 + parent_id = params[:id] + author_id = current_user.id + reply_user_id = jour.user_id + reply_id = params[:id] + content = params[:content] + options = {:user_id => author_id, + :status => true, + :m_parent_id => parent_id, + :m_reply_id => reply_id, + :reply_id => reply_user_id, + :notes => content, + :is_readed => false} + jfm = jour.user.add_jour(nil, nil, nil, options) + if jfm.errors.empty? + (JournalsForMessage.find parent_id).update_attribute(:updated_on,Time.now) + result = 2 + end end when 'Issue' issue = Issue.find params[:id] - is_jour = Journal.new - is_jour.user_id = current_user.id - is_jour.notes = params[:content] - is_jour.journalized = issue - if is_jour.save - result = 2 + + if issue.project.is_public == false && !current_user.member_of?(issue.project) + status = -1 + tip = 1 + end + + if status == 0 + is_jour = Journal.new + is_jour.user_id = current_user.id + is_jour.notes = params[:content] + is_jour.journalized = issue + if is_jour.save + result = 2 + end end when 'BlogComment' blog = BlogComment.find(params[:id]).root @@ -97,7 +161,8 @@ module Mobile result = 3 end present :result, result - present :status, 0 + present :status, status + present :tip, tip end end end diff --git a/app/api/mobile/apis/newss.rb b/app/api/mobile/apis/newss.rb index 907958631..c2e2fcb5c 100644 --- a/app/api/mobile/apis/newss.rb +++ b/app/api/mobile/apis/newss.rb @@ -20,8 +20,8 @@ module Mobile if news.project is_public = news.project.is_public - elsif news.project - is_public = news.project.is_public + elsif news.course + is_public = news.course.is_public end present :data, news, with: Mobile::Entities::News,user: user,type: type,page: page diff --git a/app/services/courses_service.rb b/app/services/courses_service.rb index 81fe9c5f4..7d574bada 100644 --- a/app/services/courses_service.rb +++ b/app/services/courses_service.rb @@ -537,29 +537,25 @@ class CoursesService 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+"。" + role_name = role_id == 7 ? "助教" : role_id == 9 ? "教师" : "学生" + 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 + 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 diff --git a/app/services/wechat_service.rb b/app/services/wechat_service.rb index 4b120eaa0..4506bf3e4 100644 --- a/app/services/wechat_service.rb +++ b/app/services/wechat_service.rb @@ -296,18 +296,18 @@ 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 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 diff --git a/config/wechat.yml.template b/config/wechat.yml.template index f55640d97..ce3008729 100644 --- a/config/wechat.yml.template +++ b/config/wechat.yml.template @@ -23,7 +23,6 @@ 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 a49282c1a..a5339d398 100644 --- a/config/wechat.yml.test +++ b/config/wechat.yml.test @@ -23,7 +23,6 @@ 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: diff --git a/public/assets/wechat/blog_detail.html b/public/assets/wechat/blog_detail.html index a4c24e3d4..c1e2fd2fd 100644 --- a/public/assets/wechat/blog_detail.html +++ b/public/assets/wechat/blog_detail.html @@ -73,7 +73,7 @@
    - +
    diff --git a/public/assets/wechat/homework_detail.html b/public/assets/wechat/homework_detail.html index 34e5e83ed..474fc4f03 100644 --- a/public/assets/wechat/homework_detail.html +++ b/public/assets/wechat/homework_detail.html @@ -73,7 +73,7 @@
    - +
    diff --git a/public/assets/wechat/login_tip.html b/public/assets/wechat/login_tip.html index 7d16f009f..4495e5a0d 100644 --- a/public/assets/wechat/login_tip.html +++ b/public/assets/wechat/login_tip.html @@ -2,13 +2,12 @@
    友情提示
    -
    -
    - +
    \ No newline at end of file diff --git a/public/assets/wechat/reg.html b/public/assets/wechat/reg.html index 71b05a399..f42108202 100644 --- a/public/assets/wechat/reg.html +++ b/public/assets/wechat/reg.html @@ -30,7 +30,7 @@
    登录名不能为空 - 登录名为1-25个英文字母、数字和下划线 + 不能以下划线开头,不能包括中文,长度不超过25个字符
    diff --git a/public/javascripts/wechat/controllers/login.js b/public/javascripts/wechat/controllers/login.js index f8e87a93f..ea86a71a2 100644 --- a/public/javascripts/wechat/controllers/login.js +++ b/public/javascripts/wechat/controllers/login.js @@ -1,6 +1,8 @@ app.controller('LoginController', ['$scope', '$http', '$location', '$routeParams', 'alertService', 'config','auth','session','wx', function ($scope, $http, $location, $routeParams, alertService, config, auth,session, wx) { + var tag = $routeParams.tag; + // 登录页不用显示菜音 wx.ready(function(){ wx.hideOptionMenu(); @@ -39,7 +41,13 @@ app.controller('LoginController', ['$scope', '$http', '$location', '$routeParams vm.loginFailed = (response.data.status != 0); if (!$scope.loginFailed) { //绑定成功 vm.alertService.showMessage('提示', response.data.message, function(){ - wx.closeWindow(); + if(tag){ + window.history.back(); + tag = null; + } + else{ + wx.closeWindow(); + } }); } else { vm.alertService.showMessage('出错了', response.data.message); diff --git a/public/javascripts/wechat/controllers/login_tip..js b/public/javascripts/wechat/controllers/login_tip..js new file mode 100644 index 000000000..a719abf79 --- /dev/null +++ b/public/javascripts/wechat/controllers/login_tip..js @@ -0,0 +1,7 @@ +app.controller('LoginTipController', ['$scope', '$http', '$location', 'alertService','$location', + function ($scope, $http, $location, alertService, $location) { + $scope.bindWx = function(){ + $location.path("/login").search({tag:1}); + }; + + }]); \ No newline at end of file diff --git a/public/javascripts/wechat/controllers/reg.js b/public/javascripts/wechat/controllers/reg.js index 9600e9dbf..1247cd931 100644 --- a/public/javascripts/wechat/controllers/reg.js +++ b/public/javascripts/wechat/controllers/reg.js @@ -1,5 +1,5 @@ -app.controller('RegController', ['$scope', '$http', '$location', 'alertService','$location', - function ($scope, $http, $location, alertService, $location) { +app.controller('RegController', ['$scope', '$http', '$location', 'alertService','$location','wx', + function ($scope, $http, $location, alertService, $location,wx) { var vm = $scope; vm.errDialog = alertService.create(); @@ -35,7 +35,8 @@ app.controller('RegController', ['$scope', '$http', '$location', 'alertService', } else { vm.successDialog.showMessage("提示","注册且绑定微信成功", function(){ // $location.path("/activities"); - window.WeixinJSBridge.call('closeWindow'); +// window.WeixinJSBridge.call('closeWindow'); + wx.closeWindow(); }); } }, function (response) { diff --git a/public/javascripts/wechat/others/factory.js b/public/javascripts/wechat/others/factory.js index 885b38ed3..801ad23ad 100644 --- a/public/javascripts/wechat/others/factory.js +++ b/public/javascripts/wechat/others/factory.js @@ -94,7 +94,7 @@ 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){ + var addCommonReply = function(id, type, data,args, cb){ //先判断有没有绑定 $http.post( '/wechat/is_bind', @@ -106,8 +106,6 @@ app.factory('common', ['$http', 'auth', '$routeParams','rms','config','wx','$loc } }); - - if(!data.comment || data.comment.length<=0){ return; } @@ -129,6 +127,19 @@ app.factory('common', ['$http', 'auth', '$routeParams','rms','config','wx','$loc }).then(function successCallback(response) { //alert("提交成功"); //数据提交完成,回复按钮启用 + console.log(response); + if(response.data.status == -1){ + console.log("回复失败!"); + data.comment = ""; + if(response.data.tip == 0){ + args.scope.replytip = "您不是该私有班级成员,不能回复"; + } + else{ + args.scope.replytip = "您不是该私有项目成员,不能回复"; + } + return; + } + data.disabled = false; if(typeof cb === 'function'){ cb(); @@ -209,6 +220,7 @@ app.factory('common', ['$http', 'auth', '$routeParams','rms','config','wx','$loc }; var init = function(args){ + args.scope.replytip = "输入回复内容~"; args.scope.formData = {comment: ''}; var loadData = function(id,replytype,page){ loadCommonData(id, args.type,replytype,page).then(function successCallback(response) { @@ -277,7 +289,7 @@ app.factory('common', ['$http', 'auth', '$routeParams','rms','config','wx','$loc loadData(args.id,0,0); args.scope.addReply = function(data){ console.log(data.comment); - addCommonReply(args.id, args.replyType, data, function(){ + addCommonReply(args.id, args.replyType, data,args, function(){ args.scope.formData = {comment: ''}; loadData(args.id,0,0); if(typeof args.replyCallback === 'function'){ diff --git a/public/javascripts/wechat/others/routes.js b/public/javascripts/wechat/others/routes.js index 7b4a0320b..7311c66c1 100644 --- a/public/javascripts/wechat/others/routes.js +++ b/public/javascripts/wechat/others/routes.js @@ -47,6 +47,7 @@ app.config(['$routeProvider',"$httpProvider", "$locationProvider",'config', func .when('/project_invite_code', {templateUrl: rootPath + 'project_invite_code.html', controller: 'ProjectInviteCodeController'}) .when('/join_project', makeRoute('join_project.html', 'JoinProjectController')) .when('/review_project_member', makeRoute('review_project_member.html', 'ReviewProjectMemberController')) + .when('/login_tip', makeRoute('login_tip.html', 'LoginTipController')) .otherwise({ redirectTo: '/activites' }); From 88e35c74312b9ab27f1aa4fc739345a952f96439 Mon Sep 17 00:00:00 2001 From: huang Date: Thu, 11 Aug 2016 10:02:59 +0800 Subject: [PATCH 174/405] quality list --- app/views/quality_analysis/_result_list.html.erb | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/app/views/quality_analysis/_result_list.html.erb b/app/views/quality_analysis/_result_list.html.erb index 306328f65..8b7c26498 100644 --- a/app/views/quality_analysis/_result_list.html.erb +++ b/app/views/quality_analysis/_result_list.html.erb @@ -10,9 +10,8 @@
  • 分支
  • 语言
  • 路径
  • -
  • 时间
  • +
  • 最近更新
  • -
    <% if @quality_analyses.count >0 %> @@ -22,13 +21,12 @@ - - + <% if User.current.try(:login) == qa.author_login || User.current.admin? || is_project_manager?(User.current.id, @project.id) %> -
  • +
  • + <% end %>
    From 9b8470b813de9bee1f7084a52c9e6183f272c3b4 Mon Sep 17 00:00:00 2001 From: cxt Date: Thu, 11 Aug 2016 10:23:44 +0800 Subject: [PATCH 175/405] =?UTF-8?q?=E7=BC=96=E8=BE=91=E5=88=86=E7=BB=84?= =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E5=90=8E=E7=82=B9=E7=A1=AE=E5=AE=9A=EF=BC=8C?= =?UTF-8?q?=E5=8E=9F=E6=9D=A5=E8=AE=BE=E7=BD=AE=E7=9A=84=E5=9F=BA=E4=BA=8E?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=AE=9E=E6=96=BD=E4=BC=9A=E8=A2=AB=E5=8F=96?= =?UTF-8?q?=E6=B6=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/users/_user_group_attr.html.erb | 9 +-------- app/views/users/_user_homework_form.html.erb | 3 +++ 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/app/views/users/_user_group_attr.html.erb b/app/views/users/_user_group_attr.html.erb index 6ce635a9b..6d09f6896 100644 --- a/app/views/users/_user_group_attr.html.erb +++ b/app/views/users/_user_group_attr.html.erb @@ -24,11 +24,4 @@ -
    - \ No newline at end of file +
    \ No newline at end of file diff --git a/app/views/users/_user_homework_form.html.erb b/app/views/users/_user_homework_form.html.erb index 3f6836614..99b9812cc 100644 --- a/app/views/users/_user_homework_form.html.erb +++ b/app/views/users/_user_homework_form.html.erb @@ -10,6 +10,9 @@ } else { $("#anonymous_comment").attr('checked',false); } + if($.trim($("#base_on_project").val()) == 1) { + $("#base_on_project").attr('checked','checked'); + } <% if edit_mode && homework.is_program_homework? %> $("#BluePopupBox a.BlueCirBtn").click(); <% end %> From bae0562b9761a5ef9a3f240566266093e2cbf343 Mon Sep 17 00:00:00 2001 From: cxt Date: Thu, 11 Aug 2016 10:32:57 +0800 Subject: [PATCH 176/405] =?UTF-8?q?=E9=80=82=E7=94=A8=E4=B8=93=E4=B8=9A?= =?UTF-8?q?=E5=92=8C=E5=85=88=E4=BF=AE=E8=AF=BE=E7=A8=8B=E7=9A=84=E6=8D=A2?= =?UTF-8?q?=E8=A1=8C=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/layouts/_syllabus_base_info.html.erb | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/app/views/layouts/_syllabus_base_info.html.erb b/app/views/layouts/_syllabus_base_info.html.erb index 335dc3335..0cc88dcf1 100644 --- a/app/views/layouts/_syllabus_base_info.html.erb +++ b/app/views/layouts/_syllabus_base_info.html.erb @@ -5,27 +5,27 @@
      -
    • <%=syllabus.user.show_name %>
    • +
    • <%=syllabus.user.show_name %>
    • <% unless syllabus.syllabus_type.nil? || syllabus.syllabus_type == 0 || syllabus.syllabus_type == '' %> -
    • <%=syllabus.syllabus_type_str %>
    • +
    • <%=syllabus.syllabus_type_str %>
    • <% end %> <% unless syllabus.credit.nil? || syllabus.credit == '' %> -
    • <%=syllabus.credit %>学分
    • +
    • <%=syllabus.credit %>学分
    • <% end %> <% unless syllabus.hours.nil? || syllabus.hours == '' %> -
    • <%=syllabus.hours %>学时
    • +
    • <%=syllabus.hours %>学时
    • <% end %> <% unless syllabus.theory_hours.nil? || syllabus.theory_hours == '' %> -
    • <%=syllabus.theory_hours %>学时
    • +
    • <%=syllabus.theory_hours %>学时
    • <% end %> <% unless syllabus.practice_hours.nil? || syllabus.practice_hours == '' %> -
    • <%=syllabus.practice_hours %>学时
    • +
    • <%=syllabus.practice_hours %>学时
    • <% end %> <% unless syllabus.applicable_major.nil? || syllabus.applicable_major == '' %> -
    • <%=syllabus.applicable_major %>
    • +
    • <%=syllabus.applicable_major %>
    • <% end %> <% unless syllabus.pre_course.nil? || syllabus.pre_course == '' %> -
    • <%=syllabus.pre_course %>
    • +
    • <%=syllabus.pre_course %>
    • <% end %> <% if syllabus.syllabus_type.nil? || syllabus.syllabus_type == 0 || syllabus.syllabus_type == '' %> From 0d69fa0cc05ac346a0e6a66032c6e7e4ac99d1a4 Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Thu, 11 Aug 2016 10:33:22 +0800 Subject: [PATCH 177/405] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E7=A7=81=E6=9C=89?= =?UTF-8?q?=E5=8A=A8=E6=80=81=E5=86=85=E5=AE=B9=E5=8A=A0=E4=B8=8A=E6=8F=90?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 2 +- public/assets/wechat/course_discussion.html | 2 +- public/assets/wechat/course_notice.html | 2 +- public/assets/wechat/homework_detail.html | 2 +- public/assets/wechat/issue_detail.html | 2 +- public/assets/wechat/jour_message_detail.html | 1 + public/assets/wechat/project_discussion.html | 2 +- public/javascripts/wechat/others/factory.js | 2 +- 8 files changed, 8 insertions(+), 7 deletions(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 1a4c4d340..570c690c9 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.syllabus.name}\n班级名称:#{course.name}\n任课老师:#{course.teacher.show_name}\n进入班级,和小伙伴愉快的学习吧!"} } + content: "课程名称:#{course.syllabus.title}\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" diff --git a/public/assets/wechat/course_discussion.html b/public/assets/wechat/course_discussion.html index 4dc6c17b5..136ed46e4 100644 --- a/public/assets/wechat/course_discussion.html +++ b/public/assets/wechat/course_discussion.html @@ -5,7 +5,7 @@
      -
      私有内容,请谨慎传播
      +
      私有内容,请谨慎传播