diff --git a/app/Http/Controllers/Admin/PhotoController.php b/app/Http/Controllers/Admin/PhotoController.php index 7cf4956..f6f5692 100644 --- a/app/Http/Controllers/Admin/PhotoController.php +++ b/app/Http/Controllers/Admin/PhotoController.php @@ -218,15 +218,27 @@ class PhotoController extends Controller } else { - /** @var File $savedFile */ - $savedFile = FileHelper::saveUploadedFile($photoFile, $queueFolder); + if ($request->has('photo_id')) + { + // Photo ID provided (using the Replace Photo function) - use that record + $photo = Photo::where('id', intval($request->get('photo_id')))->first(); + + /** @var File $savedFile */ + $savedFile = FileHelper::saveUploadedFile($photoFile, $queueFolder, $photo->storage_file_name); + } + else + { + /** @var File $savedFile */ + $savedFile = FileHelper::saveUploadedFile($photoFile, $queueFolder); + + $photo = new Photo(); + $photo->album_id = $album->id; + $photo->user_id = Auth::user()->id; + $photo->name = pathinfo($photoFile->getClientOriginalName(), PATHINFO_FILENAME); + $photo->storage_file_name = $savedFile->getFilename(); + } - $photo = new Photo(); - $photo->album_id = $album->id; - $photo->user_id = Auth::user()->id; - $photo->name = pathinfo($photoFile->getClientOriginalName(), PATHINFO_FILENAME); $photo->file_name = $photoFile->getClientOriginalName(); - $photo->storage_file_name = $savedFile->getFilename(); $photo->mime_type = $savedFile->getMimeType(); $photo->file_size = $savedFile->getSize(); $photo->is_analysed = false; diff --git a/resources/assets/js/albums.js b/resources/assets/js/albums.js index fa27e5a..887e934 100644 --- a/resources/assets/js/albums.js +++ b/resources/assets/js/albums.js @@ -376,6 +376,35 @@ function EditPhotosViewModel(album_id, language, urls) { e.preventDefault(); return false; }, + replacePhoto: function (e) { + var self = this; + + this.selectPhotoSingle(e.target); + var parent = $(e.target).closest('.photo'); + + bootbox.dialog({ + message: $('

').html(language.replace_image_message).prop('outerHTML') + + $('#replace-image-form').clone().removeAttr('style').attr('id', 'replace-image-form-visible').prop('outerHTML'), + title: language.replace_image_title, + buttons: { + cancel: { + label: language.action_cancel, + className: 'btn-secondary' + }, + confirm: { + label: language.action_continue, + className: 'btn-success', + callback: function () { + $('input[name="photo_id"]', '#replace-image-form-visible').val(self.photoIDs[0]); + $('#replace-image-form-visible').submit(); + } + } + } + }); + + e.preventDefault(); + return false; + }, rotate: function (angle, parent) { var url = urls.rotate_photo; url = url.replace('/0/', '/' + this.photoIDs[0] + '/'); diff --git a/resources/lang/en/admin.php b/resources/lang/en/admin.php index e248c53..607396e 100644 --- a/resources/lang/en/admin.php +++ b/resources/lang/en/admin.php @@ -143,6 +143,7 @@ return [ 'flip_horizontal' => 'Flip horizontally', 'flip_vertical' => 'Flip vertically', 'refresh_thumbnails' => 'Refresh thumbnails', + 'replace_image' => 'Replace image', 'rotate_left' => 'Rotate left', 'rotate_right' => 'Rotate right' ], @@ -154,6 +155,8 @@ return [ 'redirects_actions_heading' => 'Actions', 'redirects_source_url_heading' => 'Source Address', 'redirects_text' => 'To access this album using different addresses, you can use redirects. This is useful when you have moved the album to a different parent and the old address no longer works.', + 'replace_image_message' => 'If your photo isn\'t quite perfect, don\'t worry - just upload a new image using the field below and we\'ll replace it.', + 'replace_image_title' => 'Replace photo', 'save_changes_heading' => 'Save changes', 'save_changes_intro' => 'If you have made any changes to the above fields, you\'ll need to hit the Save Changes button below.', 'security_groups_heading' => 'Group Permissions', diff --git a/resources/views/themes/base/admin/show_album.blade.php b/resources/views/themes/base/admin/show_album.blade.php index 05f85a4..36cf030 100644 --- a/resources/views/themes/base/admin/show_album.blade.php +++ b/resources/views/themes/base/admin/show_album.blade.php @@ -53,6 +53,17 @@ + + +

@endsection @push('scripts') @@ -74,6 +85,8 @@ language.select_all_choice_visible_action = '{!! addslashes(trans('admin.select_all_choice.visible_action')) !!}'; language.image_failed = '{!! addslashes(trans('admin.upload_file_status_failed')) !!}'; language.image_uploaded = '{!! addslashes(trans('admin.upload_file_status_success')) !!}'; + language.replace_image_message = '{!! addslashes(trans('admin.replace_image_message')) !!}'; + language.replace_image_title = '{!! addslashes(trans('admin.replace_image_title')) !!}'; language.upload_status = '{!! addslashes(trans('admin.upload_file_status_progress')) !!}'; var urls = []; diff --git a/resources/views/themes/base/partials/single_photo_admin.blade.php b/resources/views/themes/base/partials/single_photo_admin.blade.php index 4fb52eb..83ebfde 100644 --- a/resources/views/themes/base/partials/single_photo_admin.blade.php +++ b/resources/views/themes/base/partials/single_photo_admin.blade.php @@ -27,6 +27,8 @@ @lang('admin.photo_actions.flip_horizontal') @lang('admin.photo_actions.flip_vertical') @lang('admin.photo_actions.flip_both') + + @lang('admin.photo_actions.replace_image') @endif