X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/a3188d349c36a93dae1bc6c3350a72ad8ef38b64..refs/pull/84/head:/app/Http/Controllers/ImageController.php diff --git a/app/Http/Controllers/ImageController.php b/app/Http/Controllers/ImageController.php index 23f5446d6..f9d65c48b 100644 --- a/app/Http/Controllers/ImageController.php +++ b/app/Http/Controllers/ImageController.php @@ -2,6 +2,7 @@ namespace BookStack\Http\Controllers; +use BookStack\Exceptions\ImageUploadException; use BookStack\Repos\ImageRepo; use Illuminate\Filesystem\Filesystem as File; use Illuminate\Http\Request; @@ -19,8 +20,8 @@ class ImageController extends Controller /** * ImageController constructor. - * @param Image $image - * @param File $file + * @param Image $image + * @param File $file * @param ImageRepo $imageRepo */ public function __construct(Image $image, File $file, ImageRepo $imageRepo) @@ -31,9 +32,9 @@ class ImageController extends Controller parent::__construct(); } - /** - * Get all gallery images, Paginated + * Get all images for a specific type, Paginated + * @param string $type * @param int $page * @return \Illuminate\Http\JsonResponse */ @@ -43,22 +44,39 @@ class ImageController extends Controller return response()->json($imgData); } + /** + * Get all images for a user. + * @param int $page + * @return \Illuminate\Http\JsonResponse + */ + public function getAllForUserType($page = 0) + { + $imgData = $this->imageRepo->getPaginatedByType('user', $page, 24, $this->currentUser->id); + return response()->json($imgData); + } /** * Handles image uploads for use on pages. - * @param string $type + * @param string $type * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function uploadByType($type, Request $request) { - $this->checkPermission('image-create'); + $this->checkPermission('image-create-all'); $this->validate($request, [ 'file' => 'image|mimes:jpeg,gif,png' ]); $imageUpload = $request->file('file'); - $image = $this->imageRepo->saveNew($imageUpload, $type); + + try { + $uploadedTo = $request->has('uploaded_to') ? $request->get('uploaded_to') : 0; + $image = $this->imageRepo->saveNew($imageUpload, $type, $uploadedTo); + } catch (ImageUploadException $e) { + return response($e->getMessage(), 500); + } + return response()->json($image); } @@ -72,7 +90,7 @@ class ImageController extends Controller */ public function getThumbnail($id, $width, $height, $crop) { - $this->checkPermission('image-create'); + $this->checkPermission('image-create-all'); $image = $this->imageRepo->getById($id); $thumbnailUrl = $this->imageRepo->getThumbnail($image, $width, $height, $crop == 'false'); return response()->json(['url' => $thumbnailUrl]); @@ -80,33 +98,32 @@ class ImageController extends Controller /** * Update image details - * @param $imageId + * @param integer $imageId * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function update($imageId, Request $request) { - $this->checkPermission('image-update'); $this->validate($request, [ 'name' => 'required|min:2|string' ]); $image = $this->imageRepo->getById($imageId); + $this->checkOwnablePermission('image-update', $image); $image = $this->imageRepo->updateImageDetails($image, $request->all()); return response()->json($image); } - /** * Deletes an image and all thumbnail/image files * @param PageRepo $pageRepo - * @param Request $request - * @param int $id + * @param Request $request + * @param int $id * @return \Illuminate\Http\JsonResponse */ public function destroy(PageRepo $pageRepo, Request $request, $id) { - $this->checkPermission('image-delete'); $image = $this->imageRepo->getById($id); + $this->checkOwnablePermission('image-delete', $image); // Check if this image is used on any pages $isForced = ($request->has('force') && ($request->get('force') === 'true') || $request->get('force') === true);