]> _ Git - cubeextranet.git/commitdiff
wip #4211 @2
authorvincent@cubedesigners.com <vincent@cubedesigners.com@f5622870-0f3c-0410-866d-9cb505b7a8ef>
Tue, 17 May 2022 16:19:03 +0000 (16:19 +0000)
committervincent@cubedesigners.com <vincent@cubedesigners.com@f5622870-0f3c-0410-866d-9cb505b7a8ef>
Tue, 17 May 2022 16:19:03 +0000 (16:19 +0000)
inc/ws/Controlleur/class.ws.maintenance.php
inc/ws/Metier/_class.ws.book.parametres.php [new file with mode: 0644]
inc/ws/Metier/class.ws.book.parametres.php
inc/ws/Metier/class.ws.document.php
inc/ws/Metier/class.ws.parametres.php

index 78c39b16991d8091dc0ef8c87881d1f60dbba943..2abbd3cab439858d39c24b8d984615cc895ff119 100644 (file)
@@ -1507,7 +1507,7 @@ class wsMaintenance
     public static function bookParams()
     {
         $parent = new wsBook();
-        $t = new wsBookParametres($parent);
+        $t = new wsBookParametres($parent,'export');
         $t->generateV3Form(false);
     }
 
@@ -1582,6 +1582,8 @@ class wsMaintenance
 
         shuffle($pages);
 
