resolveRequestedTarget( $request, __('Folders can only be shared with clients or groups.'), ); FolderAssignment::query()->firstOrCreate([ 'folder_id' => $folder->id, 'assignable_type' => $this->assignableType($assignable), 'assignable_id' => $assignable->getKey(), ]); $this->activity->log(Action::FolderShared, subject: $folder, context: ['target' => $targetName]); $recipients = $this->shareRecipients($assignable); $this->notifier->send('file_shared', $recipients, subject: $folder, data: ['itemName' => $folder->name]); // The master switch and each recipient's own preference are the // digester's job now — every caller was repeating them. $this->digester->queue('file_shared', $recipients, $folder->name, ['is_folder' => true]); return back(); } public function destroy(Request $request, Folder $folder): RedirectResponse { Gate::authorize('update', $folder); [$assignable, $targetName] = $this->resolveRequestedTarget( $request, __('Folders can only be shared with clients or groups.'), ); $deleted = FolderAssignment::query() ->where('folder_id', $folder->id) ->where('assignable_type', $this->assignableType($assignable)) ->where('assignable_id', $assignable->getKey()) ->delete(); if ($deleted > 0) { $this->activity->log(Action::FolderUnshared, subject: $folder, context: ['target' => $targetName]); } return back(); } }