From a6f9c3375e1ee7bf979a51ab9a39cf486bc75c18 Mon Sep 17 00:00:00 2001 From: huang Date: Mon, 29 Aug 2016 10:21:42 +0800 Subject: [PATCH 01/10] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=B4=A8=E9=87=8F?= =?UTF-8?q?=E5=88=86=E6=9E=90=E5=8A=A0=E5=85=A5=E2=80=9C=E6=9C=AA=E8=A7=A3?= =?UTF-8?q?=E5=86=B3=E8=B4=A8=E9=87=8F=E9=97=AE=E9=A2=98=E6=95=B0=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/quality_analysis_controller.rb | 8 +++++--- app/views/quality_analysis/_show.html.erb | 6 ++++-- db/schema.rb | 3 ++- public/stylesheets/css/project.css | 8 ++++---- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/app/controllers/quality_analysis_controller.rb b/app/controllers/quality_analysis_controller.rb index 9fbe5bc3c..bcfb74241 100644 --- a/app/controllers/quality_analysis_controller.rb +++ b/app/controllers/quality_analysis_controller.rb @@ -248,10 +248,12 @@ class QualityAnalysisController < ApplicationController author_infos.each do |author_info| email = author_info.email changes = author_info.changes.to_i - user_issues = open(@sonar_address + "/api/issues/search?projectKeys=#{@resource_id}&authors=#{email}&resolved=false").read - issue_count = JSON.parse(user_issues)["total"].to_i + unresolved_issues = open(@sonar_address + "/api/issues/search?projectKeys=#{@resource_id}&authors=#{email}&resolved=false").read + unresolved_issue_count = JSON.parse(unresolved_issues)["total"].to_i + all_issues = open(@sonar_address + "/api/issues/search?projectKeys=#{@resource_id}&authors=#{email}").read + all_issue_count = JSON.parse(all_issues)["total"].to_i ratio = (changes == 0 ? 0 : format("%0.4f",issue_count.to_f/changes.to_f)) - @user_quality_infos << {:email => email, :changes => changes, :issue_count => issue_count, :ratio => ratio} + @user_quality_infos << {:email => email, :changes => changes, :unresolved_issue_count => unresolved_issue_count, :ratio => ratio, :all_issue_count => all_issue_count} end # 按名称转换成hash键值对 diff --git a/app/views/quality_analysis/_show.html.erb b/app/views/quality_analysis/_show.html.erb index 0ec0873ce..a21428f2f 100644 --- a/app/views/quality_analysis/_show.html.erb +++ b/app/views/quality_analysis/_show.html.erb @@ -133,7 +133,8 @@ @@ -149,7 +150,8 @@
  • <%= author_info[:changes] %>
  • -
  • <%= author_info[:issue_count] %>
  • +
  • <%= author_info[:all_issue_count] %>
  • +
  • <%= author_info[:unresolved_issue_count] %>
  • <%= author_info[:ratio] %>
  • diff --git a/db/schema.rb b/db/schema.rb index 1e20df076..34579a13a 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 => 20160811084401) do +ActiveRecord::Schema.define(:version => 20160824073554) do create_table "activities", :force => true do |t| t.integer "act_id", :null => false @@ -1283,6 +1283,7 @@ ActiveRecord::Schema.define(:version => 20160811084401) do t.boolean "mail_notification", :default => false, :null => false t.integer "course_id", :default => -1 t.integer "course_group_id", :default => 0 + t.integer "is_collect", :default => 1 end add_index "members", ["project_id"], :name => "index_members_on_project_id" diff --git a/public/stylesheets/css/project.css b/public/stylesheets/css/project.css index ce2423c34..454fce294 100644 --- a/public/stylesheets/css/project.css +++ b/public/stylesheets/css/project.css @@ -498,9 +498,9 @@ a:hover.upload_btn_grey{background:#8a8a8a;} .image-cir {border-radius:50%;} .analysis-genral-icon {position:absolute; padding:1px 5px; display:inline-block; top:5px;} .contribute-list-avatar {width:80px; vertical-align:middle; text-align:center;} -.contribute-list-code {width:160px; vertical-align:middle; text-align:center;} -.contribute-list-problem {width:170px; vertical-align:middle; text-align:center;} -.contribute-list-rate {width:228px; vertical-align:middle; text-align:center;} +.contribute-list-code {width:130px; vertical-align:middle; text-align:center;} +.contribute-list-problem {width:130px; vertical-align:middle; text-align:center;} +.contribute-list-rate {width:168px; vertical-align:middle; text-align:center;} .contribute-list-height {height:80px;} .contribute-list-line-height {line-height:80px;} @@ -554,4 +554,4 @@ a:hover.upload_btn_grey{background:#8a8a8a;} .icons_project_favorite {background: url(/images/syllabus/sy_icons_star.png) 0px 0px no-repeat; width:20px; height:20px; display:block; float:left;} .icons_project_star{background: url(/images/syllabus/sy_icons_star.png) 0px -27px no-repeat; width:20px; height:20px; display:block; float:left;} .new_projectlist_more{ text-align:center;} -.new_projectlist_more a:hover{ color:#3b94d6;} +.new_projectlist_more a:hover{ color:#3b94d6;} From 64b7aedd1c353e48b3fcc28344b9c67f103985ac Mon Sep 17 00:00:00 2001 From: Tim Date: Mon, 29 Aug 2016 15:28:32 +0800 Subject: [PATCH 02/10] =?UTF-8?q?footer=E9=83=A8=E5=88=86logo=E4=B8=8E?= =?UTF-8?q?=E9=93=BE=E6=8E=A5=E6=9B=BF=E6=8D=A2=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/application_helper.rb | 2 +- app/views/layouts/_base_footer.html.erb | 2 +- .../layouts/_base_footer_public.html.erb | 2 +- app/views/layouts/_footer.html.erb | 2 +- app/views/layouts/_footer_show.html.erb | 2 +- app/views/layouts/_new_footer.html.erb | 2 +- public/images/footer_logo/CVICSE.png | Bin 9688 -> 3446 bytes public/images/footer_logo/ISCAS_logo.png | Bin 7948 -> 2775 bytes 8 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 2d6e84762..1ff7fc2d9 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -2524,7 +2524,7 @@ module ApplicationHelper def footer_logo(ul_class=nil, li_class=nil) logos = [] logos.push(link_to image_tag('/images/footer_logo/nudt.png',:alt=>"nudt"),"http://www.nudt.edu.cn/special.asp?classid=12" ) - logos.push(link_to image_tag('/images/footer_logo/peking_eecs.png', :alt=>"peking_eecs"), "http://eecs.pku.edu.cn" ) + logos.push(link_to image_tag('/images/footer_logo/peking_eecs.png', :alt=>"peking_eecs"), "http://www.sei.pku.edu.cn/" ) logos.push(link_to image_tag('/images/footer_logo/buaa_scse.png', :alt=>"buaa_scse"), "http://scse.buaa.edu.cn/" ) logos.push(link_to image_tag('/images/footer_logo/iscas.png', :alt=>"iscas"), "http://www.iscas.ac.cn" ) logos.push(link_to image_tag('/images/footer_logo/inforbus.png', :alt=>"inforbus"), "http://www.inforbus.com" ) diff --git a/app/views/layouts/_base_footer.html.erb b/app/views/layouts/_base_footer.html.erb index 7253af03d..bef18d7fc 100644 --- a/app/views/layouts/_base_footer.html.erb +++ b/app/views/layouts/_base_footer.html.erb @@ -26,7 +26,7 @@ <%= link_to image_tag('/images/footer_logo/nudt.png',:size=>'100x30',:alt=>l(:label_co_organizer_NUDT)),"http://www.nudt.edu.cn/special.asp?classid=12", :target => "_blank" %> - <%= link_to image_tag('/images/footer_logo/peking_eecs.png',:size=>'100x30',:alt=>l(:label_co_organizer_EECS)), "http://eecs.pku.edu.cn", :target => "_blank" %> + <%= link_to image_tag('/images/footer_logo/peking_eecs.png',:size=>'100x30',:alt=>l(:label_co_organizer_EECS)), "http://www.sei.pku.edu.cn/", :target => "_blank" %> <%= link_to image_tag('/images/footer_logo/buaa_scse.png',:size=>'100x30',:alt=>l(:label_co_organizer_BHU)), "http://scse.buaa.edu.cn/", :target => "_blank" %> diff --git a/app/views/layouts/_base_footer_public.html.erb b/app/views/layouts/_base_footer_public.html.erb index 7c5ab571e..18152c745 100644 --- a/app/views/layouts/_base_footer_public.html.erb +++ b/app/views/layouts/_base_footer_public.html.erb @@ -24,7 +24,7 @@ <%= l(:label_sponsor)%>
  • - <%= l(:label_partners)%><%= l(:label_co_organizer_EECS)%> + <%= l(:label_partners)%><%= l(:label_co_organizer_EECS)%>
  • <%= l(:label_co_organizer_BHU)%> diff --git a/app/views/layouts/_footer.html.erb b/app/views/layouts/_footer.html.erb index a639e1203..1625241fa 100644 --- a/app/views/layouts/_footer.html.erb +++ b/app/views/layouts/_footer.html.erb @@ -22,7 +22,7 @@ <%= l(:label_partners)%>
  • - <%#= l(:label_co_organizer_EECS)%>北京大学 + <%#= l(:label_co_organizer_EECS)%>北京大学
  • <%#= l(:label_co_organizer_BHU)%>北京航空航天大学 diff --git a/app/views/layouts/_footer_show.html.erb b/app/views/layouts/_footer_show.html.erb index bb29956d3..19028ed8a 100644 --- a/app/views/layouts/_footer_show.html.erb +++ b/app/views/layouts/_footer_show.html.erb @@ -22,7 +22,7 @@ <%= l(:label_partners)%>
  • - <%#= l(:label_co_organizer_EECS)%>北京大学 + <%#= l(:label_co_organizer_EECS)%>北京大学
  • <%#= l(:label_co_organizer_BHU)%>北京航空航天大学 diff --git a/app/views/layouts/_new_footer.html.erb b/app/views/layouts/_new_footer.html.erb index 06f8c61e3..90b693053 100644 --- a/app/views/layouts/_new_footer.html.erb +++ b/app/views/layouts/_new_footer.html.erb @@ -13,7 +13,7 @@ <%= link_to image_tag('/images/footer_logo/nudt.png',:style => "width:90px;height:30px;",:alt=>l(:label_co_organizer_NUDT)),"http://www.nudt.edu.cn/special.asp?classid=12", :target => "_blank"%>
  • - <%= link_to image_tag('/images/footer_logo/peking_eecs.png',:style => "width:90px;height:30px;",:alt=>l(:label_co_organizer_EECS)), "http://eecs.pku.edu.cn", :target => "_blank"%> + <%= link_to image_tag('/images/footer_logo/peking_eecs.png',:style => "width:90px;height:30px;",:alt=>l(:label_co_organizer_EECS)), "http://www.sei.pku.edu.cn/", :target => "_blank"%>
  • <%= link_to image_tag('/images/footer_logo/buaa_scse.png',:style => "width:90px;height:30px;",:alt=>l(:label_co_organizer_BHU)), "http://scse.buaa.edu.cn/", :target => "_blank"%> diff --git a/public/images/footer_logo/CVICSE.png b/public/images/footer_logo/CVICSE.png index c252e0f9366afd9918c016ef07b8d8d04277b871..6fa4566f722aff61dfc6a79d91b40ec9885439c5 100644 GIT binary patch delta 2823 zcmZ{mX*kpi8^*1XkgdqR4kGIqONp6g>}#nZk#X!tpu-Sqy)f`7-p%wY6g;`H?7pQ5ib|Nh(A(P89)Usxcot*$(%7hf><5W7Cw7Tn$PhdFg*Yfx%+|;;RB*M$1ATDNzDuY7}>T2uu>4(S1 z$0lACNE_?p;}hBrT@0QBwlAovsC*n4Ajr*S?1`uE?|VlzNl8ld_Vy461SKiSrJwUF zOG`sT#Ldmk#)bx6r~HwT5nyL$2cfUOP21Yu-ab1!vtMeDVqjo*Hibj&{+eDxu0NbM zyUYzmv$SiEvQJtJU8M)Ye zl%IC`IV-eJlai%Nu@E{2n6|NWZR#h7+aCQtPgB?O>^+1Q4K(!~fv#g3Mrh9`cH#8d zN<|B0kaha4?_*K(2?u42Nb+?cL=R(CdaFrK6zh+I@CXf7?!9|>HtRFH-0l;WC}>fm z>!TGB+MR_)IG7nEWjB0zwd#oTzASej;JH7*-_kw&orSy0QA&W%6Lk^Oplr707fr8ssd+8*-tEg79S~ybrn~IY5msal7B!dV$yUYZ7`kW&Vl-v|DR$lN={?l~)uA zE;hAO$wej_lRp;nfokMaTbg%%>fD!VnfDsm>AbEW4NdlhNvkHIlRt|4th^o zO7fv)el8Fdq)7*z|Uy zLi7;!aZGCmYueAGOd&mqyGkU|7neR>)?4_GH+1Qo)wwFdi{e2db4=9O6COnYlk@s~ zf`FWqn-D^vWS%o?^{ynQs{o>pdHY$@#D+d}OGlmVn5;KhNr7Aoz*?N?^cu6}q5|Bn zIQoG&3TutSSylOivsqKL+=Yy7mM{|t#^i*JM7*IU;w#HkKs<^$h1XRav9uR8$rF(l zbgZ(;fovbTi{yJ3Y8R5Wmb=0}y;Yw<@L(X;UdiLz38HK&%XtDm>y_z=1|1+} zyuy-z9raFg6H@5xJ3?k0D5SVs;f}a@8UEep_6388mG3>&x>C4P33qr;j#;r?8DDj? zexl&t8$QK$Nnzt+oSi&6RWR;?0wtIj*Fv9z?0fU@EB)Lu0-Mk8xCRD(((+3HXzOBD ziY-tu2L7r^3XK%#CC3L=HMM}BxGI?kel+9$v;Q28O-YrSW_FV^DjVsimf|PO#1g2Q z8hV8@C4ij@_OIXSELO7w-&`-InajftDf-PTj_7D9D!8g%NbqX1D7e;uRKRO{ zbzN_7bq3$*!*NH-S&iIvsXIW4A^C1|<1GLG9>mxK6cHE)Ud?rp-N=dk_Mk;#{Cri*_&91m&uXTx98=Nnr z@4;erh-c_47f(iRheV_8_Jbu_+WPwI30pCCic{*-;T7t?<7Fu+7xzCOcTjNmlt`E|4bm605z8mG z#L|_4BdTg0j%&+fgE*75E?&^6EdaVYQn>CMN0||s_Nyk&YNON%kebnlX`fzKhQ})sLbhF_+5h=eg~ghNamk z5&LO<-L@z-9v7k@LE}wZL$v-ZxNf?~Fx0JXL3zTD&4sDHYd2KwY4A8>1wZRK`SK=4 zY5VZBo2QFqJGr_IMCFFrR>-Tx?6%g4LH?&dwC9;qDmP0U34^_35Hb-HYV4=`o=uk}{#I#L65*6gXr4%>#HJfQ^r7o@k1=9>}P zj29g0=Dh6h^KGP>*0aB0ZaH9m|wy@%@0#VIdny5vm$zWT?&0^D_l5Jf#mm z&)m1af7L)fr)h|Bu)}X92R1SDx_?(?7r5gA3-9FR_HVFV9c>6|o%3;Enw62T!ZkNW z5L_q|H&J_yHB+2tem+6I0foeMaaJ!*?s`KuPOPr^oV0lp3gku5HX=`3nLzGo|7;##bG<0fkbpKe83jid}K&Qg^`FBj5 Z42ih7Wmj!U)?dFZgDJuaUJi4K{tquVYvKR^ delta 9114 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 X_z}w^r|rLYn>Q*7n(|QDFQNYj6^wW$ diff --git a/public/images/footer_logo/ISCAS_logo.png b/public/images/footer_logo/ISCAS_logo.png index 7c2eb9ff7263062b4b472a2544791044aec1f3c9..f682f6ee0bb43185695997d5f83eccfaf900603c 100644 GIT binary patch delta 2183 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 Date: Mon, 29 Aug 2016 15:43:32 +0800 Subject: [PATCH 03/10] =?UTF-8?q?=E8=BF=98=E5=8E=9F=E8=B4=A8=E9=87=8F?= =?UTF-8?q?=E5=88=86=E6=9E=90=E7=9A=84=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/quality_analysis_controller.rb | 8 +++----- app/views/quality_analysis/_show.html.erb | 6 ++---- public/stylesheets/css/project.css | 6 +++--- 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/app/controllers/quality_analysis_controller.rb b/app/controllers/quality_analysis_controller.rb index bcfb74241..9fbe5bc3c 100644 --- a/app/controllers/quality_analysis_controller.rb +++ b/app/controllers/quality_analysis_controller.rb @@ -248,12 +248,10 @@ class QualityAnalysisController < ApplicationController author_infos.each do |author_info| email = author_info.email changes = author_info.changes.to_i - unresolved_issues = open(@sonar_address + "/api/issues/search?projectKeys=#{@resource_id}&authors=#{email}&resolved=false").read - unresolved_issue_count = JSON.parse(unresolved_issues)["total"].to_i - all_issues = open(@sonar_address + "/api/issues/search?projectKeys=#{@resource_id}&authors=#{email}").read - all_issue_count = JSON.parse(all_issues)["total"].to_i + user_issues = open(@sonar_address + "/api/issues/search?projectKeys=#{@resource_id}&authors=#{email}&resolved=false").read + issue_count = JSON.parse(user_issues)["total"].to_i ratio = (changes == 0 ? 0 : format("%0.4f",issue_count.to_f/changes.to_f)) - @user_quality_infos << {:email => email, :changes => changes, :unresolved_issue_count => unresolved_issue_count, :ratio => ratio, :all_issue_count => all_issue_count} + @user_quality_infos << {:email => email, :changes => changes, :issue_count => issue_count, :ratio => ratio} end # 按名称转换成hash键值对 diff --git a/app/views/quality_analysis/_show.html.erb b/app/views/quality_analysis/_show.html.erb index a21428f2f..0ec0873ce 100644 --- a/app/views/quality_analysis/_show.html.erb +++ b/app/views/quality_analysis/_show.html.erb @@ -133,8 +133,7 @@
    •  
    • 代码行数
    • -
    • 引入质量问题总数
    • -
    • 未解决质量问题数
    • +
    • 引入质量问题数
    • 引入质量问题数/代码行数
    @@ -150,8 +149,7 @@
  • <%= author_info[:changes] %>
  • -
  • <%= author_info[:all_issue_count] %>
  • -
  • <%= author_info[:unresolved_issue_count] %>
  • +
  • <%= author_info[:issue_count] %>
  • <%= author_info[:ratio] %>
  • diff --git a/public/stylesheets/css/project.css b/public/stylesheets/css/project.css index 454fce294..854b34f10 100644 --- a/public/stylesheets/css/project.css +++ b/public/stylesheets/css/project.css @@ -498,9 +498,9 @@ a:hover.upload_btn_grey{background:#8a8a8a;} .image-cir {border-radius:50%;} .analysis-genral-icon {position:absolute; padding:1px 5px; display:inline-block; top:5px;} .contribute-list-avatar {width:80px; vertical-align:middle; text-align:center;} -.contribute-list-code {width:130px; vertical-align:middle; text-align:center;} -.contribute-list-problem {width:130px; vertical-align:middle; text-align:center;} -.contribute-list-rate {width:168px; vertical-align:middle; text-align:center;} +.contribute-list-code {width:160px; vertical-align:middle; text-align:center;} +.contribute-list-problem {width:170px; vertical-align:middle; text-align:center;} +.contribute-list-rate {width:228px; vertical-align:middle; text-align:center;} .contribute-list-height {height:80px;} .contribute-list-line-height {line-height:80px;} From eb255d84b17cb587b49cd909d44801889c05e8d3 Mon Sep 17 00:00:00 2001 From: cxt Date: Mon, 29 Aug 2016 16:25:30 +0800 Subject: [PATCH 04/10] =?UTF-8?q?issue=E8=AF=A6=E6=83=85=E9=A1=B5=E9=87=8C?= =?UTF-8?q?=E7=9A=84=E7=82=B9=E8=B5=9E=E5=88=B7=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/issues/_issue_reply_banner.html.erb | 5 +++++ app/views/issues/_jounal_refresh.js.erb | 2 +- app/views/issues/show.html.erb | 8 ++------ 3 files changed, 8 insertions(+), 7 deletions(-) create mode 100644 app/views/issues/_issue_reply_banner.html.erb diff --git a/app/views/issues/_issue_reply_banner.html.erb b/app/views/issues/_issue_reply_banner.html.erb new file mode 100644 index 000000000..d68b2e38b --- /dev/null +++ b/app/views/issues/_issue_reply_banner.html.erb @@ -0,0 +1,5 @@ +<% count = @issue.journals.count %> +回复<%= count>0 ? "(#{count})" : "" %> + + <%=render :partial=> "praise_tread/praise", :locals => {:activity=>@issue, :user_activity_id=>@issue.id,:type=>"activity"}%> + \ No newline at end of file diff --git a/app/views/issues/_jounal_refresh.js.erb b/app/views/issues/_jounal_refresh.js.erb index 0945ba04d..df3d605f4 100644 --- a/app/views/issues/_jounal_refresh.js.erb +++ b/app/views/issues/_jounal_refresh.js.erb @@ -17,5 +17,5 @@ issue_desc_editor = KindEditor.create('#issue_description', "uploadJson":"/kindeditor/upload", "fileManagerJson":"/kindeditor/filemanager"}); // $("#issue_test_<%#= @issue.id %>").html("<%#= escape_javascript(render :partial => 'issues/edit', :locals => {:issue => Issue.find( @issue_id)}) %>"); -$(".homepagePostReplyBannerCount").html('回复(<%= @issue.journals.count %>)'); +$(".homepagePostReplyBannerCount").html('<%= escape_javascript(render :partial => 'issues/issue_reply_banner') %>'); sd_create_editor_from_data(<%= @issue.id%>, null, "100%","<%= @issue.class.name %>"); \ No newline at end of file diff --git a/app/views/issues/show.html.erb b/app/views/issues/show.html.erb index 540e9d4ca..40728d451 100644 --- a/app/views/issues/show.html.erb +++ b/app/views/issues/show.html.erb @@ -36,12 +36,8 @@
    - <% count = @issue.journals.count %> -
    回复 - <%= count>0 ? "(#{count})" : "" %> - - <%=render :partial=> "praise_tread/praise", :locals => {:activity=>@issue, :user_activity_id=>@issue.id,:type=>"activity"}%> - +
    + <%=render :partial => 'issue_reply_banner' %>
    From 60fb21d2fc53224a2b20d02ec32a167e007d5b31 Mon Sep 17 00:00:00 2001 From: cxt Date: Mon, 29 Aug 2016 16:30:37 +0800 Subject: [PATCH 05/10] =?UTF-8?q?=E7=8F=AD=E7=BA=A7=E4=B8=BB=E9=A1=B5?= =?UTF-8?q?=E7=9A=84=E6=A0=B7=E5=BC=8F=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/layouts/_course_base_info.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/layouts/_course_base_info.html.erb b/app/views/layouts/_course_base_info.html.erb index 38b1c8a6f..c2fe181fe 100644 --- a/app/views/layouts/_course_base_info.html.erb +++ b/app/views/layouts/_course_base_info.html.erb @@ -2,7 +2,7 @@ <% teacher_num = TeacherAndAssistantCount(@course) %> <% student_num = studentCount(@course) %> <% course_file_num = visable_attachemnts_incourse(@course).count %> -

    +

    <%= link_to(@course.teacher.show_name, user_path(@course.teacher), :class => 'sy_cgrey') %>  >  <% if @course.syllabus %> From ea0211c9ca89502b36564b25a68997212d4e4183 Mon Sep 17 00:00:00 2001 From: Tim Date: Mon, 29 Aug 2016 16:39:13 +0800 Subject: [PATCH 06/10] =?UTF-8?q?=E7=BB=84=E7=BB=87=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E6=88=90=E5=91=98=E6=97=B6=EF=BC=8C=E9=A1=B5=E6=95=B0=E8=BF=87?= =?UTF-8?q?=E5=A4=9A=E6=8A=98=E8=A1=8C=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/org_member_helper.rb | 2 +- app/views/organizations/_org_member_list.html.erb | 4 ++-- app/views/organizations/setting.html.erb | 2 +- public/stylesheets/css/org.css | 6 +++--- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/helpers/org_member_helper.rb b/app/helpers/org_member_helper.rb index e16051eaf..8e7d1e2ef 100644 --- a/app/helpers/org_member_helper.rb +++ b/app/helpers/org_member_helper.rb @@ -7,7 +7,7 @@ module OrgMemberHelper scope = [] end principals = paginateHelper scope,10 - s = content_tag('ul', project_member_check_box_tags_ex('membership[user_ids][]', principals), :class => 'mb5', :id => 'principals') + s = content_tag('ul', project_member_check_box_tags_ex('membership[user_ids][]', principals), :id => 'principals') links = pagination_links_full(@obj_pages, @obj_count, :per_page_links => false, :remote => false, :flag => true){|text, parameters, options| link_to text, host_with_protocol + "/org_member/org_member_autocomplete?" + parameters.merge(:q => params[:q],:flag => true,:org=> org, :format => 'js').to_query, :remote => true } diff --git a/app/views/organizations/_org_member_list.html.erb b/app/views/organizations/_org_member_list.html.erb index 8af7986fc..ea715d513 100644 --- a/app/views/organizations/_org_member_list.html.erb +++ b/app/views/organizations/_org_member_list.html.erb @@ -32,8 +32,8 @@ <% end %> <% if ( (User.current.id == member.organization.creator_id || User.current.admin_of_org?(member.organization) ) && member.user_id != member.organization.creator_id )%> - 编辑 - 删除 + 编辑 + 删除 <%#= link_to '删除', Setting.protocol + "://" + Setting.host_name + "/org_member/" + member.id.to_s,:method=>'delete',:style=>'color: #0781B4;margin-left: 30px;float: left',:confirm=>'您确定要删除么?', :remote => true %><% end %>

    diff --git a/app/views/organizations/setting.html.erb b/app/views/organizations/setting.html.erb index f1a8da8e4..6ba5b0a70 100644 --- a/app/views/organizations/setting.html.erb +++ b/app/views/organizations/setting.html.erb @@ -106,7 +106,7 @@ <%= render :partial=>"org_member_list",:locals=> {:members=>@organization.org_members} %>
    -
    +

    添加成员

    <%= form_tag url_for(:controller => 'org_member', :action => 'create', :org => @organization),:id=>'org_member_add_form',:remote=>true do |f|%> diff --git a/public/stylesheets/css/org.css b/public/stylesheets/css/org.css index 3677c8bd8..3ce1eca33 100644 --- a/public/stylesheets/css/org.css +++ b/public/stylesheets/css/org.css @@ -17,14 +17,14 @@ .orgUrlInput {width:200px; outline:none; border:1px solid #eaeaea; height:22px;} a.saveBtn {padding:2px 10px; background-color:#269ac9; color:#ffffff;} a.saveBtn:hover {background-color:#297fb8;} -.orgMemberList {width:420px; float:left;} +.orgMemberList {width:300px; float:left;} .orgColumnList {width:688px; float:left;} .orgListUser {width:110px; float:left;padding-right: 10px;} -.orgListRole {width:180px; float:left;} +.orgListRole {width:100px; float:left;} .orgOrder {width:70px; float:left; text-align:center;} .orgSubNum {width:30px; float:left; text-align:center;} .subNumBlock {cursor:pointer;background-color:#fffce6;color: #0d90c3; width:30px; height:17px; line-height:17px; margin:7px 0; vertical-align:middle;} -.orgMemContainer {width:268px;} +.orgMemContainer {width:378px;} .orgMemberAdd {float:right;} .orgAddSearch {border:1px solid #dddddd; outline:none; width:180px; height:22px; color:#9b9b9b;} From ee2ae456ac6ef739ad883cdb81c7d96ad012e0c8 Mon Sep 17 00:00:00 2001 From: huang Date: Tue, 30 Aug 2016 10:43:47 +0800 Subject: [PATCH 07/10] unresolved issues for sonar --- .../quality_analysis_controller.rb | 14 +- app/views/quality_analysis/_show.html.erb | 6 +- db/schema.rb | 427 +----------------- public/stylesheets/css/project.css | 8 +- 4 files changed, 31 insertions(+), 424 deletions(-) diff --git a/app/controllers/quality_analysis_controller.rb b/app/controllers/quality_analysis_controller.rb index 9fbe5bc3c..3a9eff0ce 100644 --- a/app/controllers/quality_analysis_controller.rb +++ b/app/controllers/quality_analysis_controller.rb @@ -243,15 +243,17 @@ class QualityAnalysisController < ApplicationController # 获取排名结果 @g = Gitlab.client - author_infos = @g.rep_user_stats(@project.gpid, :rev => @branch) + @author_infos = @g.rep_user_stats(@project.gpid, :rev => @branch) @user_quality_infos = [] - author_infos.each do |author_info| + @author_infos.each do |author_info| email = author_info.email changes = author_info.changes.to_i - user_issues = open(@sonar_address + "/api/issues/search?projectKeys=#{@resource_id}&authors=#{email}&resolved=false").read - issue_count = JSON.parse(user_issues)["total"].to_i - ratio = (changes == 0 ? 0 : format("%0.4f",issue_count.to_f/changes.to_f)) - @user_quality_infos << {:email => email, :changes => changes, :issue_count => issue_count, :ratio => ratio} + unresolved_issues = open(@sonar_address + "/api/issues/search?projectKeys=#{@resource_id}&authors=#{email}&resolved=false").read + unresolved_issue_count = JSON.parse(unresolved_issues)["total"].to_i + all_issues = open(@sonar_address + "/api/issues/search?projectKeys=#{@resource_id}&authors=#{email}").read + all_issue_count = JSON.parse(all_issues)["total"].to_i + ratio = (changes == 0 ? 0 : format("%0.4f",unresolved_issue_count.to_f/changes.to_f)) + @user_quality_infos << {:email => email, :changes => changes, :unresolved_issue_count => unresolved_issue_count, :ratio => ratio, :all_issue_count => all_issue_count} end # 按名称转换成hash键值对 diff --git a/app/views/quality_analysis/_show.html.erb b/app/views/quality_analysis/_show.html.erb index 0ec0873ce..a21428f2f 100644 --- a/app/views/quality_analysis/_show.html.erb +++ b/app/views/quality_analysis/_show.html.erb @@ -133,7 +133,8 @@
    •  
    • 代码行数
    • -
    • 引入质量问题数
    • +
    • 引入质量问题总数
    • +
    • 未解决质量问题数
    • 引入质量问题数/代码行数
    @@ -149,7 +150,8 @@
  • <%= author_info[:changes] %>
  • -
  • <%= author_info[:issue_count] %>
  • +
  • <%= author_info[:all_issue_count] %>
  • +
  • <%= author_info[:unresolved_issue_count] %>
  • <%= author_info[:ratio] %>
  • diff --git a/db/schema.rb b/db/schema.rb index 1e20df076..414f2d2be 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 => 20160811084401) do +ActiveRecord::Schema.define(:version => 20160824073554) do create_table "activities", :force => true do |t| t.integer "act_id", :null => false @@ -52,28 +52,6 @@ ActiveRecord::Schema.define(:version => 20160811084401) 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 "application_settings", :force => true do |t| - t.integer "default_projects_limit" - t.boolean "signup_enabled" - t.boolean "signin_enabled" - t.boolean "gravatar_enabled" - t.text "sign_in_text" - t.datetime "created_at" - t.datetime "updated_at" - t.string "home_page_url" - t.integer "default_branch_protection", :default => 2 - t.boolean "twitter_sharing_enabled", :default => true - t.text "restricted_visibility_levels" - t.boolean "version_check_enabled", :default => true - t.integer "max_attachment_size", :default => 10, :null => false - t.integer "default_project_visibility" - t.integer "default_snippet_visibility" - t.text "restricted_signup_domains" - t.boolean "user_oauth_applications", :default => true - t.string "after_sign_out_path" - t.integer "session_expire_delay", :default => 10080, :null => false - end - create_table "applied_messages", :force => true do |t| t.integer "user_id" t.integer "applied_id" @@ -82,17 +60,16 @@ ActiveRecord::Schema.define(:version => 20160811084401) do 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" - t.string "name" end create_table "applied_projects", :force => true do |t| - t.integer "project_id", :null => false - t.integer "user_id", :null => false - t.integer "role", :default => 0 - t.integer "applied_user_id" + 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| @@ -207,20 +184,6 @@ ActiveRecord::Schema.define(:version => 20160811084401) do t.string "typeName", :limit => 50 end - create_table "audit_events", :force => true do |t| - t.integer "author_id", :null => false - t.string "type", :null => false - t.integer "entity_id", :null => false - t.string "entity_type", :null => false - t.text "details" - t.datetime "created_at" - t.datetime "updated_at" - end - - add_index "audit_events", ["author_id"], :name => "index_audit_events_on_author_id" - add_index "audit_events", ["entity_id", "entity_type"], :name => "index_audit_events_on_entity_id_and_entity_type" - add_index "audit_events", ["type"], :name => "index_audit_events_on_type" - create_table "auth_sources", :force => true do |t| t.string "type", :limit => 30, :default => "", :null => false t.string "name", :limit => 60, :default => "", :null => false @@ -318,17 +281,6 @@ ActiveRecord::Schema.define(:version => 20160811084401) do add_index "boards", ["last_message_id"], :name => "index_boards_on_last_message_id" add_index "boards", ["project_id"], :name => "boards_project_id" - create_table "broadcast_messages", :force => true do |t| - t.text "message", :null => false - t.datetime "starts_at" - t.datetime "ends_at" - t.integer "alert_type" - t.datetime "created_at" - t.datetime "updated_at" - t.string "color" - t.string "font" - end - create_table "bug_to_osps", :force => true do |t| t.integer "osp_id" t.integer "relative_memo_id" @@ -358,16 +310,14 @@ ActiveRecord::Schema.define(:version => 20160811084401) do add_index "changeset_parents", ["parent_id"], :name => "changeset_parents_parent_ids" create_table "changesets", :force => true do |t| - t.integer "repository_id", :null => false - t.string "revision", :null => false + t.integer "repository_id", :null => false + t.string "revision", :null => false t.string "committer" - t.datetime "committed_on", :null => false + t.datetime "committed_on", :null => false t.text "comments" t.date "commit_date" t.string "scmid" t.integer "user_id" - t.integer "project_id" - t.integer "type", :default => 0 end add_index "changesets", ["committed_on"], :name => "index_changesets_on_committed_on" @@ -647,11 +597,8 @@ ActiveRecord::Schema.define(:version => 20160811084401) do t.string "qrcode" end - add_index "courses", ["id"], :name => "id", :unique => true add_index "courses", ["invite_code"], :name => "index_courses_on_invite_code", :unique => true add_index "courses", ["syllabus_id"], :name => "index_courses_on_syllabus_id" - add_index "courses", ["tea_id"], :name => "tea_id" - add_index "courses", ["visits"], :name => "visits" create_table "custom_fields", :force => true do |t| t.string "type", :limit => 30, :default => "", :null => false @@ -714,15 +661,6 @@ ActiveRecord::Schema.define(:version => 20160811084401) do add_index "delayed_jobs", ["priority", "run_at"], :name => "delayed_jobs_priority" - create_table "deploy_keys_projects", :force => true do |t| - t.integer "deploy_key_id", :null => false - t.integer "project_id", :null => false - t.datetime "created_at" - t.datetime "updated_at" - end - - add_index "deploy_keys_projects", ["project_id"], :name => "index_deploy_keys_projects_on_project_id" - create_table "discuss_demos", :force => true do |t| t.string "title" t.text "body" @@ -772,16 +710,6 @@ ActiveRecord::Schema.define(:version => 20160811084401) do t.datetime "created_at" end - create_table "emails", :force => true do |t| - t.integer "user_id", :null => false - t.string "email", :null => false - t.datetime "created_at" - t.datetime "updated_at" - end - - add_index "emails", ["email"], :name => "index_emails_on_email", :unique => true - add_index "emails", ["user_id"], :name => "index_emails_on_user_id" - create_table "enabled_modules", :force => true do |t| t.integer "project_id" t.string "name", :null => false @@ -804,25 +732,6 @@ ActiveRecord::Schema.define(:version => 20160811084401) do add_index "enumerations", ["id", "type"], :name => "index_enumerations_on_id_and_type" add_index "enumerations", ["project_id"], :name => "index_enumerations_on_project_id" - create_table "events", :force => true do |t| - t.string "target_type" - t.integer "target_id" - t.string "title" - t.text "data" - t.integer "project_id" - t.datetime "created_at" - t.datetime "updated_at" - t.integer "action" - t.integer "author_id" - end - - add_index "events", ["action"], :name => "index_events_on_action" - add_index "events", ["author_id"], :name => "index_events_on_author_id" - add_index "events", ["created_at"], :name => "index_events_on_created_at" - add_index "events", ["project_id"], :name => "index_events_on_project_id" - add_index "events", ["target_id"], :name => "index_events_on_target_id" - add_index "events", ["target_type"], :name => "index_events_on_target_type" - create_table "exercise_answers", :force => true do |t| t.integer "user_id" t.integer "exercise_question_id" @@ -925,15 +834,6 @@ ActiveRecord::Schema.define(:version => 20160811084401) do add_index "forge_messages", ["forge_message_id", "forge_message_type"], :name => "index_forge_messages_on_forge_message_id_and_forge_message_type" add_index "forge_messages", ["user_id", "project_id", "created_at"], :name => "index_forge_messages_on_user_id_and_project_id_and_created_at" - create_table "forked_project_links", :force => true do |t| - t.integer "forked_to_project_id", :null => false - t.integer "forked_from_project_id", :null => false - t.datetime "created_at" - t.datetime "updated_at" - end - - add_index "forked_project_links", ["forked_to_project_id"], :name => "index_forked_project_links_on_forked_to_project_id", :unique => true - create_table "forums", :force => true do |t| t.string "name", :null => false t.text "description" @@ -1063,17 +963,6 @@ ActiveRecord::Schema.define(:version => 20160811084401) do t.datetime "updated_at", :null => false end - create_table "identities", :force => true do |t| - t.string "extern_uid" - t.string "provider" - t.integer "user_id" - t.datetime "created_at" - t.datetime "updated_at" - end - - add_index "identities", ["created_at", "id"], :name => "index_identities_on_created_at_and_id" - add_index "identities", ["user_id"], :name => "index_identities_on_user_id" - create_table "invite_lists", :force => true do |t| t.integer "project_id" t.integer "user_id" @@ -1220,20 +1109,6 @@ ActiveRecord::Schema.define(:version => 20160811084401) do t.integer "private", :default => 0 end - create_table "keys", :force => true do |t| - t.integer "user_id" - t.datetime "created_at" - t.datetime "updated_at" - t.text "key" - t.string "title" - t.string "type" - t.string "fingerprint" - t.boolean "public", :default => false, :null => false - end - - add_index "keys", ["created_at", "id"], :name => "index_keys_on_created_at_and_id" - add_index "keys", ["user_id"], :name => "index_keys_on_user_id" - create_table "kindeditor_assets", :force => true do |t| t.string "asset" t.integer "file_size" @@ -1245,27 +1120,6 @@ ActiveRecord::Schema.define(:version => 20160811084401) do t.integer "owner_type", :default => 0 end - create_table "label_links", :force => true do |t| - t.integer "label_id" - t.integer "target_id" - t.string "target_type" - t.datetime "created_at" - t.datetime "updated_at" - end - - add_index "label_links", ["label_id"], :name => "index_label_links_on_label_id" - add_index "label_links", ["target_id", "target_type"], :name => "index_label_links_on_target_id_and_target_type" - - create_table "labels", :force => true do |t| - t.string "title" - t.string "color" - t.integer "project_id" - t.datetime "created_at" - t.datetime "updated_at" - end - - add_index "labels", ["project_id"], :name => "index_labels_on_project_id" - create_table "member_roles", :force => true do |t| t.integer "member_id", :null => false t.integer "role_id", :null => false @@ -1283,6 +1137,7 @@ ActiveRecord::Schema.define(:version => 20160811084401) do t.boolean "mail_notification", :default => false, :null => false t.integer "course_id", :default => -1 t.integer "course_group_id", :default => 0 + t.integer "is_collect", :default => 1 end add_index "members", ["project_id"], :name => "index_members_on_project_id" @@ -1317,47 +1172,6 @@ ActiveRecord::Schema.define(:version => 20160811084401) do t.integer "viewed_count", :default => 0 end - create_table "merge_request_diffs", :force => true do |t| - t.string "state" - t.text "st_commits", :limit => 2147483647 - t.text "st_diffs", :limit => 2147483647 - t.integer "merge_request_id", :null => false - t.datetime "created_at" - t.datetime "updated_at" - end - - add_index "merge_request_diffs", ["merge_request_id"], :name => "index_merge_request_diffs_on_merge_request_id", :unique => true - - create_table "merge_requests", :force => true do |t| - t.string "target_branch", :null => false - t.string "source_branch", :null => false - t.integer "source_project_id", :null => false - t.integer "author_id" - t.integer "assignee_id" - t.string "title" - t.datetime "created_at" - t.datetime "updated_at" - t.integer "milestone_id" - t.string "state" - t.string "merge_status" - t.integer "target_project_id", :null => false - t.integer "iid" - t.text "description" - t.integer "position", :default => 0 - t.datetime "locked_at" - end - - add_index "merge_requests", ["assignee_id"], :name => "index_merge_requests_on_assignee_id" - add_index "merge_requests", ["author_id"], :name => "index_merge_requests_on_author_id" - add_index "merge_requests", ["created_at", "id"], :name => "index_merge_requests_on_created_at_and_id" - add_index "merge_requests", ["created_at"], :name => "index_merge_requests_on_created_at" - add_index "merge_requests", ["milestone_id"], :name => "index_merge_requests_on_milestone_id" - add_index "merge_requests", ["source_branch"], :name => "index_merge_requests_on_source_branch" - add_index "merge_requests", ["source_project_id"], :name => "index_merge_requests_on_source_project_id" - add_index "merge_requests", ["target_branch"], :name => "index_merge_requests_on_target_branch" - add_index "merge_requests", ["target_project_id", "iid"], :name => "index_merge_requests_on_target_project_id_and_iid", :unique => true - add_index "merge_requests", ["title"], :name => "index_merge_requests_on_title" - create_table "message_alls", :force => true do |t| t.integer "user_id" t.integer "message_id" @@ -1392,39 +1206,6 @@ ActiveRecord::Schema.define(:version => 20160811084401) do add_index "messages", ["last_reply_id"], :name => "index_messages_on_last_reply_id" add_index "messages", ["parent_id"], :name => "messages_parent_id" - create_table "milestones", :force => true do |t| - t.string "title", :null => false - t.integer "project_id", :null => false - t.text "description" - t.date "due_date" - t.datetime "created_at" - t.datetime "updated_at" - t.string "state" - t.integer "iid" - end - - add_index "milestones", ["created_at", "id"], :name => "index_milestones_on_created_at_and_id" - add_index "milestones", ["due_date"], :name => "index_milestones_on_due_date" - add_index "milestones", ["project_id", "iid"], :name => "index_milestones_on_project_id_and_iid", :unique => true - add_index "milestones", ["project_id"], :name => "index_milestones_on_project_id" - - create_table "namespaces", :force => true do |t| - t.string "name", :null => false - t.string "path", :null => false - t.integer "owner_id" - t.datetime "created_at" - t.datetime "updated_at" - t.string "type" - t.string "description", :default => "", :null => false - t.string "avatar" - end - - add_index "namespaces", ["created_at", "id"], :name => "index_namespaces_on_created_at_and_id" - add_index "namespaces", ["name"], :name => "index_namespaces_on_name", :unique => true - add_index "namespaces", ["owner_id"], :name => "index_namespaces_on_owner_id" - add_index "namespaces", ["path"], :name => "index_namespaces_on_path", :unique => true - add_index "namespaces", ["type"], :name => "index_namespaces_on_type" - create_table "news", :force => true do |t| t.integer "project_id" t.string "title", :limit => 60, :default => "", :null => false @@ -1450,31 +1231,6 @@ ActiveRecord::Schema.define(:version => 20160811084401) do t.datetime "updated_at", :null => false end - create_table "notes", :force => true do |t| - t.text "note" - t.string "noteable_type" - t.integer "author_id" - t.datetime "created_at" - t.datetime "updated_at" - t.integer "project_id" - t.string "attachment" - t.string "line_code" - t.string "commit_id" - t.integer "noteable_id" - t.boolean "system", :default => false, :null => false - t.text "st_diff", :limit => 2147483647 - end - - add_index "notes", ["author_id"], :name => "index_notes_on_author_id" - add_index "notes", ["commit_id"], :name => "index_notes_on_commit_id" - add_index "notes", ["created_at", "id"], :name => "index_notes_on_created_at_and_id" - add_index "notes", ["created_at"], :name => "index_notes_on_created_at" - add_index "notes", ["noteable_id", "noteable_type"], :name => "index_notes_on_noteable_id_and_noteable_type" - add_index "notes", ["noteable_type"], :name => "index_notes_on_noteable_type" - add_index "notes", ["project_id", "noteable_type"], :name => "index_notes_on_project_id_and_noteable_type" - add_index "notes", ["project_id"], :name => "index_notes_on_project_id" - add_index "notes", ["updated_at"], :name => "index_notes_on_updated_at" - create_table "notificationcomments", :force => true do |t| t.string "notificationcommented_type" t.integer "notificationcommented_id" @@ -1484,49 +1240,6 @@ ActiveRecord::Schema.define(:version => 20160811084401) do t.datetime "updated_at", :null => false end - create_table "oauth_access_grants", :force => true do |t| - t.integer "resource_owner_id", :null => false - t.integer "application_id", :null => false - t.string "token", :null => false - t.integer "expires_in", :null => false - t.text "redirect_uri", :null => false - t.datetime "created_at", :null => false - t.datetime "revoked_at" - t.string "scopes" - end - - add_index "oauth_access_grants", ["token"], :name => "index_oauth_access_grants_on_token", :unique => true - - create_table "oauth_access_tokens", :force => true do |t| - t.integer "resource_owner_id" - t.integer "application_id" - t.string "token", :null => false - t.string "refresh_token" - t.integer "expires_in" - t.datetime "revoked_at" - t.datetime "created_at", :null => false - t.string "scopes" - end - - add_index "oauth_access_tokens", ["refresh_token"], :name => "index_oauth_access_tokens_on_refresh_token", :unique => true - add_index "oauth_access_tokens", ["resource_owner_id"], :name => "index_oauth_access_tokens_on_resource_owner_id" - add_index "oauth_access_tokens", ["token"], :name => "index_oauth_access_tokens_on_token", :unique => true - - create_table "oauth_applications", :force => true do |t| - t.string "name", :null => false - t.string "uid", :null => false - t.string "secret", :null => false - t.text "redirect_uri", :null => false - t.string "scopes", :default => "", :null => false - t.datetime "created_at" - t.datetime "updated_at" - t.integer "owner_id" - t.string "owner_type" - end - - add_index "oauth_applications", ["owner_id", "owner_type"], :name => "index_oauth_applications_on_owner_id_and_owner_type" - add_index "oauth_applications", ["uid"], :name => "index_oauth_applications_on_uid", :unique => true - create_table "onclick_times", :force => true do |t| t.integer "user_id" t.datetime "onclick_time" @@ -1684,23 +1397,6 @@ ActiveRecord::Schema.define(:version => 20160811084401) do t.integer "allow_teacher", :default => 0 end - create_table "permissions", :force => true do |t| - t.string "controller", :limit => 30, :default => "", :null => false - t.string "action", :limit => 30, :default => "", :null => false - t.string "description", :limit => 60, :default => "", :null => false - t.boolean "is_public", :default => false, :null => false - t.integer "sort", :default => 0, :null => false - t.boolean "mail_option", :default => false, :null => false - t.boolean "mail_enabled", :default => false, :null => false - end - - create_table "permissions_roles", :id => false, :force => true do |t| - t.integer "permission_id", :default => 0, :null => false - t.integer "role_id", :default => 0, :null => false - end - - add_index "permissions_roles", ["role_id"], :name => "permissions_roles_role_id" - create_table "phone_app_versions", :force => true do |t| t.string "version" t.text "description" @@ -1783,11 +1479,6 @@ ActiveRecord::Schema.define(:version => 20160811084401) do t.datetime "updated_at", :null => false end - create_table "project_import_data", :force => true do |t| - t.integer "project_id" - t.text "data" - end - create_table "project_infos", :force => true do |t| t.integer "project_id" t.integer "user_id" @@ -1880,16 +1571,6 @@ ActiveRecord::Schema.define(:version => 20160811084401) do add_index "projects_trackers", ["project_id", "tracker_id"], :name => "projects_trackers_unique", :unique => true add_index "projects_trackers", ["project_id"], :name => "projects_trackers_project_id" - create_table "protected_branches", :force => true do |t| - t.integer "project_id", :null => false - t.string "name", :null => false - t.datetime "created_at" - t.datetime "updated_at" - t.boolean "developers_can_push", :default => false, :null => false - end - - add_index "protected_branches", ["project_id"], :name => "index_protected_branches_on_project_id" - create_table "pull_requests", :force => true do |t| t.integer "pull_request_id" t.integer "gpid" @@ -2046,25 +1727,6 @@ ActiveRecord::Schema.define(:version => 20160811084401) do t.integer "is_teacher_score", :default => 0 end - create_table "services", :force => true do |t| - t.string "type" - t.string "title" - t.integer "project_id" - t.datetime "created_at" - t.datetime "updated_at" - t.boolean "active", :default => false, :null => false - t.text "properties" - t.boolean "template", :default => false - t.boolean "push_events", :default => true - t.boolean "issues_events", :default => true - t.boolean "merge_requests_events", :default => true - t.boolean "tag_push_events", :default => true - t.boolean "note_events", :default => true, :null => false - end - - add_index "services", ["created_at", "id"], :name => "index_services_on_created_at_and_id" - add_index "services", ["project_id"], :name => "index_services_on_project_id" - create_table "settings", :force => true do |t| t.string "name", :default => "", :null => false t.text "value" @@ -2103,26 +1765,6 @@ ActiveRecord::Schema.define(:version => 20160811084401) do t.datetime "updated_at", :null => false end - create_table "snippets", :force => true do |t| - t.string "title" - t.text "content", :limit => 2147483647 - t.integer "author_id", :null => false - t.integer "project_id" - t.datetime "created_at" - t.datetime "updated_at" - t.string "file_name" - t.datetime "expires_at" - t.string "type" - t.integer "visibility_level", :default => 0, :null => false - end - - add_index "snippets", ["author_id"], :name => "index_snippets_on_author_id" - add_index "snippets", ["created_at", "id"], :name => "index_snippets_on_created_at_and_id" - add_index "snippets", ["created_at"], :name => "index_snippets_on_created_at" - add_index "snippets", ["expires_at"], :name => "index_snippets_on_expires_at" - add_index "snippets", ["project_id"], :name => "index_snippets_on_project_id" - add_index "snippets", ["visibility_level"], :name => "index_snippets_on_visibility_level" - create_table "softapplications", :force => true do |t| t.string "name" t.text "description" @@ -2203,9 +1845,9 @@ ActiveRecord::Schema.define(:version => 20160811084401) do t.integer "absence_penalty", :default => 0 t.float "system_score", :default => 0.0 t.boolean "is_test", :default => false - t.float "work_score" t.integer "simi_id" t.integer "simi_value" + t.float "work_score" t.integer "work_status", :default => 0 t.datetime "commit_time" end @@ -2255,13 +1897,13 @@ ActiveRecord::Schema.define(:version => 20160811084401) do create_table "sub_domains", :force => true do |t| t.integer "org_subfield_id" - t.integer "priority" + t.integer "priority", :default => 0 t.string "name" t.string "field_type" - t.integer "hide" - t.integer "status" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.integer "hide", :default => 0 + t.integer "status", :default => 0 + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false end create_table "subfield_subdomain_dirs", :force => true do |t| @@ -2271,17 +1913,6 @@ ActiveRecord::Schema.define(:version => 20160811084401) do t.datetime "updated_at", :null => false end - create_table "subscriptions", :force => true do |t| - t.integer "user_id" - t.integer "subscribable_id" - t.string "subscribable_type" - t.boolean "subscribed" - t.datetime "created_at" - t.datetime "updated_at" - end - - add_index "subscriptions", ["subscribable_id", "subscribable_type", "user_id"], :name => "subscriptions_user_id_and_ref_fields", :unique => true - create_table "syllabuses", :force => true do |t| t.string "title" t.text "description" @@ -2543,17 +2174,6 @@ ActiveRecord::Schema.define(:version => 20160811084401) do add_index "users", ["id", "type"], :name => "index_users_on_id_and_type" add_index "users", ["type"], :name => "index_users_on_type" - create_table "users_star_projects", :force => true do |t| - t.integer "project_id", :null => false - t.integer "user_id", :null => false - t.datetime "created_at" - t.datetime "updated_at" - end - - add_index "users_star_projects", ["project_id"], :name => "index_users_star_projects_on_project_id" - add_index "users_star_projects", ["user_id", "project_id"], :name => "index_users_star_projects_on_user_id_and_project_id", :unique => true - add_index "users_star_projects", ["user_id"], :name => "index_users_star_projects_on_user_id" - create_table "versions", :force => true do |t| t.integer "project_id", :default => 0, :null => false t.string "name", :default => "", :null => false @@ -2605,23 +2225,6 @@ ActiveRecord::Schema.define(:version => 20160811084401) do t.datetime "updated_at", :null => false end - create_table "web_hooks", :force => true do |t| - t.string "url" - t.integer "project_id" - t.datetime "created_at" - t.datetime "updated_at" - t.string "type", :default => "ProjectHook" - t.integer "service_id" - t.boolean "push_events", :default => true, :null => false - t.boolean "issues_events", :default => false, :null => false - t.boolean "merge_requests_events", :default => false, :null => false - t.boolean "tag_push_events", :default => false - t.boolean "note_events", :default => false, :null => false - end - - add_index "web_hooks", ["created_at", "id"], :name => "index_web_hooks_on_created_at_and_id" - add_index "web_hooks", ["project_id"], :name => "index_web_hooks_on_project_id" - create_table "wechat_logs", :force => true do |t| t.string "openid", :null => false t.text "request_raw" diff --git a/public/stylesheets/css/project.css b/public/stylesheets/css/project.css index ce2423c34..454fce294 100644 --- a/public/stylesheets/css/project.css +++ b/public/stylesheets/css/project.css @@ -498,9 +498,9 @@ a:hover.upload_btn_grey{background:#8a8a8a;} .image-cir {border-radius:50%;} .analysis-genral-icon {position:absolute; padding:1px 5px; display:inline-block; top:5px;} .contribute-list-avatar {width:80px; vertical-align:middle; text-align:center;} -.contribute-list-code {width:160px; vertical-align:middle; text-align:center;} -.contribute-list-problem {width:170px; vertical-align:middle; text-align:center;} -.contribute-list-rate {width:228px; vertical-align:middle; text-align:center;} +.contribute-list-code {width:130px; vertical-align:middle; text-align:center;} +.contribute-list-problem {width:130px; vertical-align:middle; text-align:center;} +.contribute-list-rate {width:168px; vertical-align:middle; text-align:center;} .contribute-list-height {height:80px;} .contribute-list-line-height {line-height:80px;} @@ -554,4 +554,4 @@ a:hover.upload_btn_grey{background:#8a8a8a;} .icons_project_favorite {background: url(/images/syllabus/sy_icons_star.png) 0px 0px no-repeat; width:20px; height:20px; display:block; float:left;} .icons_project_star{background: url(/images/syllabus/sy_icons_star.png) 0px -27px no-repeat; width:20px; height:20px; display:block; float:left;} .new_projectlist_more{ text-align:center;} -.new_projectlist_more a:hover{ color:#3b94d6;} +.new_projectlist_more a:hover{ color:#3b94d6;} From 2b7a38062c5bcde2aaa1fcd452eaf367e3a18e2c Mon Sep 17 00:00:00 2001 From: huang Date: Tue, 30 Aug 2016 11:30:08 +0800 Subject: [PATCH 08/10] css for red --- app/views/quality_analysis/_show.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/quality_analysis/_show.html.erb b/app/views/quality_analysis/_show.html.erb index a21428f2f..ff7863ce8 100644 --- a/app/views/quality_analysis/_show.html.erb +++ b/app/views/quality_analysis/_show.html.erb @@ -151,7 +151,7 @@
  • <%= author_info[:changes] %>
  • <%= author_info[:all_issue_count] %>
  • -
  • <%= author_info[:unresolved_issue_count] %>
  • +
  • <%= author_info[:unresolved_issue_count] %>
  • <%= author_info[:ratio] %>
  • From f4632c432fb6c85c22febe8041080a68e7aa96c3 Mon Sep 17 00:00:00 2001 From: cxt Date: Tue, 30 Aug 2016 17:11:22 +0800 Subject: [PATCH 09/10] =?UTF-8?q?=E6=B6=88=E6=81=AF=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E4=B8=AD=E7=9A=84at=E6=B6=88=E6=81=AF=E6=8A=A5500?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/issues_controller.rb | 8 ++++---- .../20160830090214_delete_null_at_messages.rb | 17 +++++++++++++++++ db/schema.rb | 2 +- 3 files changed, 22 insertions(+), 5 deletions(-) create mode 100644 db/migrate/20160830090214_delete_null_at_messages.rb diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index b0c83e869..caf0b4bda 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -521,10 +521,10 @@ class IssuesController < ApplicationController def delete_journal @issue = Issue.find(params[:id]) begin - forge_acts = ForgeMessage.where(:forge_message_type => "Journal", :forge_message_id => params[:journal_id]).first - forge_acts.destroy unless forge_acts.nil? - at_message = AtMessage.where(:at_message_type => "Journal", :at_message_id => params[:journal_id]).first - at_message.destroy unless at_message.nil? + forge_acts = ForgeMessage.where(:forge_message_type => "Journal", :forge_message_id => params[:journal_id]) + forge_acts.destroy_all unless forge_acts.empty? + at_message = AtMessage.where(:at_message_type => "Journal", :at_message_id => params[:journal_id]) + at_message.destroy_all unless at_message.empty? Journal.delete(params[:journal_id]) rescue Exception => e puts e diff --git a/db/migrate/20160830090214_delete_null_at_messages.rb b/db/migrate/20160830090214_delete_null_at_messages.rb new file mode 100644 index 000000000..304a6bc4e --- /dev/null +++ b/db/migrate/20160830090214_delete_null_at_messages.rb @@ -0,0 +1,17 @@ +class DeleteNullAtMessages < ActiveRecord::Migration + def up + count = AtMessage.all.count / 30 + 2 + transaction do + for i in 1 ... count do i + AtMessage.page(i).per(30).each do |am| + if am.at_message.nil? + am.destroy + end + end + end + end + end + + def down + end +end diff --git a/db/schema.rb b/db/schema.rb index 414f2d2be..b5bd5f778 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 => 20160824073554) do +ActiveRecord::Schema.define(:version => 20160830090214) do create_table "activities", :force => true do |t| t.integer "act_id", :null => false From 6e364182019d9ff2881b686288ff21e0cd58487d Mon Sep 17 00:00:00 2001 From: cxt Date: Wed, 31 Aug 2016 09:47:51 +0800 Subject: [PATCH 10/10] =?UTF-8?q?admin=E7=95=8C=E9=9D=A2=E7=9A=84=E7=95=99?= =?UTF-8?q?=E8=A8=80=E5=88=97=E8=A1=A8=E8=BF=87=E6=BB=A4=E6=8E=89=E6=96=B0?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=9A=84=E7=95=99=E8=A8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/admin_controller.rb | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb index 25cc85ae2..334101bb0 100644 --- a/app/controllers/admin_controller.rb +++ b/app/controllers/admin_controller.rb @@ -777,8 +777,15 @@ class AdminController < ApplicationController #留言列表 def leave_messages + notes1, notes2, notes3 = '', '', '' + begin + notes1 = Message.find(19292).content + notes2 = Message.find(19291).content + notes3 = Message.find(19504).content + rescue => e + end @jour = JournalsForMessage.find_by_sql("SELECT * FROM journals_for_messages AS j1 - WHERE j1.jour_type IN ('Course','Principal') AND (j1.m_parent_id IS NULL OR (j1.m_parent_id IN (SELECT id FROM journals_for_messages WHERE jour_type IN ('Course','Principal')))) order by created_on desc") + WHERE j1.jour_type IN ('Course','Principal') AND (j1.m_parent_id IS NULL OR (j1.m_parent_id IN (SELECT id FROM journals_for_messages WHERE jour_type IN ('Course','Principal')))) AND j1.notes !='#{notes1}' AND j1.notes !='#{notes2}' AND j1.notes !='#{notes3}' order by created_on desc") @jour = paginateHelper @jour,30 @page = (params['page'] || 1).to_i - 1 respond_to do |format|