]> _ Git - fluidbook-toolbox.git/commitdiff
wait #6069 @1.5
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Thu, 22 Jun 2023 12:33:54 +0000 (14:33 +0200)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Thu, 22 Jun 2023 12:33:54 +0000 (14:33 +0200)
app/Fields/FluidbookIDOptionnal.php [new file with mode: 0644]
app/Fluidbook/Compiler/Compiler.php
app/Fluidbook/Compiler/Links.php
app/Fluidbook/Link/LinksData.php
app/Fluidbook/PDF.php
app/Http/Controllers/Admin/Operations/FluidbookPublication/LinksOperation.php
app/Jobs/FluidbookImagesPreprocess.php
app/Models/FluidbookPublication.php
resources/views/fields/fluidbook_composition.blade.php
resources/views/vendor/backpack/crud/buttons/fluidbook_publication/edit.blade.php

diff --git a/app/Fields/FluidbookIDOptionnal.php b/app/Fields/FluidbookIDOptionnal.php
new file mode 100644 (file)
index 0000000..25a5fb9
--- /dev/null
@@ -0,0 +1,11 @@
+<?php
+
+namespace App\Fields;
+
+class FluidbookIDOptionnal extends FluidbookID
+{
+    public function getOptions()
+    {
+        return array_merge(['0' => '-'], parent::getOptions());
+    }
+}
index c16afbcd90251d91effcba1b21a7ab364507d41a..250354d08f4ee633909e917c214a02b9fa1db15d 100644 (file)
@@ -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();
index b4600d78c32bc803284b159e6c9a4ece1f85cc73..91577746ab7ff69e4ed8691d4933cccbb087e0ea 100644 (file)
@@ -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);
     }
 
     /**
index 813a40aa647a6cbfa61aa352d99a2edf384de6bc..c190989b5a6272bdad33927efc46f02a4877f555 100644 (file)
@@ -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, ';', '"');
index 8a1523061a43b336465ef81b82a4c555c41a54ad..0b0a752b105a042d2d506a01fc92efd105975cad 100644 (file)
@@ -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];
                 }
index 180ed66d968781f0280eb5140b982270b41a8d6c..8c6000e07725b29245c529370c79a89ce9b7af63 100644 (file)
@@ -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();
index a07f2d1b2f2d88e1964bd9c9dc68562c06dce13e..ca1e8f9e721ef021df2ded5f9fb51ff7f62195dd 100644 (file)
@@ -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);
index b0342339b218ca65a583e750451ad4ff23e21742..c59daaa120f637458d3b96b6e5d133f59669495a 100644 (file)
@@ -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;
+    }
 }
index e30f4102930c94e106e566e21d81f92ca3b384da..41086ba1395c68a0a5bc92f66e5c83f5f1c2112e 100644 (file)
         $v=json_encode($v);
     }
 @endphp
+@include('crud::fields.inc.wrapper_start')
 <div id="composition">
     <input
         id="compositionField"
     </div>
     <div id="composition_pages"></div>
 </div>
+@include('crud::fields.inc.wrapper_end')
index 6ca76a279d8fa0b20abfad2052a1ee63a28baa87..4cbdf0b4ae7bee3c33742fdaf11fa1ada09d9cb5 100644 (file)
@@ -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)
     <a class="btn btn-sm btn-link" href="#"