From cd509fac9243021b4410a11ce4cc7e29cd30a314 Mon Sep 17 00:00:00 2001 From: Vincent Vanwaelscappel Date: Sat, 10 Dec 2022 10:07:57 +0100 Subject: [PATCH] wip #5638 @1.5 --- .../FluidbookPublication/EditOperation.php | 93 +++++++++++++++---- app/Models/FluidbookPublication.php | 5 + resources/linkeditor/js/linkeditor.links.js | 2 + resources/linkeditor/js/linkeditor.save.js | 3 - resources/linkeditor/js/linkeditor.toolbar.js | 40 +++++--- resources/linkeditor/style/inc/_form.sass | 3 + resources/linkeditor/style/inc/_popup.sass | 1 + .../link_editor.blade.php | 13 +-- 8 files changed, 120 insertions(+), 40 deletions(-) diff --git a/app/Http/Controllers/Admin/Operations/FluidbookPublication/EditOperation.php b/app/Http/Controllers/Admin/Operations/FluidbookPublication/EditOperation.php index 5b71fe68f..3d3f2df30 100644 --- a/app/Http/Controllers/Admin/Operations/FluidbookPublication/EditOperation.php +++ b/app/Http/Controllers/Admin/Operations/FluidbookPublication/EditOperation.php @@ -21,6 +21,7 @@ trait EditOperation Route::match(['get'], $segment . '/{id}/edit/links/versions/export/{version}', $controller . '@exportLinks'); Route::match(['post'], $segment . '/{id}/edit/links/import/merge', $controller . '@importLinksMerge'); Route::match(['post'], $segment . '/{id}/edit/links/import/replace', $controller . '@importLinks'); + Route::match(['post'], $segment . '/{id}/edit/links/move', $controller . '@moveLinks'); Route::match(['get'], $segment . '/{id}/edit/links/versions/restore/{version}', $controller . '@restoreLinks'); Route::put($segment . '/{id}/save/links', $controller . '@saveLinks'); Route::get($segment . '/{id}/edit/{type}_{page}.{format}', $controller . '@getLinkPage') @@ -44,6 +45,76 @@ trait EditOperation ); } + protected function moveLinks($fluidbook_id) + { + if (!FluidbookPublication::hasPermission($fluidbook_id)) { + abort(401); + } + + $offset = request('number'); + $from = request('start'); + $internal = request('offset_internal_links', '0'); + + /** @var FluidbookPublication $fb */ + $fb = FluidbookPublication::find($fluidbook_id); + if ($internal) { + $numerotation = explode(',', $fb->page_numbers); + } + $width = $fb->getPageWidth(); + $isOnePage = $fb->isOnePage(); + + FluidbookLinks::getLinksAndRulers($fluidbook_id, $links, $rulers); + + $rlinks = array(); + foreach ($links as $k => $link) { + if (!$isOnePage && $link['page'] % 2 == 0 && $link['left'] > $width) { + $link['page']++; + $link['left'] -= $width; + } + + if ($link['page'] >= $from) { + $link['page'] += $offset; + } + if ($internal && $link['type'] == 5) { + if ($link['numerotation'] == 'physical') { + if ($link['to'] >= $from) { + $link['to'] += $offset; + } + } else { + $ph = array_search($link['to'], $numerotation) + 1; + if ($ph >= $from) { + $ph += $offset; + $vi = $numerotation[($ph - 1)]; + $link['to'] = $vi; + } + } + } + $rlinks[$k] = $link; + } + + $rrulers = array(); + foreach ($rulers as $k => $ruler) { + if (!$isOnePage && $ruler['type'] == 'x' && $ruler['page'] % 2 == 0 && $ruler['pos'] > $width) { + $ruler['page']++; + $ruler['pos'] -= $width; + } + + if ($ruler['page'] > $from) { + $ruler['page'] += $offset; + } + + if (!$isOnePage && $ruler['page'] % 2 == 1 && $ruler['type'] == 'x') { + $ruler['page']--; + $ruler['pos'] += $width; + } + + $rrulers[$k] = $ruler; + } + + FluidbookLinks::saveLinksInFile($fluidbook_id, backpack_user()->id, __('Décalage de :nb pages à partir de la page :page', ['nb' => $offset, 'page' => $from]), $rlinks, $rrulers); + return response()->json(['success' => 'ok']); + } + protected function getLinkPage($fluidbook_id, $type, $page, $format = 'jpg') { if (!FluidbookPublication::hasPermission($fluidbook_id)) { @@ -100,9 +171,9 @@ trait EditOperation FluidbookLinks::getLinksAndRulers($fluidbook_id, $links, $rulers, $version); FluidbookLinks::saveLinksInFile($fluidbook_id, backpack_user()->id, __('Restaurer la sauvegarde des liens :date', ['date' => date('Y-m-d H:i:s', $version)]), $links, $rulers, [], []); + return response()->json(['success' => 'ok']); } - protected function importLinks($fluidbook_id) { if (!FluidbookPublication::hasPermission($fluidbook_id)) { @@ -113,6 +184,7 @@ trait EditOperation FluidbookLinks::getLinksAndRulersFromExcelFile($uploadedFile->getPathname(), $links, $rulers); FluidbookLinks::saveLinksInFile($fluidbook_id, backpack_user()->id, __("Remplacer les liens à partir du fichier :file", ['file' => $uploadedFile->getClientOriginalName()]), $links, $rulers, [], []); + return response()->json(['success' => 'ok']); } protected function importLinksMerge($fluidbook_id) @@ -142,26 +214,9 @@ trait EditOperation $merged_rulers = array_merge($merged_rulers, $rulers); FluidbookLinks::saveLinksInFile($fluidbook_id, backpack_user()->id, __("Ajouter les liens à partir du fichier :file", ['file' => $uploadedFile->getClientOriginalName()]) . ' ', $merged_links, $merged_rulers, [], []); + return response()->json(['success' => 'ok']); } -// protected function getThumb($doc_id, $doc_page) -// { -// -// /** @var FluidbookDocument $doc */ -// $doc = FluidbookDocument::find($doc_id); -// $path = $doc->getFile($doc_page, 'jpg', 'thumb', true, true, ''); -// if (filesize($path) === 0) { -// for ($i = 1; $i <= 8; $i++) { -// clearstatcache(); -// if (filesize($path) > 0) { -// break; -// } -// sleep($i); -// } -// } -// return XSendFileController::sendfile($path); -// } - protected function setupEditDefaults() { $this->crud->addButton('line', 'edit', 'view', 'crud::buttons.fluidbook_publication.edit', 'end'); diff --git a/app/Models/FluidbookPublication.php b/app/Models/FluidbookPublication.php index 9cba16bce..26f777d14 100644 --- a/app/Models/FluidbookPublication.php +++ b/app/Models/FluidbookPublication.php @@ -271,6 +271,11 @@ class FluidbookPublication extends ToolboxSettingsModel } + public function isOnePage() + { + return in_array($this->mobileNavigationType, ['mobilefirst', 'portrait']); + } + /** * @return int */ diff --git a/resources/linkeditor/js/linkeditor.links.js b/resources/linkeditor/js/linkeditor.links.js index 862f239f7..aa7a81100 100644 --- a/resources/linkeditor/js/linkeditor.links.js +++ b/resources/linkeditor/js/linkeditor.links.js @@ -276,6 +276,7 @@ LinkeditorLinks.prototype = { }); }); this.linkeditor.updateFBElements(false); + this.linkeditor.save.hasChanged(); }, updateLinkData: function (id, data) { @@ -342,6 +343,7 @@ LinkeditorLinks.prototype = { }); }); this.linkeditor.updateFBElements(false); + this.linkeditor.save.hasChanged(); }, selectLink: function (l) { diff --git a/resources/linkeditor/js/linkeditor.save.js b/resources/linkeditor/js/linkeditor.save.js index 4989fd017..7de9c39ec 100644 --- a/resources/linkeditor/js/linkeditor.save.js +++ b/resources/linkeditor/js/linkeditor.save.js @@ -32,11 +32,8 @@ LinkeditorSave.prototype = { saveIfUnsavedChanges: function (message, notify, callback) { if (this.unsavedChanges) { - console.log('unsaved changes', this.unsavedChanges); this.save(message, false, function () { - console.log('saved'); setTimeout(function () { - console.log('callback ok'); callback(); }, 1000); }); diff --git a/resources/linkeditor/js/linkeditor.toolbar.js b/resources/linkeditor/js/linkeditor.toolbar.js index 3c80f79c8..3a5ba9466 100644 --- a/resources/linkeditor/js/linkeditor.toolbar.js +++ b/resources/linkeditor/js/linkeditor.toolbar.js @@ -29,19 +29,14 @@ LinkeditorToolbar.prototype = { return false; }); + $(document).on('submit', 'form.reloadAfterSuccess', function () { + $this.submitFormAndReload(this); + return false; + }); + $(document).on('change', '.importExcel input', function () { - var e = $(this); - var callback = function () { - var form = $(e).closest('form'); - var f = $(form).ajaxSubmit({dataType: 'json'}); - var xhr = f.data('jqxhr'); - xhr.done(function (data) { - setTimeout(function () { - window.location.reload(); - }, 1000); - }); - } - $this.linkeditor.save.saveIfUnsavedChanges(TRANSLATIONS.before_restore_message, false, callback); + $this.submitFormAndReload($(this).closest('form')); + return false; }); $(document).on('click', '#linkeditor-export-latest', function () { @@ -57,5 +52,26 @@ LinkeditorToolbar.prototype = { this.linkeditor.initTooltips(); }, + + submitFormAndReload: function (form) { + var callback = function () { + $(form).ajaxSubmit( + { + dataType: 'json', + success: function (data) { + setTimeout(function () { + window.location.reload(); + }, 1000); + } + } + ); + } + + if ($(form).is('[data-save-before-submit]')) { + this.linkeditor.save.saveIfUnsavedChanges($(form).attr('data-save-before-submit'), false, callback) + } else { + callback(); + } + }, }; module.exports = LinkeditorToolbar; diff --git a/resources/linkeditor/style/inc/_form.sass b/resources/linkeditor/style/inc/_form.sass index 8cf3d3334..b21013dfa 100644 --- a/resources/linkeditor/style/inc/_form.sass +++ b/resources/linkeditor/style/inc/_form.sass @@ -25,6 +25,9 @@ textarea, input[type="text"], input[type="number"], input[type="email"], input[t border: 1px solid var(--field-border) box-shadow: 0 0 8px rgba(0, 0, 0, 0.3) +input[type="checkbox"] + margin-right: 8px + input[type=number] &, &:hover appearance: textfield diff --git a/resources/linkeditor/style/inc/_popup.sass b/resources/linkeditor/style/inc/_popup.sass index bad22c460..118eeac49 100644 --- a/resources/linkeditor/style/inc/_popup.sass +++ b/resources/linkeditor/style/inc/_popup.sass @@ -48,6 +48,7 @@ p.button text-align: right + margin: 20px 0 0 0 @include dark-theme diff --git a/resources/views/fluidbook_publication/link_editor.blade.php b/resources/views/fluidbook_publication/link_editor.blade.php index 4cbe7215c..f79a9c1c1 100644 --- a/resources/views/fluidbook_publication/link_editor.blade.php +++ b/resources/views/fluidbook_publication/link_editor.blade.php @@ -12,7 +12,6 @@ 'manual_save_message'=>__('Sauvegarde manuelle'), 'automatic_save_message'=>__('Sauvegarde automatique'), 'warning_unsaved_changes'=>__('Des données n\'ont pas été sauvegardées'), - 'before_import_save_message'=>__("Sauvegarde avant l'import d'un fichier excel"), 'before_export_save_message'=>__("Sauvegarde avant export"), 'before_restore_message'=>__("Sauvegarde avant la restauration des liens"), 'restore_version_tooltip'=>__('Restaurer cette version'), @@ -49,12 +48,14 @@