]> BookStack Code Mirror - bookstack/blobdiff - app/Http/Controllers/Images/ImageController.php
Added 404 response for non-existing setting categories
[bookstack] / app / Http / Controllers / Images / ImageController.php
index ecc36bf67e24ad531f83326ed32d22bf4f97f63d..21ed58553f84ee3a6003cf27edb859c43ff64897 100644 (file)
@@ -1,53 +1,57 @@
-<?php namespace BookStack\Http\Controllers\Images;
+<?php
+
+namespace BookStack\Http\Controllers\Images;
 
 use BookStack\Exceptions\ImageUploadException;
+use BookStack\Exceptions\NotFoundException;
 use BookStack\Http\Controllers\Controller;
 use BookStack\Uploads\Image;
 use BookStack\Uploads\ImageRepo;
+use BookStack\Uploads\ImageService;
 use Exception;
-use Illuminate\Filesystem\Filesystem as File;
 use Illuminate\Http\Request;
 use Illuminate\Validation\ValidationException;
 
 class ImageController extends Controller
 {
-    protected $image;
-    protected $file;
     protected $imageRepo;
+    protected $imageService;
 
     /**
      * ImageController constructor.
      */
-    public function __construct(Image $image, File $file, ImageRepo $imageRepo)
+    public function __construct(ImageRepo $imageRepo, ImageService $imageService)
     {
-        $this->image = $image;
-        $this->file = $file;
         $this->imageRepo = $imageRepo;
+        $this->imageService = $imageService;
     }
 
     /**
      * Provide an image file from storage.
+     *
+     * @throws NotFoundException
      */
     public function showImage(string $path)
     {
-        $path = storage_path('uploads/images/' . $path);
-        if (!file_exists($path)) {
-            abort(404);
+        if (!$this->imageService->pathExistsInLocalSecure($path)) {
+            throw (new NotFoundException(trans('errors.image_not_found')))
+                ->setSubtitle(trans('errors.image_not_found_subtitle'))
+                ->setDetails(trans('errors.image_not_found_details'));
         }
 
-        return response()->file($path);
+        return $this->imageService->streamImageFromStorageResponse('gallery', $path);
     }
 
-
     /**
-     * Update image details
+     * Update image details.
+     *
      * @throws ImageUploadException
      * @throws ValidationException
      */
     public function update(Request $request, string $id)
     {
         $this->validate($request, [
-            'name' => 'required|min:2|string'
+            'name' => ['required', 'min:2', 'string'],
         ]);
 
         $image = $this->imageRepo->getById($id);
@@ -57,14 +61,16 @@ class ImageController extends Controller
         $image = $this->imageRepo->updateImageDetails($image, $request->all());
 
         $this->imageRepo->loadThumbs($image);
-        return view('components.image-manager-form', [
-            'image' => $image,
+
+        return view('pages.parts.image-manager-form', [
+            'image'          => $image,
             'dependantPages' => null,
         ]);
     }
 
     /**
      * Get the form for editing the given image.
+     *
      * @throws Exception
      */
     public function edit(Request $request, string $id)
@@ -77,14 +83,16 @@ class ImageController extends Controller
         }
 
         $this->imageRepo->loadThumbs($image);
-        return view('components.image-manager-form', [
-            'image' => $image,
+
+        return view('pages.parts.image-manager-form', [
+            'image'          => $image,
             'dependantPages' => $dependantPages ?? null,
         ]);
     }
 
     /**
-     * Deletes an image and all thumbnail/image files
+     * Deletes an image and all thumbnail/image files.
+     *
      * @throws Exception
      */
     public function destroy(string $id)
@@ -94,6 +102,7 @@ class ImageController extends Controller
         $this->checkImagePermission($image);
 
         $this->imageRepo->destroyImage($image);
+
         return response('');
     }