����JFIF��x�x����'
Server IP : 78.140.185.180 / Your IP : 3.145.26.35 Web Server : LiteSpeed System : Linux cpanel13.v.fozzy.com 4.18.0-513.11.1.lve.el8.x86_64 #1 SMP Thu Jan 18 16:21:02 UTC 2024 x86_64 User : builderbox ( 1072) PHP Version : 7.3.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/builderbox/www/common/Workspaces/Controllers/ |
Upload File : |
<?php namespace Common\Workspaces\Controllers; use App\User; use Arr; use Auth; use Common\Core\BaseController; use Common\Settings\Settings; use Common\Workspaces\Notifications\WorkspaceInvitation; use Common\Workspaces\Workspace; use Common\Workspaces\WorkspaceInvite; use Common\Workspaces\WorkspaceMember; use Illuminate\Http\Request; use Notification; use Str; class WorkspaceInvitesController extends BaseController { /** * @var Request */ private $request; /** * @var WorkspaceInvite */ private $workspaceInvite; /** * @var User */ private $user; /** * @var Settings */ private $settings; public function __construct( Request $request, WorkspaceInvite $workspaceInvite, User $user, Settings $settings ) { $this->request = $request; $this->workspaceInvite = $workspaceInvite; $this->user = $user; $this->settings = $settings; } public function resend(Workspace $workspace, WorkspaceInvite $workspaceInvite) { $this->authorize('store', [WorkspaceMember::class, $workspace]); $notification = new WorkspaceInvitation($workspace, Auth::user()->display_name, $workspaceInvite['id']); Notification::send($workspaceInvite->user, $notification); $workspaceInvite->touch(); return $this->success(['invite' => $workspaceInvite]); } public function store(Workspace $workspace) { $this->authorize('store', [WorkspaceMember::class, $workspace]); $validatedData = $this->request->validate([ 'emails.*' => 'required|email', 'roleId' => 'required|int', ]); $invites = app(WorkspaceInvite::class) ->where('workspace_id', $workspace->id) ->whereIn('email', $validatedData['emails']) ->pluck('email'); $alreadyInvitedEmails = app(WorkspaceMember::class) ->where('workspace_id', $workspace->id) ->join('users', 'users.id', 'workspace_user.user_id') ->where('users.email', $validatedData['emails']) ->pluck('email') ->merge($invites) ->toArray(); $validatedData['emails'] = array_diff($validatedData['emails'], $alreadyInvitedEmails); if ( ! empty($validatedData['emails'])) { $existingUsers = $this->user->whereIn('email', $validatedData['emails'])->get()->keyBy('email'); $workspaceInvites = collect($validatedData['emails'])->map(function($email) use($existingUsers, $validatedData, $workspace) { // if registration is disabled, only allow inviting already registered users if ($this->settings->get('disable.registration') && !isset($existingUsers[$email])) { return null; } return [ 'id' => Str::orderedUuid(), 'email' => $email, 'user_id' => $existingUsers[$email]['id'] ?? null, 'workspace_id' => $workspace->id, 'avatar' => isset($existingUsers[$email]) ? $existingUsers[$email]->getRawOriginal('avatar') ?? null : null, 'role_id' => $validatedData['roleId'], 'created_at' => now(), 'updated_at' => now(), ]; })->filter(); $this->workspaceInvite->insert($workspaceInvites->toArray()); $workspaceInvites->each(function($invite) use($workspace, $existingUsers) { $notification = new WorkspaceInvitation($workspace, Auth::user()->display_name, $invite['id']); if ($user = Arr::get($existingUsers, $invite['email'])) { Notification::send($user, $notification); } else { Notification::route('mail', $invite['email'])->notify($notification); } }); $invites = $workspace->invites()->whereIn('workspace_invites.id', $workspaceInvites->pluck('id'))->get(); } return $this->success([ 'invites' => $invites ?? [] ]); } public function destroy(WorkspaceInvite $workspaceInvite) { $workspace = Workspace::findOrFail($workspaceInvite->workspace_id); $this->authorize('destroy', [WorkspaceMember::class, $workspace, $workspaceInvite->user_id]); $workspaceInvite->delete(); return $this->success(); } public function changeRole(Workspace $workspace, string $inviteId) { $this->authorize('update', [WorkspaceMember::class, $workspace]); $validatedData = $this->request->validate([ 'roleId' => 'required|integer' ]); app(WorkspaceInvite::class) ->where('id', $inviteId) ->update(['role_id' => $validatedData['roleId']]); } }