X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/919660678bec2b94eaa84ac60d0313f5ef07dfb7..refs/pull/2522/head:/app/Uploads/AttachmentService.php diff --git a/app/Uploads/AttachmentService.php b/app/Uploads/AttachmentService.php index 26e341111..b14f49473 100644 --- a/app/Uploads/AttachmentService.php +++ b/app/Uploads/AttachmentService.php @@ -1,21 +1,32 @@ fileSystem = $fileSystem; + } + + /** * Get the storage that will be used for storing files. - * @return \Illuminate\Contracts\Filesystem\Filesystem */ - protected function getStorage() + protected function getStorage(): FileSystemInstance { - $storageType = config('filesystems.default'); + $storageType = config('filesystems.attachments'); // Override default location if set to local public to ensure not visible. if ($storageType === 'local') { @@ -46,7 +57,7 @@ class AttachmentService extends UploadService public function saveNewUpload(UploadedFile $uploadedFile, $page_id) { $attachmentName = $uploadedFile->getClientOriginalName(); - $attachmentPath = $this->putFileInStorage($attachmentName, $uploadedFile); + $attachmentPath = $this->putFileInStorage($uploadedFile); $largestExistingOrder = Attachment::where('uploaded_to', '=', $page_id)->max('order'); $attachment = Attachment::forceCreate([ @@ -77,7 +88,7 @@ class AttachmentService extends UploadService } $attachmentName = $uploadedFile->getClientOriginalName(); - $attachmentPath = $this->putFileInStorage($attachmentName, $uploadedFile); + $attachmentPath = $this->putFileInStorage($uploadedFile); $attachment->name = $attachmentName; $attachment->path = $attachmentPath; @@ -89,12 +100,8 @@ class AttachmentService extends UploadService /** * Save a new File attachment from a given link and name. - * @param string $name - * @param string $link - * @param int $page_id - * @return Attachment */ - public function saveNewFromLink($name, $link, $page_id) + public function saveNewFromLink(string $name, string $link, int $page_id): Attachment { $largestExistingOrder = Attachment::where('uploaded_to', '=', $page_id)->max('order'); return Attachment::forceCreate([ @@ -110,27 +117,25 @@ class AttachmentService extends UploadService } /** - * Updates the file ordering for a listing of attached files. - * @param array $attachmentList - * @param $pageId + * Updates the ordering for a listing of attached files. */ - public function updateFileOrderWithinPage($attachmentList, $pageId) + public function updateFileOrderWithinPage(array $attachmentOrder, string $pageId) { - foreach ($attachmentList as $index => $attachment) { - Attachment::where('uploaded_to', '=', $pageId)->where('id', '=', $attachment['id'])->update(['order' => $index]); + foreach ($attachmentOrder as $index => $attachmentId) { + Attachment::query()->where('uploaded_to', '=', $pageId) + ->where('id', '=', $attachmentId) + ->update(['order' => $index]); } } /** * Update the details of a file. - * @param Attachment $attachment - * @param $requestData - * @return Attachment */ - public function updateFile(Attachment $attachment, $requestData) + public function updateFile(Attachment $attachment, array $requestData): Attachment { $attachment->name = $requestData['name']; + if (isset($requestData['link']) && trim($requestData['link']) !== '') { $attachment->path = $requestData['link']; if (!$attachment->external) { @@ -138,6 +143,7 @@ class AttachmentService extends UploadService $attachment->external = true; } } + $attachment->save(); return $attachment; } @@ -176,21 +182,20 @@ class AttachmentService extends UploadService /** * Store a file in storage with the given filename - * @param $attachmentName * @param UploadedFile $uploadedFile * @return string * @throws FileUploadException */ - protected function putFileInStorage($attachmentName, UploadedFile $uploadedFile) + protected function putFileInStorage(UploadedFile $uploadedFile) { $attachmentData = file_get_contents($uploadedFile->getRealPath()); $storage = $this->getStorage(); $basePath = 'uploads/files/' . Date('Y-m-M') . '/'; - $uploadFileName = $attachmentName; + $uploadFileName = Str::random(16) . '.' . $uploadedFile->getClientOriginalExtension(); while ($storage->exists($basePath . $uploadFileName)) { - $uploadFileName = str_random(3) . $uploadFileName; + $uploadFileName = Str::random(3) . $uploadFileName; } $attachmentPath = $basePath . $uploadFileName;