]> _ Git - fluidbook-toolbox.git/commitdiff
wip #4211 @1.5
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Thu, 29 Jul 2021 14:01:35 +0000 (16:01 +0200)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Thu, 29 Jul 2021 14:01:35 +0000 (16:01 +0200)
app/Console/Commands/WorkshopMigration.php
app/Fields/FluidbookDevelopmentVersion.php [new file with mode: 0644]
app/Fields/FluidbookSignature.php [new file with mode: 0644]
app/Models/FluidbookPublication.php
app/Models/FluidbookTheme.php
resources/views/vendor/backpack/base/inc/sidebar_content.blade.php
resources/views/vendor/backpack/crud/inc/form_save_buttons.blade.php

index 9a78f5447e807d85deb82c3bff6bdb18dfae90d2..66893dbf31a194dcc627e1ca05343f5e6f58d668 100644 (file)
@@ -3,12 +3,8 @@
 
 namespace App\Console\Commands;
 
-use App\Models\FluidbookTheme;
 use App\Models\FluidbookQuote;
-use App\Models\FluidbookTranslate;
 use Cubist\Backpack\Console\Commands\CubistCommand;
-use Cubist\Backpack\Magic\Fields\Files;
-use Cubist\Backpack\Magic\Fields\Color;
 use Illuminate\Support\Facades\DB;
 
 class WorkshopMigration extends CubistCommand
@@ -25,7 +21,7 @@ class WorkshopMigration extends CubistCommand
             //'Backup current database' => 'backup',
             //'Import Quotes' => 'importQuotes',
             'Migrate magic models' => 'migrate',
-            'Import Translations' => 'importTranslations',
+            'Import publications' => 'importPublications',
 
             'Clean caches' => 'cleanCache'
         ];
@@ -97,29 +93,7 @@ class WorkshopMigration extends CubistCommand
         }
     }
 
-    protected function importTranslations()
-    {
-        $slug = [];
-        $nsis = [];
-        $contents = [];
-
-        foreach (DB::table($this->_oldDB . '.langues')->get() as $e) {
-            $code = $e->lang_id;
-            if (stristr($code, '-')) {
-                $ex = explode('-', $code);
-                $code = $ex[0] . '_' . mb_strtoupper($ex[1]);
-            }
-            $slug[$code] = '1';
-            $nsis[$code] = $e->nsis;
-            $contents[$code] = ['k' => '-'];
-            $translations = json_decode($e->traductions, true);
-            foreach ($translations as $str => $translation) {
-                $contents[$code]['t_' . base64_encode($str)] = $translation;
-            }
-            touch(FluidbookTranslate::getLanguageFile($code));
-        }
+    protected function importPublications(){
 
-        DB::table('fluidbook_translate')->where('id',1)->update(['slug' => json_encode($slug), 'nsis' => json_encode($nsis), 'content_translatable' => json_encode($contents)]);
     }
-
 }
diff --git a/app/Fields/FluidbookDevelopmentVersion.php b/app/Fields/FluidbookDevelopmentVersion.php
new file mode 100644 (file)
index 0000000..bc82390
--- /dev/null
@@ -0,0 +1,27 @@
+<?php
+
+namespace App\Fields;
+
+use Cubist\Backpack\Magic\Fields\SelectFromArray;
+
+class FluidbookDevelopmentVersion extends SelectFromArray
+{
+    /**
+     * @throws \JsonException
+     */
+    public function getOptions()
+    {
+        $versions = json_decode(file_get_contents('/home/extranet/www/fluidbook/cache/activebranches'), true, 512, JSON_THROW_ON_ERROR);
+        $res = ['master : git (stable)' => 'stable',
+            'master : local (dev)' => 'dev'];
+
+        foreach ($versions as $version) {
+            if ($version === 'master') {
+                continue;
+            }
+            $res[$version . ' : git'] = $version . '|git';
+            $res[$version . ' : local'] = $version . '|local';
+        }
+        return $res;
+    }
+}
diff --git a/app/Fields/FluidbookSignature.php b/app/Fields/FluidbookSignature.php
new file mode 100644 (file)
index 0000000..ecd80d5
--- /dev/null
@@ -0,0 +1,24 @@
+<?php
+
+namespace App\Fields;
+
+use App\Models\Signature;
+use Cubist\Backpack\Magic\Fields\SelectFromModel;
+
+class FluidbookSignature extends SelectFromModel
+{
+    public function _postSetAttributes()
+    {
+        parent::_postSetAttributes();
+        $this->setAttribute('optionsmodel', Signature::class);
+    }
+
+    /**
+     * @param $e \Illuminate\Database\Eloquent\Model
+     * @return \Illuminate\Database\Eloquent\Model
+     */
+    public function getClause($e)
+    {
+        return $e->where('active', 1);
+    }
+}
index b7ef7c7ba552a05bac021a125f7ea7e0b1d763ad..643ab62b70ba00883b0afaf74cd16df18f9ded1e 100644 (file)
@@ -3,7 +3,10 @@
 
 namespace App\Models;
 
+use App\Fields\FluidbookDevelopmentVersion;
 use App\Fields\FluidbookLocale;
+use App\Fields\FluidbookSignature;
+use App\Fields\User;
 use Cubist\Backpack\Magic\Models\CubistMagicAbstractModel;
 use Illuminate\Database\Eloquent\Builder;
 
@@ -16,6 +19,8 @@ class FluidbookPublication extends CubistMagicAbstractModel
 
     protected $_enableBulk = false;
 
