X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/14ca31768cdc79e06a4ab4c74bb650a37bff4eb5..refs/pull/63/head:/app/Services/ImageService.php diff --git a/app/Services/ImageService.php b/app/Services/ImageService.php index 600c85a24..47c27cd0a 100644 --- a/app/Services/ImageService.php +++ b/app/Services/ImageService.php @@ -1,7 +1,10 @@ put($fullPath, $imageData); + try { + $storage->put($fullPath, $imageData); + } catch (Exception $e) { + throw new ImageUploadException('Image Path ' . $fullPath . ' is not writable by the server.'); + } - $userId = auth()->user()->id; - $image = Image::forceCreate([ + $imageDetails = [ 'name' => $imageName, 'path' => $fullPath, 'url' => $this->getPublicUrl($fullPath), - 'type' => $type, - 'created_by' => $userId, - 'updated_by' => $userId - ]); + 'type' => $type + ]; + + if (auth()->user() && auth()->user()->id !== 0) { + $userId = auth()->user()->id; + $imageDetails['created_by'] = $userId; + $imageDetails['updated_by'] = $userId; + } + + $image = Image::forceCreate($imageDetails); return $image; } @@ -107,10 +120,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) { @@ -127,8 +142,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(); @@ -188,6 +211,7 @@ class ImageService $imageName = str_replace(' ', '-', $user->name . '-gravatar.png'); $image = $this->saveNewFromUrl($url, 'user', $imageName); $image->created_by = $user->id; + $image->updated_by = $user->id; $image->save(); return $image; }