67 lines
1.7 KiB
Ruby
67 lines
1.7 KiB
Ruby
class ProjectMembershipsController < ApplicationController
|
|
include ProjectContext
|
|
|
|
layout "project"
|
|
|
|
before_action :set_project, except: :destroy
|
|
before_action :set_project_membership, only: [:destroy]
|
|
|
|
def index
|
|
@account_managers = @project.account.managers.order(:email)
|
|
@project_memberships = project_memberships.order_by_user_role_and_user_email(Current.account)
|
|
@project_membership = project_memberships.build
|
|
end
|
|
|
|
def create
|
|
@project_membership = build_project_membership(project_membership_params)
|
|
|
|
if @project_membership.save_and_update_account_membership
|
|
flash.notice = t(".notice")
|
|
UserMailer.project_invitation(@project_membership.user, @project, user_is_new: @project_membership.new_user?).deliver_later
|
|
else
|
|
flash.alert = alert_for(@project_membership)
|
|
end
|
|
|
|
redirect_to [@project, :project_memberships]
|
|
end
|
|
|
|
def destroy
|
|
@project_membership.destroy
|
|
redirect_to [@project_membership.project, :project_memberships], alert: t(".alert")
|
|
end
|
|
|
|
private
|
|
|
|
def set_project_membership
|
|
@project_membership = authorize project_memberships.find(params[:id])
|
|
end
|
|
|
|
def project_memberships
|
|
if @project
|
|
policy_scope(@project.project_memberships)
|
|
else
|
|
policy_scope(ProjectMembership)
|
|
end
|
|
end
|
|
|
|
def build_project_membership(params = {})
|
|
authorize project_memberships.build(params)
|
|
end
|
|
|
|
def project_membership_params
|
|
params.require(:project_membership).permit(:user_email)
|
|
end
|
|
|
|
def user_email_param
|
|
project_membership_params.fetch(:user_email)
|
|
end
|
|
|
|
def alert_for(project_membership)
|
|
if project_membership.errors.any?
|
|
project_membership.errors.full_messages.first
|
|
else
|
|
t(".alert")
|
|
end
|
|
end
|
|
end
|