Added error handling of non-image files

This commit is contained in:
Andy Heathershaw 2016-09-05 14:06:41 +01:00
parent 56701c78d6
commit bb6e77191e
8 changed files with 53 additions and 16 deletions

View File

@ -60,7 +60,9 @@ class Album extends Model
public function thumbnailUrl($thumbnailName) public function thumbnailUrl($thumbnailName)
{ {
$photo = Photo::where('album_id', $this->id)->first(); $photo = $this->photos()
->inRandomOrder()
->first();
if (!is_null($photo)) if (!is_null($photo))
{ {

View File

@ -98,6 +98,7 @@ class ProcessUploadCommand extends Command
catch (\Exception $ex) catch (\Exception $ex)
{ {
$upload->number_failed++; $upload->number_failed++;
$photo->photo->delete();
$photo->delete(); $photo->delete();
} }
@ -128,9 +129,10 @@ class ProcessUploadCommand extends Command
// Read the Exif data // Read the Exif data
$exifData = @exif_read_data($photoFile); $exifData = @exif_read_data($photoFile);
$isExifDataFound = ($exifData !== false && is_array($exifData));
$angleToRotate = 0; $angleToRotate = 0;
if (isset($exifData['Orientation'])) if ($isExifDataFound && isset($exifData['Orientation']))
{ {
switch ($exifData['Orientation']) switch ($exifData['Orientation'])
{ {
@ -159,12 +161,16 @@ class ProcessUploadCommand extends Command
} }
} }
if ($isExifDataFound)
{
$photo->metadata_version = ProcessUploadCommand::METADATA_VERSION; $photo->metadata_version = ProcessUploadCommand::METADATA_VERSION;
$photo->taken_at = $this->metadataDateTime($exifData); $photo->taken_at = $this->metadataDateTime($exifData);
$photo->camera_make = $this->metadataCameraMake($exifData); $photo->camera_make = $this->metadataCameraMake($exifData);
$photo->camera_model = $this->metadataCameraModel($exifData); $photo->camera_model = $this->metadataCameraModel($exifData);
$photo->camera_software = $this->metadataCameraSoftware($exifData); $photo->camera_software = $this->metadataCameraSoftware($exifData);
$photo->rotation = $angleToRotate; $photo->rotation = $angleToRotate;
}
$photo->save(); $photo->save();
// Generate and save thumbnails // Generate and save thumbnails

View File

@ -50,6 +50,11 @@ class ImageHelper
{ {
$imageInfo = getimagesize($imagePath); $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; $im = false;
$type = $imageInfo[2]; $type = $imageInfo[2];
$allowedTypes = [ $allowedTypes = [

View File

@ -71,13 +71,13 @@ class AlbumController extends Controller
* @param int $id * @param int $id
* @return \Illuminate\Http\Response * @return \Illuminate\Http\Response
*/ */
public function show($id) public function show(Request $request, $id)
{ {
$this->authorize('admin-access'); $this->authorize('admin-access');
$album = AlbumController::loadAlbum($id); $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')]);
} }
/** /**

View File

@ -102,7 +102,8 @@ class PhotoController extends Controller
$tempFolder = sprintf('%s/btw_upload_%s', env('TEMP_FOLDER', '/tmp'), MiscHelper::randomString()); $tempFolder = sprintf('%s/btw_upload_%s', env('TEMP_FOLDER', '/tmp'), MiscHelper::randomString());
mkdir($tempFolder); mkdir($tempFolder);
switch (strtolower($archiveFile->getMimeType())) $mimeType = strtolower($archiveFile->getMimeType());
switch ($mimeType)
{ {
case 'application/zip': case 'application/zip':
$zip = new \ZipArchive(); $zip = new \ZipArchive();
@ -110,6 +111,10 @@ class PhotoController extends Controller
$zip->extractTo($tempFolder); $zip->extractTo($tempFolder);
$zip->close(); $zip->close();
break; 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(); $upload = new Upload();
@ -121,10 +126,16 @@ class PhotoController extends Controller
$upload->save(); $upload->save();
$di = new \RecursiveDirectoryIterator($tempFolder, \RecursiveDirectoryIterator::SKIP_DOTS); $di = new \RecursiveDirectoryIterator($tempFolder, \RecursiveDirectoryIterator::SKIP_DOTS);
$recursive = new \RecursiveIteratorIterator($di);
/** @var \SplFileInfo $fileInfo */ /** @var \SplFileInfo $fileInfo */
foreach ($di as $fileInfo) foreach ($recursive as $fileInfo)
{ {
if ($fileInfo->isDir())
{
continue;
}
$photoFile = new File($fileInfo->getPathname()); $photoFile = new File($fileInfo->getPathname());
/** @var File $savedFile */ /** @var File $savedFile */

View File

@ -10,7 +10,7 @@ class DefaultController extends Controller
{ {
public function index() public function index()
{ {
$albums = Album::all()->sortBy('name'); $albums = Album::withCount('photos')->get()->sortBy('name');
return Theme::render('gallery.index', [ return Theme::render('gallery.index', [
'albums' => $albums 'albums' => $albums

View File

@ -10,12 +10,17 @@
<div class="panel-heading"><a href="{{ $album->url() }}">{{ $album->name }}</a></div> <div class="panel-heading"><a href="{{ $album->url() }}">{{ $album->name }}</a></div>
<div class="panel-body"> <div class="panel-body">
<p class="text-center"> <p class="text-center">
<img class="img-responsive" src="{{ $album->thumbnailUrl('preview') }}"/> @php($albumUrl = $album->thumbnailUrl('preview'))
@if (strlen($albumUrl) > 0)
<img class="img-responsive" src="{{ $albumUrl }}"/>
@endif
</p> </p>
<p>{{ $album->description }}</p> <p>{{ $album->description }}</p>
</div> </div>
<div class="panel-footer text-right"> <div class="panel-footer">
<a href="{{ $album->url() }}" class="btn btn-sm btn-default">Open album</a> <span class="text-left"><b>{{ $album->photos_count }}</b> photos</span>
<span class="pull-right"><a href="{{ $album->url() }}" class="btn btn-sm btn-default">Open album</a></span>
<span class="clearfix"></span>
</div> </div>
</div> </div>
</div> </div>

View File

@ -25,6 +25,14 @@
@include('themes.base.partials.navbar') @include('themes.base.partials.navbar')
<div class="container-fluid"> <div class="container-fluid">
@if (isset($error))
<div class="container">
<div class="alert alert-danger">
<strong><i class="fa fa-warning fa-fw"></i></strong> {{ $error }}
</div>
</div>
@endif
@yield('content') @yield('content')
</div> </div>