From 150f0a4966e1c2b66b71c01b757b864935f09fc3 Mon Sep 17 00:00:00 2001 From: Andy Heathershaw Date: Sun, 17 Sep 2017 16:04:07 +0100 Subject: [PATCH] #38: Modified the way the metadata upgrade page works - which now does a "re-analyse" the same way as it does an "analyse" --- .../Controllers/Admin/AlbumController.php | 37 ++------ .../Controllers/Admin/PhotoController.php | 32 ++++++- .../Middleware/CheckMaxPostSizeExceeded.php | 1 + app/Services/PhotoService.php | 4 +- config/app.php | 2 +- public/update.php | 10 +++ .../base/admin/album_metadata.blade.php | 89 ++++++++++++++++--- routes/web.php | 2 +- 8 files changed, 124 insertions(+), 53 deletions(-) diff --git a/app/Http/Controllers/Admin/AlbumController.php b/app/Http/Controllers/Admin/AlbumController.php index a73d154..9500772 100644 --- a/app/Http/Controllers/Admin/AlbumController.php +++ b/app/Http/Controllers/Admin/AlbumController.php @@ -194,39 +194,14 @@ class AlbumController extends Controller /** @var Album $album */ $album = $this->loadAlbum($id); - return Theme::render('admin.album_metadata', ['album' => $album, 'current_metadata' => PhotoService::METADATA_VERSION]); - } - - /** - * Show the form for editing the specified resource. - * - * @param int $id - * @return \Illuminate\Http\Response - */ - public function metadataPost(Request $request, $id) - { - $this->authorizeAccessToAdminPanel('admin:manage-albums'); - - /** @var Album $album */ - $album = $this->loadAlbum($id); - $photosNeededToUpdate = $album->photos()->where('metadata_version', '<', PhotoService::METADATA_VERSION)->get(); - $queueToken = MiscHelper::randomString(); - // First download the original of each photo that needs updating and mark it as needing analysis - foreach ($photosNeededToUpdate as $photo) - { - /** @var Photo $photo */ - $photo->is_analysed = false; - - $photoService = new PhotoService($photo); - $photoService->downloadOriginalToFolder(FileHelper::getQueuePath($queueToken)); - - $photo->save(); - } - - // Now redirect to the analysis page - return response()->redirectToRoute('albums.analyse', ['id' => $id, 'queue_token' => $queueToken]); + return Theme::render('admin.album_metadata', [ + 'album' => $album, + 'current_metadata' => PhotoService::METADATA_VERSION, + 'photos' => $photosNeededToUpdate, + 'queue_token' => MiscHelper::randomString() + ]); } public function setGroupPermissions(Request $request, $id) diff --git a/app/Http/Controllers/Admin/PhotoController.php b/app/Http/Controllers/Admin/PhotoController.php index 2a7b9d5..f6ffe85 100644 --- a/app/Http/Controllers/Admin/PhotoController.php +++ b/app/Http/Controllers/Admin/PhotoController.php @@ -60,10 +60,7 @@ class PhotoController extends Controller $result['message'] = $ex->getMessage(); // Remove the photo if it cannot be analysed (only if there isn't currently a version of metadata) - if (is_null($photo->metadata_version)) - { - $photo->delete(); - } + $photo->delete(); } return response()->json($result); @@ -147,6 +144,33 @@ class PhotoController extends Controller } } + public function reAnalyse($id, $queue_token) + { + $this->authorizeAccessToAdminPanel(); + + /** @var Photo $photo */ + $photo = $this->loadPhoto($id); + $result = ['is_successful' => false, 'message' => '']; + + try + { + $photoService = new PhotoService($photo); + $photoService->downloadOriginalToFolder(FileHelper::getQueuePath($queue_token)); + $photoService->analyse($queue_token); + + $result['is_successful'] = true; + } + catch (\Exception $ex) + { + $result['is_successful'] = false; + $result['message'] = $ex->getMessage(); + + // Unlike the analyse method, we don't remove the photo if it cannot be analysed + } + + return response()->json($result); + } + public function regenerateThumbnails($photoId) { $this->authorizeAccessToAdminPanel(); diff --git a/app/Http/Middleware/CheckMaxPostSizeExceeded.php b/app/Http/Middleware/CheckMaxPostSizeExceeded.php index efad4ea..775d853 100644 --- a/app/Http/Middleware/CheckMaxPostSizeExceeded.php +++ b/app/Http/Middleware/CheckMaxPostSizeExceeded.php @@ -19,6 +19,7 @@ class CheckMaxPostSizeExceeded protected $exclude = [ '/admin/photos/analyse/*', '/admin/photos/flip/*', + '/admin/photos/reanalyse/*', '/admin/photos/regenerate-thumbnails/*', '/admin/photos/rotate/*' ]; diff --git a/app/Services/PhotoService.php b/app/Services/PhotoService.php index cfce2a0..ae8ba94 100644 --- a/app/Services/PhotoService.php +++ b/app/Services/PhotoService.php @@ -50,7 +50,7 @@ class PhotoService $this->themeHelper = new ThemeHelper(); } - public function analyse($queueToken) + public function analyse($queueToken, $isReanalyse = false) { $queuePath = FileHelper::getQueuePath($queueToken); $photoFile = join(DIRECTORY_SEPARATOR, [$queuePath, $this->photo->storage_file_name]); @@ -85,7 +85,7 @@ class PhotoService // If Exif data contains an Orientation, ensure we rotate the original image as such (providing we don't // currently have a metadata version - i.e. it hasn't been read and rotated already before) - if ($isExifDataFound && isset($exifData['Orientation']) && is_null($this->photo->metadata_version)) + if ($isExifDataFound && isset($exifData['Orientation']) && !$isReanalyse) { switch ($exifData['Orientation']) { diff --git a/config/app.php b/config/app.php index 02b056c..8ed36d0 100644 --- a/config/app.php +++ b/config/app.php @@ -2,7 +2,7 @@ return [ // Version number of Blue Twilight - 'version' => '2.1.0-beta.2', + 'version' => '2.1.0-beta.3', /* |-------------------------------------------------------------------------- diff --git a/public/update.php b/public/update.php index 19628d7..95d96f2 100644 --- a/public/update.php +++ b/public/update.php @@ -114,6 +114,16 @@ php artisan clear-compiled return false; } + ob_start(); + system('php artisan config:clear', $rc); + $result = ob_get_clean(); + echo nl2br($result); + if ($rc != 0) + { + $this->echoError('config:clear command failed'); + return false; + } + ob_start(); system('php artisan view:clear', $rc); $result = ob_get_clean(); diff --git a/resources/views/themes/base/admin/album_metadata.blade.php b/resources/views/themes/base/admin/album_metadata.blade.php index 075a7d3..151fbc6 100644 --- a/resources/views/themes/base/admin/album_metadata.blade.php +++ b/resources/views/themes/base/admin/album_metadata.blade.php @@ -12,21 +12,69 @@ @section('content')
-
-
-
@yield('title')
-
-

