forgeplus/app/controllers/members_controller.rb

99 lines
4.1 KiB
Ruby
Raw Permalink Normal View History

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]
before_action :check_user_profile_completed, only: [:create]
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
2022-04-12 11:01:09 +08:00
if @user.gitea_token.blank?
result = Gitea::User::GetService.call(@user.login)
if result[:status] == :error
# gitea不存在用户@user,直接注册
user_result = create_gitea_user!(@user, @user.login, @user.mail)
return render_error(user_result[:message]) if user_result[:message]
end
end
interactor = Projects::AddMemberInteractor.call(@project.owner, @project, @user)
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)
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-03-09 00:40:16 +08:00
@total_count = scope.size
@members = paginate(scope)
2022-08-05 11:05:29 +08:00
if @project.owner.is_a?(Organization) && (params[:page].to_i == 1 || params[:page].blank?) && !@project.members.exists?(user_id: current_user.id)
@current_user_header_team = Team.joins(:team_users, :team_projects).where(team_projects: {project_id: @project.id}, team_users: {user_id: current_user.id}).order(authorize: :desc).take
end
2020-03-09 00:40:16 +08:00
end
def remove
interactor = Projects::DeleteMemberInteractor.call(@project.owner, @project, @user)
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
interactor = Projects::ChangeMemberRoleInteractor.call(@project.owner, @project, @user, params[:role])
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!
@current_user_header_team = Team.joins(:team_users, :team_projects).where(team_projects: {project_id: @project.id}, team_users: {user_id: current_user.id}).order(authorize: :desc).take
2022-10-17 10:42:40 +08:00
return render_error("#{@user&.nickname}已经是项目成员") if member_exists? || (params[:user_id].to_i == current_user.id && @current_user_header_team.present?)
2020-03-09 00:40:16 +08:00
end
def check_member_not_exists!
@current_user_header_team = Team.joins(:team_users, :team_projects).where(team_projects: {project_id: @project.id}, team_users: {user_id: current_user.id}).order(authorize: :desc).take
return render_error("用户为组织成员,请到组织下操作!") if (params[:user_id].to_i == current_user.id && @current_user_header_team.present?) && !member_exists?
2022-10-17 10:42:40 +08:00
return render_error("#{@user&.nickname}还不是项目成员") unless member_exists?
2020-03-09 00:40:16 +08:00
end
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