From 2e5cd96bb9b85046aec8dc44cf993d6979c932dd Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Thu, 1 Dec 2016 11:31:48 +0800 Subject: [PATCH] =?UTF-8?q?pullrequest=E5=8F=91=E9=80=81=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/pull_requests_controller.rb | 56 ++++++++++++++++--- app/helpers/users_helper.rb | 4 +- app/models/pull_request.rb | 2 +- app/views/repositories/show.html.erb | 20 +++---- app/views/users/_user_message_course.html.erb | 8 +-- app/views/users/_user_message_forge.html.erb | 16 +++--- ...61129032534_add_status_to_pull_requests.rb | 5 -- ...0161130031415_add_titil_to_pull_requsts.rb | 5 ++ 8 files changed, 80 insertions(+), 36 deletions(-) delete mode 100644 db/migrate/20161129032534_add_status_to_pull_requests.rb create mode 100644 db/migrate/20161130031415_add_titil_to_pull_requsts.rb diff --git a/app/controllers/pull_requests_controller.rb b/app/controllers/pull_requests_controller.rb index 9cb2d2c02..7da5a0dc1 100644 --- a/app/controllers/pull_requests_controller.rb +++ b/app/controllers/pull_requests_controller.rb @@ -97,16 +97,31 @@ class PullRequestsController < ApplicationController request = @g.create_merge_request(@project.gpid, title, User.current.gid, :description => description, :source_branch => source_branch, :target_branch => target_branch, :target_project_id => target_project_id) @fork_project_name = Project.find(params[:target_project_id]).try(:name) @fork_pr_message = true if @fork_project_name - # 发送消息 - send_message(User.current.id, target_project_id, request.id) + # fork项目的pullrequest发送消息 + # 向管理员发送消息 + @project_member = Member.where(:project_id => params[:target_project_id].to_i) + unless @project_member.nil? + @project_member.each do |mem| + if is_project_manager?(mem.user_id, params[:target_project_id].to_i) && mem.user_id != User.current.id + send_message(mem.user_id, params[:target_project_id].to_i, request.id, 1) + end + end + end # 创建Trustie数据 - PullRequest.create(:pull_request_id => request.id, :user_id => User.current.id, :status => 1, :project_id => target_project_id) + PullRequest.create(:pull_request_id => request.id, :user_id => User.current.id, :status => 1, :project_id => target_project_id, :title => title) else + @project_member = Member.where(:project_id => @project.id) request = @g.create_merge_request(@project.gpid, title, User.current.gid, :description => description, :source_branch => source_branch, :target_branch => target_branch) # 发送消息 - send_message(User.current.id, @project.id, request.id) + unless @project_member.nil? + @project_member.each do |mem| + if is_project_manager?(mem.user_id, @project.id) && mem.user_id != User.current.id + send_message(mem.user_id, @project.id, request.id, 1) + end + end + end # 创建Trustie数据 - PullRequest.create(:pull_request_id => request.id, :user_id => User.current.id, :status => 1, :project_id => @project.id) + PullRequest.create(:pull_request_id => request.id, :user_id => User.current.id, :status => 1, :project_id => @project.id, :title => title) respond_to do |format| format.js{redirect_to project_pull_request_path(request.id, :project_id => @project.id)} end @@ -180,6 +195,14 @@ class PullRequestsController < ApplicationController begin status = @g.accept_merge_rquest(@project.gpid, params[:id], User.current.gid) PullRequest.create(:pull_request_id => status.id, :user_id => User.current.id, :gpid => status.project_id) + + # 接受后,给用户发消息 + request = @g.merge_request(@project.gpid, params[:id]) + if User.current.login != request.author.try(:username) + message_user = User.where( :login => request.author.try(:username) ).first + send_message(message_user.id, @project.id, request.id, 2) + end + respond_to do |format| format.js{redirect_to project_pull_request_path(status.id, :project_id => @project.id)} end @@ -205,6 +228,25 @@ class PullRequestsController < ApplicationController def update_pull_request begin @g.update_merge_request(@project.gpid, params[:id], User.current.gid, :state_event => params[:state]) + + # 自己关闭/重新打开 就给每个管理员发送消息,如果是管理员关闭/重新打开,就给用户发消息 + request = @g.merge_request(@project.gpid, params[:id]) + @project_member = Member.where(:project_id => @project.id) + # 发送消息 + if ( params[:state] == "close" || params[:state] == "reopen" ) && User.current.login == request.author.try(:username) + unless @project_member.nil? + @project_member.each do |mem| + if is_project_manager?(mem.user_id, @project.id) && mem.user_id != User.current.id + send_message(mem.user_id, @project.id, request.id, params[:state] == "close" ? 4 : 3) + end + end + end + end + if ( params[:state] == "close" || params[:state] == "reopen" ) && User.current.login != request.author.try(:username) + message_user = User.where( :login => request.author.try(:username) ).first + send_message(message_user.id, @project.id, request.id, params[:state] == "close" ? 4 : 3) + end + respond_to do |format| format.html{redirect_to project_pull_request_path(params[:id], :project_id => @project.id)} end @@ -295,9 +337,9 @@ class PullRequestsController < ApplicationController end private - def send_message user_id, project_id, pull_request_id + def send_message user_id, project_id, pull_request_id, status ForgeMessage.create(:user_id => user_id, :project_id => project_id, - :forge_message_id => pull_request_id, :forge_message_type => "PullRequest", :viewed => true) + :forge_message_id => pull_request_id, :forge_message_type => "PullRequest", :viewed => true, :status => status) end def authorize_logged diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb index 14064c11f..98024954d 100644 --- a/app/helpers/users_helper.rb +++ b/app/helpers/users_helper.rb @@ -96,11 +96,11 @@ module UsersHelper when 1 "创建了PullRequest:" when 2 - "接受了您的PullRequest:" + "接受了PullRequest:" when 3 "重新打开了PullRequest:" when 4 - "关闭了您的PullRequest:" + "关闭了PullRequest:" end end diff --git a/app/models/pull_request.rb b/app/models/pull_request.rb index ec13ff16b..92f9b56a6 100644 --- a/app/models/pull_request.rb +++ b/app/models/pull_request.rb @@ -1,6 +1,6 @@ class PullRequest < ActiveRecord::Base # status 1:创建 2:接受 3:重新打开 4:关闭 - attr_accessible :gpid, :pull_request_id, :user_id, :status + attr_accessible :gpid, :pull_request_id, :user_id, :project_id, :title validates_uniqueness_of :pull_request_id has_many :forge_messages, :class_name => 'ForgeMessage', :as => :forge_message, :dependent => :destroy diff --git a/app/views/repositories/show.html.erb b/app/views/repositories/show.html.erb index 282df48c3..05b8d40d0 100644 --- a/app/views/repositories/show.html.erb +++ b/app/views/repositories/show.html.erb @@ -27,17 +27,17 @@ <% unless @entries.nil? %> ZIP下载 - <% if User.current.member_of?(@project) && @project.is_public? %> - <% if quality_analysis(User.current.try(:login), @repository.id).nil? %> - <%= link_to "质量分析", quality_analysis_path(:id => @project.id, :repository_id => @repository.identifier, :rev => @rev, :default_branch => @g_default_branch, :type => "1"), :remote => true, :class => "btn_zipdown fr" %> - <% else %> - <%= link_to "重新分析", quality_analysis_path(:id => @project.id, :repository_id => @repository.identifier, :rev => @rev, :default_branch => @g_default_branch, :type => "2"), :remote => true, :class => "btn_zipdown fr" %> - <% end %> - <% end %> - <% end %> - <% unless QualityAnalysis.where(:project_id => @project.id).first.nil? %> - <%= link_to "代码分析结果", project_quality_analysis_path(:project_id => @project.id), :class => "btn_zipdown fr" %> + <%# if User.current.member_of?(@project) && @project.is_public? %> + <%# if quality_analysis(User.current.try(:login), @repository.id).nil? %> + <%#= link_to "质量分析", quality_analysis_path(:id => @project.id, :repository_id => @repository.identifier, :rev => @rev, :default_branch => @g_default_branch, :type => "1"), :remote => true, :class => "btn_zipdown fr" %> + <%# else %> + <%#= link_to "重新分析", quality_analysis_path(:id => @project.id, :repository_id => @repository.identifier, :rev => @rev, :default_branch => @g_default_branch, :type => "2"), :remote => true, :class => "btn_zipdown fr" %> + <%# end %> + <%# end %> <% end %> + <%# unless QualityAnalysis.where(:project_id => @project.id).first.nil? %> + <%#= link_to "代码分析结果", project_quality_analysis_path(:project_id => @project.id), :class => "btn_zipdown fr" %> + <%# end %>