X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/e87db96fc07302ab72ce60aa5e4414beb582c612..refs/pull/139/head:/app/Services/ImageService.php diff --git a/app/Services/ImageService.php b/app/Services/ImageService.php index 9d8aeea51..dd965c90f 100644 --- a/app/Services/ImageService.php +++ b/app/Services/ImageService.php @@ -4,6 +4,7 @@ use BookStack\Exceptions\ImageUploadException; use BookStack\Image; use BookStack\User; use Exception; +use Intervention\Image\Exception\NotSupportedException; use Intervention\Image\ImageManager; use Illuminate\Contracts\Filesystem\Factory as FileSystem; use Illuminate\Contracts\Filesystem\Filesystem as FileSystemInstance; @@ -40,14 +41,16 @@ class ImageService /** * Saves a new image from an upload. * @param UploadedFile $uploadedFile - * @param string $type + * @param string $type + * @param int $uploadedTo * @return mixed + * @throws ImageUploadException */ - public function saveNewFromUpload(UploadedFile $uploadedFile, $type) + public function saveNewFromUpload(UploadedFile $uploadedFile, $type, $uploadedTo = 0) { $imageName = $uploadedFile->getClientOriginalName(); $imageData = file_get_contents($uploadedFile->getRealPath()); - return $this->saveNew($imageName, $imageData, $type); + return $this->saveNew($imageName, $imageData, $type, $uploadedTo); } @@ -72,13 +75,14 @@ class ImageService * @param string $imageName * @param string $imageData * @param string $type + * @param int $uploadedTo * @return Image * @throws ImageUploadException */ - private function saveNew($imageName, $imageData, $type) + private function saveNew($imageName, $imageData, $type, $uploadedTo = 0) { $storage = $this->getStorage(); - $secureUploads = Setting::get('app-secure-images'); + $secureUploads = setting('app-secure-images'); $imageName = str_replace(' ', '-', $imageName); if ($secureUploads) $imageName = str_random(16) . '-' . $imageName; @@ -99,7 +103,8 @@ class ImageService 'name' => $imageName, 'path' => $fullPath, 'url' => $this->getPublicUrl($fullPath), - 'type' => $type + 'type' => $type, + 'uploaded_to' => $uploadedTo ]; if (auth()->user() && auth()->user()->id !== 0) { @@ -119,10 +124,12 @@ class ImageService * Checks the cache then storage to avoid creating / accessing the filesystem on every check. * * @param Image $image - * @param int $width - * @param int $height - * @param bool $keepRatio + * @param int $width + * @param int $height + * @param bool $keepRatio * @return string + * @throws Exception + * @throws ImageUploadException */ public function getThumbnail(Image $image, $width = 220, $height = 220, $keepRatio = false) { @@ -139,8 +146,16 @@ class ImageService return $this->getPublicUrl($thumbFilePath); } - // Otherwise create the thumbnail - $thumb = $this->imageTool->make($storage->get($image->path)); + try { + $thumb = $this->imageTool->make($storage->get($image->path)); + } catch (Exception $e) { + if ($e instanceof \ErrorException || $e instanceof NotSupportedException) { + throw new ImageUploadException('The server cannot create thumbnails. Please check you have the GD PHP extension installed.'); + } else { + throw $e; + } + } + if ($keepRatio) { $thumb->resize($width, null, function ($constraint) { $constraint->aspectRatio();