@lang('admin.metadata_upgrade.confirm', ['name' => $album->name])

-

@lang('admin.metadata_upgrade.warning')

+
+
+ + +
+
Analysis completed
+
+

Your analysis has completed.

+ +
+

@lang('admin.analyse_photos_failed')

+
    +
  • :
  • +
+
+ + -
@@ -35,10 +83,23 @@ @push('scripts') diff --git a/routes/web.php b/routes/web.php index 93aab88..46e5a8f 100644 --- a/routes/web.php +++ b/routes/web.php @@ -27,7 +27,6 @@ Route::group(['prefix' => 'admin'], function () { Route::get('albums/{id}/analyse/{queue_token}', 'Admin\AlbumController@analyse')->name('albums.analyse'); Route::get('albums/{id}/delete', 'Admin\AlbumController@delete')->name('albums.delete'); Route::get('/albums/{id}/metadata', 'Admin\AlbumController@metadata')->name('albums.metadata'); - Route::post('/albums/{id}/metadata', 'Admin\AlbumController@metadataPost')->name('albums.metadataPost'); Route::post('albums/{id}/set-group-permissions', 'Admin\AlbumController@setGroupPermissions')->name('albums.set_group_permissions'); Route::post('albums/{id}/set-user-permissions', 'Admin\AlbumController@setUserPermissions')->name('albums.set_user_permissions'); Route::delete('albums/{id}/delete-redirect/{redirectId}', 'Admin\AlbumController@deleteRedirect')->name('albums.delete_redirect'); @@ -38,6 +37,7 @@ Route::group(['prefix' => 'admin'], function () { Route::post('photos/analyse/{id}/{queue_token}', 'Admin\PhotoController@analyse')->name('photos.analyse'); Route::post('photos/flip/{photoId}/{horizontal}/{vertical}', 'Admin\PhotoController@flip')->name('photos.flip'); Route::post('photos/move/{photoId}', 'Admin\PhotoController@move')->name('photos.move'); + Route::post('photos/reanalyse/{id}/{queue_token}', 'Admin\PhotoController@reAnalyse')->name('photos.re-analyse'); Route::post('photos/regenerate-thumbnails/{photoId}', 'Admin\PhotoController@regenerateThumbnails')->name('photos.regenerateThumbnails'); Route::post('photos/rotate/{photoId}/{angle}', 'Admin\PhotoController@rotate')->name('photos.rotate'); Route::post('photos/store-bulk', 'Admin\PhotoController@storeBulk')->name('photos.storeBulk');