From bb6e77191e621a4cb47e536774b3411afe7ac5fd Mon Sep 17 00:00:00 2001 From: Andy Heathershaw Date: Mon, 5 Sep 2016 14:06:41 +0100 Subject: [PATCH] Added error handling of non-image files --- app/Album.php | 4 +++- app/Console/Commands/ProcessUploadCommand.php | 20 ++++++++++++------- app/Helpers/ImageHelper.php | 5 +++++ .../Controllers/Admin/AlbumController.php | 4 ++-- .../Controllers/Admin/PhotoController.php | 15 ++++++++++++-- .../Controllers/Gallery/DefaultController.php | 2 +- .../views/themes/base/gallery/index.blade.php | 11 +++++++--- resources/views/themes/base/layout.blade.php | 8 ++++++++ 8 files changed, 53 insertions(+), 16 deletions(-) diff --git a/app/Album.php b/app/Album.php index 21b66f6..de4e0e2 100644 --- a/app/Album.php +++ b/app/Album.php @@ -60,7 +60,9 @@ class Album extends Model public function thumbnailUrl($thumbnailName) { - $photo = Photo::where('album_id', $this->id)->first(); + $photo = $this->photos() + ->inRandomOrder() + ->first(); if (!is_null($photo)) { diff --git a/app/Console/Commands/ProcessUploadCommand.php b/app/Console/Commands/ProcessUploadCommand.php index 6e895e2..bed3848 100644 --- a/app/Console/Commands/ProcessUploadCommand.php +++ b/app/Console/Commands/ProcessUploadCommand.php @@ -98,6 +98,7 @@ class ProcessUploadCommand extends Command catch (\Exception $ex) { $upload->number_failed++; + $photo->photo->delete(); $photo->delete(); } @@ -128,9 +129,10 @@ class ProcessUploadCommand extends Command // Read the Exif data $exifData = @exif_read_data($photoFile); + $isExifDataFound = ($exifData !== false && is_array($exifData)); $angleToRotate = 0; - if (isset($exifData['Orientation'])) + if ($isExifDataFound && isset($exifData['Orientation'])) { switch ($exifData['Orientation']) { @@ -159,12 +161,16 @@ class ProcessUploadCommand extends Command } } - $photo->metadata_version = ProcessUploadCommand::METADATA_VERSION; - $photo->taken_at = $this->metadataDateTime($exifData); - $photo->camera_make = $this->metadataCameraMake($exifData); - $photo->camera_model = $this->metadataCameraModel($exifData); - $photo->camera_software = $this->metadataCameraSoftware($exifData); - $photo->rotation = $angleToRotate; + if ($isExifDataFound) + { + $photo->metadata_version = ProcessUploadCommand::METADATA_VERSION; + $photo->taken_at = $this->metadataDateTime($exifData); + $photo->camera_make = $this->metadataCameraMake($exifData); + $photo->camera_model = $this->metadataCameraModel($exifData); + $photo->camera_software = $this->metadataCameraSoftware($exifData); + $photo->rotation = $angleToRotate; + } + $photo->save(); // Generate and save thumbnails diff --git a/app/Helpers/ImageHelper.php b/app/Helpers/ImageHelper.php index 5020c2b..1b8a28c 100644 --- a/app/Helpers/ImageHelper.php +++ b/app/Helpers/ImageHelper.php @@ -50,6 +50,11 @@ class ImageHelper { $imageInfo = getimagesize($imagePath); + if ($imageInfo === false) + { + throw new \Exception(sprintf('The image "%s" does not appear to be a valid image, or cannot be read', pathinfo($imagePath, PATHINFO_FILENAME))); + } + $im = false; $type = $imageInfo[2]; $allowedTypes = [ diff --git a/app/Http/Controllers/Admin/AlbumController.php b/app/Http/Controllers/Admin/AlbumController.php index da600c4..74741f5 100644 --- a/app/Http/Controllers/Admin/AlbumController.php +++ b/app/Http/Controllers/Admin/AlbumController.php @@ -71,13 +71,13 @@ class AlbumController extends Controller * @param int $id * @return \Illuminate\Http\Response */ - public function show($id) + public function show(Request $request, $id) { $this->authorize('admin-access'); $album = AlbumController::loadAlbum($id); - return Theme::render('admin.show_album', ['album' => $album]); + return Theme::render('admin.show_album', ['album' => $album, 'error' => $request->session()->get('error')]); } /** diff --git a/app/Http/Controllers/Admin/PhotoController.php b/app/Http/Controllers/Admin/PhotoController.php index 66319bf..0100dd6 100644 --- a/app/Http/Controllers/Admin/PhotoController.php +++ b/app/Http/Controllers/Admin/PhotoController.php @@ -102,7 +102,8 @@ class PhotoController extends Controller $tempFolder = sprintf('%s/btw_upload_%s', env('TEMP_FOLDER', '/tmp'), MiscHelper::randomString()); mkdir($tempFolder); - switch (strtolower($archiveFile->getMimeType())) + $mimeType = strtolower($archiveFile->getMimeType()); + switch ($mimeType) { case 'application/zip': $zip = new \ZipArchive(); @@ -110,6 +111,10 @@ class PhotoController extends Controller $zip->extractTo($tempFolder); $zip->close(); break; + + default: + $request->session()->flash('error', sprintf('The file type "%s" is not supported for bulk uploads.', $mimeType)); + return redirect(route('albums.show', ['id' => $album->id])); } $upload = new Upload(); @@ -121,10 +126,16 @@ class PhotoController extends Controller $upload->save(); $di = new \RecursiveDirectoryIterator($tempFolder, \RecursiveDirectoryIterator::SKIP_DOTS); + $recursive = new \RecursiveIteratorIterator($di); /** @var \SplFileInfo $fileInfo */ - foreach ($di as $fileInfo) + foreach ($recursive as $fileInfo) { + if ($fileInfo->isDir()) + { + continue; + } + $photoFile = new File($fileInfo->getPathname()); /** @var File $savedFile */ diff --git a/app/Http/Controllers/Gallery/DefaultController.php b/app/Http/Controllers/Gallery/DefaultController.php index 60bad4d..300432a 100644 --- a/app/Http/Controllers/Gallery/DefaultController.php +++ b/app/Http/Controllers/Gallery/DefaultController.php @@ -10,7 +10,7 @@ class DefaultController extends Controller { public function index() { - $albums = Album::all()->sortBy('name'); + $albums = Album::withCount('photos')->get()->sortBy('name'); return Theme::render('gallery.index', [ 'albums' => $albums diff --git a/resources/views/themes/base/gallery/index.blade.php b/resources/views/themes/base/gallery/index.blade.php index 925bacd..88efc3e 100644 --- a/resources/views/themes/base/gallery/index.blade.php +++ b/resources/views/themes/base/gallery/index.blade.php @@ -10,12 +10,17 @@
{{ $album->name }}

- + @php($albumUrl = $album->thumbnailUrl('preview')) + @if (strlen($albumUrl) > 0) + + @endif

{{ $album->description }}

- diff --git a/resources/views/themes/base/layout.blade.php b/resources/views/themes/base/layout.blade.php index 2442d36..51647a0 100644 --- a/resources/views/themes/base/layout.blade.php +++ b/resources/views/themes/base/layout.blade.php @@ -25,6 +25,14 @@ @include('themes.base.partials.navbar')
+ @if (isset($error)) +
+
+ {{ $error }} +
+
+ @endif + @yield('content')