2020-03-09 00:40:16 +08:00
|
|
|
class MembersController < ApplicationController
|
|
|
|
|
before_action :require_login
|
2020-08-11 23:20:04 +08:00
|
|
|
before_action :load_project
|
2020-03-09 00:40:16 +08:00
|
|
|
before_action :find_user_with_id, only: %i[create remove change_role]
|
2021-09-02 11:48:53 +08:00
|
|
|
before_action :check_user_profile_completed, only: [:create]
|
2021-11-19 14:56:20 +08:00
|
|
|
before_action :operate!
|
2020-03-09 00:40:16 +08:00
|
|
|
before_action :check_member_exists!, only: %i[create]
|
|
|
|
|
before_action :check_member_not_exists!, only: %i[remove change_role]
|
|
|
|
|
|
|
|
|
|
def create
|
2020-04-28 15:24:31 +08:00
|
|
|
interactor = Projects::AddMemberInteractor.call(@project.owner, @project, @user)
|
2021-10-13 15:50:51 +08:00
|
|
|
SendTemplateMessageJob.perform_later('ProjectJoined', current_user.id, @user.id, @project.id) if Site.has_notice_menu?
|
|
|
|
|
SendTemplateMessageJob.perform_later('ProjectMemberJoined', current_user.id, @user.id, @project.id) if Site.has_notice_menu?
|
2020-03-09 00:40:16 +08:00
|
|
|
render_response(interactor)
|
|
|
|
|
rescue Exception => e
|
|
|
|
|
uid_logger_error(e.message)
|
|
|
|
|
tip_exception(e.message)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def index
|
2020-03-26 14:47:24 +08:00
|
|
|
scope = @project.members.includes(:roles, user: :user_extension)
|
2020-05-18 18:37:21 +08:00
|
|
|
search = params[:search].to_s.downcase
|
|
|
|
|
role = params[:role].to_s
|
2021-06-16 09:49:08 +08:00
|
|
|
scope = scope.joins(:user).merge(User.like(search))
|
2020-05-22 16:25:59 +08:00
|
|
|
scope = scope.joins(:roles).where("roles.name LIKE ?", "%#{role}%") if role.present?
|
2020-05-18 18:37:21 +08:00
|
|
|
|
2020-03-09 00:40:16 +08:00
|
|
|
@total_count = scope.size
|
|
|
|
|
@members = paginate(scope)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def remove
|
2020-04-28 15:24:31 +08:00
|
|
|
interactor = Projects::DeleteMemberInteractor.call(@project.owner, @project, @user)
|
2021-10-13 15:50:51 +08:00
|
|
|
SendTemplateMessageJob.perform_later('ProjectLeft', current_user.id, @user.id, @project.id) if Site.has_notice_menu?
|
|
|
|
|
SendTemplateMessageJob.perform_later('ProjectMemberLeft', current_user.id, @user.id, @project.id) if Site.has_notice_menu?
|
2020-03-09 00:40:16 +08:00
|
|
|
render_response(interactor)
|
|
|
|
|
rescue Exception => e
|
|
|
|
|
uid_logger_error(e.message)
|
|
|
|
|
tip_exception(e.message)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def change_role
|
2020-04-28 15:24:31 +08:00
|
|
|
interactor = Projects::ChangeMemberRoleInteractor.call(@project.owner, @project, @user, params[:role])
|
2021-10-13 15:50:51 +08:00
|
|
|
SendTemplateMessageJob.perform_later('ProjectRole', current_user.id, @user.id, @project.id, message_role_name) if Site.has_notice_menu?
|
2020-03-09 00:40:16 +08:00
|
|
|
render_response(interactor)
|
|
|
|
|
rescue Exception => e
|
|
|
|
|
uid_logger_error(e.message)
|
|
|
|
|
tip_exception(e.message)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
private
|
|
|
|
|
def can_operate?
|
|
|
|
|
current_user.project_manager?(@project)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def member_exists?
|
2021-08-24 17:48:51 +08:00
|
|
|
@project.members.exists?(user_id: params[:user_id])
|
2020-03-09 00:40:16 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def operate!
|
|
|
|
|
return render_forbidden('你不是管理员,没有权限操作') unless can_operate?
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def check_member_exists!
|
2021-08-03 14:27:17 +08:00
|
|
|
return render_error("user_id为#{params[:user_id]}的用户已经是项目成员") if member_exists?
|
2020-03-09 00:40:16 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def check_member_not_exists!
|
2021-08-24 17:48:51 +08:00
|
|
|
return render_error("user_id为#{params[:user_id]}的用户还不是项目成员") unless member_exists?
|
2020-03-09 00:40:16 +08:00
|
|
|
end
|
2021-09-02 11:48:53 +08:00
|
|
|
|
|
|
|
|
def check_user_profile_completed
|
|
|
|
|
require_user_profile_completed(@user)
|
|
|
|
|
end
|
2021-09-15 18:55:58 +08:00
|
|
|
|
|
|
|
|
def message_role_name
|
|
|
|
|
case params[:role]
|
|
|
|
|
when 'Manager' then '管理员'
|
|
|
|
|
when 'Developer' then '开发者'
|
|
|
|
|
when 'Reporter' then '报告者'
|
|
|
|
|
else
|
|
|
|
|
''
|
|
|
|
|
end
|
|
|
|
|
end
|
2020-03-09 00:40:16 +08:00
|
|
|
end
|