From ad744c10aa8e437bdb116561f2247eb96e5830fb Mon Sep 17 00:00:00 2001 From: Vincent Vanwaelscappel Date: Thu, 22 Jun 2023 14:33:54 +0200 Subject: [PATCH] wait #6069 @1.5 --- app/Fields/FluidbookIDOptionnal.php | 11 +++ app/Fluidbook/Compiler/Compiler.php | 2 +- app/Fluidbook/Compiler/Links.php | 2 +- app/Fluidbook/Link/LinksData.php | 2 +- app/Fluidbook/PDF.php | 4 +- .../FluidbookPublication/LinksOperation.php | 2 +- app/Jobs/FluidbookImagesPreprocess.php | 2 +- app/Models/FluidbookPublication.php | 73 +++++++++++++++---- .../fields/fluidbook_composition.blade.php | 2 + .../fluidbook_publication/edit.blade.php | 15 ++-- 10 files changed, 89 insertions(+), 26 deletions(-) create mode 100644 app/Fields/FluidbookIDOptionnal.php diff --git a/app/Fields/FluidbookIDOptionnal.php b/app/Fields/FluidbookIDOptionnal.php new file mode 100644 index 000000000..25a5fb970 --- /dev/null +++ b/app/Fields/FluidbookIDOptionnal.php @@ -0,0 +1,11 @@ + '-'], parent::getOptions()); + } +} diff --git a/app/Fluidbook/Compiler/Compiler.php b/app/Fluidbook/Compiler/Compiler.php index c16afbcd9..250354d08 100644 --- a/app/Fluidbook/Compiler/Compiler.php +++ b/app/Fluidbook/Compiler/Compiler.php @@ -327,7 +327,7 @@ class Compiler extends Base implements CompilerInterface $this->widget = false; - $this->pages = $this->getFluidbook()->composition; + $this->pages = $this->getFluidbook()->getComposition(); $this->maxRes = min(self::MAX_RES, $this->fluidbookSettings->maxResolution); $this->theme = $theme ?? $this->getFluidbook()->getTheme(); diff --git a/app/Fluidbook/Compiler/Links.php b/app/Fluidbook/Compiler/Links.php index b4600d78c..91577746a 100644 --- a/app/Fluidbook/Compiler/Links.php +++ b/app/Fluidbook/Compiler/Links.php @@ -15,7 +15,7 @@ trait Links { public function getLinksAndRulers(&$links, &$rulers) { - LinksData::getLinksAndRulers($this->book_id, $links, $rulers, 'latest', true); + return $this->getFluidbook()->getLinksAndRulers($links, $rulers, 'latest', true); } /** diff --git a/app/Fluidbook/Link/LinksData.php b/app/Fluidbook/Link/LinksData.php index 813a40aa6..c190989b5 100644 --- a/app/Fluidbook/Link/LinksData.php +++ b/app/Fluidbook/Link/LinksData.php @@ -578,7 +578,7 @@ class LinksData $numbers = ['left', 'top', 'width', 'height']; $links = []; - foreach ($book->composition as $page => $doc) { + foreach ($book->getComposition() as $page => $doc) { $fp = Gzip::fopen($book->getDocument($page)->path('links/p' . $doc[1] . '.csv')); while (true) { $line = fgetcsv($fp, 512, ';', '"'); diff --git a/app/Fluidbook/PDF.php b/app/Fluidbook/PDF.php index 8a1523061..0b0a752b1 100644 --- a/app/Fluidbook/PDF.php +++ b/app/Fluidbook/PDF.php @@ -41,7 +41,7 @@ class PDF $fmtime = filemtime($originalPDF); if ($fmtime >= $fluidbook->getCompositionUpdate()) { $invalid = false; - foreach ($fluidbook->composition as $i => $infos) { + foreach ($fluidbook->getComposition() as $i => $infos) { $doc = $fluidbook->getPDFSource($i); if (file_exists($doc) && filemtime($doc) > $fmtime) { if (null !== $log) { @@ -80,7 +80,7 @@ class PDF $k = 0; $original = true; - foreach ($fluidbook->composition as $i => $infos) { + foreach ($fluidbook->getComposition() as $i => $infos) { if (!isset($firstDoc)) { $firstDoc = $infos[0]; } diff --git a/app/Http/Controllers/Admin/Operations/FluidbookPublication/LinksOperation.php b/app/Http/Controllers/Admin/Operations/FluidbookPublication/LinksOperation.php index 180ed66d9..8c6000e07 100644 --- a/app/Http/Controllers/Admin/Operations/FluidbookPublication/LinksOperation.php +++ b/app/Http/Controllers/Admin/Operations/FluidbookPublication/LinksOperation.php @@ -79,7 +79,7 @@ trait LinksOperation /** @var FluidbookPublication $fb */ $fb = FluidbookPublication::find($fluidbook_id); if ($internal) { - $numerotation = explode(',', $fb->page_numbers); + $numerotation = explode(',', $fb->getNumbering()); } $width = $fb->getPageWidth(); $isOnePage = $fb->isOnePage(); diff --git a/app/Jobs/FluidbookImagesPreprocess.php b/app/Jobs/FluidbookImagesPreprocess.php index a07f2d1b2..ca1e8f9e7 100644 --- a/app/Jobs/FluidbookImagesPreprocess.php +++ b/app/Jobs/FluidbookImagesPreprocess.php @@ -94,7 +94,7 @@ class FluidbookImagesPreprocess extends Base protected function getFile($page, $format = 'jpg', $resolution = 150, $withText = true, $withGraphics = true, $version = 'html') { - $c = $this->book->composition[$page]; + $c = $this->book->getComposition()[$page]; $doc = $this->book->getDocument($page); $quality = $this->book->JPEGQuality ?: 85; $job = new FluidbookDocumentFileProcess($doc, $c[1], $format, $resolution, $quality, $withText, $withGraphics, $version); diff --git a/app/Models/FluidbookPublication.php b/app/Models/FluidbookPublication.php index b0342339b..c59daaa12 100644 --- a/app/Models/FluidbookPublication.php +++ b/app/Models/FluidbookPublication.php @@ -6,6 +6,8 @@ namespace App\Models; use App\Console\Commands\WorkshopMigration; use App\Fields\FluidbookChapters; use App\Fields\FluidbookComposition; +use App\Fields\FluidbookID; +use App\Fields\FluidbookIDOptionnal; use App\Fields\FluidbookLocale; use App\Fields\FluidbookStatus; use App\Fields\User; @@ -33,7 +35,9 @@ use App\Models\Traits\SCORMVersionTrait; use App\Slack\Slack; use App\SubForms\Link\Base; use Cubist\Backpack\CubistBackpackServiceProvider; +use Cubist\Backpack\Magic\Fields\Checkbox; use Cubist\Backpack\Magic\Fields\FormBigSection; +use Cubist\Backpack\Magic\Fields\FormSeparator; use Cubist\Backpack\Magic\Fields\FormSuperSection; use Cubist\Backpack\Magic\Fields\Hidden; use Cubist\Backpack\Magic\Fields\Integer; @@ -65,6 +69,11 @@ class FluidbookPublication extends ToolboxSettingsModel protected $_enableTrackNonDefaultValues = true; protected static $_permissionBase = 'fluidbook-publication'; + /** + * @var FluidbookPublication + */ + protected $_fluidbookToUseForComposition = null; + protected static $_docs = []; protected $_operations = [CreateOperation::class, @@ -167,8 +176,11 @@ class FluidbookPublication extends ToolboxSettingsModel ); $this->addField('section_composition', FormBigSection::class, __('Composition')); + $this->addField('composition_fluidbook', Checkbox::class, __('Utiliser la composition d\'un autre fluidbook'), ['default' => false]); + $this->addField('composition_fluidbook_id', FluidbookID::class, __('Utiliser la composition d\'un autre fluidbook'), ['when' => ['composition_fluidbook' => 1]]); + $this->addField('composition_fluidbook_links', Checkbox::class, __('Utiliser également les liens de ce fluidbook'), ['default' => true, 'when' => ['composition_fluidbook' => 1]]); $this->addField('page_numbers', Hidden::class, __('Numérotation')); - $this->addField('composition', FluidbookComposition::class, __('Composition')); + $this->addField('composition', FluidbookComposition::class, __('Composition'), ['when' => ['composition_fluidbook' => 0]]); $this->addField('section_theme', FormBigSection::class, __('Thème graphique')); $this->addField('theme', \App\Fields\FluidbookTheme::class, __('Thème'), ['non_default_tracking' => false, 'default' => 1161]); @@ -298,7 +310,7 @@ class FluidbookPublication extends ToolboxSettingsModel $this->c_title = $this->title; if (null !== $this->composition) { - $this->c_pages = count($this->composition); + $this->c_pages = count($this->getComposition()); } else { Log::warning('Fluidbook ' . $this->id . ' has empty composition'); } @@ -340,19 +352,19 @@ class FluidbookPublication extends ToolboxSettingsModel public function getTextFile($page, $type = FluidbookDocument::TEXT_PLAIN) { - $compo = $this->composition[$page]; + $compo = $this->getComposition()[$page]; return self::_getDocument($compo[0])->getTextFile($compo[1], $type, $this->textExtraction, $this->ignoreSearchSeparators); } public function getHightlightFile($page) { - $compo = $this->composition[$page]; + $compo = $this->getComposition()[$page]; return self::_getDocument($compo[0])->getHightlightFile($compo[1]); } public function getPDFSplitSource($page) { - $compo = $this->composition[$page]; + $compo = $this->getComposition()[$page]; $doc = self::_getDocument($compo[0]); $pdf = $doc->path('pdf/p' . $compo[1] . '.pdf'); if (!file_exists($pdf)) { @@ -364,7 +376,7 @@ class FluidbookPublication extends ToolboxSettingsModel public function getFile($page, $format = 'jpg', $resolution = 150, $withText = true, $withGraphics = true, $version = 'html', $force = false) { - $compo = $this->composition[$page]; + $compo = $this->getComposition()[$page]; return self::_getDocument($compo[0])->getFile($compo[1], $format, $resolution, $this->JPEGQuality, $withText, $withGraphics, $version, $force); } @@ -397,10 +409,10 @@ class FluidbookPublication extends ToolboxSettingsModel { if (null === $this->_documentsSize) { $this->_documentsSize = []; - if (null === $this->composition) { + if (null === $this->getComposition()) { return $this->_documentsSize; } - foreach ($this->composition as $page => $data) { + foreach ($this->getComposition() as $page => $data) { if (isset($this->_documentsSize[$data[0]])) { continue; } @@ -425,7 +437,7 @@ class FluidbookPublication extends ToolboxSettingsModel */ public function getPagesNumber() { - return count($this->composition); + return count($this->getComposition()); } /** @@ -434,13 +446,13 @@ class FluidbookPublication extends ToolboxSettingsModel */ public function getDocument($page) { - return self::_getDocument($this->composition[$page][0]); + return self::_getDocument($this->getComposition()[$page][0]); } public function getDocumentSize($page = 1) { $document = $this->getDocument($page); - return $document->getPageSize($this->composition[$page][1]); + return $document->getPageSize($this->getComposition()[$page][1]); } /** @@ -504,15 +516,16 @@ class FluidbookPublication extends ToolboxSettingsModel public function getPDFSource($page, $type = 'crop'): string { - $compo = $this->composition[$page]; + $compo = $this->getComposition()[$page]; if ($type == 'crop') { return self::_getDocument($compo[0])->getPDFSource($type); } } - public function getLinksAndRulers(&$links, &$rulers) + public function getLinksAndRulers(&$links, &$rulers, $time = 'latest', $forceDecrypt = false) { - LinksData::getLinksAndRulers($this->id, $links, $rulers); + $links_id = $this->composition_fluidbook && $this->composition_fluidbook_links ? $this->composition_fluidbook_id : $this->id; + LinksData::getLinksAndRulers($links_id, $links, $rulers, $time, $forceDecrypt); } /** @@ -688,6 +701,9 @@ class FluidbookPublication extends ToolboxSettingsModel public function replicateFull(array $except = null) { $new = $this->_baseReplicate($except); + $new->composition_fluidbook = true; + $new->composition_fluidbook_id = $this->id; + $new->composition_fluidbook_links = true; $new->save(); // Copy links & assets @@ -854,4 +870,33 @@ class FluidbookPublication extends ToolboxSettingsModel $l10n['default'] = $this->getDefaultTranslations($l10n); return $l10n; } + + /** + * @return mixed + */ + public function getNumbering() + { + return $this->_getCompositionAttribute('page_numbers'); + } + + /** + * @return array + */ + public function getComposition() + { + $res = $this->_getCompositionAttribute('composition'); + return $res; + } + + protected function _getCompositionAttribute($name) + { + if (null === $this->_fluidbookToUseForComposition) { + if ($this->composition_fluidbook) { + $this->_fluidbookToUseForComposition = FluidbookPublication::withoutGlobalScopes()->find($this->composition_fluidbook_id); + } else { + $this->_fluidbookToUseForComposition = $this; + } + } + return $this->_fluidbookToUseForComposition->$name; + } } diff --git a/resources/views/fields/fluidbook_composition.blade.php b/resources/views/fields/fluidbook_composition.blade.php index e30f41029..41086ba13 100644 --- a/resources/views/fields/fluidbook_composition.blade.php +++ b/resources/views/fields/fluidbook_composition.blade.php @@ -809,6 +809,7 @@ $v=json_encode($v); } @endphp +@include('crud::fields.inc.wrapper_start')
+@include('crud::fields.inc.wrapper_end') diff --git a/resources/views/vendor/backpack/crud/buttons/fluidbook_publication/edit.blade.php b/resources/views/vendor/backpack/crud/buttons/fluidbook_publication/edit.blade.php index 6ca76a279..4cbdf0b4a 100644 --- a/resources/views/vendor/backpack/crud/buttons/fluidbook_publication/edit.blade.php +++ b/resources/views/vendor/backpack/crud/buttons/fluidbook_publication/edit.blade.php @@ -6,13 +6,18 @@ 'label'=>__('Modifier les paramètres'), 'url'=>$crud->route.'/$id/edit' ], - 'links'=> - [ - 'label'=>__('Modifier les liens'), + + ]; + + + if(!$entry->composition_fluidbook || !$entry->composition_fluidbook_links){ + $actions ['links']= + [ + 'label'=>__('Modifier les liens'), 'url'=>$crud->route.'/$id/edit/$action', 'target'=>'_blank' - ] - ]; + ]; + } @endphp @if($entry->allowsEdit() && $entry->getKey()>=\App\Console\Commands\WorkshopMigration::WS3_BOOK_ID)