From c07677ef996237ddc06254baa475a33df8278c8f Mon Sep 17 00:00:00 2001 From: huang Date: Fri, 29 Jul 2016 14:49:37 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E9=82=80=E8=AF=B7=E6=A1=86?= =?UTF-8?q?=E6=9E=B6=20=E6=8B=92=E7=BB=9D=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/applied_project_controller.rb | 6 +- app/controllers/members_controller.rb | 58 ++++++++++++++++++- app/helpers/users_helper.rb | 33 ++++++++++- app/models/applied_message.rb | 2 +- app/models/applied_project.rb | 2 +- app/models/project.rb | 4 +- .../applied_project_info.js.erb | 3 +- .../members/allow_to_join_project.js.erb | 6 ++ .../refused_allow_to_join_project.js.erb | 1 + .../_user_message_applide_action.html.erb | 12 ++++ .../_user_message_applide_users.html.erb | 2 + .../users/_user_message_applied.html.erb | 9 +-- config/routes.rb | 2 + ..._add_applied_user_id_to_applied_message.rb | 5 ++ public/javascripts/application.js | 1 + 15 files changed, 129 insertions(+), 17 deletions(-) create mode 100644 app/views/members/allow_to_join_project.js.erb create mode 100644 app/views/members/refused_allow_to_join_project.js.erb create mode 100644 app/views/users/_user_message_applide_action.html.erb create mode 100644 app/views/users/_user_message_applide_users.html.erb create mode 100644 db/migrate/20160729020903_add_applied_user_id_to_applied_message.rb diff --git a/app/controllers/applied_project_controller.rb b/app/controllers/applied_project_controller.rb index 117d022d6..b726ea504 100644 --- a/app/controllers/applied_project_controller.rb +++ b/app/controllers/applied_project_controller.rb @@ -1,5 +1,5 @@ class AppliedProjectController < ApplicationController - + helper :watchers #申请加入项目 def applied_join_project @project = Project.find_by_id(params[:object_id]) @@ -43,7 +43,7 @@ class AppliedProjectController < ApplicationController end # @flage:提示语标志(1:邀请码错误;2:已经是项目成员; 3:角色没有选择; 4:申请成功) - # role:成员角色 => 0(1:管理人员;2:开发人员;3:报告人员) + # role:成员角色 => 0(4:管理人员;5:开发人员;6:报告人员) # 申请成功则发送消息 def applied_project_info @project = Project.find(params[:project_id]) @@ -55,7 +55,7 @@ class AppliedProjectController < ApplicationController @flag = 3 else @flag = 4 - role = params[:member] == "member_manager" ? 1 : (params[:member] = "member_developer" ? 2 : 3) + role = params[:member] == "member_manager" ? 4 : (params[:member] = "member_developer" ? 5 : 6) applied_project = AppliedProject.create(:user_id => User.current.id, :project_id => params[:project_id], :role => role) # 申请成功则给项目管理员发送邮件及发送消息 Mailer.run.applied_project(applied_project) diff --git a/app/controllers/members_controller.rb b/app/controllers/members_controller.rb index 4dc2c52f5..dca6c6dd0 100644 --- a/app/controllers/members_controller.rb +++ b/app/controllers/members_controller.rb @@ -17,10 +17,11 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. class MembersController < ApplicationController + helper :users model_object Member - before_filter :find_model_object, :except => [:index, :create, :autocomplete] + before_filter :find_model_object, :except => [:index, :create, :autocomplete, :allow_to_join_project, :refused_allow_to_join_project] #before_filter :find_model_object_contest, :except => [:index, :create, :autocomplete] - before_filter :find_project_from_association, :except => [:index, :create, :autocomplete] + before_filter :find_project_from_association, :except => [:index, :create, :autocomplete, :allow_to_join_project, :refused_allow_to_join_project] before_filter :find_project_by_project_id, :only => [:index, :create, :autocomplete] before_filter :authorize accept_api_auth :index, :show, :create, :update, :destroy @@ -49,6 +50,59 @@ class MembersController < ApplicationController end end + # 同意消息中申请加入项目 + # 之所以role不在参数中传送是考虑到安全问题 + # status(1:申请的消息;2:已操作过该消息(包括同意或者拒绝,消息状态更新);3:决绝消息;4:被拒人收到消息;5:拒绝者收到消息;6:同意后申请人收到消息;7:同意后批准人收到消息) + def allow_to_join_project + @applied_message = AppliedMessage.find(params[:applied_message_id]) + applied_project = @applied_message.applied + user = User.find(@applied_message.applied_user_id) + project = Project.find(applied_project.project_id) + + # applied_project = AppliedProject.where(:project_id => params[:project_id], :user_id => params[:user_id]).first + # @applied_message = AppliedMessage.find(params[:applied_id]) + if user.member_of?(project) + @flash_message = "您已经是项目成员了" + @applied_message.update_attribute(:status, 2) + else + ap_role = applied_project.try(:role) + if ap_role + begin + members = [] + user_grades = [] + project_info = [] + members << Member.new(:role_ids => ["#{ap_role}"], :user_id => params[:user_id]) + user_grades << UserGrade.new(:user_id => params[:user_id], :project_id => params[:project_id]) + role = Role.find(ap_role) + project_info << ProjectInfo.new(:project_id => params[:project_id], :user_id => params[:user_id]) if role.allowed_to?(:is_manager) + project.members << members + project.project_infos << project_info + project.user_grades << user_grades unless user_grades.first.user_id.nil? + # 添加成功后,申请人收到消息 + AppliedMessage.create(:user_id => params[:send_id], :applied_type => "AppliedProject", :applied_id => applied_project.id ,:status => 6, :viewed => true, :applied_user_id => params[:user_id]) + # 添加成功后,批准人收到消息 + AppliedMessage.create(:user_id => params[:user_id], :applied_type => "AppliedProject", :applied_id => applied_project.id ,:status => 7, :viewed => true, :applied_user_id => params[:send_id]) + rescue Exception => e + puts e + end + end + end + end + + # 同意消息中拒绝加入项目 + # params[:user_id]为申请者ID + # params[:send_id]为拒绝人ID + # status(1:申请的消息;2:已操作过该消息(包括同意或者拒绝,消息状态更新);3:拒绝消息;4:被拒人收到消息;5:拒绝者收到消息;6:同意后申请人收到消息;7:同意后批准人收到消息) + def refused_allow_to_join_project + @applied_message = AppliedMessage.find(params[:applied_message_id]) + @applied_message.update_attribute(:status, 3) + applied_project = @applied_message.applied + # 发送消息给被拒者,user_id对应的收到信息的用户 + AppliedMessage.create(:user_id => @applied_message.applied_user_id, :applied_type => "AppliedProject", :applied_id => applied_project.id ,:status => 4, :viewed => true, :applied_user_id => @applied_message.user_id) + # 发送消息给拒绝者 + AppliedMessage.create(:user_id => @applied_message.user_id, :applied_type => "AppliedProject", :applied_id => applied_project.id ,:status => 5, :viewed => true, :applied_user_id => @applied_message.applied_user_id) + end + def create if params[:refusal_button] members = [] diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb index e9abe43a3..6d6c83d4a 100644 --- a/app/helpers/users_helper.rb +++ b/app/helpers/users_helper.rb @@ -57,15 +57,42 @@ module UsersHelper # 获取消息角色 def applied_project_message_type role case role - when 1 + when 4 "管理员" - when 2 + when 5 "开发人员" - when 3 + when 6 "报告人员" end end + # 判断当前用户能否对消息进行操作 + def allow_to_show applied_message + (User.current.id == applied_message.user_id && applied_message.status == 1) ? true : false + end + + # 项目申请消息通过状态判断用户 + # status(1:申请的消息;2:已操作过该消息(包括同意或者拒绝,消息状态更新);3:拒绝消息;4:被拒人收到消息;5:拒绝者收到消息;6:同意后申请人收到消息;7:同意后批准人收到消息) + def applied_project_users applied_message + case applied_message.status + when 3,2,1,5,4 + user = User.find(applied_message.applied_user_id) + when 6 + user = User.find(applied_message.user_id) + + end + end + + # 项目申请消息通过状态判断tip描述 + def applied_project_tip applied_message + case applied_message.status + when 4 + "拒绝申请加入项目:" + when 5,3,2,1 + "申请加入项目:" + end + end + def get_resource_origin attach type = attach.container_type content = attach.container diff --git a/app/models/applied_message.rb b/app/models/applied_message.rb index 1c6b3a8e7..0175fcf47 100644 --- a/app/models/applied_message.rb +++ b/app/models/applied_message.rb @@ -1,6 +1,6 @@ class AppliedMessage < ActiveRecord::Base # status: 0表示未批准; status:1表示已批准; status: 2表示已拒绝 - attr_accessible :applied_id, :applied_type, :status, :user_id, :viewed + attr_accessible :applied_id, :applied_type, :status, :user_id, :viewed, :applied_user_id belongs_to :applied ,:polymorphic => true belongs_to :apply_add_schools belongs_to :user diff --git a/app/models/applied_project.rb b/app/models/applied_project.rb index 8dbed9cda..fdc9a602e 100644 --- a/app/models/applied_project.rb +++ b/app/models/applied_project.rb @@ -10,7 +10,7 @@ class AppliedProject < ActiveRecord::Base # 仅仅给项目管理人员发送消息 def send_appliled_message self.project.managers.each do |member| - self.applied_messages << AppliedMessage.new(:user_id => member.user_id, :status => true, :viewed => false) + self.applied_messages << AppliedMessage.new(:user_id => member.user_id, :status => true, :viewed => false, :applied_user_id => self.user_id) end # end end diff --git a/app/models/project.rb b/app/models/project.rb index edeee4f33..dcc01eb09 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -919,8 +919,8 @@ class Project < ActiveRecord::Base CODES = %W(2 3 4 5 6 7 8 9 A B C D E F G H J K L N M O P Q R S T U V W X Y Z) def generate_invite_code code = read_attribute(:invite_code) - if !code || code.size <5 - code = CODES.sample(5).join + if !code || code.size <6 + code = CODES.sample(6).join return generate_invite_code if Project.where(invite_code: code).present? update_attribute(:invite_code, code) end diff --git a/app/views/applied_project/applied_project_info.js.erb b/app/views/applied_project/applied_project_info.js.erb index 1ac627b3e..7fff1b516 100644 --- a/app/views/applied_project/applied_project_info.js.erb +++ b/app/views/applied_project/applied_project_info.js.erb @@ -1,3 +1,4 @@ -var htmlvalue = "<%= escape_javascript(render :partial => 'applied_project/applied_project_tip', locals: {:project_id => @project.id}) %>"; +var htmlvalue = "<%= escape_javascript(render :partial => 'applied_project/applied_project_tip') %>"; pop_box_new(htmlvalue,380,40,50); + //$("#join_in_project").attr('href','<%#= join_in_project_link(@project, User.current) %>'); diff --git a/app/views/members/allow_to_join_project.js.erb b/app/views/members/allow_to_join_project.js.erb new file mode 100644 index 000000000..df3ac6de3 --- /dev/null +++ b/app/views/members/allow_to_join_project.js.erb @@ -0,0 +1,6 @@ +<% if @flash_message %> + alert("<%= @flash_message %>"); +<% else%> + $("#applied_project_<%= @applied_message.id %>").html('<%= render :partial => "users/user_message_applide_action", :locals =>{:ma => @applied_message} %>'); +<% end%> + diff --git a/app/views/members/refused_allow_to_join_project.js.erb b/app/views/members/refused_allow_to_join_project.js.erb new file mode 100644 index 000000000..109ed3a62 --- /dev/null +++ b/app/views/members/refused_allow_to_join_project.js.erb @@ -0,0 +1 @@ +$("#applied_project_<%= @applied_message.id %>").html('<%= render :partial => "users/user_message_applide_action", :locals =>{:ma => @applied_message} %>'); \ No newline at end of file diff --git a/app/views/users/_user_message_applide_action.html.erb b/app/views/users/_user_message_applide_action.html.erb new file mode 100644 index 000000000..24f2471b5 --- /dev/null +++ b/app/views/users/_user_message_applide_action.html.erb @@ -0,0 +1,12 @@ +<% if allow_to_show(ma) %> + :<%= link_to "同意", allow_to_join_project_project_memberships_path(:project_id => ma.applied.project, :applied_message_id => ma.id), :remote => true, :method => :post %> | + <%= link_to "拒绝", refused_allow_to_join_project_project_memberships_path(:project_id => ma.applied.project, :applied_message_id => ma.id), :remote => true, :method => :get %> +<% elsif ma.status == 4 %> + 被拒绝 +<% elsif ma.status == 5 %> + 您已拒绝 +<% elsif ma.status == 6 %> + 已通过 +<% elsif ma.status == 7 %> + 您已同意 +<% end %> \ No newline at end of file diff --git a/app/views/users/_user_message_applide_users.html.erb b/app/views/users/_user_message_applide_users.html.erb new file mode 100644 index 000000000..18539c628 --- /dev/null +++ b/app/views/users/_user_message_applide_users.html.erb @@ -0,0 +1,2 @@ +<%=link_to applied_project_users(ma), user_path(applied_project_users(ma)), :class => "newsBlue homepageNewsPublisher", :target => '_blank' %> +<%= applied_project_tip(ma) %> \ No newline at end of file diff --git a/app/views/users/_user_message_applied.html.erb b/app/views/users/_user_message_applied.html.erb index efd2bf8da..a2eff7189 100644 --- a/app/views/users/_user_message_applied.html.erb +++ b/app/views/users/_user_message_applied.html.erb @@ -20,13 +20,14 @@ <%=link_to image_tag(url_to_avatar(ma.applied.user), :width => "30", :height => "30"), user_path(ma.applied.user), :target => '_blank' %>
  • - <%=link_to ma.applied.user, user_path(ma.applied.user), :class => "newsBlue homepageNewsPublisher", :target => '_blank' %> - ">申请加入项目: + <%= render :partial => "users/user_message_applide_users", :locals =>{:ma => ma} %>
  • 以“<%= applied_project_message_type(ma.applied.role) %>”身份加入 - <%= link_to ma.applied.project, settings_project_path(:id => ma.applied.project.id, :tab => "members"), :class => "link-blue", :target => '_blank' %> - :同意 | 拒绝 + <%= link_to ma.applied.project, project_path(ma.applied.project), :class => "link-blue", :target => '_blank' %> + + <%= render :partial => "users/user_message_applide_action", :locals =>{:ma => ma} %> +
  • <%= time_tag(ma.created_at).html_safe %>
  • diff --git a/config/routes.rb b/config/routes.rb index 52b7bab94..20fe203fa 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -767,6 +767,8 @@ RedmineApp::Application.routes.draw do collection do get 'autocomplete' get 'appliedproject' + post 'allow_to_join_project' + get 'refused_allow_to_join_project' end end diff --git a/db/migrate/20160729020903_add_applied_user_id_to_applied_message.rb b/db/migrate/20160729020903_add_applied_user_id_to_applied_message.rb new file mode 100644 index 000000000..480123b05 --- /dev/null +++ b/db/migrate/20160729020903_add_applied_user_id_to_applied_message.rb @@ -0,0 +1,5 @@ +class AddAppliedUserIdToAppliedMessage < ActiveRecord::Migration + def change + add_column :applied_messages, :applied_user_id, :integer + end +end diff --git a/public/javascripts/application.js b/public/javascripts/application.js index d2cd50d0e..b4ccd1533 100644 --- a/public/javascripts/application.js +++ b/public/javascripts/application.js @@ -1499,6 +1499,7 @@ function pop_box_new(value, Width, Top, Left){ $('#ajax-modal').siblings().remove(); $('#ajax-modal').parent().css({"top": Top+"%","left": Left+"%","transform":"translate(-50%,-50%)","padding":"0","border":"none"}); $('#ajax-modal').css({"padding":"0"}); + } // 公共提示弹框样式