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;
/**
* 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);
}
* @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;
'name' => $imageName,
'path' => $fullPath,
'url' => $this->getPublicUrl($fullPath),
- 'type' => $type
+ 'type' => $type,
+ 'uploaded_to' => $uploadedTo
];
if (auth()->user() && auth()->user()->id !== 0) {
* 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)
{
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();