+        echo wsDocument::isFarmUser()?'farm':'not farm'."\n";
+
         foreach ($pages as $page) {
             foreach ($files as $file) {
                 echo ($force ? '!' : '') . $page . "-" . implode(',' . $file) . "\n";
@@ -1605,7 +1607,7 @@ class wsMaintenance
         $count = $book->parametres->pages;
         $allPages = range(1, $count);
 
-        $coef=wsDocument::isFarmUser()?2:0.5;
+        $coef=wsDocument::isFarmUser()?2:0.25;
         $it = round($coef * max(4, min(12, ceil($count / 20))));
 
         shuffle($allPages);
@@ -1613,9 +1615,9 @@ class wsMaintenance
         $portions = array_chunk($allPages, ceil($count / $it));
 
         foreach ($portions as $p) {
-            $url = 'https://workshop.fluidbook.com/maintenance/processPage/' . $book_id . '/' . implode(',', $p) . '/' . ($force ? '1' : '0');
+            $url = 'https://workshop.fluidbook.com/maintenance/processPage/' . $book_id . '/' . implode(',', $p) . '/' . ($force ? '1' : '0').'?PHPSESSID=' . session_id();
             echo $url . "\n";
-            self::timeoutRequest($url . '?PHPSESSID=' . session_id(), 1);
+            self::timeoutRequest($url, 1);
         }
     }
 
diff --git a/inc/ws/Metier/_class.ws.book.parametres.php b/inc/ws/Metier/_class.ws.book.parametres.php
new file mode 100644 (file)
index 0000000..4c68b4e
--- /dev/null
@@ -0,0 +1,854 @@
+<?php
+
+class wsBookParametres extends wsParametres
+{
+    public static $fonts = [
+        'Open Sans (défaut)' => 'OpenSans', 'Montserrat' => 'Montserrat', 'Arial, Helvetica, sans-serif (police système)' => 'Arial', 'Police système sans-serif' => 'sans-serif'];
+
+    /**
+     * wsBookParametres::initFields()
+     *
+     * @return
+     */
+    protected function initFields()
+    {
+        parent::initFields();
+        //             if (is_null($this->parent)) {
+        //                     return;
+        //             }
+
+        // .
+        $swfFilter = ['name' => __('Animation SWF') . ' (*.swf)', 'extensions' => '*.swf'];
+        $multimediaFilter = ['name' => __('Archive ZIP') . ' (*.zip)', 'extensions' => '*.zip'];
+        $pdfFilter = ['name' => __('Document PDF') . ' (*.pdf)', 'extensions' => '*.pdf'];
+
+        $basketFilter = ['name' => __('Liste de produits'), 'extensions' => ' (*.xml, *.xlsx)'];
+        $articlesFilter = ['name' => __('Liste d\'articles') . ' (*.xml)', 'extensions' => '*.xml'];
+        $htmlFilter = ['name' => __('Fichier HTML') . ' (*.html)', 'extensions' => '*.html'];
+        $imageFilter = ['name' => __('Images') . ' (*.jpg, *.png)', 'extensions' => '*.jpg;*.jpeg;*.png'];
+        $epsFilter = ['name' => __('Fichier vectoriel') . ' (*.ai, *.eps)', 'extensions' => '*.ai;*.eps'];
+        $svgFilter = ['name' => __('Fichier SVG') . ' (*.svg)', 'extensions' => '*.svg'];
+        $tabsFilter = ['name' => __('Fichier onglets') . ' (*.svg, *.zip)', 'extensions' => '*.svg;*.zip'];
+        $imageExtraFilter = ['name' => __('Images') . ' (*.svg, *.jpg, *.png, *.gif)', 'extensions' => '*.svg;*.jpg;*.png;*.gif'];
+        $soundFilter = ['name' => __('Fichier sonore') . ' (*.mp3, *.wav)', 'extensions' => '*.mp3;*.wav'];
+        $seoFilter = ['name' => __('Fichier Excel') . ' (.xlsx)', 'extensions' => '*.xlsx'];
+        $cssFilter = ['name' => __('Feuille de style') . ' (.css)', 'extensions' => '*.css'];
+
+
+        $target = [__("Dans la fenêtre courrante") => '_self',
+            __('Dans un nouvel onglet') => '_blank'];
+
+        $branches = array('master : git (stable)' => 'stable',
+            'master : local (dev)' => 'dev');
+        $gitbranches = json_decode(file_get_contents(WS_CACHE . '/activebranches'));
+        foreach ($gitbranches as $b) {
+            if ($b == 'master') {
+                continue;
+            }
+            $branches[$b . ' : git'] = $b . '|git';
+            $branches[$b . ' : local'] = $b . '|local';
+        }
+        $extraVisibility = [
+            __('Navigation horizontale') => 'horizontal',
+            __('Navigation burger') => 'burger',
+            __('Navigations horizontale et burger') => 'both'];
+
+        $extraType = [
+            __('Icône + Label') => 'icon',
+            __('Image') => 'image'];
+
+        $pagesNumbers = array(__('Virtuelle') => 'virtual',
+            __('Physique') => 'physical');
+
+        $this->fields['mobileLVersion'] = array('type' => 'combo', 'default' => 'stable', 'editable' => true,
+            'label' => __('Version logicielle'), 'grade' => 1,
+            'datas' => $branches
+        );
+        $this->fields['mobileVersion'] = array('type' => 'combo', 'default' => 'html5-desktop', 'editable' => true, 'label' => __('Version mobile'), 'grade' => 3,
+            'datas' => array(__('Rediriger vers le PDF') => 'pdf',
+                __('Version HTML5 recommandée (vecteurs sur desktop)') => 'html5-desktop',
+                __('Version HTML5 vecteurs') => 'html5',
+                __("Version HTML5 en images") => 'html5-images')
+        );
+
+        // Deprecated
+        $this->fields['version'] = array('type' => 'combo', 'default' => '2', 'editable' => true, 'label' => __('Version'), 'datas' => array('1' => '1', '2' => '2'), 'grade' => 3);
+        $this->fields['email_editable'] = array('type' => 'boolean', 'default' => true, 'editable' => false, 'label' => __("Permettre au lecteur de modifier le corps de l'email"));
+        $this->fields['askAcknowledge'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => __("Demander au destinataire un accusé de réception"), 'grade' => 3);
+        $this->fields['sendasfluidbook'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => __("Envoyer le mail comme Fluidbook"), 'grade' => 3, 'hint' => __("L'expéditeur apparaîtra en reply-to"));
+        $this->fields['email_mailto'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => __("Envoyer le mail via le client mail du visiteur (mailto:)"), 'grade' => 3);
+        $this->fields['googleplus'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => __('Google +'));
+        $this->fields['viadeo'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => __('Viadeo'));
+        $this->fields['customSharer'] = array('type' => 'text', 'default' => '', 'editable' => false, 'label' => __("Classe personnalisée de partage"), 'grade' => 5);
+        $this->fields['friendWidth'] = array('type' => 'integer', 'default' => 319, 'editable' => false, 'label' => __('Largeur du menu'), 'grade' => 5);
+        $this->fields['friendHeight'] = array('type' => 'integer', 'default' => 500, 'editable' => false, 'label' => __('Largeur du menu'), 'grade' => 5);
+        $this->fields['visualisationMode'] = array('type' => 'combo', 'default' => '3', 'editable' => false, 'label' => __("Mode de visualisation 3D"),
+            'datas' => array(__('Mode 3D') => '0',
+                __('Mode 2D (caméra fixe et pages à plat)') => '1',
+                __("Laisser le choix à l'utilisateur (mode 3D par défaut)") => '2',
+                __("Laisser le choix à l'utilisateur (mode 2D par défaut)") => '3'));
+        $this->fields['antialiasReading'] = array('type' => 'boolean', 'default' => true, 'editable' => false, 'label' => __("Amélioration de la lisibilité en mode 2D"));
+        $this->fields['pagesBaseAngle'] = array('type' => 'integer', 'default' => 2, 'editable' => false, 'label' => __('Angle de base entre les pages'), 'grade' => 3,
+            'hint' => __("0 : Publication à plat") . "\n" . __('2 : Valeur par défaut'));
+        $this->fields['preload'] = array('type' => 'integer', 'default' => 16, 'editable' => false, 'label' => __('Nombre de pages à précharger'), 'grade' => 3);
+        $this->fields['tooltipTimer'] = array('type' => 'float', 'default' => 3, "editable" => true, 'label' => __("Temps maximum d'apparition des infos-bulles (en secondes)"));
+        $this->fields['indexAutoScroll'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => __('Activer le scroll automatique'));
+        $this->fields['printCoverWithMarks'] = array('type' => 'boolean', 'default' => true, 'editable' => false, 'label' => __("Imprimer les couvertures avec les pages marquées"), 'grade' => 3);
+        $this->fields['ambientSound'] = array('type' => 'freefile', 'default' => '', 'editable' => false,
+            'label' => __('Ambiance sonore'), 'grade' => 3, 'fileFilter' => $soundFilter);
+        $this->fields['ambientSoundVolume'] = array('type' => 'integer', 'default' => 50, 'editable' => false,
+            'label' => __("Volume de l'ambiance sonore"),
+            'min' => 0, 'max' => 100);
+        $this->fields['offlineExport'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => __('Téléchargement des versions offline'), "hint" => __('Valable si le téléchargement avancé est activé'), 'grade' => 3);
+        $this->fields['zoomMode'] = array('type' => 'combo', 'default' => '0', 'editable' => false, 'label' => __("Mode de zoom"), 'grade' => 3,
+            'datas' => array(__('Normal') => '0',
+                __('Une page') => '1',
+                __('Zoom désactivé') => '2'));
+        $this->fields['displayChaptersLine'] = array('type' => 'boolean', 'default' => true, 'editable' => false, 'label' => __("Affiche une ligne entre le label et le numéro de page"), 'grade' => 5);
+        $this->fields['fullExternalChapters'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => __("Sommaire totalement personnalisé"), 'grade' => 3, 'hint' => __('Supprime la flèche de fermeture, titre prédéfini et couleur de fond'));
+        $this->fields['externalChapters'] = array('type' => 'freefile', 'default' => '', 'editable' => true,
+            'label' => __('Sommaire personnalisé'), 'grade' => 3, 'fileFilter' => $swfFilter, 'hint' => __('Laisser vide pour utiliser le sommaire classique'));
+        $this->fields['chaptersPosition'] = array('type' => 'combo', 'default' => 'center', 'editable' => false, 'label' => __("Position du sommaire"),
+            'datas' => array(__('Centré') => 'center',
+                __("Aligné sur l'icône") => 'chaptersIcon'));
+        $this->fields['permanentLinks'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => __('Liens visibles en permanence'), 'grade' => 3);
+        $this->fields['linkTooltipManager'] = array('type' => 'text', 'default' => '', 'editable' => false, 'label' => __("Gestionnaire des info-bulles"), 'grade' => 5);
+        $this->fields['linkMultimediaPerformanceMode'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => __('Mode perfomance pour les liens multimédia'), 'grade' => 5);
+        $this->fields['linkMultimediaQuality'] = array('type' => 'float', 'default' => 1.0, 'editable' => false, 'label' => __('Qualité de rendu des animations'), 'grade' => 5);
+        $this->fields['linkCornerSize'] = array('type' => 'integer', 'default' => 10, 'editable' => false, 'label' => __('Taille des liens de coins de page'), 'hint' => __("Pourcentage de la largeur de la page"));
+        $this->fields['videoReset'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => __('Réinitialiser les vidéos après la lecture'), 'grade' => 3);
+        $this->fields['videoBigPlay'] = array('type' => 'boolean', 'default' => true, 'editable' => false, 'label' => __('Afficher le gros bouton Play'), 'grade' => 3);
+        $this->fields['alwaysHTML5'] = array('type' => 'boolean', 'default' => true, 'editable' => false, 'label' => __('Toujours utiliser la version HTML5'), 'grade' => 1);
+        $this->fields['html5priority'] = array('type' => 'combo', 'default' => 'true', 'editable' => false, 'label' => __("Rediriger vers la version HTML5"), 'grade' => 1,
+            'datas' => array(__('Si l\'utilisateur a un appareil tactile') => 'false',
+                __('Si flash n\'est pas installé') => 'notinstalled',
+                __("Si flash n'est pas pas installé ou bloqué") => 'true'));
+        $this->fields['flashBlockedWait'] = array('type' => 'float', 'default' => 1.5, 'editable' => false, 'label' => __("Temps d'attente avant de considérer flash comme bloqué"));
+        $this->fields['widget'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => __('Générer le widget'), 'grade' => 3);
+        $this->fields['widgetCover'] = array('type' => 'boolean', 'default' => true, 'editable' => false, 'label' => __('Afficher la couverture') . ')', 'grade' => 3);
+        $this->fields['widgetSize'] = array('type' => 'integer', 'default' => 200, 'editable' => false, 'label' => __('Optimiser pour une hauteur de (en pixels)'), 'grade' => 3);
+        $this->fields['widgetQuality'] = array('type' => 'integer', 'default' => 85, 'min' => 0, 'max' => 100, 'editable' => false, 'label' => __('Qualité JPEG'), 'grade' => 3);
+        $this->fields['widgetStart'] = array('type' => 'integer', 'default' => 1, 'editable' => false, 'label' => __('Page de début'), 'grade' => 3);
+        $this->fields['widgetEnd'] = array('type' => 'integer', 'default' => 8, 'editable' => false, 'label' => __('Page de fin'), 'grade' => 3);
+//        $this->forms['widget'] = array('label' => __('Widget') . ' (' . __('Mini Fluidbook') . ')',
+//            'fieldsnames' => array('widget', 'widgetCover', 'widgetSize', 'widgetQuality', 'widgetStart', 'widgetEnd'));
+        $this->fields['extras'] = array('type' => 'textarea', 'default' => '', 'editable' => false, 'label' => __('Extras'), 'grade' => 3);
+        $this->fields['v1SWF'] = array('type' => 'freefile', 'default' => '', 'editable' => false,
+            'label' => __('Index.swf spécifique'), 'grade' => 5, 'fileFilter' => $swfFilter);
+//        $this->forms['v1'] = array('label' => __('Options spécifiques au fluidbook version 1'),
+//            'fieldsnames' => array('extras', 'v1SWF'));
+        $this->fields['ongletsXML'] = array('type' => 'textarea', 'default' => '', 'editable' => false, 'label' => __('XML de configuration des onglets'), 'grade' => 5);
+        $this->fields['ongletsSWF'] = array('type' => 'freefile', 'default' => '', 'editable' => false,
+            'label' => __('SWF pour onglets personnalisés'), 'grade' => 3, 'fileFilter' => $swfFilter);
+        $this->fields['tabs2DSWF'] = array('type' => 'freefile', 'default' => '', 'editable' => false,
+            'label' => __('SWF pour onglets 2D'), 'grade' => 3, 'fileFilter' => $swfFilter);
+        $this->fields['flatTabsAbsolute'] = array('type' => 'boolean', 'default' => false, "editable" => true,
+            'label' => __("Positionnement relatif à l'interface"), 'grade' => 5);
+//        $this->forms['flashtabs'] = array('label' => __('Onglets Flash'),
+//            'fieldsnames' => array('ongletsSWF', 'ongletsXML', '|', 'tabs2DSWF', 'flatTabsAbsolute'));
+        $this->fields['viewMode'] = array('type' => 'combo', 'default' => '0', 'editable' => false, 'label' => __("Mode de visualisation (beta)"),
+            'datas' => array(__('Classique') => '0',
+                __("Diaporama") => '1',
+            ),
+            'grade' => 5);
+        $this->fields['mobileServerConfig'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => __('Inclure les fichiers de configuration serveur'), 'grade' => 3);
+        $this->fields['mobileIconVector'] = array('type' => 'boolean', 'default' => true, 'editable' => false, 'label' => __('Utiliser les icônes vectorielles'));
+//        $this->forms['mobile'] = array('label' => __('Version HTML5'),
+//            'fieldsnames' => array('alwaysHTML5', 'html5priority', 'flashBlockedWait', 'mobileIconVector', 'mobileServerConfig'));
+        $this->fields['externalArchivesBack'] = array('type' => 'freefile', 'default' => '', 'editable' => true,
+            'label' => __('Image de fond'), 'grade' => 3, 'fileFilter' => $imageFilter);
+        $this->fields['archivesLink'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Lien'), 'grade' => 5);
+        $this->fields['printMode'] = array('type' => 'combo', 'default' => 'vector', 'editable' => true, 'label' => __("Mode d'impression"),
+            'datas' => array(__('Bitmap') => 'bitmap',
+                __('Vectoriel') => 'vector',
+                __('PDF') => 'pdf'));
+        /** **/
+
+
+        $this->fields['title'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __("Titre de la publication"), 'embed' => false);
+        $this->fields['url_link'] = array('type' => 'text', 'default' => 'http://', 'editable' => true, 'label' => __("URL du lien de retour au site"));
+        $this->fields['signature'] = array('type' => 'combo', 'default' => '1', 'editable' => true, 'label' => __('Signature'), 'grade' => 3, 'datas' => wsDroits::getSignatures());
+        $this->forms['important'] = array('label' => __('Description de la publication'),
+            'fieldsnames' => array('mobileLVersion', 'mobileVersion', 'title', 'url_link', 'signature'));
+        // .
+        // .
+
+        $this->fields['assetsDir'] = ['type' => 'text', 'label' => __('Utiliser le dossier d\'assets du fluidbook'), 'default' => '', 'editable' => true, 'grade' => 5];
+        $this->fields['linksAssets'] = ['type' => 'freefile', 'label' => __('Charger ou remplacer des fichiers de liens'), 'default' => '', 'editable' => true, 'grade' => 3, 'multiple' => true];
+
+        $this->forms['assets'] = [
+            'label' => __('Assets'),
+            'fieldsnames' => ['assetsDir', 'linksAssets']
+        ];
+        /** * */
+        $this->fields['stats'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Activer les statistiques Fluidbook'), 'grade' => 3);
+        $this->fields['googleAnalytics'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Code Google Analytics'), 'size' => 10);
+        $this->fields['googleTagManager'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Code Google Tag Manager'), 'size' => 10);
+        $this->forms['basicStats'] = [
+            'label' => __('Statistiques'),
+            'fieldsnames' => ['stats', 'googleAnalytics', 'googleTagManager'],
+        ];
+
+        $this->fields['email_title'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __("Titre de l'email") . ' "' . __('Envoyer à un ami') . '"', 'hint' => __('Laisser vide pour utiliser la valeur par défaut'));
+        $this->fields['email_body'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __("Corps de l'email") . ' "' . __('Envoyer à un ami') . '"', 'hint' => __('Laisser vide pour utiliser la valeur par défaut'));
+
+        $this->fields['facebook_title'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __("Titre du contenu partagé"), 'hint' => __('Titre proposé sur les fonction de partage (par défaut, titre de la publication)'));
+        $this->fields['facebook_description'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __("Description du contenu partagé"), 'grade' => 1, 'hint' => __('Description proposée sur les fonctions de partage (par défaut, vide)'));
+        $this->fields['twitter_description'] = array('type' => 'textarea', 'default' => '%title% : %short%', 'editable' => true, 'label' => __("Contenu Partage court"), 'hint' => __('Contenu du partagé sur les partages courts'));
+        $this->fields['facebook_image'] = array('type' => 'freefile', 'default' => '', 'editable' => true,
+            'label' => __('Miniature affichée'), 'fileFilter' => $imageFilter);
+
+        $this->fields['share'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Activer les fonctions de partage'));
+        $this->fields['friend'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('E-mail'));
+        $this->fields['facebook'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Facebook'));
+        $this->fields['twitter'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Twitter'));
+        $this->fields['whatsapp'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('WhatsApp'));
+        $this->fields['linkedin'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('LinkedIn'));
+        $this->fields['pinterest'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Pinterest'));
+
+        $this->forms['share'] = array('label' => __('Fonctions de partage'),
+            'fieldsnames' => array('share', '|', 'email_title', 'email_body', 'email_editable', 'askAcknowledge', 'sendasfluidbook', 'email_mailto', '|',
+                'facebook_title', 'facebook_description', 'facebook_image', 'twitter_description', '|',
+                'friend', 'facebook', 'twitter', 'whatsapp', 'linkedin', 'pinterest', '|', 'googleplus', 'viadeo', '|', 'customSharer', '|', 'friendWidth', 'friendHeight'));
+//.
+        $this->fields['seoVersion'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Générer une version pour les moteurs de recherche'));
+        $this->fields['seoRobots'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Autoriser le parcours par les moteurs de recherche'));
+        $this->fields['seoDescription'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Meta tag Description'));
+        $this->fields['seoKeywords'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Meta tag Keywords'));
+        $this->fields['seoAdvanced'] = ['type' => 'freefile', 'default' => '', 'editable' => true, 'label' => __('Données SEO par page'), 'grade' => 5, 'fileFilter' => $seoFilter];
+        $this->fields['seoBaseURL'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('URL de base'), 'grade' => 5);
+
+        $this->forms['seo'] = array('label' => __('Optimisation pour les moteurs de recherche'),
+            'fieldsnames' => array('seoVersion', 'seoRobots', 'seoDescription', "seoKeywords", '|', 'seoBaseURL', 'seoAdvanced'));
+
+        // .
+        $this->fields['pages'] = array('type' => 'integer', 'default' => 0, 'editable' => false, 'label' => __('Nombre de pages'));
+        $this->fields['width'] = array('type' => 'float', 'default' => 0, 'editable' => false, 'label' => __('Largeur'));
+        $this->fields['height'] = array('type' => 'float', 'default' => 0, 'editable' => false, 'label' => __('Hauteur'));
+        // .
+
+        $this->fields['mobileTransitions'] = array('type' => 'combo', 'default' => 'flip3d', 'editable' => true, 'label' => __('Transitions entre les pages'), 'grade' => 3,
+            'datas' => array(__('Aucune transition') => 'none',
+                __('Opacité') => 'fade',
+                __('Glisser') => 'slide',
+                __('Tourner (rigide)') => 'flip',
+                __('Tourner (souple)') => 'flip3d')
+        );
+        $this->fields['mobileTransitionDuration'] = array('type' => 'float', 'default' => 0.5, 'editable' => true, 'label' => __('Durée de la transition'));
+        $this->fields['mobileTransitionDurationSlide'] = array('type' => 'float', 'default' => 0, 'editable' => true, 'label' => __('Durée de la transition (fade, slide)'), 'hint' => __('Laisser à zéro pour utiliser la valeur générale'));
+        $this->fields['mobileNavigationType'] = array('type' => 'combo', 'default' => 'book', 'editable' => true, 'label' => __('Mode de navigation'), 'grade' => 5,
+            'datas' => array(__('Normal (automatique)') => 'book',
+                __('Normal (double page)') => 'landscape',
+                __('Normal (une page)') => 'portrait',
+                __('Mobile first') => 'mobilefirst',
+                __('Magazine tablette') => 'tab')
+        );
+        $this->fields['forceWhiteBackground'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Ajouter un fond blanc aux pages')];
+        $this->fields['rasterizePages'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Ecraser les pages'), 'hint' => '1-3,5 = 1,2,3,5', 'grade' => 1);
+
+        $this->fields['vectorPages'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Conserver les pages en vecteur'), 'hint' => '1-3,5 = 1,2,3,5', 'grade' => 1);
+        $this->fields['extraXSpace'] = array('type' => 'integer', 'default' => 0, 'editable' => true, 'label' => __('Marge supplémentaire horizontale'), 'grade' => 3);
+        $this->fields['mobileExtraXSpace'] = array('type' => 'integer', 'default' => 0, 'editable' => true, 'label' => __('Marge supplémentaire horizontale'), 'grade' => 3);
+        $this->fields['extraYSpace'] = array('type' => 'integer', 'default' => 0, 'editable' => true, 'label' => __('Marge supplémentaire verticale'), 'grade' => 3);
+        $this->fields['centerBook'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Centrer la publication sur les couvertures'), 'grade' => 2);
+        $this->fields['correctCenter'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Corriger les lignes blanches entre les pages'), 'grade' => 2);
+        $this->fields['maxResolution'] = array('type' => 'combo', 'default' => 300, 'editable' => true, 'datas' => array('300dpi' => 300, '150dpi' => 150, '125dpi' => 125, '100dpi' => 100), 'grade' => 2, 'label' => __('Résolution maximale des pages'));
+        $this->fields['JPEGQuality'] = array('type' => 'integer', 'default' => 85, 'editable' => true, 'grade' => 2, 'label' => __('Qualité JPEG'));
+        $this->fields['imageFormat'] = array('type' => 'combo', 'default' => 'jpg', 'editable' => true, 'datas' => array(/*__('Le plus léger') => 'best', */
+            'JPEG' => 'jpg', 'PNG' => 'png'), 'grade' => 2, 'label' => __('Format des images'));
+        $this->fields['svgToCanvas'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Activer le rendu svgtocanvas')];
+        $this->fields['svgToCanvasUpscale'] = ['type' => 'float', 'default' => 1, 'editable' => true, 'label' => __('Upscale de la fonction svgtocanvas')];
+        $this->fields['svgTextMethod'] = ['type' => 'combo', 'default' => 'pdftocairo', 'editable' => true, 'label' => __('Méthode d\'extraction des textes en SVG'), 'datas' => [__('Cairo') => 'pdf', __('Mu') => 'mu']];
+        $this->fields['textsThickness'] = ['type' => 'float', 'default' => 1, 'editable' => true, 'label' => __('Epaisseur des textes')];
+        $this->fields['textsThicknessPages'] = ['type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Appliquer l\'épaisseur des texte sur les pages')];
+        $this->fields['dynamicBackgroundColor'] = ['type' => 'textarea', 'default' => '', 'editable' => true, 'label' => 'Couleur de fond dynamique', 'grade' => 3];
+
+
+        $this->forms['3d_mode'] = array('label' => __('Options de visualisation'),
+            'fieldsnames' => array('mobileNavigationType', '|', 'mobileTransitions', 'mobileTransitionDuration', 'mobileTransitionDurationSlide', '|', 'forceWhiteBackground', 'rasterizePages', 'vectorPages', 'visualisationMode', 'antialiasReading', 'correctCenter', 'pagesBaseAngle', 'centerBook', '|', 'extraXSpace', 'mobileExtraXSpace', 'extraYSpace', '|', 'viewMode', '|', 'dynamicBackgroundColor', '|', 'svgToCanvas', 'svgToCanvasUpscale', 'svgTextMethod', 'textsThickness', 'textsThicknessPages', '|', 'imageFormat', 'maxResolution', 'JPEGQuality'));
+
+        $this->fields['rasterizeOnSafari'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Ecraser les pages pour Safari (Mac OS)'), 'grade' => 1);
+        $this->fields['performance3DMode'] = array('type' => 'combo', 'datas' => [__('Tester la machine') => 'auto',
+            __('Haute') => 'highPerf',
+            __('Moyenne') => 'lowPerf',
+            __('Basse') => 'veryLowPerf'], 'default' => 'auto', 'editable' => true, 'label' => __('Performance de la 3D'), 'grade' => 1);
+        $this->forms['performances'] = ['label' => __('Performances'),
+            'fieldsnames' => ['rasterizeOnSafari', 'performance3DMode']];
+
+        $this->fields['maxPages'] = array('type' => 'integer', 'default' => 0, 'editable' => true, 'label' => __("Nombre de pages maximal affiché à l'ouverture du fluidbook (pas de limite = 0)"), 'grade' => 3);
+
+        $this->fields['mobilePlugins'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Plugin'), 'grade' => 5);
+        $this->forms['general'] = array('label' => __('Fonctionnalités générales'),
+            'fieldsnames' => array('tooltipTimer', 'mobilePlugins', 'preload', 'maxPages', 'pages', 'width', 'height'));
+        //.
+        //
+        $this->fields['navOrder'] = array('type' => 'textarea', 'default' => 'index, chapters, search, print, friend, bookmark, pdf, notes, archives, basket, fullscreen, sound, 3d, extra, extra1, extra2, extra3, extra4, extra5, help, lang', 'editable' => true, 'label' => __('Ordre des icônes dans la nav'), 'grade' => 3);
+        $this->fields['navOrderH'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Ordre des icônes dans la nav') . ' (' . __('Si différente') . ')', 'grade' => 3);
+        $this->fields['menuBreakpoint'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Breakpoint burger menu'), 'hint' => 'Par défaut 1023px', 'grade' => 3);
+        $this->fields['mobileNavScale'] = array('type' => 'integer', 'default' => 100, 'editable' => true, 'label' => __('Taille du menu (en %)'), 'grade' => 3);
+        $this->forms['menu'] = array('label' => __('Menu'), 'fieldsnames' => ['navOrder', 'navOrderH', '|', 'mobileNavScale', 'menuBreakpoint', '|', 'afterSearchDisplayForHTML', '|']);
+
+        $this->fields['afterSearchDisplayForHTML'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Afficher l\'image après le moteur de recherche sur la version HTML5'), 'grade' => 1);
+        $extraNum = 5;
+        for ($i = 0; $i <= $extraNum; $i++) {
+            if ($i > 0) {
+                $j = $i;
+                $this->fields['navExtraIcon' . $j] = array('type' => 'freefile', 'default' => '', 'editable' => true, 'label' => __('Icône supplémentaire') . ' ' . $j, 'fileFilter' => $imageExtraFilter);
+                $this->fields['navExtraType' . $j] = array('type' => 'combo', 'datas' => $extraType, 'default' => 'icon', 'editable' => true, 'label' => __('Type'));
+                $this->fields['navExtraLink' . $j] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __("URL") . ' ' . $j);
+                $this->fields['navExtraVisibility' . $j] = array('type' => 'combo', 'datas' => $extraVisibility, 'default' => 'both', 'editable' => true, 'label' => __("Visible") . ' ' . $j);
+                $this->forms['menu']['fieldsnames'] = array_merge($this->forms['menu']['fieldsnames'], ['navExtraIcon' . $j, 'navExtraType' . $j, 'navExtraLink' . $j, 'navExtraVisibility' . $j, '|']);
+            } else {
+                $j = '';
+                $this->fields['navExtraImage' . $j] = array('type' => 'freefile', 'default' => '', 'editable' => true, 'label' => __('Image pour navigation'), 'fileFilter' => $imageExtraFilter);
+                $this->fields['navExtraImageMobile' . $j] = array('type' => 'freefile', 'default' => '', 'editable' => true, 'label' => __('Image pour mobile'), 'fileFilter' => $imageExtraFilter);
+                $this->fields['navExtraLink' . $j] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __("URL"));
+                $this->fields['navExtraTooltip' . $j] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __("Infobulle ou label"));
+                $this->forms['menu']['fieldsnames'] = array_merge($this->forms['menu']['fieldsnames'], ['navExtraImage' . $j, 'navExtraImageMobile' . $j, 'navExtraLink' . $j, 'navExtraTooltip' . $j, '|']);
+            }
+        }
+        $this->fields['mobileBottomNav'] = ['type' => 'text', 'default' => '', 'editable' => 'true', 'label' => __('Barre de boutons en bas'), 'hint' => __('Identifiants des boutons séparés par des virgules')];
+        $this->forms['menu']['fieldsnames'][] = 'mobileBottomNav';
+
+        $this->fields['landingPage'] = array('type' => 'freefile', 'default' => '', 'editable' => true, 'label' => __('Landing Page content'), 'grade' => 3);
+        $this->forms['landing'] = array('label' => __('Custom Landing Page'), 'fieldsnames' => array('landingPage'));
+
+        $this->fields['fullscreen'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Activer le mode plein-écran'));
+        $this->fields['fullscreenAuto'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Lancer la publication en mode plein écran (lorsque possible)'));
+        $this->forms['fs'] = array('label' => __('Plein écran'),
+            'fieldsnames' => array('fullscreen', 'fullscreenAuto'));
+
+        $this->fields['bookmark'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Activer les marques-pages'));
+        $this->fields['bookmarkView'] = array('type' => 'combo', 'datas' => [__('Réduit') => 'small', __('Complet') => 'large'], 'default' => 'small', 'editable' => true, 'label' => __('Menu des marques-pages'));
+        $this->fields['bookmarkEmpty'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __("Bouton pour effacer les marques-pages"));
+        $this->fields['bookmarkFunctionsMainMenu'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Fonctions vers menus généraux'), 'hint' => __('Les fonctions des marques pages (Télécharger, Imprimer, Envoyer) dirigent vers les menus généraux'));
+        $this->fields['bookmarkDisablePages'] = ['type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Désactiver les marques-pages sur ces pages'), 'hint' => '1-3,5 = 1,2,3,5', 'grade' => 1];
+        $this->fields['bookmarkSendEnable'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __("Activer l'envoi des marques-pages par e-mail"));
+        $this->fields['bookmarkPrint'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __("Activer l'impression des marques-pages"));
+        $this->fields['bookmark_email_title'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __("Titre de l'email") . ' "' . __('Envoyer à un ami') . '"', 'hint' => __('Laisser vide pour utiliser la valeur par défaut'));
+        $this->fields['bookmark_email_body'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __("Corps de l'email") . ' "' . __('Envoyer à un ami') . '"', 'hint' => __('Laisser vide pour utiliser la valeur par défaut'));
+        $this->fields['bookmarkCornerSize'] = array('type' => 'integer', 'default' => 8, 'editable' => true, 'label' => __("Taille des marques-pages"), 'hint' => __('Taille relative à la largeur de la page'));
+        $this->fields['bookmarkOffset'] = array('type' => 'integer', 'default' => 0, 'editable' => true, 'label' => __("Décaler de x pixels vers l'intérieur"));
+        $this->fields['bookmarkBlinkOnPageChange'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Faire clignoter le marque page à l\'apparition de la page'));
+        $this->fields['bookmarkPermanentIcon'] = ['type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Afficher l\'icône en permanance')];
+        $this->fields['bookmarkUsePDF'] = array('type' => 'combo', 'default' => 'pages', 'editable' => true, 'label' => __('PDF à utiliser pour l\'envoi ou le téléchargement de pages marquées'),
+            'datas' => [__('PDF des pages') => 'pages',
+                __('PDF de remplacement') => 'download',
+                __('PDF des miniatures') => 'thumbnails']);
+        $this->forms['bookmark'] = array('label' => __('Marques-pages'),
+            'fieldsnames' => array('bookmark', 'bookmarkView', 'bookmarkFunctionsMainMenu', 'bookmarkEmpty', '|', 'bookmarkSendEnable', 'bookmark_email_title', 'bookmark_email_body', '|', 'bookmarkPrint', '|', 'bookmarkCornerSize', 'bookmarkOffset', 'bookmarkPermanentIcon', 'bookmarkBlinkOnPageChange', '|', 'bookmarkDisablePages', 'bookmarkUsePDF'));
+
+        $this->fields['help'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __("Activer l'aide"));
+        $this->fields['helpBookmarks'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __("Améliorer l'aide des marques-pages"));
+        $this->fields['helpStartup'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __("Afficher l'aide au démarrage"));
+        $this->fields['helpStartupTime'] = array('type' => 'integer', 'default' => 15, 'editable' => true, 'label' => __("Temps d'affichage en secondes"));
+        $this->fields['helpArrowTooltip'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Bulle affichée au niveau de la flèche de droite'), 'grade' => 5);
+        $this->fields['landscapeWarning'] = ['type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Avertissement affiché sur mobile au chargement de la publication'), 'grade' => 5, 'embed' => false];
+        $this->forms['help'] = array('label' => __('Aide'),
+            'fieldsnames' => array('help', '|', 'helpStartup', 'helpStartupTime', '|', 'helpBookmarks', '|', 'helpArrowTooltip', '|', 'landscapeWarning'));
+        // .
+        //
+        $this->fields['pdfThumbnails'] = array('type' => 'freefile', 'default' => '', 'editable' => true,
+            'label' => __('PDF utilisé pour générer les miniatures'), 'grade' => 1, 'fileFilter' => $pdfFilter);
+        $this->fields['indexMessage'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __("Message en haut"), 'grade' => 1, 'hint' => __('Message en haut de la vue index'));
+
+        $this->forms['index'] = array('label' => __('Vue d\'index (vignettes)'), 'fieldsnames' => array('indexAutoScroll', 'pdfThumbnails', 'indexMessage'));
+
+        // .
+        //
+        $this->fields['print'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __("Activer l'impression"));
+        $this->fields['printFullBrochure'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __("Autoriser l'impression de la brochure complète"));
+        $this->fields['printPageRange'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __("Activer l'option pour imprimer une plage de pages"));
+
+        $this->forms['print'] = array('label' => __('Impression'),
+            'fieldsnames' => array('print', 'printFullBrochure', 'printPageRange'));
+
+
+        $this->fields['search'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Activer le moteur de recherche'));
+        $this->fields['searchFullBurger'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Afficher le burger menu complet à l\'ouverture de la recheche'));
+        $this->fields['highlightResults'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Surligner les résultats'));
+        $this->fields['highlightAllOccurences'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Surligner toutes les occurences'), 'hint' => __('Même sur les pages non considérées comme un résultat'));
+        $this->fields['ignoreSearch'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Mots à ignorer'),
+            'hint' => __('Liste des mots à ignorer séparés par des virgules'), 'grade' => 5);
+        $this->fields['ignoreSearchSeparators'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Caractères à ne pas considérer comme un séparateur de mot'));
+        $this->fields['ignoreWordLimit'] = ['type' => 'integer', 'default' => 3, 'editable' => true, 'label' => __('Ignorer les mots de moins de X caractères')];
+        $this->fields['textExtraction'] = array('type' => 'combo', 'default' => 'pdfbox', 'editable' => true, 'label' => __("Méthode d'extraction des textes"),
+            'datas' => array(__('PDFBox') => 'pdfbox',
+                __('Poppler') => 'poppler',
+                __('Fluidbook (expérimentation basée sur PDFBox)') => 'fluidbook'));
+        $this->fields['searchShowNoResultsPages'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __("Afficher les pages sans résultats"));
+        $this->fields['searchPageSelectionAlgorithm'] = array('type' => 'combo', 'editable' => true, 'default' => 'AND',
+            'datas' => [__('les double-pages qui contiennent tous les mots recherchés (ET logique)') => 'AND', __('les double-page qui contiennent un des mots recherché (OU logique)') => 'OR'], 'label' => __('Algorithme de sélection des résultats'));
+        $this->fields['searchWordSelectionAlgorithm'] = array('type' => 'combo', 'editable' => true, 'default' => 'begins',
+            'datas' => [__('mot commençant par la requête') => 'begins', __('mot correspondant exactement à la requête') => 'exact', __('mot contenant la requête') => 'contains', __('expression exacte') => 'expression'],
+            'label' => __('Algorithme de sélection des occurences'));
+
+        $this->forms['search'] = array('label' => __('Moteur de recherche'),
+            'fieldsnames' => array('search', '|', 'searchFullBurger', '|', 'ignoreWordLimit', 'ignoreSearch', 'ignoreSearchSeparators',
+                '|', 'searchWordSelectionAlgorithm', 'searchPageSelectionAlgorithm',
+                '|', 'highlightResults', 'highlightAllOccurences',
+                '|', 'searchShowNoResultsPages',
+                '|', 'textExtraction'));
+
+        $this->fields['soundTheme'] = array('type' => 'combo', 'default' => 'classic', 'editable' => true, 'label' => __("Thème sonore"),
+            'datas' => array(__('Pas de son') => '',
+                __('Classique') => 'classic',
+                __("Papier épais") => 'heavy',
+                __("Papier fin") => 'light',
+                __("Silencieux") => 'silent',
+                __('Woosh') => 'woosh'));
+        $this->fields['soundOn'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __("Activer les effets sonores à l'ouverture"));
+        $this->forms['sound'] = array('label' => __('Effets sonores'),
+            'fieldsnames' => array('soundTheme', 'soundOn', '|', 'ambientSound', 'ambientSoundVolume'));
+        // .
+        $this->fields['pdf'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __("Activer les fonctions de téléchargement"));
+        $this->fields['pdfName'] = array('type' => 'text', 'default' => 'document.pdf', 'editable' => true, 'label' => __("Nom du fichier PDF"));
+        $this->fields['pdfComplex'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Téchargement de PDF avancé'), "hint" => __("Permet à l'utilisateur de sélectionner les pages qu'il souhaite télécharger"), 'grade' => 3);
+        $this->fields['pdfComplexShowCurrent'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Afficher les pages courrantes'), 'grade' => 3);
+        $this->fields['pdfCompress'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Compression du fichier PDF'));
+        $this->fields['pdfReplace'] = array('type' => 'freefile', 'default' => '', 'editable' => true,
+            'label' => __('PDF de remplacement'), 'grade' => 3, 'fileFilter' => $pdfFilter);
+        $this->forms['downloadpdf'] = array('label' => __('Fonction de téléchargement'),
+            'fieldsnames' => array('pdf', 'pdfName', 'pdfReplace', 'pdfCompress', '|', 'pdfComplex', 'pdfComplexShowCurrent'));
+        // .
+
+        $this->fields['zoom'] = array('type' => 'integer', 'default' => 200, 'editable' => true, 'label' => __('Zoom par défaut (atteint au clic)'));
+        $this->fields['zoomw'] = array('type' => 'integer', 'default' => 300, 'editable' => true, 'label' => __("Zoom maximal (atteint à l'aide de la molette)"));
+        $this->fields['hideHeaderOnZoom'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Cacher le menu lors du zoom')];
+        $this->fields['zoomMouseMoveMode'] = ['type' => 'combo', 'default' => 'move', 'editable' => true, 'label' => __('Mode de déplacement des pages zoomées (souris)'),
+            'datas' => [__('Bouger la souris') => 'move', __('Drag & drop') => __('dragndrop')]];
+        $this->fields['zoomWheel'] = ['type' => 'combo', 'default' => 'wheel', 'editable' => true, 'label' => __('Zoom molette'), 'datas' => [
+            __('Désactivé') => 'disabled',
+            __('Molette') => 'wheel',
+            __('Ctrl+Molette') => 'ctrlwheel',
+        ]];
+        $this->fields['zoomClick'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Cliquer sur les pages pour zoomer')];
+        $this->forms['zoom'] = array('label' => __('Zoom'),
+            'fieldsnames' => array('zoomClick', 'zoomWheel', '|', 'zoom', 'zoomw', '|', 'zoomMouseMoveMode', 'hideHeaderOnZoom'));
+        // .
+
+        $this->fields['sliderImage'] = array('type' => 'freefile', 'default' => '', 'editable' => true,
+            'label' => __('Image pour le slider'), 'grade' => 3, 'fileFilter' => $imageExtraFilter);
+
+        $this->forms['slider'] = ['label' => __('Slider'),
+            'fieldsnames' => ['sliderImage'],
+        ];
+
+        $this->fields['stats_score'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Afficher les scores dans les rapports'), 'grade' => 5);
+        $this->fields['stats_exclude_ip'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Exclure les IP suivantes des statistiques'), 'grade' => 3, 'hint' => sprintf(__('Indiquer une adresse ip de la forme %s par ligne'), 'www.xxx.yyy.zzz'));
+        $this->fields['relay_url_params'] = ['type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Relayer les paramètres d\'url dans les liens sortants'), 'grade' => 3];
+        $this->fields['gtag_additional_code'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Code additionnel Google Tag Manager'));
+        $this->fields['googleAnalyticsCustom'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Code Stats personnalisé (placé avant fermeture de head)'));
+        $this->fields['statsCustom'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Code Stats personnalisé (placé avant fermeture du body)'));
+        $this->fields['xiti'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Code XiTi global'));
+        $this->fields['xiti_page'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Modèle code xiti (pour tags relatifs aux pages)'));
+        $this->fields['tagcommander_id'] = ['type' => 'text', 'default' => '', 'editable' => true, 'label' => 'Tag commander ID', 'grade' => 3];
+        $this->fields['tagcommander_scriptname'] = ['type' => 'text', 'default' => 'tc_Multisite_Head.js,tc_Multisite_Analytics.js,tc_Multisite_Medias.js', 'editable' => true, 'label' => 'Nom du script Tagcommander', 'grade' => 3];
+        $this->fields['tagcommander_prod'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => 'Production', 'grade' => 3];
+        $this->fields['tagcommander_plan'] = ['type' => 'freefile', 'default' => '', 'editable' => true, 'label' => 'Plan de taggage "Tag commander"', 'grade' => 3];
+        $this->fields['tagcommander_default_vars'] = ['type' => 'textarea', 'default' => '', 'editable' => true, 'label' => 'Variables par défaut', 'grade' => 3];
+        $this->fields['anchorsAliases'] = ['type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Alias des ancres')];
+        $this->forms['stats'] = array('label' => __('Statistiques avancées'),
+            'fieldsnames' => array('tagcommander_id', 'tagcommander_scriptname', 'tagcommander_prod', 'tagcommander_plan', 'tagcommander_default_vars', 'anchorsAliases', '|', 'stats_score', 'stats_exclude_ip', '|', 'relay_url_params', '|', 'gtag_additional_code', '|', 'googleAnalyticsCustom', 'statsCustom', '|', 'xiti', 'xiti_page'));
+
+        $this->fields['displayChaptersPopup'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Always display chapters in a popup'), 'grade' => 1);
+        $this->fields['displayChaptersIcon'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __("Affiche l'icône du sommaire"), 'grade' => 1);
+        $this->fields['chaptersCaptionDisplay'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Afficher le titre "Sommaire" dans la popup'), 'grade' => 3];
+        $this->fields['chaptersFontSize'] = ['type' => 'integer', 'default' => 100, 'min' => 50, 'max' => 120, 'editable' => true, 'label' => __('Taille du texte des élements du sommaire'), 'hint' => 'En % par rapport à la taille normale', 'grade' => 3];
+        $this->fields['chaptersPage'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Faire pointer le sommaire sur la page'), 'grade' => 3, 'hint' => __('Laisser vide pour utiliser le sommaire classique'), 'size' => 5);
+        $this->fields['displayChaptersAtStart'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __("Afficher le sommaire au chargement de la publication"), 'grade' => 3);
+        $this->fields['chaptersColumns'] = array('type' => 'integer', 'default' => 1, 'editable' => true, 'label' => __('Afficher le sommaire sur x colonne(s)'), 'grade' => 3);
+        $this->fields['chaptersColMaxWidth'] = array('type' => 'integer', 'default' => 300, 'editable' => true, 'label' => __("Largeur max d'une colonne"), 'grade' => 3);
+        $this->fields['chaptersLevelLimit'] = array('type' => 'integer', 'default' => 5, 'editable' => true, 'label' => __('Limiter à x niveaux'));
+        $this->fields['chaptersIndent'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Indenter les éléments (pour les sommaires à plat)')];
+
+        $this->fields['externalChaptersHTML'] = array('type' => 'freefile', 'default' => '', 'editable' => true,
+            'label' => __('Sommaire personnalisé'), 'grade' => 3, 'fileFilter' => $multimediaFilter, 'hint' => __('Laisser vide pour utiliser le sommaire classique'));
+        $this->fields['mobileChaptersStyle'] = array('type' => 'combo', 'default' => 'classic', 'editable' => true, 'label' => __('Style des chapitres')
+        , 'datas' => array(__('Classique') => 'classic',
+                __('INA') => 'ina'));
+        $this->fields['chaptersPagesNumber'] = array('type' => 'combo', 'default' => 'virtual', 'editable' => true, 'label' => __('Numérotation du sommaire'), 'datas' => $pagesNumbers);
+        $this->fields['chaptersCascade'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __("Sommaire en cascade"), 'grade' => 3);
+
+        $this->forms['sommaire'] = array('label' => __('Sommaire'),
+            'fieldsnames' => array('chaptersCaptionDisplay', 'chaptersFontSize', '|', 'displayChaptersIcon', 'displayChaptersPopup', 'displayChaptersAtStart', 'chaptersPage', 'chaptersPosition', 'chaptersLevelLimit', 'chaptersCascade', 'chaptersPagesNumber', '|', 'chaptersColMaxWidth', 'chaptersColumns', 'displayChaptersLine', 'chaptersIndent', '|', 'externalChaptersHTML', '|', 'mobileChaptersStyle'));
+        // .
+        $this->fields['tabsHTML5'] = array('type' => 'freefile', 'default' => '', 'editable' => true,
+            'label' => __('Fichier d\'onglets') . ' (SVG, ZIP)', 'grade' => 3, 'hint' => __('Charger un zip rendra les options ci-dessous inopérantes'), 'fileFilter' => $tabsFilter);
+        $this->fields['tabsSide'] = ['type' => 'combo', 'label' => __('Position des onglets'), 'editable' => true, 'default' => 'right', 'grade' => 5,
+            'datas' => [
+                __('Gauche') => 'left',
+                __('Droite') => 'right',
+            ]
+        ];
+        $this->fields['tabsPriority'] = ['type' => 'integer', 'min' => 0, 'max' => 100, 'default' => 15, 'editable' => true, 'label' => 'Priorité des onglets sur les contenus (%)', 'hint' => 'La valeur indique la réduction permise de la taille de la publication.'];
+        $this->fields['tabsPages'] = ['type' => 'text', 'label' => __('Pages des onglets'), 'editable' => true, 'default' => '', 'grade' => 5, 'hint' => __('Numéros de pages séparas par une virgule')];
+        $this->fields['tabsSections'] = ['type' => 'text', 'label' => __('Sections des onglets'), 'editable' => true, 'default' => '', 'grade' => 5, 'hint' => __('Numéros de pages séparés par une virgule')];
+        $this->fields['tabsPagesNumbers'] = ['type' => 'combo', 'label' => __('Numérotation utilisée'), 'editable' => true, 'default' => 'virtual', 'grade' => 5, 'datas' => $pagesNumbers];
+        $this->fields['tabsHideOnPages'] = ['type' => 'text', 'label' => __('Cacher les onglets sur les pages'), 'editable' => true, 'default' => '', 'grade' => 5, 'hint' => '1-3,5 = 1,2,3,5'];
+        $this->fields['tabsDisabledOnPages'] = ['type' => 'text', 'label' => __('Onglets inactifs sur les pages'), 'editable' => true, 'default' => '', 'grade' => 5, 'hint' => '1-3,5 = 1,2,3,5'];
+        $this->fields['tabsHideOnCover'] = ['type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Cacher les onglets sur la couverture'), 'grade' => 5];
+        $this->fields['tabsHideOnLastPage'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Cacher les onglets sur la dernière page'), 'grade' => 5];
+        $this->fields['tabsHideOnPortrait'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Cacher les onglets lorsque le fluidbook est en mode portrait'), 'grade' => 5];
+        $this->fields['tabsHideOnZoom'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Cacher les onglets lorsque le fluidbook est zoomé'), 'grade' => 5];
+        $this->fields['tabsHideWhenOverlapingArrows'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Cacher les onglets lorsqu\'ils passent sous les flèches de navigation'), 'grade' => 5];
+        $this->fields['tabsHideEdges'] = ['type' => 'combo', 'label' => __('Masquer les bordures du fluidbook'), 'editable' => true, 'default' => 'right', 'grade' => 5,
+            'datas' => [
+                __('Aucune') => 'none',
+                __('Gauche') => 'left',
+                __('Droite') => 'right',
+                __('Les deux') => 'both',
+            ]
+        ];
+        $this->fields['tabsMargin'] = ['type' => 'float', 'label' => __('Marge des onglets'), 'editable' => true, 'default' => -10, 'grade' => 5, 'hint' => __('Une marge négative = les onglets passent sous la publication')];
+        $this->fields['tabsLinkWidth'] = ['type' => 'float', 'label' => __('Largeur des onglets'), 'editable' => true, 'default' => 30, 'grade' => 5, 'hint' => __('Largeur réservée pour les onglets et largeur de la zone cliquable des liens')];
+        $this->forms['tabs'] = ['label' => __('Onglets'),
+            'fieldsnames' => ['tabsHTML5', 'tabsPages', 'tabsSections', 'tabsPagesNumbers', 'tabsDisabledOnPages', '|', 'tabsSide', 'tabsMargin', '|', 'tabsHideOnPages', 'tabsHideOnCover', 'tabsHideOnLastPage', 'tabsHideEdges', '|', 'tabsPriority', 'tabsLinkWidth', 'tabsHideWhenOverlapingArrows', 'tabsHideOnPortrait', 'tabsHideOnZoom']];
+
+        /*** **/
+
+        $this->fields['customLinkClass'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Classe pour les liens personnalisés'), 'grade' => 5);
+        $this->fields['ignoreLinksTypes'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Ignorer les liens de type'), 'hint' => __('Liste des numéros séparés par des virgules'), 'grade' => 5);
+        $this->fields['mobileLinksRevealAnim'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __("Animer les liens après un changement de page"), 'grade' => 3);
+        $this->fields['linkBlinkTime'] = array('type' => 'float', 'default' => 1.0, 'editable' => true, 'label' => __("Temps d'apparition du lien à l'ouverture de la page (en secondes)"));
+        $this->fields['linkBlinkRepetition'] = ['type' => 'integer', 'default' => 1, 'editable' => true, 'label' => __('Nombre de clignotement lors de l\'apparition des liens')];
+        $this->fields['linkTracker'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Tracking des liens'), 'grade' => 5);
+        $this->fields['linkTrackerRegexp'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Tracking des liens applicables aux liens du domaine'), 'grade' => 5);
+        $this->fields['linkFilePrefix'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Préfixer les liens de téléchargement'));
+        $this->fields['linkTooltipMaxWidth'] = array('type' => 'integer', 'default' => 140, 'editable' => true, 'label' => __('Largeur max des infobulles des liens de type "infobulle"'));
+        $this->fields['openLinkAtStartup'] = ['type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Déclencher un lien à l\'ouverture du fluidbook')];
+
+        $this->fields['mobileIgnoreBackgroundLinks'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Ignorer les liens de background'));
+        $this->forms['links'] = array('label' => __('Liens'),
+            'fieldsnames' => array('permanentLinks', 'mobileLinksRevealAnim', 'linkBlinkTime', 'linkBlinkRepetition', '|', 'openLinkAtStartup', '|', 'customLinkClass', 'ignoreLinksTypes', 'mobileIgnoreBackgroundLinks', 'linkTooltipManager', 'linkCornerSize', 'linkTooltipMaxWidth', '|', 'linkTracker', 'linkTrackerRegexp', '|', 'linkFilePrefix'));
+        //.
+
+        $this->fields['textPopupStylesheet'] = ['type' => 'freefile', 'default' => '', 'editable' => true, 'label' => __('Feuille de style des popups de texte'), 'fileFilter' => $cssFilter];
+        $this->fields['textPopupWidth'] = ['type' => 'integer', 'default' => 600, 'editable' => true, 'label' => __('Largeur optimale des popups')];
+        $this->fields['iframePopupMaxWidth'] = ['type' => 'integer', 'default' => 0, 'editable' => true, 'label' => __('Largeur maximale des popups iframe')];
+        $this->fields['OAMChromeFactor'] = ['type' => 'float', 'default' => 1, 'editable' => true, 'label' => __('Facteur OAM Chrome')];
+        $this->fields['OAMIEFactor'] = ['type' => 'float', 'default' => 1, 'editable' => true, 'label' => __('Facteur OAM IE11')];
+
+        $this->forms['multimedia'] = ['label' => __('Multimedia'),
+            'fieldsnames' => ['textPopupStylesheet', 'textPopupWidth', '|', 'iframePopupMaxWidth', '|', 'OAMChromeFactor', 'OAMIEFactor']];
+
+        $pdfRendererOptions = [__('Navigateur') => 'native', 'PDF.js' => 'pdfjs', 'PDF.js (legacy)' => 'pdfjs-legacy'];
+        $pdfRenderOptionsIframe = array_merge($pdfRendererOptions, [__('Ecraser en SVG') => 'svg']);
+
+        $this->fields['PDFRenderer'] = ['type' => 'combo', 'datas' => $pdfRendererOptions, 'default' => 'native', 'editable' => true, 'label' => __('Rendu des PDF (téléchargement)')];
+        $this->fields['PDFRendererIframe'] = ['type' => 'combo', 'datas' => $pdfRenderOptionsIframe, 'default' => 'native', 'editable' => true, 'label' => __('Rendu des PDF (iframes)')];
+        $this->fields['PDFJSCSS'] = ['type' => 'textarea', 'default' => '', 'editable' => true, 'label' => 'Styles PDF.js'];
+
+        $this->forms['pdf'] = ['label' => 'PDF',
+            'fieldsnames' => ['PDFRenderer', 'PDFRendererIframe', '|', 'PDFJSCSS']];
+
+        $slideshowPopupLibraries = [
+            'Splide (' . __('défaut') . ')' => 'splide',
+            'Vacheron' => 'vacheron'];
+
+        $slideshowInlineLibraries = [
+            'Simple (' . __('défaut') . ')' => 'dummy',
+            'Vacheron' => 'vacheron'];
+
+        $this->fields['slideshowCaptionSize'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Taille de police de la légende du diaporama'), 'hint' => __('Laisser vide pour utiliser la valeur par défaut'));
+        $this->fields['inlineSlideshowTransitionDuration'] = array('type' => 'float', 'default' => 0.75, 'editable' => true, 'label' => __('Durée de la transition des diaporamas intégrés aux pages(s)'));
+        $this->fields['inlineSlideshowDuration'] = array('type' => 'float', 'default' => 7, 'editable' => true, 'label' => __('Temps d\'attente des diaporamas intégrés aux pages (s)'));
+        $this->fields['inlineSlideshowLibrary'] = ['type' => 'combo', 'datas' => $slideshowInlineLibraries, 'default' => 'dummy', 'editable' => true, 'grade' => 3, 'label' => __('Librarie utilisée pour les slideshow intégrés aux pages')];
+        $this->fields['popupSlideshowLibrary'] = ['type' => 'combo', 'datas' => $slideshowPopupLibraries, 'default' => 'splide', 'editable' => true, 'grade' => 3, 'label' => __('Librarie utilisée pour les slideshow popup')];
+
+        $this->forms['slideshow'] = ['label' => __('Slideshow'),
+            'fieldsnames' => ['inlineSlideshowLibrary', 'popupSlideshowLibrary', '|', 'slideshowCaptionSize', '|', 'inlineSlideshowTransitionDuration', 'inlineSlideshowDuration']];
+
+        $this->fields['webvideoAsLocal'] = ['type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Intégrer les webvidéos en local')];
+        $this->fields['mobileVideosPath'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Chemin vers les vidéos'), 'grade' => 5);
+        $this->fields['brightcovePlayerId'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Brightcove Player Id'), 'grade' => 3);
+        $this->fields['brightcovePlayerSecret'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Brightcove Player Secret'), 'grade' => 3);
+        $this->fields['bigPlayImage'] = ['type' => 'freefile', 'default' => '', 'editable' => true, 'label' => __('Image pour le bouton "Big Play"'), 'grade' => 3, 'fileFilter' => $imageExtraFilter];
+        $this->forms['videos'] = array('label' => __('Vidéos'),
+            'fieldsnames' => array('webvideoAsLocal', '|', 'mobileVideosPath', '|', 'brightcovePlayerId', 'brightcovePlayerSecret', '|', 'bigPlayImage'));
+        //.
+        $this->fields['audioPlayerTheme'] = ['type' => 'combo', 'default' => 'native', 'editable' => true, 'label' => __('Apparence du lecteur audio'), 'datas' => [__('Apparence native du navigateur') => 'native', __('Zone cliquable invisible') => 'invisible', __('Circulaire') => 'redbull']];
+        $this->forms['audio'] = ['label' => __('Lecteur audio'),
+            'fieldsnames' => ['audioPlayerTheme']];
+        //.
+        $this->fields['downloadPortionPDF'] = ['type' => 'freefile', 'default' => '', 'editable' => true, 'label' => 'PDF utilisé pour le téléchargement des extraits'];
+        $this->fields['downloadPortionZoom'] = ['type' => 'integer', 'default' => 8, 'editable' => false, 'editable' => true, 'label' => __('Zoom des images extraites')];
+        $this->forms['downloadportion'] = array('label' => __('Téléchargement d\'extraits'),
+            'fieldsnames' => ['downloadPortionPDF', 'downloadPortionZoom']);
+
+
+        $this->fields['product_zoom_references'] = array('type' => 'freefile', 'default' => '', 'editable' => true,
+            'label' => __('Références produits'), 'grade' => 3, 'fileFilter' => $basketFilter, 'hint' => __('Fichier contenant les références produits'), 'dir' => 'commerce');
+        $this->fields['product_zoom_buttons_order'] = ['type' => 'combo', 'datas' => [__('De la droite vers la gauche') => 'right', __('De la gauche vers la droite') => 'left'], 'editable' => true, 'grade' => 3, 'default' => 'right', 'label' => __('Order des boutons')];
+        $icons = [
+            __('Aucune') => 'none',
+            __('Partage') => 'nav-share',
+            __('Ecran') => 'icon-site',
+            __('Télécharger') => 'nav-download',
+            'PDF' => 'icon-pdf',
+            'Video' => 'icon-video',
+            __('Lien') => 'icon-link',
+            __('Code') => 'icon-code',
+            __('QR code') => 'icon-qr',
+            __('Article') => 'icon-article',
+            __('Panier (sac)') => 'nav-basket',
+            __('Panier (caddie)') => 'nav-cart-caddie',
+            __('Panier (wishlist)') => 'nav-cart-wishlist',
+            __('360°') => 'icon-360',
+            __('Photo') => 'icon-photo'];
+        $actions = [
+            __('Désactiver') => 'disabled',
+            __('Ouvrir un lien') => 'link',
+            __('Ouvrir en iframe') => 'iframe',
+            __('Copier un contenu') => 'copy',
+            __('Web Vidéo') => 'video',
+            __('Vidéo') => 'videofile',
+            __('Vidéo (boucle, sans contrôle)') => 'videogif',
+            __('Voir une image') => 'image',
+            __('Ajouter au panier') => 'addtocart'
+        ];
+        $f = [];
+        for ($i = 1; $i <= 3; $i++) {
+            $this->fields['product_zoom_label_' . $i] = ['type' => 'text', 'label' => __('Label du bouton') . ' ' . $i, 'default' => '', 'editable' => true, 'grade' => 3];
+            $this->fields['product_zoom_tooltip_' . $i] = ['type' => 'text', 'label' => __('Label de l\'infobulle') . ' ' . $i, 'default' => '', 'editable' => true, 'grade' => 3];
+            $this->fields['product_zoom_icon_' . $i] = ['type' => 'combo', 'datas' => $icons, 'label' => __('Icône du bouton') . ' ' . $i, 'default' => 'click', 'editable' => true, 'grade' => 3];
+            $this->fields['product_zoom_action_' . $i] = ['type' => 'combo', 'datas' => $actions, 'label' => __('Action du bouton') . ' ' . $i, 'default' => 'disabled', 'editable' => true, 'grade' => 3];
+            $f[] = '|';
+            $f[] = 'product_zoom_label_' . $i;
+            $f[] = 'product_zoom_tooltip_' . $i;
+            $f[] = 'product_zoom_icon_' . $i;
+            $f[] = 'product_zoom_action_' . $i;
+        }
+        $this->fields['product_share_enabled'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'grade' => '3', 'label' => __('Activer le bouton de partage')];
+        $this->fields['product_share_link'] = ['type' => 'combo', 'default' => 'product', 'editable' => true, 'label' => __('Lien de partage'), 'datas' => [__('Lien du produit') => 'product', __('Lien vers la page du fluidbook') => 'page']];
+        $this->fields['product_email_title'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __("Titre de l'email") . ' "' . __('Envoyer à un ami') . '"');
+        $this->fields['product_email_body'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __("Corps de l'email") . ' "' . __('Envoyer à un ami') . '"');
+        $this->fields['product_tweet'] = array('type' => 'textarea', 'default' => '%short%', 'editable' => true, 'label' => __("Contenu Partage court"), 'hint' => __('Contenu du partagé sur les partages courts'));
+        $this->forms['product_zoom'] = ['label' => __('Zooms produits'), 'fieldsnames' => array_merge(["product_zoom_references", '|', 'product_zoom_buttons_order'], $f, ['|', 'product_share_enabled', 'product_share_link', 'product_email_title', 'product_email_body', 'product_tweet'])];
+
+        $this->fields['audiodescriptionTexts'] = ['type' => 'freefile', 'default' => '', 'editable' => true, 'label' => __('Contenus textuels pour l\'audiodescription ou les lecteurs d\'écran'), 'fileFilter' => $seoFilter];
+        $this->fields['audiodescriptionVoice'] = ['type' => 'combo', 'datas' => wsDroits::getTTSVoices(), 'editable' => true, 'default' => '', 'label' => __('Voix pour l\'audiodescription')];
+        $this->forms['accessibility'] = ['label' => __('Accessibilité'),
+            'fieldsnames' => ['audiodescriptionTexts', 'audiodescriptionVoice']
+        ];
+
+        // Tooltip
+
+
+        // Splashscreen
+
+        $this->fields['splashImage'] = ['type' => 'freefile', 'default' => '', 'editable' => true, 'label' => __('Image'), 'grade' => 3, 'fileFilter' => $imageFilter];
+        $this->fields['splashURL'] = ['type' => 'text', 'default' => '', 'editable' => true, 'label' => __('URL'), 'grade' => 3];
+        $this->fields['splashTarget'] = ['type' => 'combo', 'datas' => $target, 'default' => '_self', 'editable' => true, 'label' => __('Ouvrir le lien'), 'grade' => 3];
+        $this->fields['splashMinimalTime'] = ['type' => 'float', 'default' => 1, 'editable' => true, 'label' => __('Temps minimal d\'affichage'), 'grade' => 3];
+
+        $this->forms['splash'] = ['label' => __('Ecran de chargement'), 'fieldsnames' => ['splashImage', 'splashURL', 'splashTarget', 'splashMinimalTime']];
+
+        // Notes
+        $this->fields['notes'] = ['type' => 'boolean', 'default' => false, 'editable' => true,
+            'label' => 'Activer les notes', 'grade' => 3];
+        $this->forms['notes'] = ['label' => __('Notes'), 'fieldsnames' => ['notes']];
+
+        // Articles
+        $this->fields['articlesFile'] = ['type' => 'freefile', 'default' => '', 'editable' => true,
+            'label' => 'Articles', 'grade' => 3, 'fileFilter' => $articlesFilter];
+        $this->fields['articlesFormat'] = ['type' => 'combo', 'default' => 'fluidbook', 'editable' => true, 'label' => 'Format', 'grade' => 3, 'datas' => [__('Fluidbook') => 'fluidbook', 'Business Immo' => 'business-immo']];
+        $this->fields['articlesFont'] = ['type' => 'combo', 'label' => __('Police des articles'), 'default' => 'OpenSans', 'datas' => self::$fonts, 'editable' => true, 'grade' => 3];
+        $this->fields['articlesImages'] = ['type' => 'freefile', 'label' => __('Images des articles'), 'default' => '', 'hint' => __('Les noms des fichiers doivent être les même que ceux des balises <image> du XML'), 'editable' => true, 'grade' => 3, 'dir' => 'articles', 'multiple' => true];
+        $this->fields['articlesShare'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Activer le partage'), 'grade' => 3];
+        $this->fields['articlesPrint'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Activer l\'impression'), 'grade' => 3];
+        $this->fields['articlesStyle'] = ['type' => 'combo', 'default' => true, 'editable' => true, 'label' => __('Style'), 'grade' => 3, 'datas' => ['Défaut' => 'default', 'Atlantic' => 'atlantic', 'Harmonie Mutuelle' => 'harmonie-mutuelle', 'Business Immo' => 'business-immo']];
+
+        $this->forms['articles'] = ['label' => __('Articles'), 'fieldsnames' => ['articlesFile', 'articlesImages', '|', 'articlesShare', 'articlesPrint', '|', 'articlesStyle', 'articlesFont']];
+
+        //.
+        $this->fields['externalArchives'] = array('type' => 'freefile', 'default' => '', 'editable' => true,
+            'label' => __('Archives'), 'grade' => 3, 'fileFilter' => $imageFilter);
+        $this->fields['archivesLabel'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Label'), 'grade' => 5);
+        $this->forms['archives'] = array('label' => __('Archives'),
+            'fieldsnames' => array('externalArchives', 'archivesLabel'));
+        // .
+        $this->fields['form'] = array('type' => 'combo', 'default' => '', 'editable' => true, 'grade' => 5, 'label' => __('Formulaire'), 'datas' =>
+            array(__('Aucun') => '',
+                'Bulle Groupe' => 'bulle',
+                'Bourbon / Suggestions' => 'bourbon',
+                'Avery' => 'avery',
+            ),
+        );
+        $this->forms['form'] = array('label' => __('Formulaire'),
+            'fieldsnames' => array('form'));
+
+        $this->fields['cookieConsent'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Message cookie'));
+        $this->fields['cookieConsentMessage'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Texte du consentement'));
+        $this->fields['cookieConsentAutoclose'] = array('type' => 'integer', 'default' => 0, 'editable' => true, 'label' => __('Masquer automatiquement après x secondes'));
+        $this->forms['privacy'] = array('label' => __('Respect de la vie privée'),
+            'fieldsnames' => array('cookieConsent', 'cookieConsentMessage', 'cookieConsentAutoclose'));
+
+        //.
+        $this->fields['basket'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Panier activé'), 'grade' => 5);
+        $this->fields['cartIcon'] = ['type' => 'combo', 'datas' => [__('Sac') => 'nav-basket', __('Caddie') => 'nav-cart-caddie', __('Wishlist') => 'nav-cart-wishlist'], 'default' => 'nav-basket', 'label' => __('Icône'), 'editable' => true, 'grade' => 5];
+        $this->fields['basketManager'] = array('type' => 'combo', 'default' => 'classic', 'editable' => true, 'label' => __("Manager de panier"),
+            'datas' => array(__('Classic') => 'com.fluidbook.player.basket.BasketManager',
+                'Grdf' => 'com.fluidbook.player.basket.custom.grdf.GrdfBasketManager',
+                'Grdf 2013' => 'com.fluidbook.player.basket.custom.grdf.grdf2013.GrdfBasketManager2013',
+                'Grdf 2015' => 'com.fluidbook.player.basket.custom.grdf.grdf2015.GrdfBasketManager2015',
+                'Essilor' => 'com.fluidbook.player.basket.custom.essilor.EssilorBasketManager',
+                'Essilor Recap' => 'com.fluidbook.player.basket.custom.essilorrecap.EssilorRecapBasketManager',
+                'Wesco Ventes' => 'com.fluidbook.player.basket.custom.wesco.WescoBasketManager',
+                'Atlantic Download' => 'com.fluidbook.player.basket.custom.atlantic.AtlanticDownloadBasketManager',
+                'Remarkable' => 'Remarkable',
+                'Mopec' => 'Mopec',
+                'Puma' => 'Puma',
+                'MIF' => 'MIF',
+                'Flexipan' => 'Flexipan',
+                'Zoom + lien produit (déprécié, utiliser la fonctionnalité "Zoom produits")' => 'ZoomProductLink',
+                'Wishlist Jouéclub' => 'JoueclubWishlist',
+                'GrandVision' => 'GrandVision',
+                'Grand Pavois' => 'GrandPavois',
+                'Wishlist Jouéclub Noël 2021' => 'JoueclubWishlist2021',
+                'Thiriet' => 'Thiriet',
+            ), 'grade' => 5);
+
+        $this->fields['cartLinkAppearance'] = ['type' => 'combo', 'default' => 'link', 'editable' => true, 'label' => __('Apparence des liens panier'), 'grade' => 3, 'datas' => [__('Lien') => 'link', __('Boutons + et - avec overlay') => 'overlay']];
+        $this->fields['basketReferences'] = array('type' => 'freefile', 'default' => '', 'editable' => true,
+            'label' => __('Références produits'), 'grade' => 3, 'fileFilter' => $basketFilter, 'hint' => __('Fichier contenant les références produits'), 'dir' => 'commerce');
+        $this->fields['basketImages'] = array('type' => 'freefile', 'default' => '', 'editable' => true,
+            'label' => __('Images des produits'), 'grade' => 3,
+            'multiple' => true, 'dir' => 'commerce');
+        $this->fields['basketPDFBackground'] = array('type' => 'freefile', 'default' => '', 'editable' => true,
+            'label' => __('Fond du PDF (bon de commande)'), 'grade' => 5, 'fileFilter' => $epsFilter, 'hint' => __('Fond du bon de commande'), 'dir' => 'commerce');
+        $this->fields['cartHeaderImage'] = ['type' => 'freefile', 'default' => '', 'editable' => true,
+            'label' => __('Header panier'), 'grade' => 3, 'fileFilter' => $imageFilter, 'dir' => 'commerce'];
+        $this->fields['cartHeaderMobileImage'] = ['type' => 'freefile', 'default' => '', 'editable' => true,
+            'label' => __('Header panier (mobile)'), 'grade' => 3, 'fileFilter' => $imageFilter, 'dir' => 'commerce'];
+        $this->fields['cartExtraSettings'] = ['type' => 'textarea', 'default' => '', 'editable' => true,
+            'label' => __('Paramètres panier'), 'grade' => 3];
+
+
+        $this->forms['basket'] = array('label' => __('Panier'),
+            'fieldsnames' => array('basket', 'basketManager', '|', 'cartIcon', 'cartLinkAppearance', '|', 'basketReferences', 'basketImages', '|', 'cartHeaderImage', 'cartHeaderMobileImage', 'cartExtraSettings'));
+        // .
+        $this->fields['offlineLink'] = array('type' => 'text', 'default' => 'http://', 'editable' => true, 'label' => __("URL du Fluidbook"), 'hint' => __('URL du fluidbook utilisée pour la version Offline (CD-ROM, clé USB, Exécutables)'));
+        $this->fields['offlineTitle'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __("Titre de l'application"));
+        $this->fields['offlineWindowsInstallPath'] = ['type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Chemin d\'installation par défaut'), 'hint' => __('Par défaut') . ': %LOCALAPPDATA%/%title%'];
+        $this->fields['offlineWindowsProfilePath'] = ['type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Répertoire de stockage du profile'), 'hint' => __('Par défaut') . ': %LOCALAPPDATA%/%title%'];
+        $this->fields['offlineEnableAdvancedPrinting'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Activer le menu d\'impression avancée')];
+        $this->fields['debugConsole'] = ['type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Activer la console de débuggage')];
+        $this->forms['offline'] = array('label' => __('Version offline'),
+            'fieldsnames' => array('offlineTitle', 'offlineLink', '|', 'offlineWindowsInstallPath', 'offlineWindowsProfilePath', '|', 'offlineEnableAdvancedPrinting', '|', 'debugConsole'));
+
+        $this->fields['mobilefirstFluidbookId'] = ['type' => 'text', 'default' => '', 'editable' => true, 'label' => 'Identifiant du fluidbook "Mobile first"', 'grade' => 5];
+        $this->fields['mobilefirstBreakpoint'] = ['type' => 'text', 'default' => '640', 'editable' => true, 'label' => 'Breakpoint du passage à la version "Mobile first" (en pixels)', 'grade' => 5];
+        $this->forms['mobilefirst'] = ['label' => __('Mobile first'),
+            'fieldsnames' => ['mobilefirstFluidbookId', 'mobilefirstBreakpoint']];
+
+
+        $this->fields['phonegapId'] = array('type' => 'text', 'default' => 'com.fluidbook.phonegap.$id', 'editable' => true, 'label' => __("Identifiant de l'identifiant"), 'grade' => 5, 'hint' => __('De la forme') . ' com.fluidbook.phonegap.xxxxx');
+        $this->fields['phonegapVersion'] = array('type' => 'text', 'default' => '1.0.0', 'editable' => true, 'label' => __("Version de l'application"), 'grade' => 5, 'hint' => __('De la forme') . ' 1.2.3');
+        $this->fields['phonegapPlugins'] = array('type' => 'textarea', 'default' => 'ChildBrowser', 'editable' => true, 'label' => __('Plugins Phonegap'), 'grade' => 5);
+        $defaultScreenshots = "P,0\nL,2\nL,index";
+        $this->fields['appScreenshots'] = array('type' => 'textarea', 'default' => $defaultScreenshots, 'editable' => true, 'label' => 'Générer les screenshots', 'grade' => 5, '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))'));
+
+        $this->forms['phonegap'] = array('label' => __('Applications mobile'),
+            'fieldsnames' => array('phonegapId', 'phonegapVersion', 'phonegapPlugins', 'appScreenshots'));
+
+        $this->fields['secureURL'] = array('type' => 'text', 'default' => 'http://', 'editable' => true, 'label' => __('URL de sécurisation'), 'grade' => 5, 'hint' => __('URL intérrogé pour vérifier si le visiteur à les droits pour consulter la publication'));
+        $this->fields['secureURLRedirect'] = array('type' => 'text', 'default' => 'http://', 'editable' => true, 'label' => __('Redirection'), 'grade' => 5, 'hint' => __("Si l'authentification échoue, redirection vers cette adresse"));
+        $this->fields['secureClientSidePassword'] = ['type' => 'freefile', 'label' => 'Sécurisation par mot de passe côté client', 'editable' => true, 'default' => '', 'grade' => 3, 'fileFilter' => $htmlFilter];
+        $this->fields['secureClientSidePasswordCredentials'] = ['type' => 'textarea', 'label' => 'Utilisateurs / mots de passe', 'editable' => true, 'default' => '', 'grade' => 3, 'hint' => 'Format user:password par ligne'];
+        $this->fields['preventRightClick'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __("Essayer d'empêcher le clic droit"), 'grade' => 1);
+        $this->fields['restrictPrint'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __("Restreindre l'impression"), 'grade' => 5);
+        $this->fields['restrictDownload'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __("Restreindre le téléchargement du pdf"), 'grade' => 5);
+        $this->fields['restrictSendBookmark'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __("Restreindre l'envoi de marques-pages"), 'grade' => 5);
+        $this->fields['restrictPrintDownload'] = ['type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Paramètre de l\'url permettant de désactiver la restriction (non vide pour activer les restrictions)'), 'grade' => 5, 'hint' => __("Ne pas indiquer le ?")];
+        $this->fields['recaptcha'] = ['type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Activer reCATPCHA v3 (clé du site)')];
+        $this->forms['secure'] = array('label' => __('Sécurisation'),
+            'fieldsnames' => array('secureURL', 'secureURLRedirect', '|', 'secureClientSidePassword', 'secureClientSidePasswordCredentials', '|', 'preventRightClick', '|', 'restrictPrintDownload', 'restrictPrint', 'restrictDownload', 'restrictSendBookmark', '|', 'recaptcha'));
+
+        $this->fields['home'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __("Accueil de l'interface multibrochure"), 'grade' => 5);
+        $this->fields['multilang'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Langues'), 'hint' => __('Code langue') . ',' . __('Code pays') . ',' . __('URL'));
+        $this->fields['country'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Pays de la brochure'));
+        $this->fields['multilangDisplay'] = array('type' => 'combo', 'default' => 'lang', 'editable' => true, 'label' => __('Affichage'),
+            'datas' => array(__('Langue') => 'lang',
+                __('Langue') . ' (' . __('Pays') . ')' => 'lang_country',
+                __('Pays') . ' (' . __('Langue') . ')' => 'country_lang'));
+        $this->forms['multibrochure'] = array('label' => __('Multibrochure'),
+            'fieldsnames' => array('home', 'country', 'multilangDisplay', 'multilang'));
+
+        $this->fields['plv'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Activer le mode PLV'), 'grade' => 3);
+        $this->fields['plvTimer'] = array('type' => 'integer', 'min' => 1, 'max' => 60, 'default' => 5, 'editable' => true, 'label' => __('Temps'), 'grade' => 3);
+        $this->fields['plvMode'] = array('type' => 'combo', 'default' => 'first', 'editable' => true, 'label' => __('Arrivé à la dernière page'), 'grade' => 3,
+            'datas' => array(__('Remonter vers la première page') => 'back',
+                __('Recommencer à la première page') => 'first'));
+        $this->forms['plv'] = array('label' => __('Mode PLV'),
+            'fieldsnames' => array('plv', 'plvTimer', 'plvMode'));
+
+
+        $this->fields['themeEnableAfterSearch'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __("Afficher l'image supplémentaire à droite du moteur de recherche"), 'grade' => 3);
+        $this->forms['theme'] = array('label' => __('Options du thème'),
+            'fieldsnames' => array('themeEnableAfterSearch'));
+
+        $this->fields['forceCompileOnDownload'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Forcer la compilation lors du téléchargement'), 'grade' => 3);
+        $this->fields['embedAllLibraries'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Intégrer toutes les bibliothèques JS'), 'grade' => 3);
+        $this->fields['htmlExtension'] = array('type' => 'text', 'default' => 'html', 'editable' => true, 'label' => __('Extension des fichiers html'), 'grade' => 5, 'hint' => __('Ex : php, htm, html, phtml, asp, aspx'), 'grade' => 5);
+        $this->fields['actualHtmlExtension'] = array('type' => 'text', 'default' => 'html', 'editable' => false, 'label' => __('Extension des fichiers html réellement appliquée au fluidbook'), 'grade' => 5, 'hint' => __('Ex : php, htm, html, phtml, asp'), 'grade' => 5);
+        $this->fields['htmlPrepend'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Code à insérer en tête des fichiers'), 'grade' => 5);
+        $this->fields['baseUrl'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Base de l\'url'), 'grade' => 5,);
+
+        $this->forms['package'] = array('label' => __('Option d\'export'),
+            'fieldsnames' => array('htmlExtension', "actualHtmlExtension", 'htmlPrepend', 'baseUrl', 'forceCompileOnDownload', 'embedAllLibraries'));
+
+        $this->fields['disableDemo'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Désactiver le lien de démo'), 'grade' => 5);
+        $this->fields['redirectDemo'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Rediriger le lien de démo vers'), 'grade' => 5);
+        $this->forms['demo'] = array('label' => __('Lien de démo'),
+            'fieldsnames' => array('disableDemo', 'redirectDemo'));
+
+
+        $this->fields['gamify_coins_pages'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Attribuer des coins lors de la visite des pages'));
+        $this->forms['gamify'] = ['label' => __('Gamification'),
+            'fieldsnames' => ['gamify_coins_pages']];
+
+
+        $this->fields['scorm_enable'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Activer SCORM'), 'grade' => 5);
+        $this->fields['scorm_version'] = array('type' => 'combo', 'default' => '1.2', 'editable' => true, 'label' => __('Version du standard SCORM'), 'grade' => 5,
+            'datas' => array(
+                __('SCORM 1.2') => '1.2',
+                __('SCORM 2004 3rd edition') => '2004.3',
+                __('SCORM 2004 4th edition') => '2004',
+            )
+        );
+        $this->fields['scorm_id'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Identifiant SCORM'), 'grade' => 5);
+        $this->fields['scorm_org'] = array('type' => 'text', 'default' => 'ACME-ORG-1350650111249', 'editable' => true, 'label' => __('Organisation SCORM'), 'grade' => 5);
+        $this->fields['scorm_title'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Titre SCORM'), 'grade' => 5, 'hint' => __('Laisser vide pour utiliser le titre de la publication'));
+        $this->fields['scorm_variables'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Variables SCORM'), 'grade' => 5, 'hint' => __('Laisser vide pour utiliser le titre de la publication'));
+        $this->fields['scorm_score'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Activer le support du score'), 'grade' => 5);
+        $this->fields['scorm_score_min'] = array('type' => 'integer', 'min' => 0, 'max' => 100, 'default' => 50, 'editable' => true, 'label' => __('Score minimal pour marquer le contenu comme réussi'), 'grade' => 5);
+        $this->fields['scorm_quiz_as_questionnaire'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Traiter les quiz comme des questionnaires (toutes les réponses sont considérées comme correctes)'), 'grade' => 5);
+        $this->fields['scorm_quizdata'] = array('type' => 'freefile', 'editable' => true, 'default' => '', 'label' => __('Données de quiz'));
+        $this->fields['scorm_complete_coins'] = ['type' => 'integer', 'default' => 0, 'label' => 'Marquer le cours comme "Complete" lorsque le visiteur accumule X coins', 'editable' => true];
+        $this->fields['scorm_complete_on_exit'] = ['type' => 'boolean', 'default' => false, 'label' => 'Marquer le cours comme "Complete" à la fermeture de la fenêtre', 'editable' => true];
+        $this->fields['scorm_complete_on_last_page'] = ['type' => 'boolean', 'default' => false, 'label' => 'Marquer le cours comme "Complete" lorsque le visiteur atteint la dernière page', 'editable' => true];
+        $this->fields['scorm_force_attempts'] = ['type' => 'boolean', 'default' => false, 'label' => __('Forcer la création d\'un "attempt" à chaque ouverture'), 'editable' => true];
+        $this->fields['scorm_pass_on_complete'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __("Marquer le cours comme Pass lorsqu'il est terminé") . ' (' . __('SCORM 2004 seulement') . ')'];
+        $this->fields['scorm_score100_on_complete'] = ['type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __("Marquer le cours comme réussi à 100% lorsqu'il est terminé")];
+        $this->fields['scorm_commit_immediately'] = ['type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __("Envoyer les données immédiatement au LMS") . ' (' . __('Peut provoquer des ralentissement sur certains LMS') . ')'];
+
+        $this->forms['scorm'] = array('label' => __('SCORM'),
+            'fieldsnames' => array('scorm_enable', 'scorm_version', 'scorm_id', 'scorm_org', 'scorm_title', 'scorm_variables', '|', 'scorm_complete_on_exit', 'scorm_complete_on_last_page', 'scorm_complete_coins', '|', 'scorm_pass_on_complete', 'scorm_score100_on_complete', '|', 'scorm_quizdata', 'scorm_score', 'scorm_score_min', 'scorm_quiz_as_questionnaire', '|', 'scorm_force_attempts', 'scorm_commit_immediately'));
+
+        $versions = wsUrl::getFluidbookVersions(false);
+        $ignore = ['v1', 'v2', 'phonegap'];
+        $fields = [];
+        foreach ($versions as $k => $version) {
+            if (in_array($k, $ignore)) {
+                continue;
+            }
+            $this->fields['download_' . $k] = ['type' => 'boolean', 'editable' => true, 'default' => false, 'label' => $version['title'], 'grade' => 3];
+            $fields[] = 'download_' . $k;
+        }
+        $this->fields['download_online']['default'] = true;
+
+        $this->forms['downloads'] = array('label' => __('Versions disponibles au téléchargement'),
+            'fieldsnames' => $fields);
+    }
+}
index 413a079028e0c3c32731b8d208936e08d19fc54a..bb76de7df4851bbf175af8ad1f70ce39e1ad35f5 100644 (file)
@@ -18,65 +18,25 @@ class wsBookParametres extends wsParametres
         //             }
 
         // .
-        $swfFilter = new stdClass();
-        $swfFilter->name = __('Animation SWF') . ' (*.swf)';
-        $swfFilter->extensions = '*.swf';
-
-        $multimediaFilter = new stdClass();
-        $multimediaFilter->name = __('Archive ZIP') . ' (*.zip)';
-        $multimediaFilter->extensions = '*.zip';
-
-        $pdfFilter = new stdClass();
-        $pdfFilter->name = __('Document PDF') . ' (*.pdf)';
-        $pdfFilter->extensions = '*.pdf';
-
-        $basketFilter = new stdClass();
-        $basketFilter->name = __('Liste de produits') . ' (*.xml, *.xlsx)';
-        $basketFilter->extensions = '*.xml;*.xlsx';
-
-        $articlesFilter = new stdClass();
-        $articlesFilter->name = __('Liste d\'articles') . ' (*.xml)';
-        $articlesFilter->extensions = '*.xml';
-
-        $htmlFilter = new stdClass();
-        $htmlFilter->name = __('Fichier HTML') . ' (*.html)';
-        $htmlFilter->extensions = '*.html';
-
-        $imageFilter = new stdClass();
-        $imageFilter->name = __('Images') . ' (*.jpg, *.png)';
-        $imageFilter->extensions = '*.jpg;*.jpeg;*.png';
-
-        $epsFilter = new stdClass();
-        $epsFilter->name = __('Fichier vectoriel') . ' (*.ai, *.eps)';
-        $epsFilter->extensions = '*.ai;*.eps';
-
-        $svgFilter = new stdClass();
-        $svgFilter->name = __('Fichier SVG') . ' (*.svg)';
-        $svgFilter->extensions = '*.svg';
-
-        $tabsFilter = new stdClass();
-        $tabsFilter->name = __('Fichier onglets') . ' (*.svg, *.zip)';
-        $tabsFilter->extensions = '*.svg;*.zip';
-
-        $imageExtraFilter = new stdClass();
-        $imageExtraFilter->name = __('Images') . ' (*.svg, *.jpg, *.png, *.gif)';
-        $imageExtraFilter->extensions = '*.svg;*.jpg;*.png;*.gif';
-
-        $soundFilter = new stdClass();
-        $soundFilter->name = __('Fichier sonore') . ' (*.mp3, *.wav)';
-        $soundFilter->extensions = '*.mp3;*.wav';
-
-        $seoFilter = new stdClass();
-        $seoFilter->name = __('Fichier Excel') . ' (.xlsx)';
-        $seoFilter->extensions = '*.xlsx';
-
-        $target = [__("Dans la fenêtre courrante") => '_self',
-            __('Dans un nouvel onglet') => '_blank'];
-
-        $cssFilter = new stdClass();
-        $cssFilter->name = __('Feuille de style') . ' (.css)';
-        $cssFilter->extensions = '*.css';
-
+        $swfFilter = ['name' => $this->__('Animation SWF') . ' (*.swf)', 'extensions' => '*.swf'];
+        $multimediaFilter = ['name' => $this->__('Archive ZIP') . ' (*.zip)', 'extensions' => '*.zip'];
+        $pdfFilter = ['name' => $this->__('Document PDF') . ' (*.pdf)', 'extensions' => '*.pdf'];
+
+        $basketFilter = ['name' => $this->__('Liste de produits'), 'extensions' => ' (*.xml, *.xlsx)'];
+        $articlesFilter = ['name' => $this->__('Liste d\'articles') . ' (*.xml)', 'extensions' => '*.xml'];
+        $htmlFilter = ['name' => $this->__('Fichier HTML') . ' (*.html)', 'extensions' => '*.html'];
+        $imageFilter = ['name' => $this->__('Images') . ' (*.jpg, *.png)', 'extensions' => '*.jpg;*.jpeg;*.png'];
+        $epsFilter = ['name' => $this->__('Fichier vectoriel') . ' (*.ai, *.eps)', 'extensions' => '*.ai;*.eps'];
+        $svgFilter = ['name' => $this->__('Fichier SVG') . ' (*.svg)', 'extensions' => '*.svg'];
+        $tabsFilter = ['name' => $this->__('Fichier onglets') . ' (*.svg, *.zip)', 'extensions' => '*.svg;*.zip'];
+        $imageExtraFilter = ['name' => $this->__('Images') . ' (*.svg, *.jpg, *.png, *.gif)', 'extensions' => '*.svg;*.jpg;*.png;*.gif'];
+        $soundFilter = ['name' => $this->__('Fichier sonore') . ' (*.mp3, *.wav)', 'extensions' => '*.mp3;*.wav'];
+        $seoFilter = ['name' => $this->__('Fichier Excel') . ' (.xlsx)', 'extensions' => '*.xlsx'];
+        $cssFilter = ['name' => $this->__('Feuille de style') . ' (.css)', 'extensions' => '*.css'];
+
+
+        $target = [$this->__("Dans la fenêtre courrante") => '_self',
+            $this->__('Dans un nouvel onglet') => '_blank'];
 
         $branches = array('master : git (stable)' => 'stable',
             'master : local (dev)' => 'dev');
@@ -89,586 +49,586 @@ class wsBookParametres extends wsParametres
             $branches[$b . ' : local'] = $b . '|local';
         }
         $extraVisibility = [
-            __('Navigation horizontale') => 'horizontal',
-            __('Navigation burger') => 'burger',
-            __('Navigations horizontale et burger') => 'both'];
+            $this->__('Navigation horizontale') => 'horizontal',
+            $this->__('Navigation burger') => 'burger',
+            $this->__('Navigations horizontale et burger') => 'both'];
 
         $extraType = [
-            __('Icône + Label') => 'icon',
-            __('Image') => 'image'];
+            $this->__('Icône + Label') => 'icon',
+            $this->__('Image') => 'image'];
 
-        $pagesNumbers = array(__('Virtuelle') => 'virtual',
-            __('Physique') => 'physical');
+        $pagesNumbers = array($this->__('Virtuelle') => 'virtual',
+            $this->__('Physique') => 'physical');
 
         $this->fields['mobileLVersion'] = array('type' => 'combo', 'default' => 'stable', 'editable' => true,
-            'label' => __('Version logicielle'), 'grade' => 1,
+            'label' => $this->__('Version logicielle'), 'grade' => 1,
             'datas' => $branches
         );
-        $this->fields['mobileVersion'] = array('type' => 'combo', 'default' => 'html5-desktop', 'editable' => true, 'label' => __('Version mobile'), 'grade' => 3,
-            'datas' => array(__('Rediriger vers le PDF') => 'pdf',
-                __('Version HTML5 recommandée (vecteurs sur desktop)') => 'html5-desktop',
-                __('Version HTML5 vecteurs') => 'html5',
-                __("Version HTML5 en images") => 'html5-images')
+        $this->fields['mobileVersion'] = array('type' => 'combo', 'default' => 'html5-desktop', 'editable' => true, 'label' => $this->__('Version mobile'), 'grade' => 3,
+            'datas' => array($this->__('Rediriger vers le PDF') => 'pdf',
+                $this->__('Version HTML5 recommandée (vecteurs sur desktop)') => 'html5-desktop',
+                $this->__('Version HTML5 vecteurs') => 'html5',
+                $this->__("Version HTML5 en images") => 'html5-images')
         );
 
         // Deprecated
-        $this->fields['version'] = array('type' => 'combo', 'default' => '2', 'editable' => true, 'label' => __('Version'), 'datas' => array('1' => '1', '2' => '2'), 'grade' => 3);
-        $this->fields['email_editable'] = array('type' => 'boolean', 'default' => true, 'editable' => false, 'label' => __("Permettre au lecteur de modifier le corps de l'email"));
-        $this->fields['askAcknowledge'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => __("Demander au destinataire un accusé de réception"), 'grade' => 3);
-        $this->fields['sendasfluidbook'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => __("Envoyer le mail comme Fluidbook"), 'grade' => 3, 'hint' => __("L'expéditeur apparaîtra en reply-to"));
-        $this->fields['email_mailto'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => __("Envoyer le mail via le client mail du visiteur (mailto:)"), 'grade' => 3);
-        $this->fields['googleplus'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => __('Google +'));
-        $this->fields['viadeo'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => __('Viadeo'));
-        $this->fields['customSharer'] = array('type' => 'text', 'default' => '', 'editable' => false, 'label' => __("Classe personnalisée de partage"), 'grade' => 5);
-        $this->fields['friendWidth'] = array('type' => 'integer', 'default' => 319, 'editable' => false, 'label' => __('Largeur du menu'), 'grade' => 5);
-        $this->fields['friendHeight'] = array('type' => 'integer', 'default' => 500, 'editable' => false, 'label' => __('Largeur du menu'), 'grade' => 5);
-        $this->fields['visualisationMode'] = array('type' => 'combo', 'default' => '3', 'editable' => false, 'label' => __("Mode de visualisation 3D"),
-            'datas' => array(__('Mode 3D') => '0',
-                __('Mode 2D (caméra fixe et pages à plat)') => '1',
-                __("Laisser le choix à l'utilisateur (mode 3D par défaut)") => '2',
-                __("Laisser le choix à l'utilisateur (mode 2D par défaut)") => '3'));
-        $this->fields['antialiasReading'] = array('type' => 'boolean', 'default' => true, 'editable' => false, 'label' => __("Amélioration de la lisibilité en mode 2D"));
-        $this->fields['pagesBaseAngle'] = array('type' => 'integer', 'default' => 2, 'editable' => false, 'label' => __('Angle de base entre les pages'), 'grade' => 3,
-            'hint' => __("0 : Publication à plat") . "\n" . __('2 : Valeur par défaut'));
-        $this->fields['preload'] = array('type' => 'integer', 'default' => 16, 'editable' => false, 'label' => __('Nombre de pages à précharger'), 'grade' => 3);
-        $this->fields['tooltipTimer'] = array('type' => 'float', 'default' => 3, "editable" => true, 'label' => __("Temps maximum d'apparition des infos-bulles (en secondes)"));
-        $this->fields['indexAutoScroll'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => __('Activer le scroll automatique'));
-        $this->fields['printCoverWithMarks'] = array('type' => 'boolean', 'default' => true, 'editable' => false, 'label' => __("Imprimer les couvertures avec les pages marquées"), 'grade' => 3);
+        $this->fields['version'] = array('type' => 'combo', 'default' => '2', 'editable' => true, 'label' => $this->__('Version'), 'datas' => array('1' => '1', '2' => '2'), 'grade' => 3);
+        $this->fields['email_editable'] = array('type' => 'boolean', 'default' => true, 'editable' => false, 'label' => $this->__("Permettre au lecteur de modifier le corps de l'email"));
+        $this->fields['askAcknowledge'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => $this->__("Demander au destinataire un accusé de réception"), 'grade' => 3);
+        $this->fields['sendasfluidbook'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => $this->__("Envoyer le mail comme Fluidbook"), 'grade' => 3, 'hint' => $this->__("L'expéditeur apparaîtra en reply-to"));
+        $this->fields['email_mailto'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => $this->__("Envoyer le mail via le client mail du visiteur (mailto:)"), 'grade' => 3);
+        $this->fields['googleplus'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => $this->__('Google +'));
+        $this->fields['viadeo'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => $this->__('Viadeo'));
+        $this->fields['customSharer'] = array('type' => 'text', 'default' => '', 'editable' => false, 'label' => $this->__("Classe personnalisée de partage"), 'grade' => 5);
+        $this->fields['friendWidth'] = array('type' => 'integer', 'default' => 319, 'editable' => false, 'label' => $this->__('Largeur du menu'), 'grade' => 5);
+        $this->fields['friendHeight'] = array('type' => 'integer', 'default' => 500, 'editable' => false, 'label' => $this->__('Largeur du menu'), 'grade' => 5);
+        $this->fields['visualisationMode'] = array('type' => 'combo', 'default' => '3', 'editable' => false, 'label' => $this->__("Mode de visualisation 3D"),
+            'datas' => array($this->__('Mode 3D') => '0',
+                $this->__('Mode 2D (caméra fixe et pages à plat)') => '1',
+                $this->__("Laisser le choix à l'utilisateur (mode 3D par défaut)") => '2',
+                $this->__("Laisser le choix à l'utilisateur (mode 2D par défaut)") => '3'));
+        $this->fields['antialiasReading'] = array('type' => 'boolean', 'default' => true, 'editable' => false, 'label' => $this->__("Amélioration de la lisibilité en mode 2D"));
+        $this->fields['pagesBaseAngle'] = array('type' => 'integer', 'default' => 2, 'editable' => false, 'label' => $this->__('Angle de base entre les pages'), 'grade' => 3,
+            'hint' => $this->__("0 : Publication à plat") . "\n" . $this->__('2 : Valeur par défaut'));
+        $this->fields['preload'] = array('type' => 'integer', 'default' => 16, 'editable' => false, 'label' => $this->__('Nombre de pages à précharger'), 'grade' => 3);
+        $this->fields['tooltipTimer'] = array('type' => 'float', 'default' => 3, "editable" => true, 'label' => $this->__("Temps maximum d'apparition des infos-bulles (en secondes)"));
+        $this->fields['indexAutoScroll'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => $this->__('Activer le scroll automatique'));
+        $this->fields['printCoverWithMarks'] = array('type' => 'boolean', 'default' => true, 'editable' => false, 'label' => $this->__("Imprimer les couvertures avec les pages marquées"), 'grade' => 3);
         $this->fields['ambientSound'] = array('type' => 'freefile', 'default' => '', 'editable' => false,
-            'label' => __('Ambiance sonore'), 'grade' => 3, 'fileFilter' => $soundFilter);
+            'label' => $this->__('Ambiance sonore'), 'grade' => 3, 'fileFilter' => $soundFilter);
         $this->fields['ambientSoundVolume'] = array('type' => 'integer', 'default' => 50, 'editable' => false,
-            'label' => __("Volume de l'ambiance sonore"),
+            'label' => $this->__("Volume de l'ambiance sonore"),
             'min' => 0, 'max' => 100);
-        $this->fields['offlineExport'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => __('Téléchargement des versions offline'), "hint" => __('Valable si le téléchargement avancé est activé'), 'grade' => 3);
-        $this->fields['zoomMode'] = array('type' => 'combo', 'default' => '0', 'editable' => false, 'label' => __("Mode de zoom"), 'grade' => 3,
-            'datas' => array(__('Normal') => '0',
-                __('Une page') => '1',
-                __('Zoom désactivé') => '2'));
-        $this->fields['displayChaptersLine'] = array('type' => 'boolean', 'default' => true, 'editable' => false, 'label' => __("Affiche une ligne entre le label et le numéro de page"), 'grade' => 5);
-        $this->fields['fullExternalChapters'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => __("Sommaire totalement personnalisé"), 'grade' => 3, 'hint' => __('Supprime la flèche de fermeture, titre prédéfini et couleur de fond'));
+        $this->fields['offlineExport'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => $this->__('Téléchargement des versions offline'), "hint" => $this->__('Valable si le téléchargement avancé est activé'), 'grade' => 3);
+        $this->fields['zoomMode'] = array('type' => 'combo', 'default' => '0', 'editable' => false, 'label' => $this->__("Mode de zoom"), 'grade' => 3,
+            'datas' => array($this->__('Normal') => '0',
+                $this->__('Une page') => '1',
+                $this->__('Zoom désactivé') => '2'));
+        $this->fields['displayChaptersLine'] = array('type' => 'boolean', 'default' => true, 'editable' => false, 'label' => $this->__("Affiche une ligne entre le label et le numéro de page"), 'grade' => 5);
+        $this->fields['fullExternalChapters'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => $this->__("Sommaire totalement personnalisé"), 'grade' => 3, 'hint' => $this->__('Supprime la flèche de fermeture, titre prédéfini et couleur de fond'));
         $this->fields['externalChapters'] = array('type' => 'freefile', 'default' => '', 'editable' => true,
-            'label' => __('Sommaire personnalisé'), 'grade' => 3, 'fileFilter' => $swfFilter, 'hint' => __('Laisser vide pour utiliser le sommaire classique'));
-        $this->fields['chaptersPosition'] = array('type' => 'combo', 'default' => 'center', 'editable' => false, 'label' => __("Position du sommaire"),
-            'datas' => array(__('Centré') => 'center',
-                __("Aligné sur l'icône") => 'chaptersIcon'));
-        $this->fields['permanentLinks'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => __('Liens visibles en permanence'), 'grade' => 3);
-        $this->fields['linkTooltipManager'] = array('type' => 'text', 'default' => '', 'editable' => false, 'label' => __("Gestionnaire des info-bulles"), 'grade' => 5);
-        $this->fields['linkMultimediaPerformanceMode'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => __('Mode perfomance pour les liens multimédia'), 'grade' => 5);
-        $this->fields['linkMultimediaQuality'] = array('type' => 'float', 'default' => 1.0, 'editable' => false, 'label' => __('Qualité de rendu des animations'), 'grade' => 5);
-        $this->fields['linkCornerSize'] = array('type' => 'integer', 'default' => 10, 'editable' => false, 'label' => __('Taille des liens de coins de page'), 'hint' => __("Pourcentage de la largeur de la page"));
-        $this->fields['videoReset'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => __('Réinitialiser les vidéos après la lecture'), 'grade' => 3);
-        $this->fields['videoBigPlay'] = array('type' => 'boolean', 'default' => true, 'editable' => false, 'label' => __('Afficher le gros bouton Play'), 'grade' => 3);
-        $this->fields['alwaysHTML5'] = array('type' => 'boolean', 'default' => true, 'editable' => false, 'label' => __('Toujours utiliser la version HTML5'), 'grade' => 1);
-        $this->fields['html5priority'] = array('type' => 'combo', 'default' => 'true', 'editable' => false, 'label' => __("Rediriger vers la version HTML5"), 'grade' => 1,
-            'datas' => array(__('Si l\'utilisateur a un appareil tactile') => 'false',
-                __('Si flash n\'est pas installé') => 'notinstalled',
-                __("Si flash n'est pas pas installé ou bloqué") => 'true'));
-        $this->fields['flashBlockedWait'] = array('type' => 'float', 'default' => 1.5, 'editable' => false, 'label' => __("Temps d'attente avant de considérer flash comme bloqué"));
-        $this->fields['widget'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => __('Générer le widget'), 'grade' => 3);
-        $this->fields['widgetCover'] = array('type' => 'boolean', 'default' => true, 'editable' => false, 'label' => __('Afficher la couverture') . ')', 'grade' => 3);
-        $this->fields['widgetSize'] = array('type' => 'integer', 'default' => 200, 'editable' => false, 'label' => __('Optimiser pour une hauteur de (en pixels)'), 'grade' => 3);
-        $this->fields['widgetQuality'] = array('type' => 'integer', 'default' => 85, 'min' => 0, 'max' => 100, 'editable' => false, 'label' => __('Qualité JPEG'), 'grade' => 3);
-        $this->fields['widgetStart'] = array('type' => 'integer', 'default' => 1, 'editable' => false, 'label' => __('Page de début'), 'grade' => 3);
-        $this->fields['widgetEnd'] = array('type' => 'integer', 'default' => 8, 'editable' => false, 'label' => __('Page de fin'), 'grade' => 3);
-//        $this->forms['widget'] = array('label' => __('Widget') . ' (' . __('Mini Fluidbook') . ')',
+            'label' => $this->__('Sommaire personnalisé'), 'grade' => 3, 'fileFilter' => $swfFilter, 'hint' => $this->__('Laisser vide pour utiliser le sommaire classique'));
+        $this->fields['chaptersPosition'] = array('type' => 'combo', 'default' => 'center', 'editable' => false, 'label' => $this->__("Position du sommaire"),
+            'datas' => array($this->__('Centré') => 'center',
+                $this->__("Aligné sur l'icône") => 'chaptersIcon'));
+        $this->fields['permanentLinks'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => $this->__('Liens visibles en permanence'), 'grade' => 3);
+        $this->fields['linkTooltipManager'] = array('type' => 'text', 'default' => '', 'editable' => false, 'label' => $this->__("Gestionnaire des info-bulles"), 'grade' => 5);
+        $this->fields['linkMultimediaPerformanceMode'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => $this->__('Mode perfomance pour les liens multimédia'), 'grade' => 5);
+        $this->fields['linkMultimediaQuality'] = array('type' => 'float', 'default' => 1.0, 'editable' => false, 'label' => $this->__('Qualité de rendu des animations'), 'grade' => 5);
+        $this->fields['linkCornerSize'] = array('type' => 'integer', 'default' => 10, 'editable' => false, 'label' => $this->__('Taille des liens de coins de page'), 'hint' => $this->__("Pourcentage de la largeur de la page"));
+        $this->fields['videoReset'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => $this->__('Réinitialiser les vidéos après la lecture'), 'grade' => 3);
+        $this->fields['videoBigPlay'] = array('type' => 'boolean', 'default' => true, 'editable' => false, 'label' => $this->__('Afficher le gros bouton Play'), 'grade' => 3);
+        $this->fields['alwaysHTML5'] = array('type' => 'boolean', 'default' => true, 'editable' => false, 'label' => $this->__('Toujours utiliser la version HTML5'), 'grade' => 1);
+        $this->fields['html5priority'] = array('type' => 'combo', 'default' => 'true', 'editable' => false, 'label' => $this->__("Rediriger vers la version HTML5"), 'grade' => 1,
+            'datas' => array($this->__('Si l\'utilisateur a un appareil tactile') => 'false',
+                $this->__('Si flash n\'est pas installé') => 'notinstalled',
+                $this->__("Si flash n'est pas pas installé ou bloqué") => 'true'));
+        $this->fields['flashBlockedWait'] = array('type' => 'float', 'default' => 1.5, 'editable' => false, 'label' => $this->__("Temps d'attente avant de considérer flash comme bloqué"));
+        $this->fields['widget'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => $this->__('Générer le widget'), 'grade' => 3);
+        $this->fields['widgetCover'] = array('type' => 'boolean', 'default' => true, 'editable' => false, 'label' => $this->__('Afficher la couverture') . ')', 'grade' => 3);
+        $this->fields['widgetSize'] = array('type' => 'integer', 'default' => 200, 'editable' => false, 'label' => $this->__('Optimiser pour une hauteur de (en pixels)'), 'grade' => 3);
+        $this->fields['widgetQuality'] = array('type' => 'integer', 'default' => 85, 'min' => 0, 'max' => 100, 'editable' => false, 'label' => $this->__('Qualité JPEG'), 'grade' => 3);
+        $this->fields['widgetStart'] = array('type' => 'integer', 'default' => 1, 'editable' => false, 'label' => $this->__('Page de début'), 'grade' => 3);
+        $this->fields['widgetEnd'] = array('type' => 'integer', 'default' => 8, 'editable' => false, 'label' => $this->__('Page de fin'), 'grade' => 3);
+//        $this->forms['widget'] = array('label' => $this->__('Widget') . ' (' . $this->__('Mini Fluidbook') . ')',
 //            'fieldsnames' => array('widget', 'widgetCover', 'widgetSize', 'widgetQuality', 'widgetStart', 'widgetEnd'));
-        $this->fields['extras'] = array('type' => 'textarea', 'default' => '', 'editable' => false, 'label' => __('Extras'), 'grade' => 3);
+        $this->fields['extras'] = array('type' => 'textarea', 'default' => '', 'editable' => false, 'label' => $this->__('Extras'), 'grade' => 3);
         $this->fields['v1SWF'] = array('type' => 'freefile', 'default' => '', 'editable' => false,
-            'label' => __('Index.swf spécifique'), 'grade' => 5, 'fileFilter' => $swfFilter);
-//        $this->forms['v1'] = array('label' => __('Options spécifiques au fluidbook version 1'),
+            'label' => $this->__('Index.swf spécifique'), 'grade' => 5, 'fileFilter' => $swfFilter);
+//        $this->forms['v1'] = array('label' => $this->__('Options spécifiques au fluidbook version 1'),
 //            'fieldsnames' => array('extras', 'v1SWF'));
-        $this->fields['ongletsXML'] = array('type' => 'textarea', 'default' => '', 'editable' => false, 'label' => __('XML de configuration des onglets'), 'grade' => 5);
+        $this->fields['ongletsXML'] = array('type' => 'textarea', 'default' => '', 'editable' => false, 'label' => $this->__('XML de configuration des onglets'), 'grade' => 5);
         $this->fields['ongletsSWF'] = array('type' => 'freefile', 'default' => '', 'editable' => false,
-            'label' => __('SWF pour onglets personnalisés'), 'grade' => 3, 'fileFilter' => $swfFilter);
+            'label' => $this->__('SWF pour onglets personnalisés'), 'grade' => 3, 'fileFilter' => $swfFilter);
         $this->fields['tabs2DSWF'] = array('type' => 'freefile', 'default' => '', 'editable' => false,
-            'label' => __('SWF pour onglets 2D'), 'grade' => 3, 'fileFilter' => $swfFilter);
+            'label' => $this->__('SWF pour onglets 2D'), 'grade' => 3, 'fileFilter' => $swfFilter);
         $this->fields['flatTabsAbsolute'] = array('type' => 'boolean', 'default' => false, "editable" => true,
-            'label' => __("Positionnement relatif à l'interface"), 'grade' => 5);
-//        $this->forms['flashtabs'] = array('label' => __('Onglets Flash'),
+            'label' => $this->__("Positionnement relatif à l'interface"), 'grade' => 5);
+//        $this->forms['flashtabs'] = array('label' => $this->__('Onglets Flash'),
 //            'fieldsnames' => array('ongletsSWF', 'ongletsXML', '|', 'tabs2DSWF', 'flatTabsAbsolute'));
-        $this->fields['viewMode'] = array('type' => 'combo', 'default' => '0', 'editable' => false, 'label' => __("Mode de visualisation (beta)"),
-            'datas' => array(__('Classique') => '0',
-                __("Diaporama") => '1',
+        $this->fields['viewMode'] = array('type' => 'combo', 'default' => '0', 'editable' => false, 'label' => $this->__("Mode de visualisation (beta)"),
+            'datas' => array($this->__('Classique') => '0',
+                $this->__("Diaporama") => '1',
             ),
             'grade' => 5);
-        $this->fields['mobileServerConfig'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => __('Inclure les fichiers de configuration serveur'), 'grade' => 3);
-        $this->fields['mobileIconVector'] = array('type' => 'boolean', 'default' => true, 'editable' => false, 'label' => __('Utiliser les icônes vectorielles'));
-//        $this->forms['mobile'] = array('label' => __('Version HTML5'),
+        $this->fields['mobileServerConfig'] = array('type' => 'boolean', 'default' => false, 'editable' => false, 'label' => $this->__('Inclure les fichiers de configuration serveur'), 'grade' => 3);
+        $this->fields['mobileIconVector'] = array('type' => 'boolean', 'default' => true, 'editable' => false, 'label' => $this->__('Utiliser les icônes vectorielles'));
+//        $this->forms['mobile'] = array('label' => $this->__('Version HTML5'),
 //            'fieldsnames' => array('alwaysHTML5', 'html5priority', 'flashBlockedWait', 'mobileIconVector', 'mobileServerConfig'));
         $this->fields['externalArchivesBack'] = array('type' => 'freefile', 'default' => '', 'editable' => true,
-            'label' => __('Image de fond'), 'grade' => 3, 'fileFilter' => $imageFilter);
-        $this->fields['archivesLink'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Lien'), 'grade' => 5);
-        $this->fields['printMode'] = array('type' => 'combo', 'default' => 'vector', 'editable' => true, 'label' => __("Mode d'impression"),
-            'datas' => array(__('Bitmap') => 'bitmap',
-                __('Vectoriel') => 'vector',
-                __('PDF') => 'pdf'));
+            'label' => $this->__('Image de fond'), 'grade' => 3, 'fileFilter' => $imageFilter);
+        $this->fields['archivesLink'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__('Lien'), 'grade' => 5);
+        $this->fields['printMode'] = array('type' => 'combo', 'default' => 'vector', 'editable' => true, 'label' => $this->__("Mode d'impression"),
+            'datas' => array($this->__('Bitmap') => 'bitmap',
+                $this->__('Vectoriel') => 'vector',
+                $this->__('PDF') => 'pdf'));
         /** **/
 
 
-        $this->fields['title'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __("Titre de la publication"), 'embed' => false);
-        $this->fields['url_link'] = array('type' => 'text', 'default' => 'http://', 'editable' => true, 'label' => __("URL du lien de retour au site"));
-        $this->fields['signature'] = array('type' => 'combo', 'default' => '1', 'editable' => true, 'label' => __('Signature'), 'grade' => 3, 'datas' => wsDroits::getSignatures());
-        $this->forms['important'] = array('label' => __('Description de la publication'),
+        $this->fields['title'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__("Titre de la publication"), 'embed' => false);
+        $this->fields['url_link'] = array('type' => 'text', 'default' => 'http://', 'editable' => true, 'label' => $this->__("URL du lien de retour au site"));
+        $this->fields['signature'] = array('type' => 'combo', 'default' => '1', 'editable' => true, 'label' => $this->__('Signature'), 'grade' => 3, 'datas' => wsDroits::getSignatures());
+        $this->forms['important'] = array('label' => $this->__('Description de la publication'),
             'fieldsnames' => array('mobileLVersion', 'mobileVersion', 'title', 'url_link', 'signature'));
         // .
         // .
 
-        $this->fields['assetsDir'] = ['type' => 'text', 'label' => __('Utiliser le dossier d\'assets du fluidbook'), 'default' => '', 'editable' => true, 'grade' => 5];
-        $this->fields['linksAssets'] = ['type' => 'freefile', 'label' => __('Charger ou remplacer des fichiers de liens'), 'default' => '', 'editable' => true, 'grade' => 3, 'multiple' => true];
+        $this->fields['assetsDir'] = ['type' => 'text', 'label' => $this->__('Utiliser le dossier d\'assets du fluidbook'), 'default' => '', 'editable' => true, 'grade' => 5];
+        $this->fields['linksAssets'] = ['type' => 'freefile', 'label' => $this->__('Charger ou remplacer des fichiers de liens'), 'default' => '', 'editable' => true, 'grade' => 3, 'multiple' => true];
 
         $this->forms['assets'] = [
-            'label' => __('Assets'),
+            'label' => $this->__('Assets'),
             'fieldsnames' => ['assetsDir', 'linksAssets']
         ];
         /** * */
-        $this->fields['stats'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Activer les statistiques Fluidbook'), 'grade' => 3);
-        $this->fields['googleAnalytics'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Code Google Analytics'), 'size' => 10);
-        $this->fields['googleTagManager'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Code Google Tag Manager'), 'size' => 10);
+        $this->fields['stats'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__('Activer les statistiques Fluidbook'), 'grade' => 3);
+        $this->fields['googleAnalytics'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__('Code Google Analytics'), 'size' => 10);
+        $this->fields['googleTagManager'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__('Code Google Tag Manager'), 'size' => 10);
         $this->forms['basicStats'] = [
-            'label' => __('Statistiques'),
+            'label' => $this->__('Statistiques'),
             'fieldsnames' => ['stats', 'googleAnalytics', 'googleTagManager'],
         ];
 
-        $this->fields['email_title'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __("Titre de l'email") . ' "' . __('Envoyer à un ami') . '"', 'hint' => __('Laisser vide pour utiliser la valeur par défaut'));
-        $this->fields['email_body'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __("Corps de l'email") . ' "' . __('Envoyer à un ami') . '"', 'hint' => __('Laisser vide pour utiliser la valeur par défaut'));
+        $this->fields['email_title'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__("Titre de l'email") . ' "' . $this->__('Envoyer à un ami') . '"', 'hint' => $this->__('Laisser vide pour utiliser la valeur par défaut'));
+        $this->fields['email_body'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => $this->__("Corps de l'email") . ' "' . $this->__('Envoyer à un ami') . '"', 'hint' => $this->__('Laisser vide pour utiliser la valeur par défaut'));
 
-        $this->fields['facebook_title'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __("Titre du contenu partagé"), 'hint' => __('Titre proposé sur les fonction de partage (par défaut, titre de la publication)'));
-        $this->fields['facebook_description'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __("Description du contenu partagé"), 'grade' => 1, 'hint' => __('Description proposée sur les fonctions de partage (par défaut, vide)'));
-        $this->fields['twitter_description'] = array('type' => 'textarea', 'default' => '%title% : %short%', 'editable' => true, 'label' => __("Contenu Partage court"), 'hint' => __('Contenu du partagé sur les partages courts'));
+        $this->fields['facebook_title'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__("Titre du contenu partagé"), 'hint' => $this->__('Titre proposé sur les fonction de partage (par défaut, titre de la publication)'));
+        $this->fields['facebook_description'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => $this->__("Description du contenu partagé"), 'grade' => 1, 'hint' => $this->__('Description proposée sur les fonctions de partage (par défaut, vide)'));
+        $this->fields['twitter_description'] = array('type' => 'textarea', 'default' => '%title% : %short%', 'editable' => true, 'label' => $this->__("Contenu Partage court"), 'hint' => $this->__('Contenu du partagé sur les partages courts'));
         $this->fields['facebook_image'] = array('type' => 'freefile', 'default' => '', 'editable' => true,
-            'label' => __('Miniature affichée'), 'fileFilter' => $imageFilter);
+            'label' => $this->__('Miniature affichée'), 'fileFilter' => $imageFilter);
 
-        $this->fields['share'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Activer les fonctions de partage'));
-        $this->fields['friend'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('E-mail'));
-        $this->fields['facebook'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Facebook'));
-        $this->fields['twitter'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Twitter'));
-        $this->fields['whatsapp'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('WhatsApp'));
-        $this->fields['linkedin'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('LinkedIn'));
-        $this->fields['pinterest'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Pinterest'));
+        $this->fields['share'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__('Activer les fonctions de partage'));
+        $this->fields['friend'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__('E-mail'));
+        $this->fields['facebook'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__('Facebook'));
+        $this->fields['twitter'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__('Twitter'));
+        $this->fields['whatsapp'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__('WhatsApp'));
+        $this->fields['linkedin'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__('LinkedIn'));
+        $this->fields['pinterest'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__('Pinterest'));
 
-        $this->forms['share'] = array('label' => __('Fonctions de partage'),
+        $this->forms['share'] = array('label' => $this->__('Fonctions de partage'),
             'fieldsnames' => array('share', '|', 'email_title', 'email_body', 'email_editable', 'askAcknowledge', 'sendasfluidbook', 'email_mailto', '|',
                 'facebook_title', 'facebook_description', 'facebook_image', 'twitter_description', '|',
                 'friend', 'facebook', 'twitter', 'whatsapp', 'linkedin', 'pinterest', '|', 'googleplus', 'viadeo', '|', 'customSharer', '|', 'friendWidth', 'friendHeight'));
 //.
-        $this->fields['seoVersion'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Générer une version pour les moteurs de recherche'));
-        $this->fields['seoRobots'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Autoriser le parcours par les moteurs de recherche'));
-        $this->fields['seoDescription'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Meta tag Description'));
-        $this->fields['seoKeywords'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Meta tag Keywords'));
-        $this->fields['seoAdvanced'] = ['type' => 'freefile', 'default' => '', 'editable' => true, 'label' => __('Données SEO par page'), 'grade' => 5, 'fileFilter' => $seoFilter];
-        $this->fields['seoBaseURL'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('URL de base'), 'grade' => 5);
-
-        $this->forms['seo'] = array('label' => __('Optimisation pour les moteurs de recherche'),
+        $this->fields['seoVersion'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__('Générer une version pour les moteurs de recherche'));
+        $this->fields['seoRobots'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__('Autoriser le parcours par les moteurs de recherche'));
+        $this->fields['seoDescription'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => $this->__('Meta tag Description'));
+        $this->fields['seoKeywords'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => $this->__('Meta tag Keywords'));
+        $this->fields['seoAdvanced'] = ['type' => 'freefile', 'default' => '', 'editable' => true, 'label' => $this->__('Données SEO par page'), 'grade' => 5, 'fileFilter' => $seoFilter];
+        $this->fields['seoBaseURL'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__('URL de base'), 'grade' => 5);
+
+        $this->forms['seo'] = array('label' => $this->__('Optimisation pour les moteurs de recherche'),
             'fieldsnames' => array('seoVersion', 'seoRobots', 'seoDescription', "seoKeywords", '|', 'seoBaseURL', 'seoAdvanced'));
 
         // .
-        $this->fields['pages'] = array('type' => 'integer', 'default' => 0, 'editable' => false, 'label' => __('Nombre de pages'));
-        $this->fields['width'] = array('type' => 'float', 'default' => 0, 'editable' => false, 'label' => __('Largeur'));
-        $this->fields['height'] = array('type' => 'float', 'default' => 0, 'editable' => false, 'label' => __('Hauteur'));
+        $this->fields['pages'] = array('type' => 'integer', 'default' => 0, 'editable' => false, 'label' => $this->__('Nombre de pages'));
+        $this->fields['width'] = array('type' => 'float', 'default' => 0, 'editable' => false, 'label' => $this->__('Largeur'));
+        $this->fields['height'] = array('type' => 'float', 'default' => 0, 'editable' => false, 'label' => $this->__('Hauteur'));
         // .
 
-        $this->fields['mobileTransitions'] = array('type' => 'combo', 'default' => 'flip3d', 'editable' => true, 'label' => __('Transitions entre les pages'), 'grade' => 3,
-            'datas' => array(__('Aucune transition') => 'none',
-                __('Opacité') => 'fade',
-                __('Glisser') => 'slide',
-                __('Tourner (rigide)') => 'flip',
-                __('Tourner (souple)') => 'flip3d')
+        $this->fields['mobileTransitions'] = array('type' => 'combo', 'default' => 'flip3d', 'editable' => true, 'label' => $this->__('Transitions entre les pages'), 'grade' => 3,
+            'datas' => array($this->__('Aucune transition') => 'none',
+                $this->__('Opacité') => 'fade',
+                $this->__('Glisser') => 'slide',
+                $this->__('Tourner (rigide)') => 'flip',
+                $this->__('Tourner (souple)') => 'flip3d')
         );
-        $this->fields['mobileTransitionDuration'] = array('type' => 'float', 'default' => 0.5, 'editable' => true, 'label' => __('Durée de la transition'));
-        $this->fields['mobileTransitionDurationSlide'] = array('type' => 'float', 'default' => 0, 'editable' => true, 'label' => __('Durée de la transition (fade, slide)'), 'hint' => __('Laisser à zéro pour utiliser la valeur générale'));
-        $this->fields['mobileNavigationType'] = array('type' => 'combo', 'default' => 'book', 'editable' => true, 'label' => __('Mode de navigation'), 'grade' => 5,
-            'datas' => array(__('Normal (automatique)') => 'book',
-                __('Normal (double page)') => 'landscape',
-                __('Normal (une page)') => 'portrait',
-                __('Mobile first') => 'mobilefirst',
-                __('Magazine tablette') => 'tab')
+        $this->fields['mobileTransitionDuration'] = array('type' => 'float', 'default' => 0.5, 'editable' => true, 'label' => $this->__('Durée de la transition'));
+        $this->fields['mobileTransitionDurationSlide'] = array('type' => 'float', 'default' => 0, 'editable' => true, 'label' => $this->__('Durée de la transition (fade, slide)'), 'hint' => $this->__('Laisser à zéro pour utiliser la valeur générale'));
+        $this->fields['mobileNavigationType'] = array('type' => 'combo', 'default' => 'book', 'editable' => true, 'label' => $this->__('Mode de navigation'), 'grade' => 5,
+            'datas' => array($this->__('Normal (automatique)') => 'book',
+                $this->__('Normal (double page)') => 'landscape',
+                $this->__('Normal (une page)') => 'portrait',
+                $this->__('Mobile first') => 'mobilefirst',
+                $this->__('Magazine tablette') => 'tab')
         );
-        $this->fields['forceWhiteBackground'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Ajouter un fond blanc aux pages')];
-        $this->fields['rasterizePages'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Ecraser les pages'), 'hint' => '1-3,5 = 1,2,3,5', 'grade' => 1);
-
-        $this->fields['vectorPages'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Conserver les pages en vecteur'), 'hint' => '1-3,5 = 1,2,3,5', 'grade' => 1);
-        $this->fields['extraXSpace'] = array('type' => 'integer', 'default' => 0, 'editable' => true, 'label' => __('Marge supplémentaire horizontale'), 'grade' => 3);
-        $this->fields['mobileExtraXSpace'] = array('type' => 'integer', 'default' => 0, 'editable' => true, 'label' => __('Marge supplémentaire horizontale'), 'grade' => 3);
-        $this->fields['extraYSpace'] = array('type' => 'integer', 'default' => 0, 'editable' => true, 'label' => __('Marge supplémentaire verticale'), 'grade' => 3);
-        $this->fields['centerBook'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Centrer la publication sur les couvertures'), 'grade' => 2);
-        $this->fields['correctCenter'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Corriger les lignes blanches entre les pages'), 'grade' => 2);
-        $this->fields['maxResolution'] = array('type' => 'combo', 'default' => 300, 'editable' => true, 'datas' => array('300dpi' => 300, '150dpi' => 150, '125dpi' => 125, '100dpi' => 100), 'grade' => 2, 'label' => __('Résolution maximale des pages'));
-        $this->fields['JPEGQuality'] = array('type' => 'integer', 'default' => 85, 'editable' => true, 'grade' => 2, 'label' => __('Qualité JPEG'));
-        $this->fields['imageFormat'] = array('type' => 'combo', 'default' => 'jpg', 'editable' => true, 'datas' => array(/*__('Le plus léger') => 'best', */
-            'JPEG' => 'jpg', 'PNG' => 'png'), 'grade' => 2, 'label' => __('Format des images'));
-        $this->fields['svgToCanvas'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Activer le rendu svgtocanvas')];
-        $this->fields['svgToCanvasUpscale'] = ['type' => 'float', 'default' => 1, 'editable' => true, 'label' => __('Upscale de la fonction svgtocanvas')];
-        $this->fields['svgTextMethod'] = ['type' => 'combo', 'default' => 'pdftocairo', 'editable' => true, 'label' => __('Méthode d\'extraction des textes en SVG'), 'datas' => [__('Cairo') => 'pdf', __('Mu') => 'mu']];
-        $this->fields['textsThickness'] = ['type' => 'float', 'default' => 1, 'editable' => true, 'label' => __('Epaisseur des textes')];
-        $this->fields['textsThicknessPages'] = ['type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Appliquer l\'épaisseur des texte sur les pages')];
+        $this->fields['forceWhiteBackground'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__('Ajouter un fond blanc aux pages')];
+        $this->fields['rasterizePages'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => $this->__('Ecraser les pages'), 'hint' => '1-3,5 = 1,2,3,5', 'grade' => 1);
+
+        $this->fields['vectorPages'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => $this->__('Conserver les pages en vecteur'), 'hint' => '1-3,5 = 1,2,3,5', 'grade' => 1);
+        $this->fields['extraXSpace'] = array('type' => 'integer', 'default' => 0, 'editable' => true, 'label' => $this->__('Marge supplémentaire horizontale'), 'grade' => 3);
+        $this->fields['mobileExtraXSpace'] = array('type' => 'integer', 'default' => 0, 'editable' => true, 'label' => $this->__('Marge supplémentaire horizontale'), 'grade' => 3);
+        $this->fields['extraYSpace'] = array('type' => 'integer', 'default' => 0, 'editable' => true, 'label' => $this->__('Marge supplémentaire verticale'), 'grade' => 3);
+        $this->fields['centerBook'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__('Centrer la publication sur les couvertures'), 'grade' => 2);
+        $this->fields['correctCenter'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__('Corriger les lignes blanches entre les pages'), 'grade' => 2);
+        $this->fields['maxResolution'] = array('type' => 'combo', 'default' => 300, 'editable' => true, 'datas' => array('300dpi' => 300, '150dpi' => 150, '125dpi' => 125, '100dpi' => 100), 'grade' => 2, 'label' => $this->__('Résolution maximale des pages'));
+        $this->fields['JPEGQuality'] = array('type' => 'integer', 'default' => 85, 'editable' => true, 'grade' => 2, 'label' => $this->__('Qualité JPEG'));
+        $this->fields['imageFormat'] = array('type' => 'combo', 'default' => 'jpg', 'editable' => true, 'datas' => array(/*$this->__('Le plus léger') => 'best', */
+            'JPEG' => 'jpg', 'PNG' => 'png'), 'grade' => 2, 'label' => $this->__('Format des images'));
+        $this->fields['svgToCanvas'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__('Activer le rendu svgtocanvas')];
+        $this->fields['svgToCanvasUpscale'] = ['type' => 'float', 'default' => 1, 'editable' => true, 'label' => $this->__('Upscale de la fonction svgtocanvas')];
+        $this->fields['svgTextMethod'] = ['type' => 'combo', 'default' => 'pdftocairo', 'editable' => true, 'label' => $this->__('Méthode d\'extraction des textes en SVG'), 'datas' => [$this->__('Cairo') => 'pdf', $this->__('Mu') => 'mu']];
+        $this->fields['textsThickness'] = ['type' => 'float', 'default' => 1, 'editable' => true, 'label' => $this->__('Epaisseur des textes')];
+        $this->fields['textsThicknessPages'] = ['type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__('Appliquer l\'épaisseur des texte sur les pages')];
         $this->fields['dynamicBackgroundColor'] = ['type' => 'textarea', 'default' => '', 'editable' => true, 'label' => 'Couleur de fond dynamique', 'grade' => 3];
 
 
-        $this->forms['3d_mode'] = array('label' => __('Options de visualisation'),
+        $this->forms['3d_mode'] = array('label' => $this->__('Options de visualisation'),
             'fieldsnames' => array('mobileNavigationType', '|', 'mobileTransitions', 'mobileTransitionDuration', 'mobileTransitionDurationSlide', '|', 'forceWhiteBackground', 'rasterizePages', 'vectorPages', 'visualisationMode', 'antialiasReading', 'correctCenter', 'pagesBaseAngle', 'centerBook', '|', 'extraXSpace', 'mobileExtraXSpace', 'extraYSpace', '|', 'viewMode', '|', 'dynamicBackgroundColor', '|', 'svgToCanvas', 'svgToCanvasUpscale', 'svgTextMethod', 'textsThickness', 'textsThicknessPages', '|', 'imageFormat', 'maxResolution', 'JPEGQuality'));
 
-        $this->fields['rasterizeOnSafari'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Ecraser les pages pour Safari (Mac OS)'), 'grade' => 1);
-        $this->fields['performance3DMode'] = array('type' => 'combo', 'datas' => [__('Tester la machine') => 'auto',
-            __('Haute') => 'highPerf',
-            __('Moyenne') => 'lowPerf',
-            __('Basse') => 'veryLowPerf'], 'default' => 'auto', 'editable' => true, 'label' => __('Performance de la 3D'), 'grade' => 1);
-        $this->forms['performances'] = ['label' => __('Performances'),
+        $this->fields['rasterizeOnSafari'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__('Ecraser les pages pour Safari (Mac OS)'), 'grade' => 1);
+        $this->fields['performance3DMode'] = array('type' => 'combo', 'datas' => [$this->__('Tester la machine') => 'auto',
+            $this->__('Haute') => 'highPerf',
+            $this->__('Moyenne') => 'lowPerf',
+            $this->__('Basse') => 'veryLowPerf'], 'default' => 'auto', 'editable' => true, 'label' => $this->__('Performance de la 3D'), 'grade' => 1);
+        $this->forms['performances'] = ['label' => $this->__('Performances'),
             'fieldsnames' => ['rasterizeOnSafari', 'performance3DMode']];
 
-        $this->fields['maxPages'] = array('type' => 'integer', 'default' => 0, 'editable' => true, 'label' => __("Nombre de pages maximal affiché à l'ouverture du fluidbook (pas de limite = 0)"), 'grade' => 3);
+        $this->fields['maxPages'] = array('type' => 'integer', 'default' => 0, 'editable' => true, 'label' => $this->__("Nombre de pages maximal affiché à l'ouverture du fluidbook (pas de limite = 0)"), 'grade' => 3);
 
-        $this->fields['mobilePlugins'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Plugin'), 'grade' => 5);
-        $this->forms['general'] = array('label' => __('Fonctionnalités générales'),
+        $this->fields['mobilePlugins'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => $this->__('Plugin'), 'grade' => 5);
+        $this->forms['general'] = array('label' => $this->__('Fonctionnalités générales'),
             'fieldsnames' => array('tooltipTimer', 'mobilePlugins', 'preload', 'maxPages', 'pages', 'width', 'height'));
         //.
         //
-        $this->fields['navOrder'] = array('type' => 'textarea', 'default' => 'index, chapters, search, print, friend, bookmark, pdf, notes, archives, basket, fullscreen, sound, 3d, extra, extra1, extra2, extra3, extra4, extra5, help, lang', 'editable' => true, 'label' => __('Ordre des icônes dans la nav'), 'grade' => 3);
-        $this->fields['navOrderH'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Ordre des icônes dans la nav') . ' (' . __('Si différente') . ')', 'grade' => 3);
-        $this->fields['menuBreakpoint'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Breakpoint burger menu'), 'hint' => 'Par défaut 1023px', 'grade' => 3);
-        $this->fields['mobileNavScale'] = array('type' => 'integer', 'default' => 100, 'editable' => true, 'label' => __('Taille du menu (en %)'), 'grade' => 3);
-        $this->forms['menu'] = array('label' => __('Menu'), 'fieldsnames' => ['navOrder', 'navOrderH', '|', 'mobileNavScale', 'menuBreakpoint', '|', 'afterSearchDisplayForHTML', '|']);
+        $this->fields['navOrder'] = array('type' => 'textarea', 'default' => 'index, chapters, search, print, friend, bookmark, pdf, notes, archives, basket, fullscreen, sound, 3d, extra, extra1, extra2, extra3, extra4, extra5, help, lang', 'editable' => true, 'label' => $this->__('Ordre des icônes dans la nav'), 'grade' => 3);
+        $this->fields['navOrderH'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => $this->__('Ordre des icônes dans la nav') . ' (' . $this->__('Si différente') . ')', 'grade' => 3);
+        $this->fields['menuBreakpoint'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__('Breakpoint burger menu'), 'hint' => 'Par défaut 1023px', 'grade' => 3);
+        $this->fields['mobileNavScale'] = array('type' => 'integer', 'default' => 100, 'editable' => true, 'label' => $this->__('Taille du menu (en %)'), 'grade' => 3);
+        $this->forms['menu'] = array('label' => $this->__('Menu'), 'fieldsnames' => ['navOrder', 'navOrderH', '|', 'mobileNavScale', 'menuBreakpoint', '|', 'afterSearchDisplayForHTML', '|']);
 
-        $this->fields['afterSearchDisplayForHTML'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Afficher l\'image après le moteur de recherche sur la version HTML5'), 'grade' => 1);
+        $this->fields['afterSearchDisplayForHTML'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__('Afficher l\'image après le moteur de recherche sur la version HTML5'), 'grade' => 1);
         $extraNum = 5;
         for ($i = 0; $i <= $extraNum; $i++) {
             if ($i > 0) {
                 $j = $i;
-                $this->fields['navExtraIcon' . $j] = array('type' => 'freefile', 'default' => '', 'editable' => true, 'label' => __('Icône supplémentaire') . ' ' . $j, 'fileFilter' => $imageExtraFilter);
-                $this->fields['navExtraType' . $j] = array('type' => 'combo', 'datas' => $extraType, 'default' => 'icon', 'editable' => true, 'label' => __('Type'));
-                $this->fields['navExtraLink' . $j] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __("URL") . ' ' . $j);
-                $this->fields['navExtraVisibility' . $j] = array('type' => 'combo', 'datas' => $extraVisibility, 'default' => 'both', 'editable' => true, 'label' => __("Visible") . ' ' . $j);
+                $this->fields['navExtraIcon' . $j] = array('type' => 'freefile', 'default' => '', 'editable' => true, 'label' => $this->__('Icône supplémentaire') . ' ' . $j, 'fileFilter' => $imageExtraFilter);
+                $this->fields['navExtraType' . $j] = array('type' => 'combo', 'datas' => $extraType, 'default' => 'icon', 'editable' => true, 'label' => $this->__('Type'));
+                $this->fields['navExtraLink' . $j] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__("URL") . ' ' . $j);
+                $this->fields['navExtraVisibility' . $j] = array('type' => 'combo', 'datas' => $extraVisibility, 'default' => 'both', 'editable' => true, 'label' => $this->__("Visible") . ' ' . $j);
                 $this->forms['menu']['fieldsnames'] = array_merge($this->forms['menu']['fieldsnames'], ['navExtraIcon' . $j, 'navExtraType' . $j, 'navExtraLink' . $j, 'navExtraVisibility' . $j, '|']);
             } else {
                 $j = '';
-                $this->fields['navExtraImage' . $j] = array('type' => 'freefile', 'default' => '', 'editable' => true, 'label' => __('Image pour navigation'), 'fileFilter' => $imageExtraFilter);
-                $this->fields['navExtraImageMobile' . $j] = array('type' => 'freefile', 'default' => '', 'editable' => true, 'label' => __('Image pour mobile'), 'fileFilter' => $imageExtraFilter);
-                $this->fields['navExtraLink' . $j] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __("URL"));
-                $this->fields['navExtraTooltip' . $j] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __("Infobulle ou label"));
+                $this->fields['navExtraImage' . $j] = array('type' => 'freefile', 'default' => '', 'editable' => true, 'label' => $this->__('Image pour navigation'), 'fileFilter' => $imageExtraFilter);
+                $this->fields['navExtraImageMobile' . $j] = array('type' => 'freefile', 'default' => '', 'editable' => true, 'label' => $this->__('Image pour mobile'), 'fileFilter' => $imageExtraFilter);
+                $this->fields['navExtraLink' . $j] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__("URL"));
+                $this->fields['navExtraTooltip' . $j] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__("Infobulle ou label"));
                 $this->forms['menu']['fieldsnames'] = array_merge($this->forms['menu']['fieldsnames'], ['navExtraImage' . $j, 'navExtraImageMobile' . $j, 'navExtraLink' . $j, 'navExtraTooltip' . $j, '|']);
             }
         }
-        $this->fields['mobileBottomNav'] = ['type' => 'text', 'default' => '', 'editable' => 'true', 'label' => __('Barre de boutons en bas'), 'hint' => __('Identifiants des boutons séparés par des virgules')];
+        $this->fields['mobileBottomNav'] = ['type' => 'text', 'default' => '', 'editable' => 'true', 'label' => $this->__('Barre de boutons en bas'), 'hint' => $this->__('Identifiants des boutons séparés par des virgules')];
         $this->forms['menu']['fieldsnames'][] = 'mobileBottomNav';
 
-        $this->fields['landingPage'] = array('type' => 'freefile', 'default' => '', 'editable' => true, 'label' => __('Landing Page content'), 'grade' => 3);
-        $this->forms['landing'] = array('label' => __('Custom Landing Page'), 'fieldsnames' => array('landingPage'));
+        $this->fields['landingPage'] = array('type' => 'freefile', 'default' => '', 'editable' => true, 'label' => $this->__('Landing Page content'), 'grade' => 3);
+        $this->forms['landing'] = array('label' => $this->__('Custom Landing Page'), 'fieldsnames' => array('landingPage'));
 
-        $this->fields['fullscreen'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Activer le mode plein-écran'));
-        $this->fields['fullscreenAuto'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Lancer la publication en mode plein écran (lorsque possible)'));
-        $this->forms['fs'] = array('label' => __('Plein écran'),
+        $this->fields['fullscreen'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__('Activer le mode plein-écran'));
+        $this->fields['fullscreenAuto'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__('Lancer la publication en mode plein écran (lorsque possible)'));
+        $this->forms['fs'] = array('label' => $this->__('Plein écran'),
             'fieldsnames' => array('fullscreen', 'fullscreenAuto'));
 
-        $this->fields['bookmark'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Activer les marques-pages'));
-        $this->fields['bookmarkView'] = array('type' => 'combo', 'datas' => [__('Réduit') => 'small', __('Complet') => 'large'], 'default' => 'small', 'editable' => true, 'label' => __('Menu des marques-pages'));
-        $this->fields['bookmarkEmpty'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __("Bouton pour effacer les marques-pages"));
-        $this->fields['bookmarkFunctionsMainMenu'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Fonctions vers menus généraux'), 'hint' => __('Les fonctions des marques pages (Télécharger, Imprimer, Envoyer) dirigent vers les menus généraux'));
-        $this->fields['bookmarkDisablePages'] = ['type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Désactiver les marques-pages sur ces pages'), 'hint' => '1-3,5 = 1,2,3,5', 'grade' => 1];
-        $this->fields['bookmarkSendEnable'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __("Activer l'envoi des marques-pages par e-mail"));
-        $this->fields['bookmarkPrint'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __("Activer l'impression des marques-pages"));
-        $this->fields['bookmark_email_title'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __("Titre de l'email") . ' "' . __('Envoyer à un ami') . '"', 'hint' => __('Laisser vide pour utiliser la valeur par défaut'));
-        $this->fields['bookmark_email_body'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __("Corps de l'email") . ' "' . __('Envoyer à un ami') . '"', 'hint' => __('Laisser vide pour utiliser la valeur par défaut'));
-        $this->fields['bookmarkCornerSize'] = array('type' => 'integer', 'default' => 8, 'editable' => true, 'label' => __("Taille des marques-pages"), 'hint' => __('Taille relative à la largeur de la page'));
-        $this->fields['bookmarkOffset'] = array('type' => 'integer', 'default' => 0, 'editable' => true, 'label' => __("Décaler de x pixels vers l'intérieur"));
-        $this->fields['bookmarkBlinkOnPageChange'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Faire clignoter le marque page à l\'apparition de la page'));
-        $this->fields['bookmarkPermanentIcon'] = ['type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Afficher l\'icône en permanance')];
-        $this->fields['bookmarkUsePDF'] = array('type' => 'combo', 'default' => 'pages', 'editable' => true, 'label' => __('PDF à utiliser pour l\'envoi ou le téléchargement de pages marquées'),
-            'datas' => [__('PDF des pages') => 'pages',
-                __('PDF de remplacement') => 'download',
-                __('PDF des miniatures') => 'thumbnails']);
-        $this->forms['bookmark'] = array('label' => __('Marques-pages'),
+        $this->fields['bookmark'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__('Activer les marques-pages'));
+        $this->fields['bookmarkView'] = array('type' => 'combo', 'datas' => [$this->__('Réduit') => 'small', $this->__('Complet') => 'large'], 'default' => 'small', 'editable' => true, 'label' => $this->__('Menu des marques-pages'));
+        $this->fields['bookmarkEmpty'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__("Bouton pour effacer les marques-pages"));
+        $this->fields['bookmarkFunctionsMainMenu'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__('Fonctions vers menus généraux'), 'hint' => $this->__('Les fonctions des marques pages (Télécharger, Imprimer, Envoyer) dirigent vers les menus généraux'));
+        $this->fields['bookmarkDisablePages'] = ['type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__('Désactiver les marques-pages sur ces pages'), 'hint' => '1-3,5 = 1,2,3,5', 'grade' => 1];
+        $this->fields['bookmarkSendEnable'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__("Activer l'envoi des marques-pages par e-mail"));
+        $this->fields['bookmarkPrint'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__("Activer l'impression des marques-pages"));
+        $this->fields['bookmark_email_title'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__("Titre de l'email") . ' "' . $this->__('Envoyer à un ami') . '"', 'hint' => $this->__('Laisser vide pour utiliser la valeur par défaut'));
+        $this->fields['bookmark_email_body'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => $this->__("Corps de l'email") . ' "' . $this->__('Envoyer à un ami') . '"', 'hint' => $this->__('Laisser vide pour utiliser la valeur par défaut'));
+        $this->fields['bookmarkCornerSize'] = array('type' => 'integer', 'default' => 8, 'editable' => true, 'label' => $this->__("Taille des marques-pages"), 'hint' => $this->__('Taille relative à la largeur de la page'));
+        $this->fields['bookmarkOffset'] = array('type' => 'integer', 'default' => 0, 'editable' => true, 'label' => $this->__("Décaler de x pixels vers l'intérieur"));
+        $this->fields['bookmarkBlinkOnPageChange'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__('Faire clignoter le marque page à l\'apparition de la page'));
+        $this->fields['bookmarkPermanentIcon'] = ['type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__('Afficher l\'icône en permanance')];
+        $this->fields['bookmarkUsePDF'] = array('type' => 'combo', 'default' => 'pages', 'editable' => true, 'label' => $this->__('PDF à utiliser pour l\'envoi ou le téléchargement de pages marquées'),
+            'datas' => [$this->__('PDF des pages') => 'pages',
+                $this->__('PDF de remplacement') => 'download',
+                $this->__('PDF des miniatures') => 'thumbnails']);
+        $this->forms['bookmark'] = array('label' => $this->__('Marques-pages'),
             'fieldsnames' => array('bookmark', 'bookmarkView', 'bookmarkFunctionsMainMenu', 'bookmarkEmpty', '|', 'bookmarkSendEnable', 'bookmark_email_title', 'bookmark_email_body', '|', 'bookmarkPrint', '|', 'bookmarkCornerSize', 'bookmarkOffset', 'bookmarkPermanentIcon', 'bookmarkBlinkOnPageChange', '|', 'bookmarkDisablePages', 'bookmarkUsePDF'));
 
-        $this->fields['help'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __("Activer l'aide"));
-        $this->fields['helpBookmarks'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __("Améliorer l'aide des marques-pages"));
-        $this->fields['helpStartup'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __("Afficher l'aide au démarrage"));
-        $this->fields['helpStartupTime'] = array('type' => 'integer', 'default' => 15, 'editable' => true, 'label' => __("Temps d'affichage en secondes"));
-        $this->fields['helpArrowTooltip'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Bulle affichée au niveau de la flèche de droite'), 'grade' => 5);
-        $this->fields['landscapeWarning'] = ['type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Avertissement affiché sur mobile au chargement de la publication'), 'grade' => 5, 'embed' => false];
-        $this->forms['help'] = array('label' => __('Aide'),
+        $this->fields['help'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__("Activer l'aide"));
+        $this->fields['helpBookmarks'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__("Améliorer l'aide des marques-pages"));
+        $this->fields['helpStartup'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__("Afficher l'aide au démarrage"));
+        $this->fields['helpStartupTime'] = array('type' => 'integer', 'default' => 15, 'editable' => true, 'label' => $this->__("Temps d'affichage en secondes"));
+        $this->fields['helpArrowTooltip'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__('Bulle affichée au niveau de la flèche de droite'), 'grade' => 5);
+        $this->fields['landscapeWarning'] = ['type' => 'textarea', 'default' => '', 'editable' => true, 'label' => $this->__('Avertissement affiché sur mobile au chargement de la publication'), 'grade' => 5, 'embed' => false];
+        $this->forms['help'] = array('label' => $this->__('Aide'),
             'fieldsnames' => array('help', '|', 'helpStartup', 'helpStartupTime', '|', 'helpBookmarks', '|', 'helpArrowTooltip', '|', 'landscapeWarning'));
         // .
         //
         $this->fields['pdfThumbnails'] = array('type' => 'freefile', 'default' => '', 'editable' => true,
-            'label' => __('PDF utilisé pour générer les miniatures'), 'grade' => 1, 'fileFilter' => $pdfFilter);
-        $this->fields['indexMessage'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __("Message en haut"), 'grade' => 1, 'hint' => __('Message en haut de la vue index'));
+            'label' => $this->__('PDF utilisé pour générer les miniatures'), 'grade' => 1, 'fileFilter' => $pdfFilter);
+        $this->fields['indexMessage'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => $this->__("Message en haut"), 'grade' => 1, 'hint' => $this->__('Message en haut de la vue index'));
 
-        $this->forms['index'] = array('label' => __('Vue d\'index (vignettes)'), 'fieldsnames' => array('indexAutoScroll', 'pdfThumbnails', 'indexMessage'));
+        $this->forms['index'] = array('label' => $this->__('Vue d\'index (vignettes)'), 'fieldsnames' => array('indexAutoScroll', 'pdfThumbnails', 'indexMessage'));
 
         // .
         //
-        $this->fields['print'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __("Activer l'impression"));
-        $this->fields['printFullBrochure'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __("Autoriser l'impression de la brochure complète"));
-        $this->fields['printPageRange'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __("Activer l'option pour imprimer une plage de pages"));
+        $this->fields['print'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__("Activer l'impression"));
+        $this->fields['printFullBrochure'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__("Autoriser l'impression de la brochure complète"));
+        $this->fields['printPageRange'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__("Activer l'option pour imprimer une plage de pages"));
 
-        $this->forms['print'] = array('label' => __('Impression'),
+        $this->forms['print'] = array('label' => $this->__('Impression'),
             'fieldsnames' => array('print', 'printFullBrochure', 'printPageRange'));
 
 
-        $this->fields['search'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Activer le moteur de recherche'));
-        $this->fields['searchFullBurger'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Afficher le burger menu complet à l\'ouverture de la recheche'));
-        $this->fields['highlightResults'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Surligner les résultats'));
-        $this->fields['highlightAllOccurences'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Surligner toutes les occurences'), 'hint' => __('Même sur les pages non considérées comme un résultat'));
-        $this->fields['ignoreSearch'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Mots à ignorer'),
-            'hint' => __('Liste des mots à ignorer séparés par des virgules'), 'grade' => 5);
-        $this->fields['ignoreSearchSeparators'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Caractères à ne pas considérer comme un séparateur de mot'));
-        $this->fields['ignoreWordLimit'] = ['type' => 'integer', 'default' => 3, 'editable' => true, 'label' => __('Ignorer les mots de moins de X caractères')];
-        $this->fields['textExtraction'] = array('type' => 'combo', 'default' => 'pdfbox', 'editable' => true, 'label' => __("Méthode d'extraction des textes"),
-            'datas' => array(__('PDFBox') => 'pdfbox',
-                __('Poppler') => 'poppler',
-                __('Fluidbook (expérimentation basée sur PDFBox)') => 'fluidbook'));
-        $this->fields['searchShowNoResultsPages'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __("Afficher les pages sans résultats"));
+        $this->fields['search'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__('Activer le moteur de recherche'));
+        $this->fields['searchFullBurger'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__('Afficher le burger menu complet à l\'ouverture de la recheche'));
+        $this->fields['highlightResults'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__('Surligner les résultats'));
+        $this->fields['highlightAllOccurences'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__('Surligner toutes les occurences'), 'hint' => $this->__('Même sur les pages non considérées comme un résultat'));
+        $this->fields['ignoreSearch'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => $this->__('Mots à ignorer'),
+            'hint' => $this->__('Liste des mots à ignorer séparés par des virgules'), 'grade' => 5);
+        $this->fields['ignoreSearchSeparators'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__('Caractères à ne pas considérer comme un séparateur de mot'));
+        $this->fields['ignoreWordLimit'] = ['type' => 'integer', 'default' => 3, 'editable' => true, 'label' => $this->__('Ignorer les mots de moins de X caractères')];
+        $this->fields['textExtraction'] = array('type' => 'combo', 'default' => 'pdfbox', 'editable' => true, 'label' => $this->__("Méthode d'extraction des textes"),
+            'datas' => array($this->__('PDFBox') => 'pdfbox',
+                $this->__('Poppler') => 'poppler',
+                $this->__('Fluidbook (expérimentation basée sur PDFBox)') => 'fluidbook'));
+        $this->fields['searchShowNoResultsPages'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__("Afficher les pages sans résultats"));
         $this->fields['searchPageSelectionAlgorithm'] = array('type' => 'combo', 'editable' => true, 'default' => 'AND',
-            'datas' => [__('les double-pages qui contiennent tous les mots recherchés (ET logique)') => 'AND', __('les double-page qui contiennent un des mots recherché (OU logique)') => 'OR'], 'label' => __('Algorithme de sélection des résultats'));
+            'datas' => [$this->__('les double-pages qui contiennent tous les mots recherchés (ET logique)') => 'AND', $this->__('les double-page qui contiennent un des mots recherché (OU logique)') => 'OR'], 'label' => $this->__('Algorithme de sélection des résultats'));
         $this->fields['searchWordSelectionAlgorithm'] = array('type' => 'combo', 'editable' => true, 'default' => 'begins',
-            'datas' => [__('mot commençant par la requête') => 'begins', __('mot correspondant exactement à la requête') => 'exact', __('mot contenant la requête') => 'contains', __('expression exacte') => 'expression'],
-            'label' => __('Algorithme de sélection des occurences'));
+            'datas' => [$this->__('mot commençant par la requête') => 'begins', $this->__('mot correspondant exactement à la requête') => 'exact', $this->__('mot contenant la requête') => 'contains', $this->__('expression exacte') => 'expression'],
+            'label' => $this->__('Algorithme de sélection des occurences'));
 
-        $this->forms['search'] = array('label' => __('Moteur de recherche'),
+        $this->forms['search'] = array('label' => $this->__('Moteur de recherche'),
             'fieldsnames' => array('search', '|', 'searchFullBurger', '|', 'ignoreWordLimit', 'ignoreSearch', 'ignoreSearchSeparators',
                 '|', 'searchWordSelectionAlgorithm', 'searchPageSelectionAlgorithm',
                 '|', 'highlightResults', 'highlightAllOccurences',
                 '|', 'searchShowNoResultsPages',
                 '|', 'textExtraction'));
 
-        $this->fields['soundTheme'] = array('type' => 'combo', 'default' => 'classic', 'editable' => true, 'label' => __("Thème sonore"),
-            'datas' => array(__('Pas de son') => '',
-                __('Classique') => 'classic',
-                __("Papier épais") => 'heavy',
-                __("Papier fin") => 'light',
-                __("Silencieux") => 'silent',
-                __('Woosh') => 'woosh'));
-        $this->fields['soundOn'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __("Activer les effets sonores à l'ouverture"));
-        $this->forms['sound'] = array('label' => __('Effets sonores'),
+        $this->fields['soundTheme'] = array('type' => 'combo', 'default' => 'classic', 'editable' => true, 'label' => $this->__("Thème sonore"),
+            'datas' => array($this->__('Pas de son') => '',
+                $this->__('Classique') => 'classic',
+                $this->__("Papier épais") => 'heavy',
+                $this->__("Papier fin") => 'light',
+                $this->__("Silencieux") => 'silent',
+                $this->__('Woosh') => 'woosh'));
+        $this->fields['soundOn'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__("Activer les effets sonores à l'ouverture"));
+        $this->forms['sound'] = array('label' => $this->__('Effets sonores'),
             'fieldsnames' => array('soundTheme', 'soundOn', '|', 'ambientSound', 'ambientSoundVolume'));
         // .
-        $this->fields['pdf'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __("Activer les fonctions de téléchargement"));
-        $this->fields['pdfName'] = array('type' => 'text', 'default' => 'document.pdf', 'editable' => true, 'label' => __("Nom du fichier PDF"));
-        $this->fields['pdfComplex'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Téchargement de PDF avancé'), "hint" => __("Permet à l'utilisateur de sélectionner les pages qu'il souhaite télécharger"), 'grade' => 3);
-        $this->fields['pdfComplexShowCurrent'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Afficher les pages courrantes'), 'grade' => 3);
-        $this->fields['pdfCompress'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Compression du fichier PDF'));
+        $this->fields['pdf'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__("Activer les fonctions de téléchargement"));
+        $this->fields['pdfName'] = array('type' => 'text', 'default' => 'document.pdf', 'editable' => true, 'label' => $this->__("Nom du fichier PDF"));
+        $this->fields['pdfComplex'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__('Téchargement de PDF avancé'), "hint" => $this->__("Permet à l'utilisateur de sélectionner les pages qu'il souhaite télécharger"), 'grade' => 3);
+        $this->fields['pdfComplexShowCurrent'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__('Afficher les pages courrantes'), 'grade' => 3);
+        $this->fields['pdfCompress'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__('Compression du fichier PDF'));
         $this->fields['pdfReplace'] = array('type' => 'freefile', 'default' => '', 'editable' => true,
-            'label' => __('PDF de remplacement'), 'grade' => 3, 'fileFilter' => $pdfFilter);
-        $this->forms['downloadpdf'] = array('label' => __('Fonction de téléchargement'),
+            'label' => $this->__('PDF de remplacement'), 'grade' => 3, 'fileFilter' => $pdfFilter);
+        $this->forms['downloadpdf'] = array('label' => $this->__('Fonction de téléchargement'),
             'fieldsnames' => array('pdf', 'pdfName', 'pdfReplace', 'pdfCompress', '|', 'pdfComplex', 'pdfComplexShowCurrent'));
         // .
 
-        $this->fields['zoom'] = array('type' => 'integer', 'default' => 200, 'editable' => true, 'label' => __('Zoom par défaut (atteint au clic)'));
-        $this->fields['zoomw'] = array('type' => 'integer', 'default' => 300, 'editable' => true, 'label' => __("Zoom maximal (atteint à l'aide de la molette)"));
-        $this->fields['hideHeaderOnZoom'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Cacher le menu lors du zoom')];
-        $this->fields['zoomMouseMoveMode'] = ['type' => 'combo', 'default' => 'move', 'editable' => true, 'label' => __('Mode de déplacement des pages zoomées (souris)'),
-            'datas' => [__('Bouger la souris') => 'move', __('Drag & drop') => __('dragndrop')]];
-        $this->fields['zoomWheel'] = ['type' => 'combo', 'default' => 'wheel', 'editable' => true, 'label' => __('Zoom molette'), 'datas' => [
-            __('Désactivé') => 'disabled',
-            __('Molette') => 'wheel',
-            __('Ctrl+Molette') => 'ctrlwheel',
+        $this->fields['zoom'] = array('type' => 'integer', 'default' => 200, 'editable' => true, 'label' => $this->__('Zoom par défaut (atteint au clic)'));
+        $this->fields['zoomw'] = array('type' => 'integer', 'default' => 300, 'editable' => true, 'label' => $this->__("Zoom maximal (atteint à l'aide de la molette)"));
+        $this->fields['hideHeaderOnZoom'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__('Cacher le menu lors du zoom')];
+        $this->fields['zoomMouseMoveMode'] = ['type' => 'combo', 'default' => 'move', 'editable' => true, 'label' => $this->__('Mode de déplacement des pages zoomées (souris)'),
+            'datas' => [$this->__('Bouger la souris') => 'move', $this->__('Drag & drop') => $this->__('dragndrop')]];
+        $this->fields['zoomWheel'] = ['type' => 'combo', 'default' => 'wheel', 'editable' => true, 'label' => $this->__('Zoom molette'), 'datas' => [
+            $this->__('Désactivé') => 'disabled',
+            $this->__('Molette') => 'wheel',
+            $this->__('Ctrl+Molette') => 'ctrlwheel',
         ]];
-        $this->fields['zoomClick'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Cliquer sur les pages pour zoomer')];
-        $this->forms['zoom'] = array('label' => __('Zoom'),
+        $this->fields['zoomClick'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__('Cliquer sur les pages pour zoomer')];
+        $this->forms['zoom'] = array('label' => $this->__('Zoom'),
             'fieldsnames' => array('zoomClick', 'zoomWheel', '|', 'zoom', 'zoomw', '|', 'zoomMouseMoveMode', 'hideHeaderOnZoom'));
         // .
 
         $this->fields['sliderImage'] = array('type' => 'freefile', 'default' => '', 'editable' => true,
-            'label' => __('Image pour le slider'), 'grade' => 3, 'fileFilter' => $imageExtraFilter);
+            'label' => $this->__('Image pour le slider'), 'grade' => 3, 'fileFilter' => $imageExtraFilter);
 
-        $this->forms['slider'] = ['label' => __('Slider'),
+        $this->forms['slider'] = ['label' => $this->__('Slider'),
             'fieldsnames' => ['sliderImage'],
         ];
 
-        $this->fields['stats_score'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Afficher les scores dans les rapports'), 'grade' => 5);
-        $this->fields['stats_exclude_ip'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Exclure les IP suivantes des statistiques'), 'grade' => 3, 'hint' => sprintf(__('Indiquer une adresse ip de la forme %s par ligne'), 'www.xxx.yyy.zzz'));
-        $this->fields['relay_url_params'] = ['type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Relayer les paramètres d\'url dans les liens sortants'), 'grade' => 3];
-        $this->fields['gtag_additional_code'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Code additionnel Google Tag Manager'));
-        $this->fields['googleAnalyticsCustom'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Code Stats personnalisé (placé avant fermeture de head)'));
-        $this->fields['statsCustom'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Code Stats personnalisé (placé avant fermeture du body)'));
-        $this->fields['xiti'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Code XiTi global'));
-        $this->fields['xiti_page'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Modèle code xiti (pour tags relatifs aux pages)'));
+        $this->fields['stats_score'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__('Afficher les scores dans les rapports'), 'grade' => 5);
+        $this->fields['stats_exclude_ip'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => $this->__('Exclure les IP suivantes des statistiques'), 'grade' => 3, 'hint' => sprintf($this->__('Indiquer une adresse ip de la forme %s par ligne'), 'www.xxx.yyy.zzz'));
+        $this->fields['relay_url_params'] = ['type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__('Relayer les paramètres d\'url dans les liens sortants'), 'grade' => 3];
+        $this->fields['gtag_additional_code'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => $this->__('Code additionnel Google Tag Manager'));
+        $this->fields['googleAnalyticsCustom'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => $this->__('Code Stats personnalisé (placé avant fermeture de head)'));
+        $this->fields['statsCustom'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => $this->__('Code Stats personnalisé (placé avant fermeture du body)'));
+        $this->fields['xiti'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => $this->__('Code XiTi global'));
+        $this->fields['xiti_page'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => $this->__('Modèle code xiti (pour tags relatifs aux pages)'));
         $this->fields['tagcommander_id'] = ['type' => 'text', 'default' => '', 'editable' => true, 'label' => 'Tag commander ID', 'grade' => 3];
         $this->fields['tagcommander_scriptname'] = ['type' => 'text', 'default' => 'tc_Multisite_Head.js,tc_Multisite_Analytics.js,tc_Multisite_Medias.js', 'editable' => true, 'label' => 'Nom du script Tagcommander', 'grade' => 3];
         $this->fields['tagcommander_prod'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => 'Production', 'grade' => 3];
         $this->fields['tagcommander_plan'] = ['type' => 'freefile', 'default' => '', 'editable' => true, 'label' => 'Plan de taggage "Tag commander"', 'grade' => 3];
         $this->fields['tagcommander_default_vars'] = ['type' => 'textarea', 'default' => '', 'editable' => true, 'label' => 'Variables par défaut', 'grade' => 3];
-        $this->fields['anchorsAliases'] = ['type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Alias des ancres')];
-        $this->forms['stats'] = array('label' => __('Statistiques avancées'),
+        $this->fields['anchorsAliases'] = ['type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__('Alias des ancres')];
+        $this->forms['stats'] = array('label' => $this->__('Statistiques avancées'),
             'fieldsnames' => array('tagcommander_id', 'tagcommander_scriptname', 'tagcommander_prod', 'tagcommander_plan', 'tagcommander_default_vars', 'anchorsAliases', '|', 'stats_score', 'stats_exclude_ip', '|', 'relay_url_params', '|', 'gtag_additional_code', '|', 'googleAnalyticsCustom', 'statsCustom', '|', 'xiti', 'xiti_page'));
 
-        $this->fields['displayChaptersPopup'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Always display chapters in a popup'), 'grade' => 1);
-        $this->fields['displayChaptersIcon'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __("Affiche l'icône du sommaire"), 'grade' => 1);
-        $this->fields['chaptersCaptionDisplay'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Afficher le titre "Sommaire" dans la popup'), 'grade' => 3];
-        $this->fields['chaptersFontSize'] = ['type' => 'integer', 'default' => 100, 'min' => 50, 'max' => 120, 'editable' => true, 'label' => __('Taille du texte des élements du sommaire'), 'hint' => 'En % par rapport à la taille normale', 'grade' => 3];
-        $this->fields['chaptersPage'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Faire pointer le sommaire sur la page'), 'grade' => 3, 'hint' => __('Laisser vide pour utiliser le sommaire classique'), 'size' => 5);
-        $this->fields['displayChaptersAtStart'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __("Afficher le sommaire au chargement de la publication"), 'grade' => 3);
-        $this->fields['chaptersColumns'] = array('type' => 'integer', 'default' => 1, 'editable' => true, 'label' => __('Afficher le sommaire sur x colonne(s)'), 'grade' => 3);
-        $this->fields['chaptersColMaxWidth'] = array('type' => 'integer', 'default' => 300, 'editable' => true, 'label' => __("Largeur max d'une colonne"), 'grade' => 3);
-        $this->fields['chaptersLevelLimit'] = array('type' => 'integer', 'default' => 5, 'editable' => true, 'label' => __('Limiter à x niveaux'));
-        $this->fields['chaptersIndent'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Indenter les éléments (pour les sommaires à plat)')];
+        $this->fields['displayChaptersPopup'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__('Always display chapters in a popup'), 'grade' => 1);
+        $this->fields['displayChaptersIcon'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__("Affiche l'icône du sommaire"), 'grade' => 1);
+        $this->fields['chaptersCaptionDisplay'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__('Afficher le titre "Sommaire" dans la popup'), 'grade' => 3];
+        $this->fields['chaptersFontSize'] = ['type' => 'integer', 'default' => 100, 'min' => 50, 'max' => 120, 'editable' => true, 'label' => $this->__('Taille du texte des élements du sommaire'), 'hint' => 'En % par rapport à la taille normale', 'grade' => 3];
+        $this->fields['chaptersPage'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__('Faire pointer le sommaire sur la page'), 'grade' => 3, 'hint' => $this->__('Laisser vide pour utiliser le sommaire classique'), 'size' => 5);
+        $this->fields['displayChaptersAtStart'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__("Afficher le sommaire au chargement de la publication"), 'grade' => 3);
+        $this->fields['chaptersColumns'] = array('type' => 'integer', 'default' => 1, 'editable' => true, 'label' => $this->__('Afficher le sommaire sur x colonne(s)'), 'grade' => 3);
+        $this->fields['chaptersColMaxWidth'] = array('type' => 'integer', 'default' => 300, 'editable' => true, 'label' => $this->__("Largeur max d'une colonne"), 'grade' => 3);
+        $this->fields['chaptersLevelLimit'] = array('type' => 'integer', 'default' => 5, 'editable' => true, 'label' => $this->__('Limiter à x niveaux'));
+        $this->fields['chaptersIndent'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__('Indenter les éléments (pour les sommaires à plat)')];
 
         $this->fields['externalChaptersHTML'] = array('type' => 'freefile', 'default' => '', 'editable' => true,
-            'label' => __('Sommaire personnalisé'), 'grade' => 3, 'fileFilter' => $multimediaFilter, 'hint' => __('Laisser vide pour utiliser le sommaire classique'));
-        $this->fields['mobileChaptersStyle'] = array('type' => 'combo', 'default' => 'classic', 'editable' => true, 'label' => __('Style des chapitres')
-        , 'datas' => array(__('Classique') => 'classic',
-                __('INA') => 'ina'));
-        $this->fields['chaptersPagesNumber'] = array('type' => 'combo', 'default' => 'virtual', 'editable' => true, 'label' => __('Numérotation du sommaire'), 'datas' => $pagesNumbers);
-        $this->fields['chaptersCascade'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __("Sommaire en cascade"), 'grade' => 3);
-
-        $this->forms['sommaire'] = array('label' => __('Sommaire'),
+            'label' => $this->__('Sommaire personnalisé'), 'grade' => 3, 'fileFilter' => $multimediaFilter, 'hint' => $this->__('Laisser vide pour utiliser le sommaire classique'));
+        $this->fields['mobileChaptersStyle'] = array('type' => 'combo', 'default' => 'classic', 'editable' => true, 'label' => $this->__('Style des chapitres')
+        , 'datas' => array($this->__('Classique') => 'classic',
+                $this->__('INA') => 'ina'));
+        $this->fields['chaptersPagesNumber'] = array('type' => 'combo', 'default' => 'virtual', 'editable' => true, 'label' => $this->__('Numérotation du sommaire'), 'datas' => $pagesNumbers);
+        $this->fields['chaptersCascade'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__("Sommaire en cascade"), 'grade' => 3);
+
+        $this->forms['sommaire'] = array('label' => $this->__('Sommaire'),
             'fieldsnames' => array('chaptersCaptionDisplay', 'chaptersFontSize', '|', 'displayChaptersIcon', 'displayChaptersPopup', 'displayChaptersAtStart', 'chaptersPage', 'chaptersPosition', 'chaptersLevelLimit', 'chaptersCascade', 'chaptersPagesNumber', '|', 'chaptersColMaxWidth', 'chaptersColumns', 'displayChaptersLine', 'chaptersIndent', '|', 'externalChaptersHTML', '|', 'mobileChaptersStyle'));
         // .
         $this->fields['tabsHTML5'] = array('type' => 'freefile', 'default' => '', 'editable' => true,
-            'label' => __('Fichier d\'onglets') . ' (SVG, ZIP)', 'grade' => 3, 'hint' => __('Charger un zip rendra les options ci-dessous inopérantes'), 'fileFilter' => $tabsFilter);
-        $this->fields['tabsSide'] = ['type' => 'combo', 'label' => __('Position des onglets'), 'editable' => true, 'default' => 'right', 'grade' => 5,
+            'label' => $this->__('Fichier d\'onglets') . ' (SVG, ZIP)', 'grade' => 3, 'hint' => $this->__('Charger un zip rendra les options ci-dessous inopérantes'), 'fileFilter' => $tabsFilter);
+        $this->fields['tabsSide'] = ['type' => 'combo', 'label' => $this->__('Position des onglets'), 'editable' => true, 'default' => 'right', 'grade' => 5,
             'datas' => [
-                __('Gauche') => 'left',
-                __('Droite') => 'right',
+                $this->__('Gauche') => 'left',
+                $this->__('Droite') => 'right',
             ]
         ];
         $this->fields['tabsPriority'] = ['type' => 'integer', 'min' => 0, 'max' => 100, 'default' => 15, 'editable' => true, 'label' => 'Priorité des onglets sur les contenus (%)', 'hint' => 'La valeur indique la réduction permise de la taille de la publication.'];
-        $this->fields['tabsPages'] = ['type' => 'text', 'label' => __('Pages des onglets'), 'editable' => true, 'default' => '', 'grade' => 5, 'hint' => __('Numéros de pages séparas par une virgule')];
-        $this->fields['tabsSections'] = ['type' => 'text', 'label' => __('Sections des onglets'), 'editable' => true, 'default' => '', 'grade' => 5, 'hint' => __('Numéros de pages séparés par une virgule')];
-        $this->fields['tabsPagesNumbers'] = ['type' => 'combo', 'label' => __('Numérotation utilisée'), 'editable' => true, 'default' => 'virtual', 'grade' => 5, 'datas' => $pagesNumbers];
-        $this->fields['tabsHideOnPages'] = ['type' => 'text', 'label' => __('Cacher les onglets sur les pages'), 'editable' => true, 'default' => '', 'grade' => 5, 'hint' => '1-3,5 = 1,2,3,5'];
-        $this->fields['tabsDisabledOnPages'] = ['type' => 'text', 'label' => __('Onglets inactifs sur les pages'), 'editable' => true, 'default' => '', 'grade' => 5, 'hint' => '1-3,5 = 1,2,3,5'];
-        $this->fields['tabsHideOnCover'] = ['type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Cacher les onglets sur la couverture'), 'grade' => 5];
-        $this->fields['tabsHideOnLastPage'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Cacher les onglets sur la dernière page'), 'grade' => 5];
-        $this->fields['tabsHideOnPortrait'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Cacher les onglets lorsque le fluidbook est en mode portrait'), 'grade' => 5];
-        $this->fields['tabsHideOnZoom'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Cacher les onglets lorsque le fluidbook est zoomé'), 'grade' => 5];
-        $this->fields['tabsHideWhenOverlapingArrows'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Cacher les onglets lorsqu\'ils passent sous les flèches de navigation'), 'grade' => 5];
-        $this->fields['tabsHideEdges'] = ['type' => 'combo', 'label' => __('Masquer les bordures du fluidbook'), 'editable' => true, 'default' => 'right', 'grade' => 5,
+        $this->fields['tabsPages'] = ['type' => 'text', 'label' => $this->__('Pages des onglets'), 'editable' => true, 'default' => '', 'grade' => 5, 'hint' => $this->__('Numéros de pages séparas par une virgule')];
+        $this->fields['tabsSections'] = ['type' => 'text', 'label' => $this->__('Sections des onglets'), 'editable' => true, 'default' => '', 'grade' => 5, 'hint' => $this->__('Numéros de pages séparés par une virgule')];
+        $this->fields['tabsPagesNumbers'] = ['type' => 'combo', 'label' => $this->__('Numérotation utilisée'), 'editable' => true, 'default' => 'virtual', 'grade' => 5, 'datas' => $pagesNumbers];
+        $this->fields['tabsHideOnPages'] = ['type' => 'text', 'label' => $this->__('Cacher les onglets sur les pages'), 'editable' => true, 'default' => '', 'grade' => 5, 'hint' => '1-3,5 = 1,2,3,5'];
+        $this->fields['tabsDisabledOnPages'] = ['type' => 'text', 'label' => $this->__('Onglets inactifs sur les pages'), 'editable' => true, 'default' => '', 'grade' => 5, 'hint' => '1-3,5 = 1,2,3,5'];
+        $this->fields['tabsHideOnCover'] = ['type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__('Cacher les onglets sur la couverture'), 'grade' => 5];
+        $this->fields['tabsHideOnLastPage'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__('Cacher les onglets sur la dernière page'), 'grade' => 5];
+        $this->fields['tabsHideOnPortrait'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__('Cacher les onglets lorsque le fluidbook est en mode portrait'), 'grade' => 5];
+        $this->fields['tabsHideOnZoom'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__('Cacher les onglets lorsque le fluidbook est zoomé'), 'grade' => 5];
+        $this->fields['tabsHideWhenOverlapingArrows'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__('Cacher les onglets lorsqu\'ils passent sous les flèches de navigation'), 'grade' => 5];
+        $this->fields['tabsHideEdges'] = ['type' => 'combo', 'label' => $this->__('Masquer les bordures du fluidbook'), 'editable' => true, 'default' => 'right', 'grade' => 5,
             'datas' => [
-                __('Aucune') => 'none',
-                __('Gauche') => 'left',
-                __('Droite') => 'right',
-                __('Les deux') => 'both',
+                $this->__('Aucune') => 'none',
+                $this->__('Gauche') => 'left',
+                $this->__('Droite') => 'right',
+                $this->__('Les deux') => 'both',
             ]
         ];
-        $this->fields['tabsMargin'] = ['type' => 'float', 'label' => __('Marge des onglets'), 'editable' => true, 'default' => -10, 'grade' => 5, 'hint' => __('Une marge négative = les onglets passent sous la publication')];
-        $this->fields['tabsLinkWidth'] = ['type' => 'float', 'label' => __('Largeur des onglets'), 'editable' => true, 'default' => 30, 'grade' => 5, 'hint' => __('Largeur réservée pour les onglets et largeur de la zone cliquable des liens')];
-        $this->forms['tabs'] = ['label' => __('Onglets'),
+        $this->fields['tabsMargin'] = ['type' => 'float', 'label' => $this->__('Marge des onglets'), 'editable' => true, 'default' => -10, 'grade' => 5, 'hint' => $this->__('Une marge négative = les onglets passent sous la publication')];
+        $this->fields['tabsLinkWidth'] = ['type' => 'float', 'label' => $this->__('Largeur des onglets'), 'editable' => true, 'default' => 30, 'grade' => 5, 'hint' => $this->__('Largeur réservée pour les onglets et largeur de la zone cliquable des liens')];
+        $this->forms['tabs'] = ['label' => $this->__('Onglets'),
             'fieldsnames' => ['tabsHTML5', 'tabsPages', 'tabsSections', 'tabsPagesNumbers', 'tabsDisabledOnPages', '|', 'tabsSide', 'tabsMargin', '|', 'tabsHideOnPages', 'tabsHideOnCover', 'tabsHideOnLastPage', 'tabsHideEdges', '|', 'tabsPriority', 'tabsLinkWidth', 'tabsHideWhenOverlapingArrows', 'tabsHideOnPortrait', 'tabsHideOnZoom']];
 
         /*** **/
 
-        $this->fields['customLinkClass'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Classe pour les liens personnalisés'), 'grade' => 5);
-        $this->fields['ignoreLinksTypes'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Ignorer les liens de type'), 'hint' => __('Liste des numéros séparés par des virgules'), 'grade' => 5);
-        $this->fields['mobileLinksRevealAnim'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __("Animer les liens après un changement de page"), 'grade' => 3);
-        $this->fields['linkBlinkTime'] = array('type' => 'float', 'default' => 1.0, 'editable' => true, 'label' => __("Temps d'apparition du lien à l'ouverture de la page (en secondes)"));
-        $this->fields['linkBlinkRepetition'] = ['type' => 'integer', 'default' => 1, 'editable' => true, 'label' => __('Nombre de clignotement lors de l\'apparition des liens')];
-        $this->fields['linkTracker'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Tracking des liens'), 'grade' => 5);
-        $this->fields['linkTrackerRegexp'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Tracking des liens applicables aux liens du domaine'), 'grade' => 5);
-        $this->fields['linkFilePrefix'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Préfixer les liens de téléchargement'));
-        $this->fields['linkTooltipMaxWidth'] = array('type' => 'integer', 'default' => 140, 'editable' => true, 'label' => __('Largeur max des infobulles des liens de type "infobulle"'));
-        $this->fields['openLinkAtStartup'] = ['type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Déclencher un lien à l\'ouverture du fluidbook')];
-
-        $this->fields['mobileIgnoreBackgroundLinks'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Ignorer les liens de background'));
-        $this->forms['links'] = array('label' => __('Liens'),
+        $this->fields['customLinkClass'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__('Classe pour les liens personnalisés'), 'grade' => 5);
+        $this->fields['ignoreLinksTypes'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__('Ignorer les liens de type'), 'hint' => $this->__('Liste des numéros séparés par des virgules'), 'grade' => 5);
+        $this->fields['mobileLinksRevealAnim'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__("Animer les liens après un changement de page"), 'grade' => 3);
+        $this->fields['linkBlinkTime'] = array('type' => 'float', 'default' => 1.0, 'editable' => true, 'label' => $this->__("Temps d'apparition du lien à l'ouverture de la page (en secondes)"));
+        $this->fields['linkBlinkRepetition'] = ['type' => 'integer', 'default' => 1, 'editable' => true, 'label' => $this->__('Nombre de clignotement lors de l\'apparition des liens')];
+        $this->fields['linkTracker'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__('Tracking des liens'), 'grade' => 5);
+        $this->fields['linkTrackerRegexp'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__('Tracking des liens applicables aux liens du domaine'), 'grade' => 5);
+        $this->fields['linkFilePrefix'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__('Préfixer les liens de téléchargement'));
+        $this->fields['linkTooltipMaxWidth'] = array('type' => 'integer', 'default' => 140, 'editable' => true, 'label' => $this->__('Largeur max des infobulles des liens de type "infobulle"'));
+        $this->fields['openLinkAtStartup'] = ['type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__('Déclencher un lien à l\'ouverture du fluidbook')];
+
+        $this->fields['mobileIgnoreBackgroundLinks'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__('Ignorer les liens de background'));
+        $this->forms['links'] = array('label' => $this->__('Liens'),
             'fieldsnames' => array('permanentLinks', 'mobileLinksRevealAnim', 'linkBlinkTime', 'linkBlinkRepetition', '|', 'openLinkAtStartup', '|', 'customLinkClass', 'ignoreLinksTypes', 'mobileIgnoreBackgroundLinks', 'linkTooltipManager', 'linkCornerSize', 'linkTooltipMaxWidth', '|', 'linkTracker', 'linkTrackerRegexp', '|', 'linkFilePrefix'));
         //.
 
-        $this->fields['textPopupStylesheet'] = ['type' => 'freefile', 'default' => '', 'editable' => true, 'label' => __('Feuille de style des popups de texte'), 'fileFilter' => $cssFilter];
-        $this->fields['textPopupWidth'] = ['type' => 'integer', 'default' => 600, 'editable' => true, 'label' => __('Largeur optimale des popups')];
-        $this->fields['iframePopupMaxWidth'] = ['type' => 'integer', 'default' => 0, 'editable' => true, 'label' => __('Largeur maximale des popups iframe')];
-        $this->fields['OAMChromeFactor'] = ['type' => 'float', 'default' => 1, 'editable' => true, 'label' => __('Facteur OAM Chrome')];
-        $this->fields['OAMIEFactor'] = ['type' => 'float', 'default' => 1, 'editable' => true, 'label' => __('Facteur OAM IE11')];
+        $this->fields['textPopupStylesheet'] = ['type' => 'freefile', 'default' => '', 'editable' => true, 'label' => $this->__('Feuille de style des popups de texte'), 'fileFilter' => $cssFilter];
+        $this->fields['textPopupWidth'] = ['type' => 'integer', 'default' => 600, 'editable' => true, 'label' => $this->__('Largeur optimale des popups')];
+        $this->fields['iframePopupMaxWidth'] = ['type' => 'integer', 'default' => 0, 'editable' => true, 'label' => $this->__('Largeur maximale des popups iframe')];
+        $this->fields['OAMChromeFactor'] = ['type' => 'float', 'default' => 1, 'editable' => true, 'label' => $this->__('Facteur OAM Chrome')];
+        $this->fields['OAMIEFactor'] = ['type' => 'float', 'default' => 1, 'editable' => true, 'label' => $this->__('Facteur OAM IE11')];
 
-        $this->forms['multimedia'] = ['label' => __('Multimedia'),
+        $this->forms['multimedia'] = ['label' => $this->__('Multimedia'),
             'fieldsnames' => ['textPopupStylesheet', 'textPopupWidth', '|', 'iframePopupMaxWidth', '|', 'OAMChromeFactor', 'OAMIEFactor']];
 
-        $pdfRendererOptions = [__('Navigateur') => 'native', 'PDF.js' => 'pdfjs', 'PDF.js (legacy)' => 'pdfjs-legacy'];
-        $pdfRenderOptionsIframe = array_merge($pdfRendererOptions, [__('Ecraser en SVG') => 'svg']);
+        $pdfRendererOptions = [$this->__('Navigateur') => 'native', 'PDF.js' => 'pdfjs', 'PDF.js (legacy)' => 'pdfjs-legacy'];
+        $pdfRenderOptionsIframe = array_merge($pdfRendererOptions, [$this->__('Ecraser en SVG') => 'svg']);
 
-        $this->fields['PDFRenderer'] = ['type' => 'combo', 'datas' => $pdfRendererOptions, 'default' => 'native', 'editable' => true, 'label' => __('Rendu des PDF (téléchargement)')];
-        $this->fields['PDFRendererIframe'] = ['type' => 'combo', 'datas' => $pdfRenderOptionsIframe, 'default' => 'native', 'editable' => true, 'label' => __('Rendu des PDF (iframes)')];
+        $this->fields['PDFRenderer'] = ['type' => 'combo', 'datas' => $pdfRendererOptions, 'default' => 'native', 'editable' => true, 'label' => $this->__('Rendu des PDF (téléchargement)')];
+        $this->fields['PDFRendererIframe'] = ['type' => 'combo', 'datas' => $pdfRenderOptionsIframe, 'default' => 'native', 'editable' => true, 'label' => $this->__('Rendu des PDF (iframes)')];
         $this->fields['PDFJSCSS'] = ['type' => 'textarea', 'default' => '', 'editable' => true, 'label' => 'Styles PDF.js'];
 
         $this->forms['pdf'] = ['label' => 'PDF',
             'fieldsnames' => ['PDFRenderer', 'PDFRendererIframe', '|', 'PDFJSCSS']];
 
         $slideshowPopupLibraries = [
-            'Splide (' . __('défaut') . ')' => 'splide',
+            'Splide (' . $this->__('défaut') . ')' => 'splide',
             'Vacheron' => 'vacheron'];
 
         $slideshowInlineLibraries = [
-            'Simple (' . __('défaut') . ')' => 'dummy',
+            'Simple (' . $this->__('défaut') . ')' => 'dummy',
             'Vacheron' => 'vacheron'];
 
-        $this->fields['slideshowCaptionSize'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Taille de police de la légende du diaporama'), 'hint' => __('Laisser vide pour utiliser la valeur par défaut'));
-        $this->fields['inlineSlideshowTransitionDuration'] = array('type' => 'float', 'default' => 0.75, 'editable' => true, 'label' => __('Durée de la transition des diaporamas intégrés aux pages(s)'));
-        $this->fields['inlineSlideshowDuration'] = array('type' => 'float', 'default' => 7, 'editable' => true, 'label' => __('Temps d\'attente des diaporamas intégrés aux pages (s)'));
-        $this->fields['inlineSlideshowLibrary'] = ['type' => 'combo', 'datas' => $slideshowInlineLibraries, 'default' => 'dummy', 'editable' => true, 'grade' => 3, 'label' => __('Librarie utilisée pour les slideshow intégrés aux pages')];
-        $this->fields['popupSlideshowLibrary'] = ['type' => 'combo', 'datas' => $slideshowPopupLibraries, 'default' => 'splide', 'editable' => true, 'grade' => 3, 'label' => __('Librarie utilisée pour les slideshow popup')];
+        $this->fields['slideshowCaptionSize'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__('Taille de police de la légende du diaporama'), 'hint' => $this->__('Laisser vide pour utiliser la valeur par défaut'));
+        $this->fields['inlineSlideshowTransitionDuration'] = array('type' => 'float', 'default' => 0.75, 'editable' => true, 'label' => $this->__('Durée de la transition des diaporamas intégrés aux pages(s)'));
+        $this->fields['inlineSlideshowDuration'] = array('type' => 'float', 'default' => 7, 'editable' => true, 'label' => $this->__('Temps d\'attente des diaporamas intégrés aux pages (s)'));
+        $this->fields['inlineSlideshowLibrary'] = ['type' => 'combo', 'datas' => $slideshowInlineLibraries, 'default' => 'dummy', 'editable' => true, 'grade' => 3, 'label' => $this->__('Librarie utilisée pour les slideshow intégrés aux pages')];
+        $this->fields['popupSlideshowLibrary'] = ['type' => 'combo', 'datas' => $slideshowPopupLibraries, 'default' => 'splide', 'editable' => true, 'grade' => 3, 'label' => $this->__('Librarie utilisée pour les slideshow popup')];
 
-        $this->forms['slideshow'] = ['label' => __('Slideshow'),
+        $this->forms['slideshow'] = ['label' => $this->__('Slideshow'),
             'fieldsnames' => ['inlineSlideshowLibrary', 'popupSlideshowLibrary', '|', 'slideshowCaptionSize', '|', 'inlineSlideshowTransitionDuration', 'inlineSlideshowDuration']];
 
-        $this->fields['webvideoAsLocal'] = ['type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Intégrer les webvidéos en local')];
-        $this->fields['mobileVideosPath'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Chemin vers les vidéos'), 'grade' => 5);
-        $this->fields['brightcovePlayerId'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Brightcove Player Id'), 'grade' => 3);
-        $this->fields['brightcovePlayerSecret'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Brightcove Player Secret'), 'grade' => 3);
-        $this->fields['bigPlayImage'] = ['type' => 'freefile', 'default' => '', 'editable' => true, 'label' => __('Image pour le bouton "Big Play"'), 'grade' => 3, 'fileFilter' => $imageExtraFilter];
-        $this->forms['videos'] = array('label' => __('Vidéos'),
+        $this->fields['webvideoAsLocal'] = ['type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__('Intégrer les webvidéos en local')];
+        $this->fields['mobileVideosPath'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__('Chemin vers les vidéos'), 'grade' => 5);
+        $this->fields['brightcovePlayerId'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__('Brightcove Player Id'), 'grade' => 3);
+        $this->fields['brightcovePlayerSecret'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__('Brightcove Player Secret'), 'grade' => 3);
+        $this->fields['bigPlayImage'] = ['type' => 'freefile', 'default' => '', 'editable' => true, 'label' => $this->__('Image pour le bouton "Big Play"'), 'grade' => 3, 'fileFilter' => $imageExtraFilter];
+        $this->forms['videos'] = array('label' => $this->__('Vidéos'),
             'fieldsnames' => array('webvideoAsLocal', '|', 'mobileVideosPath', '|', 'brightcovePlayerId', 'brightcovePlayerSecret', '|', 'bigPlayImage'));
         //.
-        $this->fields['audioPlayerTheme'] = ['type' => 'combo', 'default' => 'native', 'editable' => true, 'label' => __('Apparence du lecteur audio'), 'datas' => [__('Apparence native du navigateur') => 'native', __('Zone cliquable invisible') => 'invisible', __('Circulaire') => 'redbull']];
-        $this->forms['audio'] = ['label' => __('Lecteur audio'),
+        $this->fields['audioPlayerTheme'] = ['type' => 'combo', 'default' => 'native', 'editable' => true, 'label' => $this->__('Apparence du lecteur audio'), 'datas' => [$this->__('Apparence native du navigateur') => 'native', $this->__('Zone cliquable invisible') => 'invisible', $this->__('Circulaire') => 'redbull']];
+        $this->forms['audio'] = ['label' => $this->__('Lecteur audio'),
             'fieldsnames' => ['audioPlayerTheme']];
         //.
         $this->fields['downloadPortionPDF'] = ['type' => 'freefile', 'default' => '', 'editable' => true, 'label' => 'PDF utilisé pour le téléchargement des extraits'];
-        $this->fields['downloadPortionZoom'] = ['type' => 'integer', 'default' => 8, 'editable' => false, 'editable' => true, 'label' => __('Zoom des images extraites')];
-        $this->forms['downloadportion'] = array('label' => __('Téléchargement d\'extraits'),
+        $this->fields['downloadPortionZoom'] = ['type' => 'integer', 'default' => 8, 'editable' => false, 'editable' => true, 'label' => $this->__('Zoom des images extraites')];
+        $this->forms['downloadportion'] = array('label' => $this->__('Téléchargement d\'extraits'),
             'fieldsnames' => ['downloadPortionPDF', 'downloadPortionZoom']);
 
 
         $this->fields['product_zoom_references'] = array('type' => 'freefile', 'default' => '', 'editable' => true,
-            'label' => __('Références produits'), 'grade' => 3, 'fileFilter' => $basketFilter, 'hint' => __('Fichier contenant les références produits'), 'dir' => 'commerce');
-        $this->fields['product_zoom_buttons_order'] = ['type' => 'combo', 'datas' => [__('De la droite vers la gauche') => 'right', __('De la gauche vers la droite') => 'left'], 'editable' => true, 'grade' => 3, 'default' => 'right', 'label' => __('Order des boutons')];
+            'label' => $this->__('Références produits'), 'grade' => 3, 'fileFilter' => $basketFilter, 'hint' => $this->__('Fichier contenant les références produits'), 'dir' => 'commerce');
+        $this->fields['product_zoom_buttons_order'] = ['type' => 'combo', 'datas' => [$this->__('De la droite vers la gauche') => 'right', $this->__('De la gauche vers la droite') => 'left'], 'editable' => true, 'grade' => 3, 'default' => 'right', 'label' => $this->__('Order des boutons')];
         $icons = [
-            __('Aucune') => 'none',
-            __('Partage') => 'nav-share',
-            __('Ecran') => 'icon-site',
-            __('Télécharger') => 'nav-download',
+            $this->__('Aucune') => 'none',
+            $this->__('Partage') => 'nav-share',
+            $this->__('Ecran') => 'icon-site',
+            $this->__('Télécharger') => 'nav-download',
             'PDF' => 'icon-pdf',
             'Video' => 'icon-video',
-            __('Lien') => 'icon-link',
-            __('Code') => 'icon-code',
-            __('QR code') => 'icon-qr',
-            __('Article') => 'icon-article',
-            __('Panier (sac)') => 'nav-basket',
-            __('Panier (caddie)') => 'nav-cart-caddie',
-            __('Panier (wishlist)') => 'nav-cart-wishlist',
-            __('360°') => 'icon-360',
-            __('Photo') => 'icon-photo'];
+            $this->__('Lien') => 'icon-link',
+            $this->__('Code') => 'icon-code',
+            $this->__('QR code') => 'icon-qr',
+            $this->__('Article') => 'icon-article',
+            $this->__('Panier (sac)') => 'nav-basket',
+            $this->__('Panier (caddie)') => 'nav-cart-caddie',
+            $this->__('Panier (wishlist)') => 'nav-cart-wishlist',
+            $this->__('360°') => 'icon-360',
+            $this->__('Photo') => 'icon-photo'];
         $actions = [
-            __('Désactiver') => 'disabled',
-            __('Ouvrir un lien') => 'link',
-            __('Ouvrir en iframe') => 'iframe',
-            __('Copier un contenu') => 'copy',
-            __('Web Vidéo') => 'video',
-            __('Vidéo') => 'videofile',
-            __('Vidéo (boucle, sans contrôle)') => 'videogif',
-            __('Voir une image') => 'image',
-            __('Ajouter au panier') => 'addtocart'
+            $this->__('Désactiver') => 'disabled',
+            $this->__('Ouvrir un lien') => 'link',
+            $this->__('Ouvrir en iframe') => 'iframe',
+            $this->__('Copier un contenu') => 'copy',
+            $this->__('Web Vidéo') => 'video',
+            $this->__('Vidéo') => 'videofile',
+            $this->__('Vidéo (boucle, sans contrôle)') => 'videogif',
+            $this->__('Voir une image') => 'image',
+            $this->__('Ajouter au panier') => 'addtocart'
         ];
         $f = [];
         for ($i = 1; $i <= 3; $i++) {
-            $this->fields['product_zoom_label_' . $i] = ['type' => 'text', 'label' => __('Label du bouton') . ' ' . $i, 'default' => '', 'editable' => true, 'grade' => 3];
-            $this->fields['product_zoom_tooltip_' . $i] = ['type' => 'text', 'label' => __('Label de l\'infobulle') . ' ' . $i, 'default' => '', 'editable' => true, 'grade' => 3];
-            $this->fields['product_zoom_icon_' . $i] = ['type' => 'combo', 'datas' => $icons, 'label' => __('Icône du bouton') . ' ' . $i, 'default' => 'click', 'editable' => true, 'grade' => 3];
-            $this->fields['product_zoom_action_' . $i] = ['type' => 'combo', 'datas' => $actions, 'label' => __('Action du bouton') . ' ' . $i, 'default' => 'disabled', 'editable' => true, 'grade' => 3];
+            $this->fields['product_zoom_label_' . $i] = ['type' => 'text', 'label' => $this->__('Label du bouton') . ' ' . $i, 'default' => '', 'editable' => true, 'grade' => 3];
+            $this->fields['product_zoom_tooltip_' . $i] = ['type' => 'text', 'label' => $this->__('Label de l\'infobulle') . ' ' . $i, 'default' => '', 'editable' => true, 'grade' => 3];
+            $this->fields['product_zoom_icon_' . $i] = ['type' => 'combo', 'datas' => $icons, 'label' => $this->__('Icône du bouton') . ' ' . $i, 'default' => 'click', 'editable' => true, 'grade' => 3];
+            $this->fields['product_zoom_action_' . $i] = ['type' => 'combo', 'datas' => $actions, 'label' => $this->__('Action du bouton') . ' ' . $i, 'default' => 'disabled', 'editable' => true, 'grade' => 3];
             $f[] = '|';
             $f[] = 'product_zoom_label_' . $i;
             $f[] = 'product_zoom_tooltip_' . $i;
             $f[] = 'product_zoom_icon_' . $i;
             $f[] = 'product_zoom_action_' . $i;
         }
-        $this->fields['product_share_enabled'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'grade' => '3', 'label' => __('Activer le bouton de partage')];
-        $this->fields['product_share_link'] = ['type' => 'combo', 'default' => 'product', 'editable' => true, 'label' => __('Lien de partage'), 'datas' => [__('Lien du produit') => 'product', __('Lien vers la page du fluidbook') => 'page']];
-        $this->fields['product_email_title'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __("Titre de l'email") . ' "' . __('Envoyer à un ami') . '"');
-        $this->fields['product_email_body'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __("Corps de l'email") . ' "' . __('Envoyer à un ami') . '"');
-        $this->fields['product_tweet'] = array('type' => 'textarea', 'default' => '%short%', 'editable' => true, 'label' => __("Contenu Partage court"), 'hint' => __('Contenu du partagé sur les partages courts'));
-        $this->forms['product_zoom'] = ['label' => __('Zooms produits'), 'fieldsnames' => array_merge(["product_zoom_references", '|', 'product_zoom_buttons_order'], $f, ['|', 'product_share_enabled', 'product_share_link', 'product_email_title', 'product_email_body', 'product_tweet'])];
-
-        $this->fields['audiodescriptionTexts'] = ['type' => 'freefile', 'default' => '', 'editable' => true, 'label' => __('Contenus textuels pour l\'audiodescription ou les lecteurs d\'écran'), 'fileFilter' => $seoFilter];
-        $this->fields['audiodescriptionVoice'] = ['type' => 'combo', 'datas' => wsDroits::getTTSVoices(), 'editable' => true, 'default' => '', 'label' => __('Voix pour l\'audiodescription')];
-        $this->forms['accessibility'] = ['label' => __('Accessibilité'),
+        $this->fields['product_share_enabled'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'grade' => '3', 'label' => $this->__('Activer le bouton de partage')];
+        $this->fields['product_share_link'] = ['type' => 'combo', 'default' => 'product', 'editable' => true, 'label' => $this->__('Lien de partage'), 'datas' => [$this->__('Lien du produit') => 'product', $this->__('Lien vers la page du fluidbook') => 'page']];
+        $this->fields['product_email_title'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__("Titre de l'email") . ' "' . $this->__('Envoyer à un ami') . '"');
+        $this->fields['product_email_body'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => $this->__("Corps de l'email") . ' "' . $this->__('Envoyer à un ami') . '"');
+        $this->fields['product_tweet'] = array('type' => 'textarea', 'default' => '%short%', 'editable' => true, 'label' => $this->__("Contenu Partage court"), 'hint' => $this->__('Contenu du partagé sur les partages courts'));
+        $this->forms['product_zoom'] = ['label' => $this->__('Zooms produits'), 'fieldsnames' => array_merge(["product_zoom_references", '|', 'product_zoom_buttons_order'], $f, ['|', 'product_share_enabled', 'product_share_link', 'product_email_title', 'product_email_body', 'product_tweet'])];
+
+        $this->fields['audiodescriptionTexts'] = ['type' => 'freefile', 'default' => '', 'editable' => true, 'label' => $this->__('Contenus textuels pour l\'audiodescription ou les lecteurs d\'écran'), 'fileFilter' => $seoFilter];
+        $this->fields['audiodescriptionVoice'] = ['type' => 'combo', 'datas' => wsDroits::getTTSVoices(), 'editable' => true, 'default' => '', 'label' => $this->__('Voix pour l\'audiodescription')];
+        $this->forms['accessibility'] = ['label' => $this->__('Accessibilité'),
             'fieldsnames' => ['audiodescriptionTexts', 'audiodescriptionVoice']
         ];
 
@@ -677,58 +637,58 @@ class wsBookParametres extends wsParametres
 
         // Splashscreen
 
-        $this->fields['splashImage'] = ['type' => 'freefile', 'default' => '', 'editable' => true, 'label' => __('Image'), 'grade' => 3, 'fileFilter' => $imageFilter];
-        $this->fields['splashURL'] = ['type' => 'text', 'default' => '', 'editable' => true, 'label' => __('URL'), 'grade' => 3];
-        $this->fields['splashTarget'] = ['type' => 'combo', 'datas' => $target, 'default' => '_self', 'editable' => true, 'label' => __('Ouvrir le lien'), 'grade' => 3];
-        $this->fields['splashMinimalTime'] = ['type' => 'float', 'default' => 1, 'editable' => true, 'label' => __('Temps minimal d\'affichage'), 'grade' => 3];
+        $this->fields['splashImage'] = ['type' => 'freefile', 'default' => '', 'editable' => true, 'label' => $this->__('Image'), 'grade' => 3, 'fileFilter' => $imageFilter];
+        $this->fields['splashURL'] = ['type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__('URL'), 'grade' => 3];
+        $this->fields['splashTarget'] = ['type' => 'combo', 'datas' => $target, 'default' => '_self', 'editable' => true, 'label' => $this->__('Ouvrir le lien'), 'grade' => 3];
+        $this->fields['splashMinimalTime'] = ['type' => 'float', 'default' => 1, 'editable' => true, 'label' => $this->__('Temps minimal d\'affichage'), 'grade' => 3];
 
-        $this->forms['splash'] = ['label' => __('Ecran de chargement'), 'fieldsnames' => ['splashImage', 'splashURL', 'splashTarget', 'splashMinimalTime']];
+        $this->forms['splash'] = ['label' => $this->__('Ecran de chargement'), 'fieldsnames' => ['splashImage', 'splashURL', 'splashTarget', 'splashMinimalTime']];
 
         // Notes
         $this->fields['notes'] = ['type' => 'boolean', 'default' => false, 'editable' => true,
             'label' => 'Activer les notes', 'grade' => 3];
-        $this->forms['notes'] = ['label' => __('Notes'), 'fieldsnames' => ['notes']];
+        $this->forms['notes'] = ['label' => $this->__('Notes'), 'fieldsnames' => ['notes']];
 
         // Articles
         $this->fields['articlesFile'] = ['type' => 'freefile', 'default' => '', 'editable' => true,
             'label' => 'Articles', 'grade' => 3, 'fileFilter' => $articlesFilter];
-        $this->fields['articlesFormat'] = ['type' => 'combo', 'default' => 'fluidbook', 'editable' => true, 'label' => 'Format', 'grade' => 3, 'datas' => [__('Fluidbook') => 'fluidbook', 'Business Immo' => 'business-immo']];
-        $this->fields['articlesFont'] = ['type' => 'combo', 'label' => __('Police des articles'), 'default' => 'OpenSans', 'datas' => self::$fonts, 'editable' => true, 'grade' => 3];
-        $this->fields['articlesImages'] = ['type' => 'freefile', 'label' => __('Images des articles'), 'default' => '', 'hint' => __('Les noms des fichiers doivent être les même que ceux des balises <image> du XML'), 'editable' => true, 'grade' => 3, 'dir' => 'articles', 'multiple' => true];
-        $this->fields['articlesShare'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Activer le partage'), 'grade' => 3];
-        $this->fields['articlesPrint'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Activer l\'impression'), 'grade' => 3];
-        $this->fields['articlesStyle'] = ['type' => 'combo', 'default' => true, 'editable' => true, 'label' => __('Style'), 'grade' => 3, 'datas' => ['Défaut' => 'default', 'Atlantic' => 'atlantic', 'Harmonie Mutuelle' => 'harmonie-mutuelle', 'Business Immo' => 'business-immo']];
+        $this->fields['articlesFormat'] = ['type' => 'combo', 'default' => 'fluidbook', 'editable' => true, 'label' => 'Format', 'grade' => 3, 'datas' => [$this->__('Fluidbook') => 'fluidbook', 'Business Immo' => 'business-immo']];
+        $this->fields['articlesFont'] = ['type' => 'combo', 'label' => $this->__('Police des articles'), 'default' => 'OpenSans', 'datas' => self::$fonts, 'editable' => true, 'grade' => 3];
+        $this->fields['articlesImages'] = ['type' => 'freefile', 'label' => $this->__('Images des articles'), 'default' => '', 'hint' => $this->__('Les noms des fichiers doivent être les même que ceux des balises <image> du XML'), 'editable' => true, 'grade' => 3, 'dir' => 'articles', 'multiple' => true];
+        $this->fields['articlesShare'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__('Activer le partage'), 'grade' => 3];
+        $this->fields['articlesPrint'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__('Activer l\'impression'), 'grade' => 3];
+        $this->fields['articlesStyle'] = ['type' => 'combo', 'default' => true, 'editable' => true, 'label' => $this->__('Style'), 'grade' => 3, 'datas' => ['Défaut' => 'default', 'Atlantic' => 'atlantic', 'Harmonie Mutuelle' => 'harmonie-mutuelle', 'Business Immo' => 'business-immo']];
 
-        $this->forms['articles'] = ['label' => __('Articles'), 'fieldsnames' => ['articlesFile', 'articlesImages', '|', 'articlesShare', 'articlesPrint', '|', 'articlesStyle', 'articlesFont']];
+        $this->forms['articles'] = ['label' => $this->__('Articles'), 'fieldsnames' => ['articlesFile', 'articlesImages', '|', 'articlesShare', 'articlesPrint', '|', 'articlesStyle', 'articlesFont']];
 
         //.
         $this->fields['externalArchives'] = array('type' => 'freefile', 'default' => '', 'editable' => true,
-            'label' => __('Archives'), 'grade' => 3, 'fileFilter' => $imageFilter);
-        $this->fields['archivesLabel'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Label'), 'grade' => 5);
-        $this->forms['archives'] = array('label' => __('Archives'),
+            'label' => $this->__('Archives'), 'grade' => 3, 'fileFilter' => $imageFilter);
+        $this->fields['archivesLabel'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__('Label'), 'grade' => 5);
+        $this->forms['archives'] = array('label' => $this->__('Archives'),
             'fieldsnames' => array('externalArchives', 'archivesLabel'));
         // .
-        $this->fields['form'] = array('type' => 'combo', 'default' => '', 'editable' => true, 'grade' => 5, 'label' => __('Formulaire'), 'datas' =>
-            array(__('Aucun') => '',
+        $this->fields['form'] = array('type' => 'combo', 'default' => '', 'editable' => true, 'grade' => 5, 'label' => $this->__('Formulaire'), 'datas' =>
+            array($this->__('Aucun') => '',
                 'Bulle Groupe' => 'bulle',
                 'Bourbon / Suggestions' => 'bourbon',
                 'Avery' => 'avery',
             ),
         );
-        $this->forms['form'] = array('label' => __('Formulaire'),
+        $this->forms['form'] = array('label' => $this->__('Formulaire'),
             'fieldsnames' => array('form'));
 
-        $this->fields['cookieConsent'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Message cookie'));
-        $this->fields['cookieConsentMessage'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Texte du consentement'));
-        $this->fields['cookieConsentAutoclose'] = array('type' => 'integer', 'default' => 0, 'editable' => true, 'label' => __('Masquer automatiquement après x secondes'));
-        $this->forms['privacy'] = array('label' => __('Respect de la vie privée'),
+        $this->fields['cookieConsent'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__('Message cookie'));
+        $this->fields['cookieConsentMessage'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => $this->__('Texte du consentement'));
+        $this->fields['cookieConsentAutoclose'] = array('type' => 'integer', 'default' => 0, 'editable' => true, 'label' => $this->__('Masquer automatiquement après x secondes'));
+        $this->forms['privacy'] = array('label' => $this->__('Respect de la vie privée'),
             'fieldsnames' => array('cookieConsent', 'cookieConsentMessage', 'cookieConsentAutoclose'));
 
         //.
-        $this->fields['basket'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Panier activé'), 'grade' => 5);
-        $this->fields['cartIcon'] = ['type' => 'combo', 'datas' => [__('Sac') => 'nav-basket', __('Caddie') => 'nav-cart-caddie', __('Wishlist') => 'nav-cart-wishlist'], 'default' => 'nav-basket', 'label' => __('Icône'), 'editable' => true, 'grade' => 5];
-        $this->fields['basketManager'] = array('type' => 'combo', 'default' => 'classic', 'editable' => true, 'label' => __("Manager de panier"),
-            'datas' => array(__('Classic') => 'com.fluidbook.player.basket.BasketManager',
+        $this->fields['basket'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__('Panier activé'), 'grade' => 5);
+        $this->fields['cartIcon'] = ['type' => 'combo', 'datas' => [$this->__('Sac') => 'nav-basket', $this->__('Caddie') => 'nav-cart-caddie', $this->__('Wishlist') => 'nav-cart-wishlist'], 'default' => 'nav-basket', 'label' => $this->__('Icône'), 'editable' => true, 'grade' => 5];
+        $this->fields['basketManager'] = array('type' => 'combo', 'default' => 'classic', 'editable' => true, 'label' => $this->__("Manager de panier"),
+            'datas' => array($this->__('Classic') => 'com.fluidbook.player.basket.BasketManager',
                 'Grdf' => 'com.fluidbook.player.basket.custom.grdf.GrdfBasketManager',
                 'Grdf 2013' => 'com.fluidbook.player.basket.custom.grdf.grdf2013.GrdfBasketManager2013',
                 'Grdf 2015' => 'com.fluidbook.player.basket.custom.grdf.grdf2015.GrdfBasketManager2015',
@@ -749,131 +709,131 @@ class wsBookParametres extends wsParametres
                 'Thiriet' => 'Thiriet',
             ), 'grade' => 5);
 
-        $this->fields['cartLinkAppearance'] = ['type' => 'combo', 'default' => 'link', 'editable' => true, 'label' => __('Apparence des liens panier'), 'grade' => 3, 'datas' => [__('Lien') => 'link', __('Boutons + et - avec overlay') => 'overlay']];
+        $this->fields['cartLinkAppearance'] = ['type' => 'combo', 'default' => 'link', 'editable' => true, 'label' => $this->__('Apparence des liens panier'), 'grade' => 3, 'datas' => [$this->__('Lien') => 'link', $this->__('Boutons + et - avec overlay') => 'overlay']];
         $this->fields['basketReferences'] = array('type' => 'freefile', 'default' => '', 'editable' => true,
-            'label' => __('Références produits'), 'grade' => 3, 'fileFilter' => $basketFilter, 'hint' => __('Fichier contenant les références produits'), 'dir' => 'commerce');
+            'label' => $this->__('Références produits'), 'grade' => 3, 'fileFilter' => $basketFilter, 'hint' => $this->__('Fichier contenant les références produits'), 'dir' => 'commerce');
         $this->fields['basketImages'] = array('type' => 'freefile', 'default' => '', 'editable' => true,
-            'label' => __('Images des produits'), 'grade' => 3,
+            'label' => $this->__('Images des produits'), 'grade' => 3,
             'multiple' => true, 'dir' => 'commerce');
         $this->fields['basketPDFBackground'] = array('type' => 'freefile', 'default' => '', 'editable' => true,
-            'label' => __('Fond du PDF (bon de commande)'), 'grade' => 5, 'fileFilter' => $epsFilter, 'hint' => __('Fond du bon de commande'), 'dir' => 'commerce');
+            'label' => $this->__('Fond du PDF (bon de commande)'), 'grade' => 5, 'fileFilter' => $epsFilter, 'hint' => $this->__('Fond du bon de commande'), 'dir' => 'commerce');
         $this->fields['cartHeaderImage'] = ['type' => 'freefile', 'default' => '', 'editable' => true,
-            'label' => __('Header panier'), 'grade' => 3, 'fileFilter' => $imageFilter, 'dir' => 'commerce'];
+            'label' => $this->__('Header panier'), 'grade' => 3, 'fileFilter' => $imageFilter, 'dir' => 'commerce'];
         $this->fields['cartHeaderMobileImage'] = ['type' => 'freefile', 'default' => '', 'editable' => true,
-            'label' => __('Header panier (mobile)'), 'grade' => 3, 'fileFilter' => $imageFilter, 'dir' => 'commerce'];
+            'label' => $this->__('Header panier (mobile)'), 'grade' => 3, 'fileFilter' => $imageFilter, 'dir' => 'commerce'];
         $this->fields['cartExtraSettings'] = ['type' => 'textarea', 'default' => '', 'editable' => true,
-            'label' => __('Paramètres panier'), 'grade' => 3];
+            'label' => $this->__('Paramètres panier'), 'grade' => 3];
 
 
-        $this->forms['basket'] = array('label' => __('Panier'),
+        $this->forms['basket'] = array('label' => $this->__('Panier'),
             'fieldsnames' => array('basket', 'basketManager', '|', 'cartIcon', 'cartLinkAppearance', '|', 'basketReferences', 'basketImages', '|', 'cartHeaderImage', 'cartHeaderMobileImage', 'cartExtraSettings'));
         // .
-        $this->fields['offlineLink'] = array('type' => 'text', 'default' => 'http://', 'editable' => true, 'label' => __("URL du Fluidbook"), 'hint' => __('URL du fluidbook utilisée pour la version Offline (CD-ROM, clé USB, Exécutables)'));
-        $this->fields['offlineTitle'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __("Titre de l'application"));
-        $this->fields['offlineWindowsInstallPath'] = ['type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Chemin d\'installation par défaut'), 'hint' => __('Par défaut') . ': %LOCALAPPDATA%/%title%'];
-        $this->fields['offlineWindowsProfilePath'] = ['type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Répertoire de stockage du profile'), 'hint' => __('Par défaut') . ': %LOCALAPPDATA%/%title%'];
-        $this->fields['offlineEnableAdvancedPrinting'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __('Activer le menu d\'impression avancée')];
-        $this->fields['debugConsole'] = ['type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Activer la console de débuggage')];
-        $this->forms['offline'] = array('label' => __('Version offline'),
+        $this->fields['offlineLink'] = array('type' => 'text', 'default' => 'http://', 'editable' => true, 'label' => $this->__("URL du Fluidbook"), 'hint' => $this->__('URL du fluidbook utilisée pour la version Offline (CD-ROM, clé USB, Exécutables)'));
+        $this->fields['offlineTitle'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__("Titre de l'application"));
+        $this->fields['offlineWindowsInstallPath'] = ['type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__('Chemin d\'installation par défaut'), 'hint' => $this->__('Par défaut') . ': %LOCALAPPDATA%/%title%'];
+        $this->fields['offlineWindowsProfilePath'] = ['type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__('Répertoire de stockage du profile'), 'hint' => $this->__('Par défaut') . ': %LOCALAPPDATA%/%title%'];
+        $this->fields['offlineEnableAdvancedPrinting'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__('Activer le menu d\'impression avancée')];
+        $this->fields['debugConsole'] = ['type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__('Activer la console de débuggage')];
+        $this->forms['offline'] = array('label' => $this->__('Version offline'),
             'fieldsnames' => array('offlineTitle', 'offlineLink', '|', 'offlineWindowsInstallPath', 'offlineWindowsProfilePath', '|', 'offlineEnableAdvancedPrinting', '|', 'debugConsole'));
 
         $this->fields['mobilefirstFluidbookId'] = ['type' => 'text', 'default' => '', 'editable' => true, 'label' => 'Identifiant du fluidbook "Mobile first"', 'grade' => 5];
         $this->fields['mobilefirstBreakpoint'] = ['type' => 'text', 'default' => '640', 'editable' => true, 'label' => 'Breakpoint du passage à la version "Mobile first" (en pixels)', 'grade' => 5];
-        $this->forms['mobilefirst'] = ['label' => __('Mobile first'),
+        $this->forms['mobilefirst'] = ['label' => $this->__('Mobile first'),
             'fieldsnames' => ['mobilefirstFluidbookId', 'mobilefirstBreakpoint']];
 
 
-        $this->fields['phonegapId'] = array('type' => 'text', 'default' => 'com.fluidbook.phonegap.$id', 'editable' => true, 'label' => __("Identifiant de l'identifiant"), 'grade' => 5, 'hint' => __('De la forme') . ' com.fluidbook.phonegap.xxxxx');
-        $this->fields['phonegapVersion'] = array('type' => 'text', 'default' => '1.0.0', 'editable' => true, 'label' => __("Version de l'application"), 'grade' => 5, 'hint' => __('De la forme') . ' 1.2.3');
-        $this->fields['phonegapPlugins'] = array('type' => 'textarea', 'default' => 'ChildBrowser', 'editable' => true, 'label' => __('Plugins Phonegap'), 'grade' => 5);
+        $this->fields['phonegapId'] = array('type' => 'text', 'default' => 'com.fluidbook.phonegap.$id', 'editable' => true, 'label' => $this->__("Identifiant de l'identifiant"), 'grade' => 5, 'hint' => $this->__('De la forme') . ' com.fluidbook.phonegap.xxxxx');
+        $this->fields['phonegapVersion'] = array('type' => 'text', 'default' => '1.0.0', 'editable' => true, 'label' => $this->__("Version de l'application"), 'grade' => 5, 'hint' => $this->__('De la forme') . ' 1.2.3');
+        $this->fields['phonegapPlugins'] = array('type' => 'textarea', 'default' => 'ChildBrowser', 'editable' => true, 'label' => $this->__('Plugins Phonegap'), 'grade' => 5);
         $defaultScreenshots = "P,0\nL,2\nL,index";
-        $this->fields['appScreenshots'] = array('type' => 'textarea', 'default' => $defaultScreenshots, 'editable' => true, 'label' => 'Générer les screenshots', 'grade' => 5, '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))'));
+        $this->fields['appScreenshots'] = array('type' => 'textarea', 'default' => $defaultScreenshots, 'editable' => true, 'label' => 'Générer les screenshots', 'grade' => 5, 'hint' => $this->__('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))'));
 
-        $this->forms['phonegap'] = array('label' => __('Applications mobile'),
+        $this->forms['phonegap'] = array('label' => $this->__('Applications mobile'),
             'fieldsnames' => array('phonegapId', 'phonegapVersion', 'phonegapPlugins', 'appScreenshots'));
 
-        $this->fields['secureURL'] = array('type' => 'text', 'default' => 'http://', 'editable' => true, 'label' => __('URL de sécurisation'), 'grade' => 5, 'hint' => __('URL intérrogé pour vérifier si le visiteur à les droits pour consulter la publication'));
-        $this->fields['secureURLRedirect'] = array('type' => 'text', 'default' => 'http://', 'editable' => true, 'label' => __('Redirection'), 'grade' => 5, 'hint' => __("Si l'authentification échoue, redirection vers cette adresse"));
+        $this->fields['secureURL'] = array('type' => 'text', 'default' => 'http://', 'editable' => true, 'label' => $this->__('URL de sécurisation'), 'grade' => 5, 'hint' => $this->__('URL intérrogé pour vérifier si le visiteur à les droits pour consulter la publication'));
+        $this->fields['secureURLRedirect'] = array('type' => 'text', 'default' => 'http://', 'editable' => true, 'label' => $this->__('Redirection'), 'grade' => 5, 'hint' => $this->__("Si l'authentification échoue, redirection vers cette adresse"));
         $this->fields['secureClientSidePassword'] = ['type' => 'freefile', 'label' => 'Sécurisation par mot de passe côté client', 'editable' => true, 'default' => '', 'grade' => 3, 'fileFilter' => $htmlFilter];
         $this->fields['secureClientSidePasswordCredentials'] = ['type' => 'textarea', 'label' => 'Utilisateurs / mots de passe', 'editable' => true, 'default' => '', 'grade' => 3, 'hint' => 'Format user:password par ligne'];
-        $this->fields['preventRightClick'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __("Essayer d'empêcher le clic droit"), 'grade' => 1);
-        $this->fields['restrictPrint'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __("Restreindre l'impression"), 'grade' => 5);
-        $this->fields['restrictDownload'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __("Restreindre le téléchargement du pdf"), 'grade' => 5);
-        $this->fields['restrictSendBookmark'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __("Restreindre l'envoi de marques-pages"), 'grade' => 5);
-        $this->fields['restrictPrintDownload'] = ['type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Paramètre de l\'url permettant de désactiver la restriction (non vide pour activer les restrictions)'), 'grade' => 5, 'hint' => __("Ne pas indiquer le ?")];
-        $this->fields['recaptcha'] = ['type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Activer reCATPCHA v3 (clé du site)')];
-        $this->forms['secure'] = array('label' => __('Sécurisation'),
+        $this->fields['preventRightClick'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__("Essayer d'empêcher le clic droit"), 'grade' => 1);
+        $this->fields['restrictPrint'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__("Restreindre l'impression"), 'grade' => 5);
+        $this->fields['restrictDownload'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__("Restreindre le téléchargement du pdf"), 'grade' => 5);
+        $this->fields['restrictSendBookmark'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__("Restreindre l'envoi de marques-pages"), 'grade' => 5);
+        $this->fields['restrictPrintDownload'] = ['type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__('Paramètre de l\'url permettant de désactiver la restriction (non vide pour activer les restrictions)'), 'grade' => 5, 'hint' => $this->__("Ne pas indiquer le ?")];
+        $this->fields['recaptcha'] = ['type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__('Activer reCATPCHA v3 (clé du site)')];
+        $this->forms['secure'] = array('label' => $this->__('Sécurisation'),
             'fieldsnames' => array('secureURL', 'secureURLRedirect', '|', 'secureClientSidePassword', 'secureClientSidePasswordCredentials', '|', 'preventRightClick', '|', 'restrictPrintDownload', 'restrictPrint', 'restrictDownload', 'restrictSendBookmark', '|', 'recaptcha'));
 
-        $this->fields['home'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __("Accueil de l'interface multibrochure"), 'grade' => 5);
-        $this->fields['multilang'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Langues'), 'hint' => __('Code langue') . ',' . __('Code pays') . ',' . __('URL'));
-        $this->fields['country'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Pays de la brochure'));
-        $this->fields['multilangDisplay'] = array('type' => 'combo', 'default' => 'lang', 'editable' => true, 'label' => __('Affichage'),
-            'datas' => array(__('Langue') => 'lang',
-                __('Langue') . ' (' . __('Pays') . ')' => 'lang_country',
-                __('Pays') . ' (' . __('Langue') . ')' => 'country_lang'));
-        $this->forms['multibrochure'] = array('label' => __('Multibrochure'),
+        $this->fields['home'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__("Accueil de l'interface multibrochure"), 'grade' => 5);
+        $this->fields['multilang'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => $this->__('Langues'), 'hint' => $this->__('Code langue') . ',' . $this->__('Code pays') . ',' . $this->__('URL'));
+        $this->fields['country'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__('Pays de la brochure'));
+        $this->fields['multilangDisplay'] = array('type' => 'combo', 'default' => 'lang', 'editable' => true, 'label' => $this->__('Affichage'),
+            'datas' => array($this->__('Langue') => 'lang',
+                $this->__('Langue') . ' (' . $this->__('Pays') . ')' => 'lang_country',
+                $this->__('Pays') . ' (' . $this->__('Langue') . ')' => 'country_lang'));
+        $this->forms['multibrochure'] = array('label' => $this->__('Multibrochure'),
             'fieldsnames' => array('home', 'country', 'multilangDisplay', 'multilang'));
 
-        $this->fields['plv'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Activer le mode PLV'), 'grade' => 3);
-        $this->fields['plvTimer'] = array('type' => 'integer', 'min' => 1, 'max' => 60, 'default' => 5, 'editable' => true, 'label' => __('Temps'), 'grade' => 3);
-        $this->fields['plvMode'] = array('type' => 'combo', 'default' => 'first', 'editable' => true, 'label' => __('Arrivé à la dernière page'), 'grade' => 3,
-            'datas' => array(__('Remonter vers la première page') => 'back',
-                __('Recommencer à la première page') => 'first'));
-        $this->forms['plv'] = array('label' => __('Mode PLV'),
+        $this->fields['plv'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__('Activer le mode PLV'), 'grade' => 3);
+        $this->fields['plvTimer'] = array('type' => 'integer', 'min' => 1, 'max' => 60, 'default' => 5, 'editable' => true, 'label' => $this->__('Temps'), 'grade' => 3);
+        $this->fields['plvMode'] = array('type' => 'combo', 'default' => 'first', 'editable' => true, 'label' => $this->__('Arrivé à la dernière page'), 'grade' => 3,
+            'datas' => array($this->__('Remonter vers la première page') => 'back',
+                $this->__('Recommencer à la première page') => 'first'));
+        $this->forms['plv'] = array('label' => $this->__('Mode PLV'),
             'fieldsnames' => array('plv', 'plvTimer', 'plvMode'));
 
 
-        $this->fields['themeEnableAfterSearch'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __("Afficher l'image supplémentaire à droite du moteur de recherche"), 'grade' => 3);
-        $this->forms['theme'] = array('label' => __('Options du thème'),
+        $this->fields['themeEnableAfterSearch'] = array('type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__("Afficher l'image supplémentaire à droite du moteur de recherche"), 'grade' => 3);
+        $this->forms['theme'] = array('label' => $this->__('Options du thème'),
             'fieldsnames' => array('themeEnableAfterSearch'));
 
-        $this->fields['forceCompileOnDownload'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Forcer la compilation lors du téléchargement'), 'grade' => 3);
-        $this->fields['embedAllLibraries'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Intégrer toutes les bibliothèques JS'), 'grade' => 3);
-        $this->fields['htmlExtension'] = array('type' => 'text', 'default' => 'html', 'editable' => true, 'label' => __('Extension des fichiers html'), 'grade' => 5, 'hint' => __('Ex : php, htm, html, phtml, asp, aspx'), 'grade' => 5);
-        $this->fields['actualHtmlExtension'] = array('type' => 'text', 'default' => 'html', 'editable' => false, 'label' => __('Extension des fichiers html réellement appliquée au fluidbook'), 'grade' => 5, 'hint' => __('Ex : php, htm, html, phtml, asp'), 'grade' => 5);
-        $this->fields['htmlPrepend'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Code à insérer en tête des fichiers'), 'grade' => 5);
-        $this->fields['baseUrl'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Base de l\'url'), 'grade' => 5,);
+        $this->fields['forceCompileOnDownload'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__('Forcer la compilation lors du téléchargement'), 'grade' => 3);
+        $this->fields['embedAllLibraries'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__('Intégrer toutes les bibliothèques JS'), 'grade' => 3);
+        $this->fields['htmlExtension'] = array('type' => 'text', 'default' => 'html', 'editable' => true, 'label' => $this->__('Extension des fichiers html'), 'grade' => 5, 'hint' => $this->__('Ex : php, htm, html, phtml, asp, aspx'), 'grade' => 5);
+        $this->fields['actualHtmlExtension'] = array('type' => 'text', 'default' => 'html', 'editable' => false, 'label' => $this->__('Extension des fichiers html réellement appliquée au fluidbook'), 'grade' => 5, 'hint' => $this->__('Ex : php, htm, html, phtml, asp'), 'grade' => 5);
+        $this->fields['htmlPrepend'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => $this->__('Code à insérer en tête des fichiers'), 'grade' => 5);
+        $this->fields['baseUrl'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__('Base de l\'url'), 'grade' => 5,);
 
-        $this->forms['package'] = array('label' => __('Option d\'export'),
+        $this->forms['package'] = array('label' => $this->__('Option d\'export'),
             'fieldsnames' => array('htmlExtension', "actualHtmlExtension", 'htmlPrepend', 'baseUrl', 'forceCompileOnDownload', 'embedAllLibraries'));
 
-        $this->fields['disableDemo'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Désactiver le lien de démo'), 'grade' => 5);
-        $this->fields['redirectDemo'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Rediriger le lien de démo vers'), 'grade' => 5);
-        $this->forms['demo'] = array('label' => __('Lien de démo'),
+        $this->fields['disableDemo'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__('Désactiver le lien de démo'), 'grade' => 5);
+        $this->fields['redirectDemo'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__('Rediriger le lien de démo vers'), 'grade' => 5);
+        $this->forms['demo'] = array('label' => $this->__('Lien de démo'),
             'fieldsnames' => array('disableDemo', 'redirectDemo'));
 
 
-        $this->fields['gamify_coins_pages'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Attribuer des coins lors de la visite des pages'));
-        $this->forms['gamify'] = ['label' => __('Gamification'),
+        $this->fields['gamify_coins_pages'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => $this->__('Attribuer des coins lors de la visite des pages'));
+        $this->forms['gamify'] = ['label' => $this->__('Gamification'),
             'fieldsnames' => ['gamify_coins_pages']];
 
 
-        $this->fields['scorm_enable'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Activer SCORM'), 'grade' => 5);
-        $this->fields['scorm_version'] = array('type' => 'combo', 'default' => '1.2', 'editable' => true, 'label' => __('Version du standard SCORM'), 'grade' => 5,
+        $this->fields['scorm_enable'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__('Activer SCORM'), 'grade' => 5);
+        $this->fields['scorm_version'] = array('type' => 'combo', 'default' => '1.2', 'editable' => true, 'label' => $this->__('Version du standard SCORM'), 'grade' => 5,
             'datas' => array(
-                __('SCORM 1.2') => '1.2',
-                __('SCORM 2004 3rd edition') => '2004.3',
-                __('SCORM 2004 4th edition') => '2004',
+                $this->__('SCORM 1.2') => '1.2',
+                $this->__('SCORM 2004 3rd edition') => '2004.3',
+                $this->__('SCORM 2004 4th edition') => '2004',
             )
         );
-        $this->fields['scorm_id'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Identifiant SCORM'), 'grade' => 5);
-        $this->fields['scorm_org'] = array('type' => 'text', 'default' => 'ACME-ORG-1350650111249', 'editable' => true, 'label' => __('Organisation SCORM'), 'grade' => 5);
-        $this->fields['scorm_title'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => __('Titre SCORM'), 'grade' => 5, 'hint' => __('Laisser vide pour utiliser le titre de la publication'));
-        $this->fields['scorm_variables'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => __('Variables SCORM'), 'grade' => 5, 'hint' => __('Laisser vide pour utiliser le titre de la publication'));
-        $this->fields['scorm_score'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Activer le support du score'), 'grade' => 5);
-        $this->fields['scorm_score_min'] = array('type' => 'integer', 'min' => 0, 'max' => 100, 'default' => 50, 'editable' => true, 'label' => __('Score minimal pour marquer le contenu comme réussi'), 'grade' => 5);
-        $this->fields['scorm_quiz_as_questionnaire'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __('Traiter les quiz comme des questionnaires (toutes les réponses sont considérées comme correctes)'), 'grade' => 5);
-        $this->fields['scorm_quizdata'] = array('type' => 'freefile', 'editable' => true, 'default' => '', 'label' => __('Données de quiz'));
+        $this->fields['scorm_id'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__('Identifiant SCORM'), 'grade' => 5);
+        $this->fields['scorm_org'] = array('type' => 'text', 'default' => 'ACME-ORG-1350650111249', 'editable' => true, 'label' => $this->__('Organisation SCORM'), 'grade' => 5);
+        $this->fields['scorm_title'] = array('type' => 'text', 'default' => '', 'editable' => true, 'label' => $this->__('Titre SCORM'), 'grade' => 5, 'hint' => $this->__('Laisser vide pour utiliser le titre de la publication'));
+        $this->fields['scorm_variables'] = array('type' => 'textarea', 'default' => '', 'editable' => true, 'label' => $this->__('Variables SCORM'), 'grade' => 5, 'hint' => $this->__('Laisser vide pour utiliser le titre de la publication'));
+        $this->fields['scorm_score'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__('Activer le support du score'), 'grade' => 5);
+        $this->fields['scorm_score_min'] = array('type' => 'integer', 'min' => 0, 'max' => 100, 'default' => 50, 'editable' => true, 'label' => $this->__('Score minimal pour marquer le contenu comme réussi'), 'grade' => 5);
+        $this->fields['scorm_quiz_as_questionnaire'] = array('type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__('Traiter les quiz comme des questionnaires (toutes les réponses sont considérées comme correctes)'), 'grade' => 5);
+        $this->fields['scorm_quizdata'] = array('type' => 'freefile', 'editable' => true, 'default' => '', 'label' => $this->__('Données de quiz'));
         $this->fields['scorm_complete_coins'] = ['type' => 'integer', 'default' => 0, 'label' => 'Marquer le cours comme "Complete" lorsque le visiteur accumule X coins', 'editable' => true];
         $this->fields['scorm_complete_on_exit'] = ['type' => 'boolean', 'default' => false, 'label' => 'Marquer le cours comme "Complete" à la fermeture de la fenêtre', 'editable' => true];
         $this->fields['scorm_complete_on_last_page'] = ['type' => 'boolean', 'default' => false, 'label' => 'Marquer le cours comme "Complete" lorsque le visiteur atteint la dernière page', 'editable' => true];
-        $this->fields['scorm_force_attempts'] = ['type' => 'boolean', 'default' => false, 'label' => __('Forcer la création d\'un "attempt" à chaque ouverture'), 'editable' => true];
-        $this->fields['scorm_pass_on_complete'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => __("Marquer le cours comme Pass lorsqu'il est terminé") . ' (' . __('SCORM 2004 seulement') . ')'];
-        $this->fields['scorm_score100_on_complete'] = ['type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __("Marquer le cours comme réussi à 100% lorsqu'il est terminé")];
-        $this->fields['scorm_commit_immediately'] = ['type' => 'boolean', 'default' => false, 'editable' => true, 'label' => __("Envoyer les données immédiatement au LMS") . ' (' . __('Peut provoquer des ralentissement sur certains LMS') . ')'];
+        $this->fields['scorm_force_attempts'] = ['type' => 'boolean', 'default' => false, 'label' => $this->__('Forcer la création d\'un "attempt" à chaque ouverture'), 'editable' => true];
+        $this->fields['scorm_pass_on_complete'] = ['type' => 'boolean', 'default' => true, 'editable' => true, 'label' => $this->__("Marquer le cours comme Pass lorsqu'il est terminé") . ' (' . $this->__('SCORM 2004 seulement') . ')'];
+        $this->fields['scorm_score100_on_complete'] = ['type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__("Marquer le cours comme réussi à 100% lorsqu'il est terminé")];
+        $this->fields['scorm_commit_immediately'] = ['type' => 'boolean', 'default' => false, 'editable' => true, 'label' => $this->__("Envoyer les données immédiatement au LMS") . ' (' . $this->__('Peut provoquer des ralentissement sur certains LMS') . ')'];
 
-        $this->forms['scorm'] = array('label' => __('SCORM'),
+        $this->forms['scorm'] = array('label' => $this->__('SCORM'),
             'fieldsnames' => array('scorm_enable', 'scorm_version', 'scorm_id', 'scorm_org', 'scorm_title', 'scorm_variables', '|', 'scorm_complete_on_exit', 'scorm_complete_on_last_page', 'scorm_complete_coins', '|', 'scorm_pass_on_complete', 'scorm_score100_on_complete', '|', 'scorm_quizdata', 'scorm_score', 'scorm_score_min', 'scorm_quiz_as_questionnaire', '|', 'scorm_force_attempts', 'scorm_commit_immediately'));
 
         $versions = wsUrl::getFluidbookVersions(false);
@@ -883,12 +843,12 @@ class wsBookParametres extends wsParametres
             if (in_array($k, $ignore)) {
                 continue;
             }
-            $this->fields['download_' . $k] = ['type' => 'boolean', 'editable' => true, 'default' => false, 'label' => $version['title'], 'grade' => 3];
+            $this->fields['download_' . $k] = ['type' => 'boolean', 'editable' => true, 'default' => false, 'label' => $this->__($version['title']), 'grade' => 3];
             $fields[] = 'download_' . $k;
         }
         $this->fields['download_online']['default'] = true;
 
-        $this->forms['downloads'] = array('label' => __('Versions disponibles au téléchargement'),
+        $this->forms['downloads'] = array('label' => $this->__('Versions disponibles au téléchargement'),
             'fieldsnames' => $fields);
     }
 }
index 3d73abd9aef2fdd5151b231cc26ed6d0c8115b07..d66bc827249e460dff5e63a06c6007adbf5203b0 100644 (file)
@@ -508,7 +508,7 @@ class wsDocument extends cubeMetier
     public static function isFarmUser()
     {
         global $core;
-        $farmTesters = [2, 3, 5];
+        $farmTesters = [1, 2, 3, 5];
         return in_array($core->user->utilisateur_id, $farmTesters);
     }
 
@@ -531,6 +531,8 @@ class wsDocument extends cubeMetier
             $version = '';
         }
 
+        $isFarmUser = self::isFarmUser();
+
         $dir = rtrim($this->out . $version, '/') . '/';
         $minsize = 1;
         if ($format === 'svg') {
@@ -540,7 +542,11 @@ class wsDocument extends cubeMetier
                 $file .= '-' . $resolution;
             }
             $file .= '.svg';
-            $reffile = $this->makeSVGFile($page, $force);
+            if ($isFarmUser) {
+                $reffile = $this->out . '/html/fp' . $page . '.svg';
+            } else {
+                $reffile = $this->makeSVGFile($page, $force);
+            }
             $minsize = 100;
         } else if ($format === 'png' || $format === 'jpg') {
             $prefix = $withText ? 't' : 'h';
@@ -558,7 +564,7 @@ class wsDocument extends cubeMetier
             $do = true;
         } else if (filesize($file) < $minsize) {
             $do = true;
-        } else if (isset($reffile) && filemtime($file) < filemtime($reffile)) {
+        } else if (isset($reffile) && (!file_exists($reffile) || filemtime($file) < filemtime($reffile))) {
             $do = true;
         } else if ($format === 'svg') {
             $t = filemtime($file);
@@ -567,7 +573,7 @@ class wsDocument extends cubeMetier
 
 
         if ($do || $force) {
-            if (self::isFarmUser()) {
+            if ($isFarmUser) {
                 return $this->_getFileFarm($page, $format, $resolution, $withText, $withGraphics, $version, $force);
             } else {
                 $this->makeFile($file, $page, $format, $resolution, $withText, $withGraphics, $version);
index 570cd862855edc1976b510c74d12d3e43342ee27..15fde3f48f47cb27f64697900b60465a7d955d67 100644 (file)
@@ -7,17 +7,18 @@ class wsParametres extends cubeMetier implements Iterator
     protected $fields;\r
     protected $forms;\r
     protected $parent;\r
+    protected $context = '';\r
 \r
     // Magic functions\r
-    public function __construct($parent)\r
+    public function __construct($parent, $context = '')\r
     {\r
+        $this->context = $context;\r
         $this->parent = $parent;\r
         $this->initFields();\r
         $this->datas = array();\r
         $this->setDefaultValues();\r
     }\r
 \r
-\r
     public function initFromWS3Data($r)\r
     {\r
         print_r($r->columns);\r
@@ -318,6 +319,7 @@ class wsParametres extends cubeMetier implements Iterator
     public function generateV3Form($tab = false)\r
     {\r
         ob_end_clean();\r
+\r
         header('Content-type: text/plain');\r
 \r
 \r
@@ -326,7 +328,7 @@ class wsParametres extends cubeMetier implements Iterator
     ';\r
         foreach ($this->forms as $formname => $form) {\r
             if ($tab !== 'form') {\r
-                echo $this->generateV3Field(['name' => 'section_' . $formname, 'type' => 'FormSection', 'label' => '§!§' . $form['label'] . '!§!']);\r
+                echo $this->generateV3Field(['name' => 'section_' . $formname, 'type' => 'FormSection', 'label' => $form['label']]);\r
                 $_tab = $tab;\r
             } else {\r
                 $_tab = $form['label'];\r
@@ -348,7 +350,7 @@ class wsParametres extends cubeMetier implements Iterator
     public function generateV3Field($attributes, $tab = false)\r
     {\r
         if ($tab && !isset($attributes['tab'])) {\r
-            $attributes['tab'] = '§!§' . $tab . '!§!';\r
+            $attributes['tab'] = $tab;\r
         }\r
         $res = "    ";\r
         $res .= '$this->addField(\'' . addcslashes($attributes['name'], "'") . '\', ' . $attributes['type'] . '::class';\r
@@ -367,8 +369,7 @@ class wsParametres extends cubeMetier implements Iterator
 \r
         $res = str_replace("'§!§", '__(\'', $res);\r
         $res = str_replace("!§!'", '\')', $res);\r
-\r
-        $res = preg_replace_callback('/§!§(.*)!§!/u', function ($matches) {\r
+        $res = preg_replace_callback('/§!§(.*)!§!/uU', function ($matches) {\r
             return '__(\'' . addcslashes($matches[1], "'") . '\')';\r
         }, $res);\r
 \r
@@ -381,14 +382,16 @@ class wsParametres extends cubeMetier implements Iterator
         $copyAttrs = ['min' => 'min', 'max' => 'max', 'default' => 'default', 'allows_alpha' => 'allows_alpha'];\r
         $transAttrs = ['label' => 'label', 'hint' => 'hint'];\r
 \r
+        $orig = $f;\r
 \r
         if ($f['type'] === 'couleur') {\r
             $f['allows_alpha'] = false;\r
         } else if ($f['type'] === 'couleurAlpha') {\r
-            $f['allows_alpha'] = false;\r
+            $f['allows_alpha'] = true;\r
         }\r
 \r
-        $attrs = ['name' => $name, 'type' => isset($typeMap[$f['type']]) ? $typeMap[$f['type']] : $f['type']];\r
+\r
+        $attrs = ['name' => $name, 'type' => $typeMap[$f['type']] ?? $f['type'], 'v2' => json_encode($orig)];\r
 \r
         if ($name == 'signature') {\r
             $attrs['type'] = 'FluidbookSignature';\r
@@ -410,7 +413,7 @@ class wsParametres extends cubeMetier implements Iterator
 \r
         foreach ($transAttrs as $former => $new) {\r
             if (isset($f[$former])) {\r
-                $attrs[$new] = '§!§' . $f[$former] . '!§!';\r
+                $attrs[$new] = $f[$former];\r
             }\r
         }\r
         foreach ($copyAttrs as $former => $new) {\r
@@ -440,4 +443,17 @@ class wsParametres extends cubeMetier implements Iterator
         if ((bool)$return) return $export; else echo $export;\r
     }\r
 \r
+    /**\r
+     * @param $str\r
+     * @return string\r
+     */\r
+    public function __($str)\r
+    {\r
+        if ($this->context === 'export') {\r
+            return '§!§' . $str . '!§!';\r
+        } else {\r
+            return __($str);\r
+        }\r
+    }\r
+\r
 }
\ No newline at end of file