+    protected $_enableTrackNonDefaultValues = true;
+
     public static function addOwnerClause(Builder $builder)
     {
         if (backpack_user()->hasPermissionTo('fluidbook-quote:admin')) {
@@ -28,7 +33,3132 @@ class FluidbookPublication extends CubistMagicAbstractModel
     {
         parent::setFields();
 
-        $this->addField('title','Text',__('Titre de la publication'));
-        $this->addField('locale',FluidbookLocale::class,__('Langue par défaut'));
+        $this->addField(['name' => 'owner',
+                'label' => __('Propriétaire'),
+                'type' => User::class,
+                'column' => true,
+                'can' => 'quiz:admin',
+                'column_attribute' => 'companyWithNameOnTwoLines',
+                'attribute' => 'companyWithName',
+                'default' => backpack_user()->id]
+        );
+
+        $this->setSettingsFields();
+    }
+
+    public function setSettingsFields()
+    {
+        $this->addField([
+            'name' => 'section_important',
+            'type' => 'FormSection',
+            'label' => 'Description de la publication',
+        ]);
+        $this->addField([
+            'name' => 'mobileLVersion',
+            'type' => FluidbookDevelopmentVersion::class,
+            'label' => __('Version logicielle'),
+            'default' => 'dev',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'mobileVersion',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'html5-desktop' => 'Version HTML5 recommandée (vecteurs sur desktop)',
+                'html5' => 'Version HTML5 vecteurs',
+                'html5-images' => 'Version HTML5 en images',
+            ],
+            'label' => __('Version mobile'),
+            'default' => 'html5-desktop',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'title',
+            'type' => 'Text',
+            'label' => __('Titre de la publication'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'url_link',
+            'type' => 'Text',
+            'label' => __('URL du lien de retour au site'),
+            'default' => 'https://',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'signature',
+            'type' => FluidbookSignature::class,
+            'label' => __('Signature'),
+            'default' => '1',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_assets',
+            'type' => 'FormSection',
+            'label' => 'Assets',
+        ]);
+        $this->addField([
+            'name' => 'assetsDir',
+            'type' => 'Integer',
+            'label' => __('Utiliser le dossier d\'assets du fluidbook'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'linksAssets',
+            'type' => 'FilesOrURL',
+            'label' => __('Charger ou remplacer des fichiers de liens'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_basicStats',
+            'type' => 'FormSection',
+            'label' => 'Statistiques',
+        ]);
+        $this->addField([
+            'name' => 'stats',
+            'type' => 'Checkbox',
+            'label' => __('Activer les statistiques Fluidbook'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'googleAnalytics',
+            'type' => 'Text',
+            'label' => __('Code Google Analytics'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'googleTagManager',
+            'type' => 'Text',
+            'label' => __('Code Google Tag Manager'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_share',
+            'type' => 'FormSection',
+            'label' => 'Fonctions de partage',
+        ]);
+        $this->addField([
+            'name' => 'share',
+            'type' => 'Checkbox',
+            'label' => __('Activer les fonctions de partage'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'email_title',
+            'type' => 'Text',
+            'label' => __('Titre de l\'email "Envoyer à un ami"'),
+            'hint' => __('Laisser vide pour utiliser la valeur par défaut'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'email_body',
+            'type' => 'Textarea',
+            'label' => __('Corps de l\'email "Envoyer à un ami"'),
+            'hint' => __('Laisser vide pour utiliser la valeur par défaut'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'facebook_title',
+            'type' => 'Text',
+            'label' => __('Titre du contenu partagé'),
+            'hint' => __('Titre proposé sur les fonction de partage (par défaut, titre de la publication)'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'facebook_description',
+            'type' => 'Textarea',
+            'label' => __('Description du contenu partagé'),
+            'hint' => __('Description proposée sur les fonctions de partage (par défaut, vide)'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'facebook_image',
+            'type' => 'FilesOrURL',
+            'label' => __('Miniature affichée'),
+            'default' => '',
+            'accept' => [
+                0 => '*.jpg',
+                1 => '*.jpeg',
+                2 => '*.png',
+            ],
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'twitter_description',
+            'type' => 'Textarea',
+            'label' => __('Contenu Partage court'),
+            'hint' => __('Contenu du partagé sur les partages courts'),
+            'default' => '%title% : %short%',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'friend',
+            'type' => 'Checkbox',
+            'label' => __('E-mail'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'facebook',
+            'type' => 'Checkbox',
+            'label' => __('Facebook'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'twitter',
+            'type' => 'Checkbox',
+            'label' => __('Twitter'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'whatsapp',
+            'type' => 'Checkbox',
+            'label' => __('WhatsApp'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'linkedin',
+            'type' => 'Checkbox',
+            'label' => __('LinkedIn'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'pinterest',
+            'type' => 'Checkbox',
+            'label' => __('Pinterest'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'customSharer',
+            'type' => 'Text',
+            'label' => __('Classe personnalisée de partage'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'friendWidth',
+            'type' => 'Integer',
+            'label' => __('Largeur du menu'),
+            'default' => 319,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'friendHeight',
+            'type' => 'Integer',
+            'label' => __('Largeur du menu'),
+            'default' => 500,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_seo',
+            'type' => 'FormSection',
+            'label' => 'Optimisation pour les moteurs de recherche',
+        ]);
+        $this->addField([
+            'name' => 'seoVersion',
+            'type' => 'Checkbox',
+            'label' => __('Générer une version pour les moteurs de recherche'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'seoRobots',
+            'type' => 'Checkbox',
+            'label' => __('Autoriser le parcours par les moteurs de recherche'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'seoDescription',
+            'type' => 'Textarea',
+            'label' => __('Meta tag Description'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'seoKeywords',
+            'type' => 'Textarea',
+            'label' => __('Meta tag Keywords'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'seoBaseURL',
+            'type' => 'Text',
+            'label' => __('URL de base'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'seoAdvanced',
+            'type' => 'FilesOrURL',
+            'label' => __('Données SEO par page'),
+            'default' => '',
+            'accept' => [
+                0 => '*.xlsx',
+            ],
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_3d_mode',
+            'type' => 'FormSection',
+            'label' => 'Options de visualisation',
+        ]);
+        $this->addField([
+            'name' => 'mobileNavigationType',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'book' => 'Normal (automatique)',
+                'landscape' => 'Normal (double page)',
+                'portrait' => 'Normal (une page)',
+                'mobilefirst' => 'Mobile first',
+                'tab' => 'Magazine tablette',
+            ],
+            'label' => __('Mode de navigation'),
+            'default' => 'book',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'mobileTransitions',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'none' => 'Aucune transition',
+                'fade' => 'Opacité',
+                'slide' => 'Glisser',
+                'flip' => 'Tourner (rigide)',
+                'flip3d' => 'Tourner (souple)',
+            ],
+            'label' => __('Transitions entre les pages'),
+            'default' => 'flip3d',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'mobileTransitionDuration',
+            'type' => 'Number',
+            'label' => __('Durée de la transition'),
+            'default' => '0.5',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'forceWhiteBackground',
+            'type' => 'Checkbox',
+            'label' => __('Ajouter un fond blanc aux pages'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'rasterizePages',
+            'type' => 'Textarea',
+            'label' => __('Ecraser les pages'),
+            'hint' => __('1-3,5 = 1,2,3,5'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'vectorPages',
+            'type' => 'Textarea',
+            'label' => __('Conserver les pages en vecteur'),
+            'hint' => __('1-3,5 = 1,2,3,5'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'visualisationMode',
+            'type' => 'SelectFromArray',
+            'options' => [
+                0 => 'Mode 3D',
+                1 => 'Mode 2D (caméra fixe et pages à plat)',
+                2 => 'Laisser le choix à l\'utilisateur (mode 3D par défaut)',
+                3 => 'Laisser le choix à l\'utilisateur (mode 2D par défaut)',
+            ],
+            'label' => __('Mode de visualisation 3D'),
+            'default' => '3',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'antialiasReading',
+            'type' => 'Checkbox',
+            'label' => __('Amélioration de la lisibilité en mode 2D'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'correctCenter',
+            'type' => 'Checkbox',
+            'label' => __('Corriger les lignes blanches entre les pages'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'pagesBaseAngle',
+            'type' => 'Integer',
+            'label' => __('Angle de base entre les pages'),
+            'hint' => __('0 : Publication à plat
+2 : Valeur par défaut'),
+            'default' => '2',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'centerBook',
+            'type' => 'Checkbox',
+            'label' => __('Centrer la publication sur les couvertures'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'extraXSpace',
+            'type' => 'Integer',
+            'label' => __('Marge supplémentaire horizontale'),
+            'default' => '0',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'mobileExtraXSpace',
+            'type' => 'Integer',
+            'label' => __('Marge supplémentaire horizontale'),
+            'default' => '0',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'extraYSpace',
+            'type' => 'Integer',
+            'label' => __('Marge supplémentaire verticale'),
+            'default' => '0',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'viewMode',
+            'type' => 'SelectFromArray',
+            'options' => [
+                0 => 'Classique',
+                1 => 'Diaporama',
+            ],
+            'label' => __('Mode de visualisation (beta)'),
+            'default' => '0',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'dynamicBackgroundColor',
+            'type' => 'Textarea',
+            'label' => __('Couleur de fond dynamique'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'imageFormat',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'jpg' => 'JPEG',
+                'png' => 'PNG',
+            ],
+            'label' => __('Format des images'),
+            'default' => 'jpg',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'maxResolution',
+            'type' => 'SelectFromArray',
+            'options' => [
+                300 => '300dpi',
+                150 => '150dpi',
+            ],
+            'label' => __('Résolution maximale des pages'),
+            'default' => 300,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_performances',
+            'type' => 'FormSection',
+            'label' => 'Performances',
+        ]);
+        $this->addField([
+            'name' => 'rasterizeOnSafari',
+            'type' => 'Checkbox',
+            'label' => __('Ecraser les pages pour Safari (Mac OS)'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_general',
+            'type' => 'FormSection',
+            'label' => 'Fonctionnalités générales',
+        ]);
+        $this->addField([
+            'name' => 'tooltipTimer',
+            'type' => 'Number',
+            'label' => __('Temps maximum d\'apparition des infos-bulles (en secondes)'),
+            'default' => 3,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'mobilePlugins',
+            'type' => 'Textarea',
+            'label' => __('Plugin'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'preload',
+            'type' => 'Integer',
+            'label' => __('Nombre de pages à précharger'),
+            'default' => 16,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'maxPages',
+            'type' => 'Integer',
+            'label' => __('Nombre de pages maximal affiché à l\'ouverture du fluidbook (pas de limite = 0)'),
+            'default' => 0,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'pages',
+            'type' => 'Integer',
+            'label' => __('Nombre de pages'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'width',
+            'type' => 'Number',
+            'label' => __('Largeur'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'height',
+            'type' => 'Number',
+            'label' => __('Hauteur'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_menu',
+            'type' => 'FormSection',
+            'label' => 'Menu',
+        ]);
+        $this->addField([
+            'name' => 'navOrder',
+            'type' => 'Textarea',
+            'label' => __('Ordre des icônes dans la nav horizontale'),
+            'default' => 'index, chapters, search, print, friend, bookmark, pdf, notes, archives, basket, fullscreen, sound, 3d, extra, extra1, extra2, extra3, extra4, extra5, help, lang',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'navOrderH',
+            'type' => 'Textarea',
+            'label' => __('Ordre des icônes dans le menu burger (Si différente)'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'mobileNavScale',
+            'type' => 'Integer',
+            'label' => __('Taille du menu (en %)'),
+            'default' => '100',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'menuBreakpoint',
+            'type' => 'Text',
+            'label' => __('Breakpoint burger menu'),
+            'hint' => __('Par défaut 1023px'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'afterSearchDisplayForHTML',
+            'type' => 'Checkbox',
+            'label' => __('Afficher l\'image après le moteur de recherche sur la version HTML5'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'navExtraImage',
+            'type' => 'FilesOrURL',
+            'label' => __('Image pour navigation'),
+            'default' => '',
+            'accept' => [
+                0 => '*.svg',
+                1 => '*.jpg',
+                2 => '*.png',
+                3 => '*.gif',
+            ],
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'navExtraImageMobile',
+            'type' => 'FilesOrURL',
+            'label' => __('Image pour mobile'),
+            'default' => '',
+            'accept' => [
+                0 => '*.svg',
+                1 => '*.jpg',
+                2 => '*.png',
+                3 => '*.gif',
+            ],
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'navExtraLink',
+            'type' => 'Text',
+            'label' => __('URL'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'navExtraTooltip',
+            'type' => 'Text',
+            'label' => __('Infobulle ou label'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'navExtraIcon1',
+            'type' => 'FilesOrURL',
+            'label' => __('Icône supplémentaire 1'),
+            'default' => '',
+            'accept' => [
+                0 => '*.svg',
+                1 => '*.jpg',
+                2 => '*.png',
+                3 => '*.gif',
+            ],
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'navExtraType1',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'icon' => 'Icône + Label',
+                'image' => 'Image',
+            ],
+            'label' => __('Type'),
+            'default' => 'icon',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'navExtraLink1',
+            'type' => 'Text',
+            'label' => __('URL 1'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'navExtraVisibility1',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'horizontal' => 'Navigation horizontale',
+                'burger' => 'Navigation burger',
+                'both' => 'Navigations horizontale et burger',
+            ],
+            'label' => __('Visible 1'),
+            'default' => 'both',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'navExtraIcon2',
+            'type' => 'FilesOrURL',
+            'label' => __('Icône supplémentaire 2'),
+            'default' => '',
+            'accept' => [
+                0 => '*.svg',
+                1 => '*.jpg',
+                2 => '*.png',
+                3 => '*.gif',
+            ],
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'navExtraType2',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'icon' => 'Icône + Label',
+                'image' => 'Image',
+            ],
+            'label' => __('Type'),
+            'default' => 'icon',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'navExtraLink2',
+            'type' => 'Text',
+            'label' => __('URL 2'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'navExtraVisibility2',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'horizontal' => 'Navigation horizontale',
+                'burger' => 'Navigation burger',
+                'both' => 'Navigations horizontale et burger',
+            ],
+            'label' => __('Visible 2'),
+            'default' => 'both',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'navExtraIcon3',
+            'type' => 'FilesOrURL',
+            'label' => __('Icône supplémentaire 3'),
+            'default' => '',
+            'accept' => [
+                0 => '*.svg',
+                1 => '*.jpg',
+                2 => '*.png',
+                3 => '*.gif',
+            ],
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'navExtraType3',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'icon' => 'Icône + Label',
+                'image' => 'Image',
+            ],
+            'label' => __('Type'),
+            'default' => 'icon',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'navExtraLink3',
+            'type' => 'Text',
+            'label' => __('URL 3'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'navExtraVisibility3',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'horizontal' => 'Navigation horizontale',
+                'burger' => 'Navigation burger',
+                'both' => 'Navigations horizontale et burger',
+            ],
+            'label' => __('Visible 3'),
+            'default' => 'both',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'navExtraIcon4',
+            'type' => 'FilesOrURL',
+            'label' => __('Icône supplémentaire 4'),
+            'default' => '',
+            'accept' => [
+                0 => '*.svg',
+                1 => '*.jpg',
+                2 => '*.png',
+                3 => '*.gif',
+            ],
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'navExtraType4',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'icon' => 'Icône + Label',
+                'image' => 'Image',
+            ],
+            'label' => __('Type'),
+            'default' => 'icon',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'navExtraLink4',
+            'type' => 'Text',
+            'label' => __('URL 4'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'navExtraVisibility4',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'horizontal' => 'Navigation horizontale',
+                'burger' => 'Navigation burger',
+                'both' => 'Navigations horizontale et burger',
+            ],
+            'label' => __('Visible 4'),
+            'default' => 'both',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'navExtraIcon5',
+            'type' => 'FilesOrURL',
+            'label' => __('Icône supplémentaire 5'),
+            'default' => '',
+            'accept' => [
+                0 => '*.svg',
+                1 => '*.jpg',
+                2 => '*.png',
+                3 => '*.gif',
+            ],
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'navExtraType5',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'icon' => 'Icône + Label',
+                'image' => 'Image',
+            ],
+            'label' => __('Type'),
+            'default' => 'icon',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'navExtraLink5',
+            'type' => 'Text',
+            'label' => __('URL 5'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'navExtraVisibility5',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'horizontal' => 'Navigation horizontale',
+                'burger' => 'Navigation burger',
+                'both' => 'Navigations horizontale et burger',
+            ],
+            'label' => __('Visible 5'),
+            'default' => 'both',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'mobileBottomNav',
+            'type' => 'Text',
+            'label' => __('Barre de boutons en bas'),
+            'hint' => __('Identifiants des boutons séparés par des virgules'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_landing',
+            'type' => 'FormSection',
+            'label' => 'Custom Landing Page',
+        ]);
+        $this->addField([
+            'name' => 'landingPage',
+            'type' => 'FilesOrURL',
+            'label' => __('Landing Page content'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_fs',
+            'type' => 'FormSection',
+            'label' => 'Plein écran',
+        ]);
+        $this->addField([
+            'name' => 'fullscreen',
+            'type' => 'Checkbox',
+            'label' => __('Activer le mode plein-écran'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'fullscreenAuto',
+            'type' => 'Checkbox',
+            'label' => __('Lancer la publication en mode plein écran (lorsque possible)'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_bookmark',
+            'type' => 'FormSection',
+            'label' => 'Marques-pages',
+        ]);
+        $this->addField([
+            'name' => 'bookmark',
+            'type' => 'Checkbox',
+            'label' => __('Activer les marques-pages'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'bookmarkSendEnable',
+            'type' => 'Checkbox',
+            'label' => __('Activer l\'envoi des marques-pages par e-mail'),
+            'default' => 'true',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'bookmark_email_title',
+            'type' => 'Text',
+            'label' => __('Titre de l\'email "Envoyer à un ami"'),
+            'hint' => __('Laisser vide pour utiliser la valeur par défaut'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'bookmark_email_body',
+            'type' => 'Textarea',
+            'label' => __('Corps de l\'email "Envoyer à un ami"'),
+            'hint' => __('Laisser vide pour utiliser la valeur par défaut'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'bookmarkCornerSize',
+            'type' => 'Integer',
+            'label' => __('Taille des marques-pages'),
+            'hint' => __('Taille relative à la largeur de la page'),
+            'default' => 8,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'bookmarkOffset',
+            'type' => 'Integer',
+            'label' => __('Décaler de x pixels vers l\'intérieur'),
+            'default' => 0,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'bookmarkPermanentIcon',
+            'type' => 'Checkbox',
+            'label' => __('Afficher l\'icône en permanance'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'bookmarkBlinkOnPageChange',
+            'type' => 'Checkbox',
+            'label' => __('Faire clignoter le marque page à l\'apparition de la page'),
+            'default' => 'false',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'bookmarkDisablePages',
+            'type' => 'Text',
+            'label' => __('Désactiver les marques-pages sur ces pages'),
+            'hint' => __('1-3,5 = 1,2,3,5'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'bookmarkUsePDF',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'pages' => 'PDF des pages',
+                'download' => 'PDF de remplacement',
+                'thumbnails' => 'PDF des miniatures',
+            ],
+            'label' => __('PDF à utiliser pour l\'envoi ou le téléchargement de pages marquées'),
+            'default' => 'pages',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_help',
+            'type' => 'FormSection',
+            'label' => 'Aide',
+        ]);
+        $this->addField([
+            'name' => 'help',
+            'type' => 'Checkbox',
+            'label' => __('Activer l\'aide'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'helpStartup',
+            'type' => 'Checkbox',
+            'label' => __('Afficher l\'aide au démarrage'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'helpStartupTime',
+            'type' => 'Integer',
+            'label' => __('Temps d\'affichage en secondes'),
+            'default' => 15,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'helpBookmarks',
+            'type' => 'Checkbox',
+            'label' => __('Améliorer l\'aide des marques-pages'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'helpArrowTooltip',
+            'type' => 'Text',
+            'label' => __('Bulle affichée au niveau de la flèche de droite'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'landscapeWarning',
+            'type' => 'Textarea',
+            'label' => __('Avertissement affiché sur mobile au chargement de la publication'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_index',
+            'type' => 'FormSection',
+            'label' => 'Vue d\'index (vignettes)',
+        ]);
+        $this->addField([
+            'name' => 'indexAutoScroll',
+            'type' => 'Checkbox',
+            'label' => __('Activer le scroll automatique'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'pdfThumbnails',
+            'type' => 'FilesOrURL',
+            'label' => __('PDF utilisé pour générer les miniatures'),
+            'default' => '',
+            'accept' => [
+                0 => '*.pdf',
+            ],
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'indexMessage',
+            'type' => 'Textarea',
+            'label' => __('Message en haut'),
+            'hint' => __('Message en haut de la vue index'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_print',
+            'type' => 'FormSection',
+            'label' => 'Impression',
+        ]);
+        $this->addField([
+            'name' => 'print',
+            'type' => 'Checkbox',
+            'label' => __('Activer l\'impression'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'printFullBrochure',
+            'type' => 'Checkbox',
+            'label' => __('Autoriser l\'impression de la brochure complète'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'printPageRange',
+            'type' => 'Checkbox',
+            'label' => __('Activer l\'option pour imprimer une plage de pages'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_search',
+            'type' => 'FormSection',
+            'label' => 'Moteur de recherche',
+        ]);
+        $this->addField([
+            'name' => 'search',
+            'type' => 'Checkbox',
+            'label' => __('Activer le moteur de recherche'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'ignoreWordLimit',
+            'type' => 'Integer',
+            'label' => __('Ignorer les mots de moins de X caractères'),
+            'default' => 3,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'ignoreSearch',
+            'type' => 'Textarea',
+            'label' => __('Mots à ignorer'),
+            'hint' => __('Liste des mots à ignorer séparés par des virgules'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'ignoreSearchSeparators',
+            'type' => 'Text',
+            'label' => __('Caractères à ne pas considérer comme un séparateur de mot'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'searchWordSelectionAlgorithm',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'begins' => 'mot commençant par la requête',
+                'exact' => 'mot correspondant exactement à la requête',
+                'contains' => 'mot contenant la requête',
+                'expression' => 'expression exacte',
+            ],
+            'label' => __('Algorithme de sélection des occurences'),
+            'default' => 'begins',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'searchPageSelectionAlgorithm',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'AND' => 'les double-pages qui contiennent tous les mots recherchés (ET logique)',
+                'OR' => 'les double-page qui contiennent un des mots recherché (OU logique)',
+            ],
+            'label' => __('Algorithme de sélection des résultats'),
+            'default' => 'AND',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'highlightResults',
+            'type' => 'Checkbox',
+            'label' => __('Surligner les résultats'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'highlightAllOccurences',
+            'type' => 'Checkbox',
+            'label' => __('Surligner toutes les occurences'),
+            'hint' => __('Même sur les pages non considérées comme un résultat'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'searchShowNoResultsPages',
+            'type' => 'Checkbox',
+            'label' => __('Afficher les pages sans résultats'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'textExtraction',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'pdfbox' => 'PDFBox',
+                'poppler' => 'Poppler',
+                'fluidbook' => 'Fluidbook (expérimentation basée sur PDFBox)',
+            ],
+            'label' => __('Méthode d\'extraction des textes'),
+            'default' => 'pdfbox',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_sound',
+            'type' => 'FormSection',
+            'label' => 'Effets sonores',
+        ]);
+        $this->addField([
+            'name' => 'soundTheme',
+            'type' => 'SelectFromArray',
+            'options' => [
+                '' => 'Pas de son',
+                'classic' => 'Classique',
+                'heavy' => 'Papier épais',
+                'light' => 'Papier fin',
+                'silent' => 'Silencieux',
+                'woosh' => 'Woosh',
+            ],
+            'label' => __('Thème sonore'),
+            'default' => 'classic',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'soundOn',
+            'type' => 'Checkbox',
+            'label' => __('Activer les effets sonores à l\'ouverture'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'ambientSound',
+            'type' => 'FilesOrURL',
+            'label' => __('Ambiance sonore'),
+            'default' => '',
+            'accept' => [
+                0 => '*.mp3',
+                1 => '*.wav',
+            ],
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'ambientSoundVolume',
+            'type' => 'Integer',
+            'label' => __('Volume de l\'ambiance sonore'),
+            'min' => 0,
+            'max' => 100,
+            'default' => 50,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_pdf',
+            'type' => 'FormSection',
+            'label' => 'Fonction de téléchargement',
+        ]);
+        $this->addField([
+            'name' => 'pdf',
+            'type' => 'Checkbox',
+            'label' => __('Activer les fonctions de téléchargement'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'pdfName',
+            'type' => 'Text',
+            'label' => __('Nom du fichier PDF'),
+            'default' => 'document.pdf',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'pdfReplace',
+            'type' => 'FilesOrURL',
+            'label' => __('PDF de remplacement'),
+            'default' => '',
+            'accept' => [
+                0 => '*.pdf',
+            ],
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'pdfCompress',
+            'type' => 'Checkbox',
+            'label' => __('Compression du fichier PDF'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'pdfComplex',
+            'type' => 'Checkbox',
+            'label' => __('Téchargement de PDF avancé'),
+            'hint' => __('Permet à l\'utilisateur de sélectionner les pages qu\'il souhaite télécharger'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'offlineExport',
+            'type' => 'Checkbox',
+            'label' => __('Téléchargement des versions offline'),
+            'hint' => __('Valable si le téléchargement avancé est activé'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_zoom',
+            'type' => 'FormSection',
+            'label' => 'Zoom',
+        ]);
+        $this->addField([
+            'name' => 'zoomWheel',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'disabled' => 'Désactivé',
+                'wheel' => 'Molette',
+                'ctrlwheel' => 'Ctrl+Molette',
+            ],
+            'label' => __('Zoom molette'),
+            'default' => 'wheel',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'zoom',
+            'type' => 'Integer',
+            'label' => __('Zoom par défaut (atteint au clic)'),
+            'default' => 200,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'zoomw',
+            'type' => 'Integer',
+            'label' => __('Zoom maximal (atteint à l\'aide de la molette)'),
+            'default' => 300,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_stats',
+            'type' => 'FormSection',
+            'label' => 'Statistiques avancées',
+        ]);
+        $this->addField([
+            'name' => 'stats_score',
+            'type' => 'Checkbox',
+            'label' => __('Afficher les scores dans les rapports'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'stats_exclude_ip',
+            'type' => 'Textarea',
+            'label' => __('Exclure les IP suivantes des statistiques'),
+            'hint' => __('Indiquer une adresse ip de la forme www.xxx.yyy.zzz par ligne'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'relay_url_params',
+            'type' => 'Text',
+            'label' => __('Relayer les paramètres d\'url dans les liens sortants'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'gtag_additional_code',
+            'type' => 'Code',
+            'label' => __('Code additionnel Google Tag Manager'),
+            'hint'=>__('Code HTML'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'googleAnalyticsCustom',
+            'type' => 'Code',
+            'label' => __('Code Stats personnalisé (placé avant fermeture de head)'),
+            'hint'=>__('Code HTML'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'statsCustom',
+            'type' => 'Code',
+            'label' => __('Code Stats personnalisé (placé avant fermeture du body)'),
+            'hint'=>__('Code HTML'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'xiti',
+            'type' => 'Textarea',
+            'label' => __('Code XiTi global'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'xiti_page',
+            'type' => 'Textarea',
+            'label' => __('Modèle code xiti (pour tags relatifs aux pages)'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'tagcommander_id',
+            'type' => 'Text',
+            'label' => __('Tag commander ID'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'tagcommander_prod',
+            'type' => 'Checkbox',
+            'label' => __('Production'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'tagcommander_plan',
+            'type' => 'FilesOrURL',
+            'label' => __('Plan de taggage "Tag commander"'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'tagcommander_default_vars',
+            'type' => 'Textarea',
+            'label' => __('Variables par défaut'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_sommaire',
+            'type' => 'FormSection',
+            'label' => 'Sommaire',
+        ]);
+        $this->addField([
+            'name' => 'chaptersCaptionDisplay',
+            'type' => 'Checkbox',
+            'label' => __('Afficher le titre "Sommaire" dans la popup'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'chaptersFontSize',
+            'type' => 'Integer',
+            'label' => __('Taille du texte des élements du sommaire'),
+            'hint' => __('En % par rapport à la taille normale'),
+            'min' => 50,
+            'max' => 120,
+            'default' => 100,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'displayChaptersIcon',
+            'type' => 'Checkbox',
+            'label' => __('Affiche l\'icône du sommaire'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'displayChaptersPopup',
+            'type' => 'Checkbox',
+            'label' => __('Always display chapters in a popup'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'displayChaptersAtStart',
+            'type' => 'Checkbox',
+            'label' => __('Afficher le sommaire au chargement de la publication'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'chaptersPage',
+            'type' => 'Text',
+            'label' => __('Faire pointer le sommaire sur la page'),
+            'hint' => __('Laisser vide pour utiliser le sommaire classique'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'chaptersPosition',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'center' => 'Centré',
+                'chaptersIcon' => 'Aligné sur l\'icône',
+            ],
+            'label' => __('Position du sommaire'),
+            'default' => 'center',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'chaptersLevelLimit',
+            'type' => 'Integer',
+            'label' => __('Limiter à x niveaux'),
+            'default' => 5,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'chaptersCascade',
+            'type' => 'Checkbox',
+            'label' => __('Sommaire en cascade'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'chaptersPagesNumber',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'virtual' => 'Virtuelle',
+                'physical' => 'Physique',
+            ],
+            'label' => __('Numérotation du sommaire'),
+            'default' => 'virtual',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'chaptersColMaxWidth',
+            'type' => 'Integer',
+            'label' => __('Largeur max d\'une colonne'),
+            'default' => 300,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'chaptersColumns',
+            'type' => 'Integer',
+            'label' => __('Afficher le sommaire sur x colonne(s)'),
+            'default' => 1,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'displayChaptersLine',
+            'type' => 'Checkbox',
+            'label' => __('Affiche une ligne entre le label et le numéro de page'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'externalChaptersHTML',
+            'type' => 'FilesOrURL',
+            'label' => __('Sommaire personnalisé'),
+            'hint' => __('Laisser vide pour utiliser le sommaire classique'),
+            'default' => '',
+            'accept' => [
+                0 => '*.zip',
+            ],
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'mobileChaptersStyle',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'classic' => 'Classique',
+                'ina' => 'INA',
+            ],
+            'label' => __('Style des chapitres'),
+            'default' => 'classic',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_tabs',
+            'type' => 'FormSection',
+            'label' => 'Onglets',
+        ]);
+        $this->addField([
+            'name' => 'tabsHTML5',
+            'type' => 'FilesOrURL',
+            'label' => __('Fichier d\'onglets (SVG, ZIP)'),
+            'hint' => __('Charger un zip rendra les options ci-dessous inopérantes'),
+            'default' => '',
+            'accept' => [
+                0 => '*.svg',
+                1 => '*.zip',
+            ],
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'tabsPages',
+            'type' => 'Text',
+            'label' => __('Pages des onglets'),
+            'hint' => __('Numéros de pages séparas par une virgule'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'tabsSections',
+            'type' => 'Text',
+            'label' => __('Sections des onglets'),
+            'hint' => __('Numéros de pages séparés par une virgule'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'tabsPagesNumbers',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'virtual' => 'Virtuelle',
+                'physical' => 'Physique',
+            ],
+            'label' => __('Numérotation utilisée'),
+            'default' => 'virtual',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'tabsSide',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'left' => 'Gauche',
+                'right' => 'Droite',
+            ],
+            'label' => __('Position des onglets'),
+            'default' => 'right',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'tabsMargin',
+            'type' => 'Number',
+            'label' => __('Marge des onglets'),
+            'hint' => __('Une marge négative = les onglets passent sous la publication'),
+            'default' => '-10',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'tabsHideOnPages',
+            'type' => 'Text',
+            'label' => __('Cacher les onglets sur les pages'),
+            'hint' => __('1-3,5 = 1,2,3,5'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'tabsHideOnCover',
+            'type' => 'Checkbox',
+            'label' => __('Cacher les onglets sur la couverture'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'tabsHideOnLastPage',
+            'type' => 'Checkbox',
+            'label' => __('Cacher les onglets sur la dernière page'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'tabsHideEdges',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'none' => 'Aucune',
+                'left' => 'Gauche',
+                'right' => 'Droite',
+                'both' => 'Les deux',
+            ],
+            'label' => __('Masquer les bordures du fluidbook'),
+            'default' => 'right',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'tabsPriority',
+            'type' => 'Integer',
+            'label' => __('Priorité des onglets sur les contenus (%)'),
+            'hint' => __('La valeur indique la réduction permise de la taille de la publication.'),
+            'min' => 0,
+            'max' => 100,
+            'default' => 15,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'tabsLinkWidth',
+            'type' => 'Number',
+            'label' => __('Largeur des onglets'),
+            'hint' => __('Largeur réservée pour les onglets et largeur de la zone cliquable des liens'),
+            'default' => '30',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'tabsHideWhenOverlapingArrows',
+            'type' => 'Checkbox',
+            'label' => __('Cacher les onglets lorsqu\'ils passent sous les flèches de navigation'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'tabsHideOnPortrait',
+            'type' => 'Checkbox',
+            'label' => __('Cacher les onglets lorsque le fluidbook est en mode portrait'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'tabsHideOnZoom',
+            'type' => 'Checkbox',
+            'label' => __('Cacher les onglets lorsque le fluidbook est zoomé'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_links',
+            'type' => 'FormSection',
+            'label' => 'Liens',
+        ]);
+        $this->addField([
+            'name' => 'permanentLinks',
+            'type' => 'Checkbox',
+            'label' => __('Liens visibles en permanence'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'mobileLinksRevealAnim',
+            'type' => 'Checkbox',
+            'label' => __('Animer les liens après un changement de page'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'linkBlinkTime',
+            'type' => 'Number',
+            'label' => __('Temps d\'apparition du lien à l\'ouverture de la page (en secondes)'),
+            'default' => 1.0,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'linkBlinkRepetition',
+            'type' => 'Integer',
+            'label' => __('Nombre de clignotement lors de l\'apparition des liens'),
+            'default' => 1,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'openLinkAtStartup',
+            'type' => 'Text',
+            'label' => __('Déclencher un lien à l\'ouverture du fluidbook'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'customLinkClass',
+            'type' => 'Text',
+            'label' => __('Classe pour les liens personnalisés'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'ignoreLinksTypes',
+            'type' => 'Text',
+            'label' => __('Ignorer les liens de type'),
+            'hint' => __('Liste des numéros séparés par des virgules'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'mobileIgnoreBackgroundLinks',
+            'type' => 'Checkbox',
+            'label' => __('Ignorer les liens de background'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'linkTooltipManager',
+            'type' => 'Text',
+            'label' => __('Gestionnaire des info-bulles'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'linkCornerSize',
+            'type' => 'Integer',
+            'label' => __('Taille des liens de coins de page'),
+            'hint' => __('Pourcentage de la largeur de la page'),
+            'default' => '10',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'linkTooltipMaxWidth',
+            'type' => 'Integer',
+            'label' => __('Largeur max des infobulles des liens de type "infobulle"'),
+            'default' => '140',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'linkTracker',
+            'type' => 'Text',
+            'label' => __('Tracking des liens'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'linkTrackerRegexp',
+            'type' => 'Text',
+            'label' => __('Tracking des liens applicables aux liens du domaine'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'linkFilePrefix',
+            'type' => 'Text',
+            'label' => __('Préfixer les liens de téléchargement'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_multimedia',
+            'type' => 'FormSection',
+            'label' => 'Multimedia',
+        ]);
+        $this->addField([
+            'name' => 'textPopupStylesheet',
+            'type' => 'FilesOrURL',
+            'label' => __('Feuille de style des popups de texte'),
+            'default' => '',
+            'accept' => [
+                0 => '*.css',
+            ],
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'textPopupWidth',
+            'type' => 'Integer',
+            'label' => __('Largeur optimale des popups'),
+            'default' => '600',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'iframePopupMaxWidth',
+            'type' => 'Integer',
+            'label' => __('Largeur maximale des popups iframe'),
+            'default' => '0',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'OAMChromeFactor',
+            'type' => 'Number',
+            'label' => __('Facteur OAM Chrome'),
+            'default' => '1',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'OAMIEFactor',
+            'type' => 'Number',
+            'label' => __('Facteur OAM IE11'),
+            'default' => '1',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_slideshow',
+            'type' => 'FormSection',
+            'label' => 'Slideshow',
+        ]);
+        $this->addField([
+            'name' => 'inlineSlideshowLibrary',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'dummy' => 'Simple (défaut)',
+                'vacheron' => 'Vacheron',
+            ],
+            'label' => __('Librarie utilisée pour les slideshow intégrés aux pages'),
+            'default' => 'dummy',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'popupSlideshowLibrary',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'splide' => 'Splide (défaut)',
+                'vacheron' => 'Vacheron',
+            ],
+            'label' => __('Librarie utilisée pour les slideshow popup'),
+            'default' => 'splide',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'slideshowCaptionSize',
+            'type' => 'Text',
+            'label' => __('Taille de police de la légende du diaporama'),
+            'hint' => __('Laisser vide pour utiliser la valeur par défaut'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'inlineSlideshowTransitionDuration',
+            'type' => 'Number',
+            'label' => __('Durée de la transition des diaporamas intégrés aux pages(s)'),
+            'default' => 0.75,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'inlineSlideshowDuration',
+            'type' => 'Number',
+            'label' => __('Temps d\'attente des diaporamas intégrés aux pages (s)'),
+            'default' => 7,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_videos',
+            'type' => 'FormSection',
+            'label' => 'Vidéos',
+        ]);
+        $this->addField([
+            'name' => 'mobileVideosPath',
+            'type' => 'Text',
+            'label' => __('Chemin vers les vidéos'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'brightcovePlayerId',
+            'type' => 'Text',
+            'label' => __('Brightcove Player Id'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'brightcovePlayerSecret',
+            'type' => 'Text',
+            'label' => __('Brightcove Player Secret'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'bigPlayImage',
+            'type' => 'FilesOrURL',
+            'label' => __('Image pour le bouton "Big Play"'),
+            'default' => '',
+            'accept' => [
+                0 => '*.svg',
+                1 => '*.jpg',
+                2 => '*.png',
+                3 => '*.gif',
+            ],
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_audio',
+            'type' => 'FormSection',
+            'label' => 'Lecteur audio',
+        ]);
+        $this->addField([
+            'name' => 'audioPlayerTheme',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'native' => 'Apparence native du navigateur',
+                'invisible' => 'Zone cliquable invisible',
+                'redbull' => 'Red Bull',
+            ],
+            'label' => __('Apparence du lecteur audio'),
+            'default' => 'native',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_downloadportion',
+            'type' => 'FormSection',
+            'label' => 'Téléchargement d\'extraits',
+        ]);
+        $this->addField([
+            'name' => 'downloadPortionPDF',
+            'type' => 'FilesOrURL',
+            'label' => __('PDF utilisé pour le téléchargement des extraits'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'downloadPortionZoom',
+            'type' => 'Integer',
+            'label' => __('Zoom des images extraites'),
+            'default' => 8,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_product_zoom',
+            'type' => 'FormSection',
+            'label' => 'Zooms produits',
+        ]);
+        $this->addField([
+            'name' => 'product_zoom_references',
+            'type' => 'FilesOrURL',
+            'label' => __('Références produits'),
+            'hint' => __('Fichier contenant les références produits'),
+            'default' => '',
+            'accept' => [
+                0 => '*.xml',
+                1 => '*.xlsx',
+            ],
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'product_zoom_buttons_order',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'right' => 'De la droite vers la gauche',
+                'left' => 'De la gauche vers la droite',
+            ],
+            'label' => __('Order des boutons'),
+            'default' => 'right',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'product_zoom_label_1',
+            'type' => 'Text',
+            'label' => __('Label du bouton 1'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'product_zoom_tooltip_1',
+            'type' => 'Text',
+            'label' => __('Label de l\'infobulle 1'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'product_zoom_icon_1',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'none' => 'Aucune',
+                'nav-share' => 'Partage',
+                'icon-site' => 'Ecran',
+                'nav-download' => 'Télécharger',
+                'icon-pdf' => 'PDF',
+                'icon-video' => 'Video',
+                'icon-link' => 'Lien',
+                'icon-code' => 'Code',
+                'icon-qr' => 'QR code',
+                'icon-article' => 'Article',
+                'nav-basket' => 'Panier (sac)',
+                'nav-cart-caddie' => 'Panier (caddie)',
+                'nav-cart-wishlist' => 'Panier (wishlist)',
+                'icon-360' => '360°',
+                'icon-photo' => 'Photo',
+            ],
+            'label' => __('Icône du bouton 1'),
+            'default' => 'click',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'product_zoom_action_1',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'disabled' => 'Désactiver',
+                'link' => 'Ouvrir un lien',
+                'iframe' => 'Ouvrir en iframe',
+                'copy' => 'Copier un contenu',
+                'video' => 'Web Vidéo',
+                'videofile' => 'Vidéo',
+                'videogif' => 'Vidéo (boucle, sans contrôle)',
+                'image' => 'Voir une image',
+                'addtocart' => 'Ajouter au panier',
+            ],
+            'label' => __('Action du bouton 1'),
+            'default' => 'disabled',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'product_zoom_label_2',
+            'type' => 'Text',
+            'label' => __('Label du bouton 2'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'product_zoom_tooltip_2',
+            'type' => 'Text',
+            'label' => __('Label de l\'infobulle 2'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'product_zoom_icon_2',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'none' => 'Aucune',
+                'nav-share' => 'Partage',
+                'icon-site' => 'Ecran',
+                'nav-download' => 'Télécharger',
+                'icon-pdf' => 'PDF',
+                'icon-video' => 'Video',
+                'icon-link' => 'Lien',
+                'icon-code' => 'Code',
+                'icon-qr' => 'QR code',
+                'icon-article' => 'Article',
+                'nav-basket' => 'Panier (sac)',
+                'nav-cart-caddie' => 'Panier (caddie)',
+                'nav-cart-wishlist' => 'Panier (wishlist)',
+                'icon-360' => '360°',
+                'icon-photo' => 'Photo',
+            ],
+            'label' => __('Icône du bouton 2'),
+            'default' => 'click',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'product_zoom_action_2',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'disabled' => 'Désactiver',
+                'link' => 'Ouvrir un lien',
+                'iframe' => 'Ouvrir en iframe',
+                'copy' => 'Copier un contenu',
+                'video' => 'Web Vidéo',
+                'videofile' => 'Vidéo',
+                'videogif' => 'Vidéo (boucle, sans contrôle)',
+                'image' => 'Voir une image',
+                'addtocart' => 'Ajouter au panier',
+            ],
+            'label' => __('Action du bouton 2'),
+            'default' => 'disabled',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'product_zoom_label_3',
+            'type' => 'Text',
+            'label' => __('Label du bouton 3'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'product_zoom_tooltip_3',
+            'type' => 'Text',
+            'label' => __('Label de l\'infobulle 3'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'product_zoom_icon_3',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'none' => 'Aucune',
+                'nav-share' => 'Partage',
+                'icon-site' => 'Ecran',
+                'nav-download' => 'Télécharger',
+                'icon-pdf' => 'PDF',
+                'icon-video' => 'Video',
+                'icon-link' => 'Lien',
+                'icon-code' => 'Code',
+                'icon-qr' => 'QR code',
+                'icon-article' => 'Article',
+                'nav-basket' => 'Panier (sac)',
+                'nav-cart-caddie' => 'Panier (caddie)',
+                'nav-cart-wishlist' => 'Panier (wishlist)',
+                'icon-360' => '360°',
+                'icon-photo' => 'Photo',
+            ],
+            'label' => __('Icône du bouton 3'),
+            'default' => 'click',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'product_zoom_action_3',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'disabled' => 'Désactiver',
+                'link' => 'Ouvrir un lien',
+                'iframe' => 'Ouvrir en iframe',
+                'copy' => 'Copier un contenu',
+                'video' => 'Web Vidéo',
+                'videofile' => 'Vidéo',
+                'videogif' => 'Vidéo (boucle, sans contrôle)',
+                'image' => 'Voir une image',
+                'addtocart' => 'Ajouter au panier',
+            ],
+            'label' => __('Action du bouton 3'),
+            'default' => 'disabled',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'product_share_enabled',
+            'type' => 'Checkbox',
+            'label' => __('Activer le bouton de partage'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'product_share_link',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'product' => 'Lien du produit',
+                'page' => 'Lien vers la page du fluidbook',
+            ],
+            'label' => __('Lien de partage'),
+            'default' => 'product',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'product_email_title',
+            'type' => 'Text',
+            'label' => __('Titre de l\'email "Envoyer à un ami"'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'product_email_body',
+            'type' => 'Textarea',
+            'label' => __('Corps de l\'email "Envoyer à un ami"'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'product_tweet',
+            'type' => 'Textarea',
+            'label' => __('Contenu Partage court'),
+            'hint' => __('Contenu du partagé sur les partages courts'),
+            'default' => '%short%',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_accessibility',
+            'type' => 'FormSection',
+            'label' => 'Accessibilité',
+        ]);
+        $this->addField([
+            'name' => 'audiodescriptionTexts',
+            'type' => 'FilesOrURL',
+            'label' => __('Contenus textuels pour l\'audiodescription ou les lecteurs d\'écran'),
+            'default' => '',
+            'accept' => [
+                0 => '*.xlsx',
+            ],
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'audiodescriptionVoice',
+            'type' => 'SelectFromArray',
+            'options' => [
+                '' => '',
+                'festival:voice_cmu_us_slt_arctic_hts' => 'Festival (en-US)',
+                'readspeaker:Sophie/en_us' => 'ReadSpeaker Sophie (en-US)',
+                'readspeaker:Marc/en_us' => 'ReadSpeaker Marc (en-US)',
+            ],
+            'label' => __('Voix pour l\'audiodescription'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_splash',
+            'type' => 'FormSection',
+            'label' => 'Ecran de chargement',
+        ]);
+        $this->addField([
+            'name' => 'splashImage',
+            'type' => 'FilesOrURL',
+            'label' => __('Image'),
+            'default' => '',
+            'accept' => [
+                0 => '*.jpg',
+                1 => '*.jpeg',
+                2 => '*.png',
+            ],
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'splashURL',
+            'type' => 'Text',
+            'label' => __('URL'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'splashTarget',
+            'type' => 'SelectFromArray',
+            'options' => [
+                '_self' => 'Dans la fenêtre courrante',
+                '_blank' => 'Dans un nouvel onglet',
+            ],
+            'label' => __('Ouvrir le lien'),
+            'default' => '_self',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'splashMinimalTime',
+            'type' => 'Number',
+            'label' => __('Temps minimal d\'affichage'),
+            'default' => '1',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_notes',
+            'type' => 'FormSection',
+            'label' => 'Notes',
+        ]);
+        $this->addField([
+            'name' => 'notes',
+            'type' => 'Checkbox',
+            'label' => __('Activer les notes'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_articles',
+            'type' => 'FormSection',
+            'label' => 'Articles',
+        ]);
+        $this->addField([
+            'name' => 'articlesFile',
+            'type' => 'FilesOrURL',
+            'label' => __('Articles'),
+            'default' => '',
+            'accept' => [
+                0 => '*.xml',
+            ],
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'articlesImages',
+            'type' => 'FilesOrURL',
+            'label' => __('Images des articles'),
+            'hint' => __('Les noms des fichiers doivent être les même que ceux des balises <image> du XML'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'articlesShare',
+            'type' => 'Checkbox',
+            'label' => __('Activer le partage'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'articlesStyle',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'default' => 'Défaut',
+                'atlantic' => 'Atlantic',
+                'harmonie-mutuelle' => 'Harmonie Mutuelle',
+                'business-immo' => 'Business Immo',
+            ],
+            'label' => __('Style'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'articlesFont',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'OpenSans' => 'Open Sans (défaut)',
+                'Montserrat' => 'Montserrat',
+                'Arial' => 'Arial, Helvetica, sans-serif (police système)',
+                'sans-serif' => 'Police système sans-serif',
+            ],
+            'label' => __('Police des articles'),
+            'default' => 'OpenSans',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_archives',
+            'type' => 'FormSection',
+            'label' => 'Archives',
+        ]);
+        $this->addField([
+            'name' => 'externalArchives',
+            'type' => 'FilesOrURL',
+            'label' => __('Archives'),
+            'default' => '',
+            'accept' => [
+                0 => '*.jpg',
+                1 => '*.jpeg',
+                2 => '*.png',
+            ],
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'archivesLabel',
+            'type' => 'Text',
+            'label' => __('Label'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_form',
+            'type' => 'FormSection',
+            'label' => 'Formulaire',
+        ]);
+        $this->addField([
+            'name' => 'form',
+            'type' => 'SelectFromArray',
+            'options' => [
+                '' => 'Aucun',
+                'bulle' => 'Bulle Groupe',
+                'bourbon' => 'Bourbon / Suggestions',
+                'avery' => 'Avery',
+            ],
+            'label' => __('Formulaire'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_privacy',
+            'type' => 'FormSection',
+            'label' => 'Respect de la vie privée',
+        ]);
+        $this->addField([
+            'name' => 'cookieConsent',
+            'type' => 'Checkbox',
+            'label' => __('Message cookie'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'cookieConsentMessage',
+            'type' => 'Textarea',
+            'label' => __('Texte du consentement'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'cookieConsentAutoclose',
+            'type' => 'Integer',
+            'label' => __('Masquer automatiquement après x secondes'),
+            'default' => '0',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_basket',
+            'type' => 'FormSection',
+            'label' => 'Panier',
+        ]);
+        $this->addField([
+            'name' => 'basket',
+            'type' => 'Checkbox',
+            'label' => __('Panier activé'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'cartIcon',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'nav-basket' => 'Sac',
+                'nav-cart-caddie' => 'Caddie',
+                'nav-cart-wishlist' => 'Wishlist',
+            ],
+            'label' => __('Icône'),
+            'default' => 'nav-basket',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'basketManager',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'com.fluidbook.player.basket.BasketManager' => 'Classic',
+                'com.fluidbook.player.basket.custom.grdf.GrdfBasketManager' => 'Grdf',
+                'com.fluidbook.player.basket.custom.grdf.grdf2013.GrdfBasketManager2013' => 'Grdf 2013',
+                'com.fluidbook.player.basket.custom.grdf.grdf2015.GrdfBasketManager2015' => 'Grdf 2015',
+                'com.fluidbook.player.basket.custom.essilor.EssilorBasketManager' => 'Essilor',
+                'com.fluidbook.player.basket.custom.essilorrecap.EssilorRecapBasketManager' => 'Essilor Recap',
+                'com.fluidbook.player.basket.custom.wesco.WescoBasketManager' => 'Wesco Ventes',
+                'com.fluidbook.player.basket.custom.atlantic.AtlanticDownloadBasketManager' => 'Atlantic Download',
+                'Remarkable' => 'Remarkable',
+                'Mopec' => 'Mopec',
+                'Puma' => 'Puma',
+                'MIF' => 'MIF',
+                'Flexipan' => 'Flexipan',
+                'ZoomProductLink' => 'Zoom + lien produit (déprécié, utiliser la fonctionnalité "Zoom produits")',
+                'JoueclubWishlist' => 'Wishlist Jouéclub',
+                'GrandVision' => 'GrandVision',
+            ],
+            'label' => __('Manager de panier'),
+            'default' => 'classic',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'basketReferences',
+            'type' => 'FilesOrURL',
+            'label' => __('Références produits'),
+            'hint' => __('Fichier contenant les références produits'),
+            'default' => '',
+            'accept' => [
+                0 => '*.xml',
+                1 => '*.xlsx',
+            ],
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'basketImages',
+            'type' => 'FilesOrURL',
+            'label' => __('Images des produits'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'basketPDFBackground',
+            'type' => 'FilesOrURL',
+            'label' => __('Fond du PDF (bon de commande)'),
+            'hint' => __('Fond du bon de commande'),
+            'default' => '',
+            'accept' => [
+                0 => '*.ai',
+                1 => '*.eps',
+            ],
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_offline',
+            'type' => 'FormSection',
+            'label' => 'Version offline',
+        ]);
+        $this->addField([
+            'name' => 'offlineTitle',
+            'type' => 'Text',
+            'label' => __('Titre de l\'application'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'offlineLink',
+            'type' => 'Text',
+            'label' => __('URL du Fluidbook'),
+            'hint' => __('URL du fluidbook utilisée pour la version Offline (CD-ROM, clé USB, Exécutables)'),
+            'default' => 'http://',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'offlineEnableAdvancedPrinting',
+            'type' => 'Checkbox',
+            'label' => __('Activer le menu d\'impression avancée'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_mobilefirst',
+            'type' => 'FormSection',
+            'label' => 'Mobile first',
+        ]);
+        $this->addField([
+            'name' => 'mobilefirstFluidbookId',
+            'type' => 'Text',
+            'label' => __('Identifiant du fluidbook "Mobile first"'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'mobilefirstBreakpoint',
+            'type' => 'Text',
+            'label' => __('Breakpoint du passage à la version "Mobile first" (en pixels)'),
+            'default' => '640',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_phonegap',
+            'type' => 'FormSection',
+            'label' => 'Applications mobile',
+        ]);
+        $this->addField([
+            'name' => 'phonegapId',
+            'type' => 'Text',
+            'label' => __('Identifiant de l\'identifiant'),
+            'hint' => __('De la forme com.fluidbook.phonegap.xxxxx'),
+            'default' => 'com.fluidbook.phonegap.$id',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'phonegapVersion',
+            'type' => 'Text',
+            'label' => __('Version de l\'application'),
+            'hint' => __('De la forme 1.2.3'),
+            'default' => '1.0.0',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'phonegapPlugins',
+            'type' => 'Textarea',
+            'label' => __('Plugins Phonegap'),
+            'default' => 'ChildBrowser',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'appScreenshots',
+            'type' => 'Textarea',
+            'label' => __('Générer les screenshots'),
+            'hint' => __('Une ligne par vue à générer de la forme X,Y (X : P(ortrait) ou L(andscape), Y : numéro de page ou vue (1, index))'),
+            'default' => 'P,0
+L,2
+L,index',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_secure',
+            'type' => 'FormSection',
+            'label' => 'Sécurisation',
+        ]);
+        $this->addField([
+            'name' => 'secureURL',
+            'type' => 'Text',
+            'label' => __('URL de sécurisation'),
+            'hint' => __('URL intérrogé pour vérifier si le visiteur à les droits pour consulter la publication'),
+            'default' => 'http://',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'secureURLRedirect',
+            'type' => 'Text',
+            'label' => __('Redirection'),
+            'hint' => __('Si l\'authentification échoue, redirection vers cette adresse'),
+            'default' => 'http://',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'secureClientSidePassword',
+            'type' => 'FilesOrURL',
+            'label' => __('Sécurisation par mot de passe côté client'),
+            'default' => '',
+            'accept' => [
+                0 => '*.html',
+            ],
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'secureClientSidePasswordCredentials',
+            'type' => 'Textarea',
+            'label' => __('Utilisateurs / mots de passe'),
+            'hint' => __('Format user:password par ligne'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'preventRightClick',
+            'type' => 'Checkbox',
+            'label' => __('Essayer d\'empêcher le clic droit'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'restrictPrintDownload',
+            'type' => 'Text',
+            'label' => __('Paramètre de l\'url permettant de désactiver la restriction (non vide pour activer les restrictions)'),
+            'hint' => __('Ne pas indiquer le ?'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'restrictPrint',
+            'type' => 'Checkbox',
+            'label' => __('Restreindre l\'impression'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'restrictDownload',
+            'type' => 'Checkbox',
+            'label' => __('Restreindre le téléchargement du pdf'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'restrictSendBookmark',
+            'type' => 'Checkbox',
+            'label' => __('Restreindre l\'envoi de marques-pages'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_multibrochure',
+            'type' => 'FormSection',
+            'label' => 'Multibrochure',
+        ]);
+        $this->addField([
+            'name' => 'home',
+            'type' => 'Text',
+            'label' => __('Accueil de l\'interface multibrochure'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'country',
+            'type' => 'Text',
+            'label' => __('Pays de la brochure'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'multilangDisplay',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'lang' => 'Langue',
+                'lang_country' => 'Langue (Pays)',
+                'country_lang' => 'Pays (Langue)',
+            ],
+            'label' => __('Affichage'),
+            'default' => 'lang',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'multilang',
+            'type' => 'Textarea',
+            'label' => __('Langues'),
+            'hint' => __('Code langue,Code pays,URL'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_plv',
+            'type' => 'FormSection',
+            'label' => 'Mode PLV',
+        ]);
+        $this->addField([
+            'name' => 'plv',
+            'type' => 'Checkbox',
+            'label' => __('Activer le mode PLV'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'plvTimer',
+            'type' => 'Integer',
+            'label' => __('Temps'),
+            'min' => 1,
+            'max' => 60,
+            'default' => 5,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'plvMode',
+            'type' => 'SelectFromArray',
+            'options' => [
+                'back' => 'Remonter vers la première page',
+                'first' => 'Recommencer à la première page',
+            ],
+            'label' => __('Arrivé à la dernière page'),
+            'default' => 'first',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_theme',
+            'type' => 'FormSection',
+            'label' => 'Options du thème',
+        ]);
+        $this->addField([
+            'name' => 'themeEnableAfterSearch',
+            'type' => 'Checkbox',
+            'label' => __('Afficher l\'image supplémentaire à droite du moteur de recherche'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_package',
+            'type' => 'FormSection',
+            'label' => 'Option d\'export',
+        ]);
+        $this->addField([
+            'name' => 'htmlExtension',
+            'type' => 'Text',
+            'label' => __('Extension des fichiers html'),
+            'hint' => __('Ex : php, htm, html, phtml, asp, aspx'),
+            'default' => 'html',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'actualHtmlExtension',
+            'type' => 'Text',
+            'label' => __('Extension des fichiers html réellement appliquée au fluidbook'),
+            'hint' => __('Ex : php, htm, html, phtml, asp'),
+            'default' => 'html',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'htmlPrepend',
+            'type' => 'Code',
+            'label' => __('Code à insérer en tête des fichiers'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'baseUrl',
+            'type' => 'Text',
+            'label' => __('Base de l\'url'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'forceCompileOnDownload',
+            'type' => 'Checkbox',
+            'label' => __('Forcer la compilation lors du téléchargement'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_demo',
+            'type' => 'FormSection',
+            'label' => 'Lien de démo',
+        ]);
+        $this->addField([
+            'name' => 'disableDemo',
+            'type' => 'Checkbox',
+            'label' => __('Désactiver le lien de démo'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'redirectDemo',
+            'type' => 'Text',
+            'label' => __('Rediriger le lien de démo vers'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_scorm',
+            'type' => 'FormSection',
+            'label' => 'SCORM',
+        ]);
+        $this->addField([
+            'name' => 'scorm_enable',
+            'type' => 'Checkbox',
+            'label' => __('Activer SCORM'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'scorm_version',
+            'type' => 'SelectFromArray',
+            'options' => [
+                '1.2' => 'SCORM 1.2',
+                2004 => 'SCORM 2004 4th edition',
+            ],
+            'label' => __('Version du standard SCORM'),
+            'default' => '1.2',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'scorm_id',
+            'type' => 'Text',
+            'label' => __('Identifiant SCORM'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'scorm_org',
+            'type' => 'Text',
+            'label' => __('Organisation SCORM'),
+            'default' => 'ACME-ORG-1350650111249',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'scorm_title',
+            'type' => 'Text',
+            'label' => __('Titre SCORM'),
+            'hint' => __('Laisser vide pour utiliser le titre de la publication'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'scorm_variables',
+            'type' => 'Textarea',
+            'label' => __('Variables SCORM'),
+            'hint' => __('Laisser vide pour utiliser le titre de la publication'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'scorm_complete_on_exit',
+            'type' => 'Checkbox',
+            'label' => __('Marquer le cours comme "Complete" à la fermeture de la fenêtre'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'scorm_complete_on_last_page',
+            'type' => 'Checkbox',
+            'label' => __('Marquer le cours comme "Complete" lorsque le visiteur atteint la dernière page'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'scorm_pass_on_complete',
+            'type' => 'Checkbox',
+            'label' => __('Marquer le cours comme Pass lorsqu\'il est terminé (SCORM 2004 seulement)'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'scorm_score100_on_complete',
+            'type' => 'Checkbox',
+            'label' => __('Marquer le cours comme réussi à 100% lorsqu\'il est terminé'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'scorm_quizdata',
+            'type' => 'FilesOrURL',
+            'label' => __('Données de quiz'),
+            'default' => '',
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'scorm_score',
+            'type' => 'Checkbox',
+            'label' => __('Activer le support du score'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'scorm_score_min',
+            'type' => 'Integer',
+            'label' => __('Score minimal pour marquer le contenu comme réussi'),
+            'min' => 0,
+            'max' => 100,
+            'default' => 50,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'scorm_quiz_as_questionnaire',
+            'type' => 'Checkbox',
+            'label' => __('Traiter les quiz comme des questionnaires (toutes les réponses sont considérées comme correctes)'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'type' => 'FormSeparator',
+        ]);
+        $this->addField([
+            'name' => 'scorm_force_attempts',
+            'type' => 'Checkbox',
+            'label' => __('Forcer la création d\'un "attempt" à chaque ouverture'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'scorm_commit_immediately',
+            'type' => 'Checkbox',
+            'label' => __('Envoyer les données immédiatement au LMS (Peut provoquer des ralentissement sur certains LMS)'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'section_downloads',
+            'type' => 'FormSection',
+            'label' => 'Versions disponibles au téléchargement',
+        ]);
+        $this->addField([
+            'name' => 'download_online',
+            'type' => 'Checkbox',
+            'label' => __('Version online - Version par défaut'),
+            'default' => true,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'download_sharepoint',
+            'type' => 'Checkbox',
+            'label' => __('Version Sharepoint - Version par défaut'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'download_scorm',
+            'type' => 'Checkbox',
+            'label' => __('Version SCORM - Version par défaut'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'download_win-inss-html',
+            'type' => 'Checkbox',
+            'label' => __('Version offline - Executable Windows'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'download_win-ins-html',
+            'type' => 'Checkbox',
+            'label' => __('Version offline - Installeur Auto-executable Windows'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'download_win-exe-html',
+            'type' => 'Checkbox',
+            'label' => __('Version offline - ZIP Windows'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'download_mac-exe-html',
+            'type' => 'Checkbox',
+            'label' => __('Version offline - Exécutable Mac OS X'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'download_win-cd-html',
+            'type' => 'Checkbox',
+            'label' => __('Version offline - CD-ROM / Clé USB'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+        $this->addField([
+            'name' => 'download_win-html',
+            'type' => 'Checkbox',
+            'label' => __('Version offline - HTML (Non adaptée à l\'installation sur un serveur web)'),
+            'default' => false,
+            'translatable' => false,
+        ]);
+
     }
 }
index 0a5dfc239ac3da5a3b0bdaace525667dbc2cca52..38f15d79fe9985ab482869998e46ff1c9aee7716 100644 (file)
@@ -10,6 +10,7 @@ use App\Jobs\UpdateWS2ThemeTable;
 use Cubist\Backpack\Magic\Fields\Color;
 use Cubist\Backpack\Magic\Fields\Files;
 use Cubist\Backpack\Magic\Models\CubistMagicAbstractModel;
+use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Support\Facades\DB;
 use Spatie\MediaLibrary\MediaCollections\Models\Media;
 
@@ -29,6 +30,14 @@ class FluidbookTheme extends CubistMagicAbstractModel
 
     public static $updateWS2ViewOnChange = true;
 
+    public static function addOwnerClause(Builder $builder)
+    {
+        if (backpack_user()->hasPermissionTo('fluidbook-quote:admin')) {
+            return;
+        }
+        $builder->where('owner', backpack_user()->id);
+    }
+
     public function setFields()
     {
         parent::setFields();
@@ -43,7 +52,6 @@ class FluidbookTheme extends CubistMagicAbstractModel
         );
 
         $this->addField('name', 'Text', __('Nom'), ['column' => true]);
-
         $this->addField('preview', 'NoValue', __('Preview'), ['column' => true, 'column_type' => 'model_function', 'column_function_name' => 'getPreviewImage', 'column_limit' => -1]);
 
         $this->setSettingsFields();
index e5ddcfc029f53619bc405773deda38ec8d4d1d6a..e403e14adc067483a9bcbfff49802808ee2c9c11 100644 (file)
     </li>
 @endcanany
 
-@canany(['fluidbook-quote:read','signature:read'])
+@canany(['fluidbook-quote:read','signature:read','fluidbook-theme:read','fluibook-translate:write'])
     <li class='nav-item nav-dropdown open'><a class='nav-link nav-dropdown-toggle' href='#'><i
                 class="nav-icon la"><img src="/images/icons/icon-fluidbook.svg"/></i>{{__('Fluidbook')}}</a>
         <ul class='nav-dropdown-items'>
+            @can('fluidbook-theme:read')
+                <li class="nav-item"><a class="nav-link" href="{{ backpack_url('fluidbook-publication') }}"><i
+                            class="la la-book-reader nav-icon"></i> {{__('Publications')}}</a></li>
+            @endcan
             @can('fluidbook-theme:read')
                 <li class="nav-item"><a class="nav-link" href="{{ backpack_url('fluidbook-theme') }}"><i
                             class="la la-palette nav-icon"></i> {{__('Thèmes')}}</a></li>
index fe35de9a244869ec7e545d288f6830557b3f391d..285dffe3f56ac4f17fb7f1201cd22c8f5d962f41 100644 (file)
                 @if(!empty($saveAction['options']))
             </div>
         @endif
-        @foreach($crud->entry->getEditActions() as $view)
-            @include($view)
-        @endforeach
+        @if($crud->entry)
+            @foreach($crud->entry->getEditActions() as $view)
+                @include($view)
+            @endforeach
+        @endif
 
         @if(!$crud->hasOperationSetting('showCancelButton') || $crud->getOperationSetting('showCancelButton') == true)
             <a href="{{ $crud->hasAccess('list') ? url($crud->route) : url()->previous() }}"