]> _ Git - fluidbook-toolbox.git/commitdiff
wait #7592 @1
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Wed, 11 Jun 2025 14:50:17 +0000 (16:50 +0200)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Wed, 11 Jun 2025 14:50:17 +0000 (16:50 +0200)
app/Http/Controllers/Admin/Operations/FluidbookPublication/EditOperation.php
app/Models/Traits/PublicationSettings.php

index d24985261ef4f64fd0a04b7e02ae516d3a790be2..6fd511815d6cf0a846ee0a7b327d3e09dc16f0ec 100644 (file)
@@ -3,6 +3,7 @@
 namespace App\Http\Controllers\Admin\Operations\FluidbookPublication;
 
 use App\Models\FluidbookPublication;
+use Cubist\Backpack\Http\Controllers\Base\XSendFileController;
 use Cubist\Util\Files\Files;
 use Cubist\Util\Gzip;
 use Illuminate\Support\Facades\Route;
@@ -17,6 +18,7 @@ trait EditOperation
     {
         Route::match(['get'], $segment . '/{id}/changeprojectmanager/{status}', $controller . '@changeProjectManager');
         Route::match(['get'], $segment . '/{id}/pdftextsforaudiodescription', $controller . '@exportPDFTextsForAudioDescription');
+        Route::match(['get'], $segment . '/{id}/asset/{asset}', $controller . '@downloadAsset');
     }
 
     protected function exportPDFTextsForAudioDescription($fluidbook_id)
@@ -78,4 +80,21 @@ trait EditOperation
         Alert::add('success', __('Chef de projet de la publication modifié'))->flash();
         return back();
     }
+
+    protected function downloadAsset($fluidbook_id, $asset)
+    {
+        if (!can('fluidbook-publication:write')) {
+            abort(401);
+        }
+        if (!FluidbookPublication::hasPermission($fluidbook_id)) {
+            abort(401);
+        }
+        /** @var FluidbookPublication $fluidbook */
+        $fluidbook = FluidbookPublication::find($fluidbook_id);
+        if (!$fluidbook || !$fluidbook->allowsEdit()) {
+            abort(404);
+        }
+        $file = $fluidbook->asset_path($asset);
+        return XSendFileController::sendfileNoCache($file);
+    }
 }
index 681511ef4f1e8039110e23ddb57ebdb9b79d3238..f77977fa138fabc8e36c9e9d8e4392a124134b87 100644 (file)
@@ -79,11 +79,11 @@ trait PublicationSettings
         $disabled = ['phonegapId', 'phonegapVersion', 'phonegapPlugins', 'appScreenshots', 'svgTextMethod'];
 
         foreach ($disabled as $item) {
-            $this->addSettingField($item, Hidden::class);
+            $this->_addSettingField($item, Hidden::class);
         }
 
-//        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('mobileVideosPath', Hidden::class, $this->__('Chemin vers les vidéos'));
+//        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('mobileVideosPath', Hidden::class, $this->__('Chemin vers les vidéos'));
 
 
     }
@@ -97,7 +97,7 @@ trait PublicationSettings
 
     protected function _mainFeatures()
     {
-        $this->addSettingField('bigsection_main_features', FormSuperSection::class, $this->__('Fonctionnalités'));
+        $this->_addSettingField('bigsection_main_features', FormSuperSection::class, $this->__('Fonctionnalités'));
         $this->_menu();
         $this->_index();
         $this->_chapters();
@@ -114,7 +114,7 @@ trait PublicationSettings
 
     protected function _appearance()
     {
-        $this->addSettingField('bigsection_appearance', FormSuperSection::class, $this->__('Apparence & interface'));
+        $this->_addSettingField('bigsection_appearance', FormSuperSection::class, $this->__('Apparence & interface'));
         $this->_visualization();
         $this->_mobileFirst();
         $this->_theme();
@@ -127,14 +127,14 @@ trait PublicationSettings
 
     protected function _ecommerce()
     {
-        $this->addSettingField('bigsection_ecommerce', FormSuperSection::class, $this->__('Paniers et produits (e-commerce)'));
+        $this->_addSettingField('bigsection_ecommerce', FormSuperSection::class, $this->__('Paniers et produits (e-commerce)'));
         $this->_cart();
         $this->_productZoom();
     }
 
     protected function _linksAndMultimedia()
     {
-        $this->addSettingField('bigsection_links', FormSuperSection::class, $this->__('Liens et multimédia'));
+        $this->_addSettingField('bigsection_links', FormSuperSection::class, $this->__('Liens et multimédia'));
         $this->_links();
         $this->_multimedia();
         $this->_video();
@@ -149,7 +149,7 @@ trait PublicationSettings
 
     protected function _advanced()
     {
-        $this->addSettingField('bigsection_advanced', FormSuperSection::class, $this->__('Paramètres avancés'));
+        $this->_addSettingField('bigsection_advanced', FormSuperSection::class, $this->__('Paramètres avancés'));
         $this->_archives();
         $this->_form();
         $this->_plv();
@@ -159,7 +159,7 @@ trait PublicationSettings
 
     protected function _packageAndDownload()
     {
-        $this->addSettingField('bigsection_package', FormSuperSection::class, $this->__('Packages & Téléchargements'));
+        $this->_addSettingField('bigsection_package', FormSuperSection::class, $this->__('Packages & Téléchargements'));
         $this->_seo();
         $this->_multibrochure();
         $this->_package();
@@ -172,7 +172,7 @@ trait PublicationSettings
 
     protected function _stats()
     {
-        $this->addSettingField('bigsection_stats', FormSuperSection::class, $this->__('Statistiques et vie privée'));
+        $this->_addSettingField('bigsection_stats', FormSuperSection::class, $this->__('Statistiques et vie privée'));
         $this->_statsFluidbook();
         $this->_statsGoogleAnalytics();
         $this->_statsGoogleTagManager();
@@ -205,24 +205,24 @@ trait PublicationSettings
 
     protected function _slider()
     {
-        $this->addSettingField('section_slider', FormSection::class, $this->__('Slider'));
-        $this->addSettingField('sliderImage', FilesOrURL::class, $this->__('Image pour le slider'), [
+        $this->_addSettingField('section_slider', FormSection::class, $this->__('Slider'));
+        $this->_addSettingField('sliderImage', FilesOrURL::class, $this->__('Image pour le slider'), [
             'accept' => self::$acceptImages,
         ]);
     }
 
     protected function _main()
     {
-        $this->addSettingField('title', LongText::class, $this->__('Titre de la publication'));
-        $this->addSettingField('mobileLVersion', FluidbookDevelopmentVersion::class, $this->__('Version logicielle'), [
+        $this->_addSettingField('title', LongText::class, $this->__('Titre de la publication'));
+        $this->_addSettingField('mobileLVersion', FluidbookDevelopmentVersion::class, $this->__('Version logicielle'), [
             'default' => 'stable',
         ]);
     }
 
     protected function _description()
     {
-        $this->addSettingField('section_important', FormSection::class, $this->__('Description de la publication'));
-        $this->addSettingField('mobileVersion', SelectFromArray::class, $this->__('Format des pages'), [
+        $this->_addSettingField('section_important', FormSection::class, $this->__('Description de la publication'));
+        $this->_addSettingField('mobileVersion', SelectFromArray::class, $this->__('Format des pages'), [
             'options' => [
                 //'pdf' => $this->__('Rediriger vers le PDF'),
                 'html5-desktop' => $this->__('Version HTML5 recommandée (vecteurs sur desktop)'),
@@ -232,95 +232,95 @@ trait PublicationSettings
             'default' => 'html5-desktop',
         ]);
 
-        $this->addSettingField('url_link', LongText::class, $this->__('URL du lien de retour au site'), [
+        $this->_addSettingField('url_link', LongText::class, $this->__('URL du lien de retour au site'), [
             'default' => 'http://',
         ]);
-        $this->addSettingField('signature', FluidbookSignature::class, $this->__('Signature'), [
+        $this->_addSettingField('signature', FluidbookSignature::class, $this->__('Signature'), [
             'default' => '1',
         ]);
     }
 
     protected function _assets()
     {
-        $this->addSettingField('section_assets', FormSection::class, $this->__('Assets'));
-        $this->addSettingField('assetsDir', LongText::class, $this->__('Utiliser le dossier d\'assets du fluidbook'));
-        $this->addSettingField('linksAssets', FilesOrURL::class, $this->__('Charger ou remplacer des fichiers de liens'));
+        $this->_addSettingField('section_assets', FormSection::class, $this->__('Assets'));
+        $this->_addSettingField('assetsDir', LongText::class, $this->__('Utiliser le dossier d\'assets du fluidbook'));
+        $this->_addSettingField('linksAssets', FilesOrURL::class, $this->__('Charger ou remplacer des fichiers de liens'));
 
     }
 
     protected function _share()
     {
-        $this->addSettingField('section_share', FormSection::class, $this->__('Fonctions de partage'));
-        $this->addSettingField('share', Checkbox::class, $this->__('Activer les fonctions de partage'), [
+        $this->_addSettingField('section_share', FormSection::class, $this->__('Fonctions de partage'));
+        $this->_addSettingField('share', Checkbox::class, $this->__('Activer les fonctions de partage'), [
             'default' => true,
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('email_title', LongText::class, $this->__('Titre de l\'email') . ' "' . $this->__('Envoyer à un ami') . '"', [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('email_title', LongText::class, $this->__('Titre de l\'email') . ' "' . $this->__('Envoyer à un ami') . '"', [
             'hint' => $this->__('Laisser vide pour utiliser la valeur par défaut'),
         ]);
-        $this->addSettingField('email_body', Textarea::class, $this->__('Corps de l\'email') . ' "' . $this->__('Envoyer à un ami') . '"', [
+        $this->_addSettingField('email_body', Textarea::class, $this->__('Corps de l\'email') . ' "' . $this->__('Envoyer à un ami') . '"', [
             'hint' => $this->__('Laisser vide pour utiliser la valeur par défaut'),
         ]);
-        $this->addSettingField('email_editable', Checkbox::class, $this->__('Permettre au lecteur de modifier le corps de l\'email'), [
+        $this->_addSettingField('email_editable', Checkbox::class, $this->__('Permettre au lecteur de modifier le corps de l\'email'), [
             'default' => true,
         ]);
-        $this->addSettingField('askAcknowledge', Checkbox::class, $this->__('Demander au destinataire un accusé de réception'), [
+        $this->_addSettingField('askAcknowledge', Checkbox::class, $this->__('Demander au destinataire un accusé de réception'), [
             'default' => false,
         ]);
-        $this->addSettingField('sendasfluidbook', Checkbox::class, $this->__('Envoyer le mail comme Fluidbook'), [
+        $this->_addSettingField('sendasfluidbook', Checkbox::class, $this->__('Envoyer le mail comme Fluidbook'), [
             'hint' => $this->__('L\'expéditeur apparaîtra en reply-to'),
             'default' => false,
         ]);
-        $this->addSettingField('email_mailto', Checkbox::class, $this->__('Envoyer le mail via le client mail du visiteur (mailto:)'), [
+        $this->_addSettingField('email_mailto', Checkbox::class, $this->__('Envoyer le mail via le client mail du visiteur (mailto:)'), [
             'default' => false,
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('facebook_title', LongText::class, $this->__('Titre du contenu partagé'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('facebook_title', LongText::class, $this->__('Titre du contenu partagé'), [
             'hint' => $this->__('Titre proposé sur les fonction de partage (par défaut, titre de la publication)'),
         ]);
-        $this->addSettingField('facebook_description', Textarea::class, $this->__('Description du contenu partagé'), [
+        $this->_addSettingField('facebook_description', Textarea::class, $this->__('Description du contenu partagé'), [
             'hint' => $this->__('Description proposée sur les fonctions de partage (par défaut, vide)'),
         ]);
-        $this->addSettingField('facebook_image', FilesOrURL::class, $this->__('Miniature affichée'), [
+        $this->_addSettingField('facebook_image', FilesOrURL::class, $this->__('Miniature affichée'), [
             'accept' => self::$acceptImages,
         ]);
-        $this->addSettingField('twitter_description', Textarea::class, $this->__('Contenu Partage court'), [
+        $this->_addSettingField('twitter_description', Textarea::class, $this->__('Contenu Partage court'), [
             'hint' => $this->__('Contenu du partage sur les partages courts'),
             'default' => '%title% : %short%',
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('friend', Checkbox::class, $this->__('E-mail'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('friend', Checkbox::class, $this->__('E-mail'), [
             'default' => true,
         ]);
-        $this->addSettingField('facebook', Checkbox::class, $this->__('Facebook'), [
+        $this->_addSettingField('facebook', Checkbox::class, $this->__('Facebook'), [
             'default' => true,
         ]);
-        $this->addSettingField('twitter', Checkbox::class, $this->__('Twitter'), [
+        $this->_addSettingField('twitter', Checkbox::class, $this->__('Twitter'), [
             'default' => true,
         ]);
-        $this->addSettingField('whatsapp', Checkbox::class, $this->__('WhatsApp'), [
+        $this->_addSettingField('whatsapp', Checkbox::class, $this->__('WhatsApp'), [
             'default' => true,
         ]);
-        $this->addSettingField('linkedin', Checkbox::class, $this->__('LinkedIn'), [
+        $this->_addSettingField('linkedin', Checkbox::class, $this->__('LinkedIn'), [
             'default' => true,
         ]);
-        $this->addSettingField('pinterest', Checkbox::class, $this->__('Pinterest'), [
+        $this->_addSettingField('pinterest', Checkbox::class, $this->__('Pinterest'), [
             'default' => false,
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('googleplus', Checkbox::class, $this->__('Google +'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('googleplus', Checkbox::class, $this->__('Google +'), [
             'default' => false,
         ]);
-        $this->addSettingField('viadeo', Checkbox::class, $this->__('Viadeo'), [
+        $this->_addSettingField('viadeo', Checkbox::class, $this->__('Viadeo'), [
             'default' => false,
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('customSharer', LongText::class, $this->__('Classe personnalisée de partage'));
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('friendWidth', Integer::class, $this->__('Largeur du menu'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('customSharer', LongText::class, $this->__('Classe personnalisée de partage'));
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('friendWidth', Integer::class, $this->__('Largeur du menu'), [
             'default' => 319,
         ]);
-        $this->addSettingField('friendHeight', Integer::class, $this->__('Largeur du menu'), [
+        $this->_addSettingField('friendHeight', Integer::class, $this->__('Largeur du menu'), [
             'default' => 500,
         ]);
 
@@ -328,18 +328,18 @@ trait PublicationSettings
 
     protected function _seo()
     {
-        $this->addSettingField('section_seo', FormSection::class, $this->__('Optimisation pour les moteurs de recherche'));
-        $this->addSettingField('seoVersion', Checkbox::class, $this->__('Générer une version pour les moteurs de recherche'), [
+        $this->_addSettingField('section_seo', FormSection::class, $this->__('Optimisation pour les moteurs de recherche'));
+        $this->_addSettingField('seoVersion', Checkbox::class, $this->__('Générer une version pour les moteurs de recherche'), [
             'default' => true,
         ]);
-        $this->addSettingField('seoRobots', Checkbox::class, $this->__('Autoriser le parcours par les moteurs de recherche'), [
+        $this->_addSettingField('seoRobots', Checkbox::class, $this->__('Autoriser le parcours par les moteurs de recherche'), [
             'default' => true,
         ]);
-        $this->addSettingField('seoDescription', Textarea::class, $this->__('Meta tag Description'));
-        $this->addSettingField('seoKeywords', Textarea::class, $this->__('Meta tag Keywords'));
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('seoBaseURL', LongText::class, $this->__('URL de base'));
-        $this->addSettingField('seoAdvanced', FilesOrURL::class, $this->__('Données SEO par page'), [
+        $this->_addSettingField('seoDescription', Textarea::class, $this->__('Meta tag Description'));
+        $this->_addSettingField('seoKeywords', Textarea::class, $this->__('Meta tag Keywords'));
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('seoBaseURL', LongText::class, $this->__('URL de base'));
+        $this->_addSettingField('seoAdvanced', FilesOrURL::class, $this->__('Données SEO par page'), [
             'accept' => self::$acceptXLSX,
         ]);
 
@@ -347,8 +347,8 @@ trait PublicationSettings
 
     protected function _visualization()
     {
-        $this->addSettingField('section_3d_mode', FormSection::class, $this->__('Options de visualisation'));
-        $this->addSettingField('mobileNavigationType', SelectFromArray::class, $this->__('Mode de navigation'), [
+        $this->_addSettingField('section_3d_mode', FormSection::class, $this->__('Options de visualisation'));
+        $this->_addSettingField('mobileNavigationType', SelectFromArray::class, $this->__('Mode de navigation'), [
             'options' => [
                 'book' => $this->__('Normal (automatique)'),
                 'landscape' => $this->__('Normal (double page)'),
@@ -358,8 +358,8 @@ trait PublicationSettings
             ],
             'default' => 'book',
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('mobileTransitions', SelectFromArray::class, $this->__('Transitions entre les pages'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('mobileTransitions', SelectFromArray::class, $this->__('Transitions entre les pages'), [
             'options' => [
                 'none' => $this->__('Aucune transition'),
                 'fade' => $this->__('Apparition de la nouvelle page en opacité par dessus la page courante'),
@@ -372,89 +372,89 @@ trait PublicationSettings
             ],
             'default' => 'flip3d',
         ]);
-        $this->addSettingField('mobileTransitionDuration', Number::class, $this->__('Durée de la transition'), [
+        $this->_addSettingField('mobileTransitionDuration', Number::class, $this->__('Durée de la transition'), [
             'default' => 0.5,
         ]);
-        $this->addSettingField('mobileTransitionDurationSlide', Number::class, $this->__('Durée de la transition (fade, slide)'), [
+        $this->_addSettingField('mobileTransitionDurationSlide', Number::class, $this->__('Durée de la transition (fade, slide)'), [
             'hint' => $this->__('Laisser à zéro pour utiliser la valeur générale'),
             'default' => 0,
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('forceWhiteBackground', Checkbox::class, $this->__('Ajouter un fond blanc aux pages'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('forceWhiteBackground', Checkbox::class, $this->__('Ajouter un fond blanc aux pages'), [
             'default' => true,
         ]);
-        $this->addSettingField('rasterizePages', Hidden::class, $this->__('Ecraser les pages'), [
+        $this->_addSettingField('rasterizePages', Hidden::class, $this->__('Ecraser les pages'), [
             'hint' => '1-3,5 = 1,2,3,5',
         ]);
-        $this->addSettingField('vectorPages', Hidden::class, $this->__('Conserver les pages en vecteur'), [
+        $this->_addSettingField('vectorPages', Hidden::class, $this->__('Conserver les pages en vecteur'), [
             'hint' => '1-3,5 = 1,2,3,5',
         ]);
 
-        $this->addSettingField('correctCenter', Checkbox::class, $this->__('Corriger les lignes blanches entre les pages'), [
+        $this->_addSettingField('correctCenter', Checkbox::class, $this->__('Corriger les lignes blanches entre les pages'), [
             'default' => true,
             'when' => ['mobileNavigationType' => ['book', 'landscape']],
         ]);
 
-        $this->addSettingField('fixAirPixel', Checkbox::class, $this->__('Corriger la ligne blanche en bordure de page'),
+        $this->_addSettingField('fixAirPixel', Checkbox::class, $this->__('Corriger la ligne blanche en bordure de page'),
             ['default' => true, 'when' => ['mobileNavigationType' => ['portrait']]]
         );
-//        $this->addSettingField('pagesBaseAngle', Integer::class, $this->__('Angle de base entre les pages'), [
+//        $this->_addSettingField('pagesBaseAngle', Integer::class, $this->__('Angle de base entre les pages'), [
 //
 //            'hint' => $this->__('0 : Publication à plat') . '
 //' . $this->__('2 : Valeur par défaut'),
 //            'default' => 2,
 //        ]);
-        $this->addSettingField('centerBook', Checkbox::class, $this->__('Centrer la publication sur les couvertures'), [
+        $this->_addSettingField('centerBook', Checkbox::class, $this->__('Centrer la publication sur les couvertures'), [
             'default' => true,
             'when' => ['mobileNavigationType' => ['book', 'landscape']],
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('mobileHorizontalMargins', Integer::class, $this->__('Marges horizontales sur mobile'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('mobileHorizontalMargins', Integer::class, $this->__('Marges horizontales sur mobile'), [
             'default' => 10,
         ]);
-        $this->addSettingField('mobileReducedMargins', Checkbox::class, $this->__('Marges verticales réduites sur mobile'), [
+        $this->_addSettingField('mobileReducedMargins', Checkbox::class, $this->__('Marges verticales réduites sur mobile'), [
             'default' => false,
         ]);
-        $this->addSettingField('mobileHideSliderIfOverlaps', Checkbox::class, $this->__('Cacher le slider si nécessaire'), ['default' => true, 'when' => ['mobileReducedMargins' => '1']]);
-        $this->addSettingField('extraXSpace', Integer::class, $this->__('Marge supplémentaire horizontale'), [
+        $this->_addSettingField('mobileHideSliderIfOverlaps', Checkbox::class, $this->__('Cacher le slider si nécessaire'), ['default' => true, 'when' => ['mobileReducedMargins' => '1']]);
+        $this->_addSettingField('extraXSpace', Integer::class, $this->__('Marge supplémentaire horizontale'), [
             'default' => 0,
         ]);
-        $this->addSettingField('mobileExtraXSpace', Integer::class, $this->__('Marge supplémentaire horizontale (Mobile)'), [
+        $this->_addSettingField('mobileExtraXSpace', Integer::class, $this->__('Marge supplémentaire horizontale (Mobile)'), [
             'default' => 0,
         ]);
-        $this->addSettingField('extraYSpace', Integer::class, $this->__('Marge supplémentaire verticale'), [
+        $this->_addSettingField('extraYSpace', Integer::class, $this->__('Marge supplémentaire verticale'), [
             'default' => 0,
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('viewMode', SelectFromArray::class, $this->__('Mode de visualisation (beta)'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('viewMode', SelectFromArray::class, $this->__('Mode de visualisation (beta)'), [
             'options' => [
                 0 => $this->__('Classique'),
                 1 => $this->__('Diaporama'),
             ],
             'default' => '0',
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('dynamicBackgroundColor', Textarea::class, 'Couleur de fond dynamique');
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('svgToCanvas', SelectFromArray::class, $this->__('Rendu des textes'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('dynamicBackgroundColor', Textarea::class, 'Couleur de fond dynamique');
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('svgToCanvas', SelectFromArray::class, $this->__('Rendu des textes'), [
             'options' => [0 => __('Afficher le SVG'), 1 => __('SVG to Canvas'), 2 => __('PDF to Canvas')],
             'default' => 0,
         ]);
-        $this->addSettingField('pdfToCanvasPDF', FilesOrURL::class, __('PDF pour le rendu PDF to Canvas'), ['when' => ['svgToCanvas' => 2]]);
-        $this->addSettingField('svgToCanvasUpscale', Number::class, $this->__('Upscale de la fonction svgtocanvas'), [
+        $this->_addSettingField('pdfToCanvasPDF', FilesOrURL::class, __('PDF pour le rendu PDF to Canvas'), ['when' => ['svgToCanvas' => 2]]);
+        $this->_addSettingField('svgToCanvasUpscale', Number::class, $this->__('Upscale de la fonction svgtocanvas'), [
             'default' => 1,
             'when' => ['svgToCanvas' => 1],
         ]);
-        $this->addSettingField('textsThickness', Number::class, $this->__('Epaisseur des textes'), [
+        $this->_addSettingField('textsThickness', Number::class, $this->__('Epaisseur des textes'), [
             'default' => 1,
             'when' => ['svgToCanvas' => 1],
         ]);
-        $this->addSettingField('textsThicknessPages', LongText::class, $this->__('Appliquer l\'épaisseur des texte sur les pages'), [
+        $this->_addSettingField('textsThicknessPages', LongText::class, $this->__('Appliquer l\'épaisseur des texte sur les pages'), [
             'when' => ['svgToCanvas' => 1],
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('transparentPage', Checkbox::class, __('Pages transparentes'), ['default' => false]);
-        $this->addSettingField('imageFormat', SelectFromArray::class, $this->__('Format des images'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('transparentPage', Checkbox::class, __('Pages transparentes'), ['default' => false]);
+        $this->_addSettingField('imageFormat', SelectFromArray::class, $this->__('Format des images'), [
             'options' => [
                 'jpg' => 'JPEG',
                 'png' => 'PNG',
@@ -463,12 +463,12 @@ trait PublicationSettings
             'when' => ['transparentPage' => 0],
         ]);
 
-        $this->addSettingField('JPEGQuality', Integer::class, $this->__('Qualité JPEG'), [
+        $this->_addSettingField('JPEGQuality', Integer::class, $this->__('Qualité JPEG'), [
             'default' => 85,
             'when' => ['imageFormat' => 'jpg', 'transparentPage' => 0],
         ]);
 
-        $this->addSettingField('maxResolution', SelectFromArray::class, $this->__('Résolution maximale des pages'), [
+        $this->_addSettingField('maxResolution', SelectFromArray::class, $this->__('Résolution maximale des pages'), [
             'options' => [
                 300 => '300dpi',
                 150 => '150dpi',
@@ -481,11 +481,11 @@ trait PublicationSettings
 
     protected function _performances()
     {
-        $this->addSettingField('section_performances', FormSection::class, $this->__('Performances'));
-        $this->addSettingField('rasterizeOnSafari', Checkbox::class, $this->__('Ecraser les pages pour Safari (Mac OS)'), [
+        $this->_addSettingField('section_performances', FormSection::class, $this->__('Performances'));
+        $this->_addSettingField('rasterizeOnSafari', Checkbox::class, $this->__('Ecraser les pages pour Safari (Mac OS)'), [
             'default' => false,
         ]);
-        $this->addSettingField('performance3DMode', SelectFromArray::class, $this->__('Performance de la 3D'), [
+        $this->_addSettingField('performance3DMode', SelectFromArray::class, $this->__('Performance de la 3D'), [
             'options' => [
                 'auto' => $this->__('Tester la machine'),
                 'highPerf' => $this->__('Haute'),
@@ -498,80 +498,80 @@ trait PublicationSettings
 
     protected function _general()
     {
-        $this->addSettingField('section_general', FormSection::class, $this->__('Fonctionnalités générales'));
-        $this->addSettingField('tooltipTimer', Number::class, $this->__('Temps maximum d\'apparition des infos-bulle'), [
+        $this->_addSettingField('section_general', FormSection::class, $this->__('Fonctionnalités générales'));
+        $this->_addSettingField('tooltipTimer', Number::class, $this->__('Temps maximum d\'apparition des infos-bulle'), [
             'default' => 3,
             'suffix' => __('secondes'),
         ]);
-        $this->addSettingField('mobilePlugins', Textarea::class, $this->__('Plugin'));
-        $this->addSettingField('maxPages', Integer::class, $this->__('Nombre de pages maximal affiché à l\'ouverture du fluidbook (pas de limite = 0)'), [
+        $this->_addSettingField('mobilePlugins', Textarea::class, $this->__('Plugin'));
+        $this->_addSettingField('maxPages', Integer::class, $this->__('Nombre de pages maximal affiché à l\'ouverture du fluidbook (pas de limite = 0)'), [
             'default' => 0,
         ]);
-        $this->addSettingField('pages', ReadOnlyValue::class, $this->__('Nombre de pages'), [
+        $this->_addSettingField('pages', ReadOnlyValue::class, $this->__('Nombre de pages'), [
             'default' => 0,
         ]);
-        $this->addSettingField('width', ReadOnlyValue::class, $this->__('Largeur'), [
+        $this->_addSettingField('width', ReadOnlyValue::class, $this->__('Largeur'), [
             'default' => 0,
         ]);
-        $this->addSettingField('height', ReadOnlyValue::class, $this->__('Hauteur'), [
+        $this->_addSettingField('height', ReadOnlyValue::class, $this->__('Hauteur'), [
             'default' => 0,
         ]);
     }
 
     protected function _loading()
     {
-        $this->addSettingField('section_preload', FormSection::class, $this->__('Préchargement, temps d\'ouverture'));
-        $this->addSettingField('shortLoading', Checkbox::class, $this->__('Chargement court'), ['default' => false, 'hint' => $this->__('Ce mode permet de donner la priorité à l\'apparition de la publication par rapport au préchargement des images ou à la fluidité des animations')]);
-        $this->addSettingField('preload', Integer::class, $this->__('Nombre de pages à précharger'), [
+        $this->_addSettingField('section_preload', FormSection::class, $this->__('Préchargement, temps d\'ouverture'));
+        $this->_addSettingField('shortLoading', Checkbox::class, $this->__('Chargement court'), ['default' => false, 'hint' => $this->__('Ce mode permet de donner la priorité à l\'apparition de la publication par rapport au préchargement des images ou à la fluidité des animations')]);
+        $this->_addSettingField('preload', Integer::class, $this->__('Nombre de pages à précharger'), [
             'default' => 16,
         ]);
-        $this->addSettingField('priorityToPreload', Checkbox::class, $this->__('Priorité au préchargement sur la fluidité'), ['default' => false,
+        $this->_addSettingField('priorityToPreload', Checkbox::class, $this->__('Priorité au préchargement sur la fluidité'), ['default' => false,
         ]);
     }
 
     protected function _menu()
     {
-        $this->addSettingField('section_menu', FormSection::class, $this->__('Menu'));
-        $this->addSettingField('navOrder', Textarea::class, $this->__('Ordre des icônes dans la nav'), [
+        $this->_addSettingField('section_menu', FormSection::class, $this->__('Menu'));
+        $this->_addSettingField('navOrder', Textarea::class, $this->__('Ordre des icônes dans la nav'), [
             'default' => 'index, chapters, search, print, friend, bookmark, pdf, notes, archives, basket, fullscreen, sound, 3d, extra, extra1, extra2, extra3, extra4, extra5, help, lang',
         ]);
-        $this->addSettingField('navOrderH', Textarea::class, $this->__('Ordre des icônes dans la nav mobile') . ' (' . $this->__('Si différente') . ')');
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('mobileNavScale', Integer::class, $this->__('Taille du menu (en %)'), [
+        $this->_addSettingField('navOrderH', Textarea::class, $this->__('Ordre des icônes dans la nav mobile') . ' (' . $this->__('Si différente') . ')');
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('mobileNavScale', Integer::class, $this->__('Taille du menu (en %)'), [
             'default' => 100,
         ]);
-        $this->addSettingField('menuBreakpoint', LongText::class, $this->__('Breakpoint burger menu'), [
+        $this->_addSettingField('menuBreakpoint', LongText::class, $this->__('Breakpoint burger menu'), [
             'hint' => 'Par défaut 1023px',
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('afterSearchDisplayForHTML', Checkbox::class, $this->__('Afficher l\'image après le moteur de recherche sur la version HTML5'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('afterSearchDisplayForHTML', Checkbox::class, $this->__('Afficher l\'image après le moteur de recherche sur la version HTML5'), [
             'default' => true,
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('navExtraImage', FilesOrURL::class, $this->__('Image pour navigation'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('navExtraImage', FilesOrURL::class, $this->__('Image pour navigation'), [
             'accept' => self::$acceptImages,
         ]);
-        $this->addSettingField('navExtraImageMobile', FilesOrURL::class, $this->__('Image pour mobile'), [
+        $this->_addSettingField('navExtraImageMobile', FilesOrURL::class, $this->__('Image pour mobile'), [
             'accept' => self::$acceptImages,
         ]);
-        $this->addSettingField('navExtraLink', LongText::class, $this->__('URL'));
-        $this->addSettingField('navExtraTooltip', LongText::class, $this->__('Infobulle ou label'));
+        $this->_addSettingField('navExtraLink', LongText::class, $this->__('URL'));
+        $this->_addSettingField('navExtraTooltip', LongText::class, $this->__('Infobulle ou label'));
 
         for ($i = 1; $i <= 5; $i++) {
-            $this->addSettingField('', FormSeparator::class);
-            $this->addSettingField('navExtraIcon' . $i, FilesOrURL::class, $this->__('Icône supplémentaire') . ' ' . $i, [
+            $this->_addSettingField('', FormSeparator::class);
+            $this->_addSettingField('navExtraIcon' . $i, FilesOrURL::class, $this->__('Icône supplémentaire') . ' ' . $i, [
                 'accept' => self::$acceptImages,
             ]);
-            $this->addSettingField('navExtraType' . $i, SelectFromArray::class, $this->__('Type'), [
+            $this->_addSettingField('navExtraType' . $i, SelectFromArray::class, $this->__('Type'), [
                 'options' => [
                     'icon' => $this->__('Icône + Label'),
                     'image' => $this->__('Image'),
                 ],
                 'default' => 'icon',
             ]);
-            $this->addSettingField('navExtraLink' . $i, LongText::class, $this->__('URL') . ' ' . $i, [
+            $this->_addSettingField('navExtraLink' . $i, LongText::class, $this->__('URL') . ' ' . $i, [
             ]);
-            $this->addSettingField('navExtraVisibility' . $i, SelectFromArray::class, $this->__('Visible') . ' ' . $i, [
+            $this->_addSettingField('navExtraVisibility' . $i, SelectFromArray::class, $this->__('Visible') . ' ' . $i, [
                 'options' => [
                     'horizontal' => $this->__('Navigation horizontale'),
                     'burger' => $this->__('Navigation burger'),
@@ -580,8 +580,8 @@ trait PublicationSettings
                 'default' => 'both',
             ]);
         }
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('mobileBottomNav', LongText::class, $this->__('Barre de boutons en bas'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('mobileBottomNav', LongText::class, $this->__('Barre de boutons en bas'), [
             'hint' => $this->__('Identifiants des boutons séparés par des virgules'),
         ]);
 
@@ -590,76 +590,76 @@ trait PublicationSettings
 
     protected function _landing()
     {
-        $this->addSettingField('section_landing', FormSection::class, $this->__('Landing page'));
-        $this->addSettingField('landingPage', FilesOrURL::class, $this->__('Contenu de la landing page'));
+        $this->_addSettingField('section_landing', FormSection::class, $this->__('Landing page'));
+        $this->_addSettingField('landingPage', FilesOrURL::class, $this->__('Contenu de la landing page'));
     }
 
     protected function _fullscreen()
     {
-        $this->addSettingField('section_fs', FormSection::class, $this->__('Plein écran'));
-        $this->addSettingField('fullscreen', Checkbox::class, $this->__('Activer le mode plein-écran'), [
+        $this->_addSettingField('section_fs', FormSection::class, $this->__('Plein écran'));
+        $this->_addSettingField('fullscreen', Checkbox::class, $this->__('Activer le mode plein-écran'), [
             'default' => true,
         ]);
-        $this->addSettingField('fullscreenAuto', Checkbox::class, $this->__('Lancer la publication en mode plein écran (lorsque possible)'), [
+        $this->_addSettingField('fullscreenAuto', Checkbox::class, $this->__('Lancer la publication en mode plein écran (lorsque possible)'), [
             'default' => false,
         ]);
-        $this->addSettingField('fullscreeniOS', Checkbox::class, $this->__('Activer le mode plein-écran sur iOS (lorsque supporté par le système/navigateur)'), ['default' => false]);
+        $this->_addSettingField('fullscreeniOS', Checkbox::class, $this->__('Activer le mode plein-écran sur iOS (lorsque supporté par le système/navigateur)'), ['default' => false]);
     }
 
     protected function _bookmarks()
     {
-        $this->addSettingField('section_bookmark', FormSection::class, $this->__('Marques-pages'));
-        $this->addSettingField('bookmark', Checkbox::class, $this->__('Activer les marques-pages'), [
+        $this->_addSettingField('section_bookmark', FormSection::class, $this->__('Marques-pages'));
+        $this->_addSettingField('bookmark', Checkbox::class, $this->__('Activer les marques-pages'), [
             'default' => true,
         ]);
-        $this->addSettingField('bookmarkView', SelectFromArray::class, $this->__('Menu des marques-pages'), [
+        $this->_addSettingField('bookmarkView', SelectFromArray::class, $this->__('Menu des marques-pages'), [
             'options' => [
                 'small' => $this->__('Réduit'),
                 'large' => $this->__('Complet'),
             ],
             'default' => 'small',
         ]);
-        $this->addSettingField('bookmarkFunctionsMainMenu', Checkbox::class, $this->__('Fonctions vers menus généraux'), [
+        $this->_addSettingField('bookmarkFunctionsMainMenu', Checkbox::class, $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'),
             'default' => false,
         ]);
-        $this->addSettingField('bookmarkEmpty', Checkbox::class, $this->__('Bouton pour effacer les marques-pages'), [
+        $this->_addSettingField('bookmarkEmpty', Checkbox::class, $this->__('Bouton pour effacer les marques-pages'), [
             'default' => false,
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('bookmarkSendEnable', Checkbox::class, $this->__('Activer l\'envoi des marques-pages par e-mail'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('bookmarkSendEnable', Checkbox::class, $this->__('Activer l\'envoi des marques-pages par e-mail'), [
             'default' => true,
         ]);
-        $this->addSettingField('bookmark_email_title', LongText::class, $this->__('Titre de l\'email') . ' "' . $this->__('Envoyer à un ami') . '"', [
+        $this->_addSettingField('bookmark_email_title', LongText::class, $this->__('Titre de l\'email') . ' "' . $this->__('Envoyer à un ami') . '"', [
             'hint' => $this->__('Laisser vide pour utiliser la valeur par défaut'),
         ]);
-        $this->addSettingField('bookmark_email_body', Textarea::class, $this->__('Corps de l\'email') . ' "' . $this->__('Envoyer à un ami') . '"', [
+        $this->_addSettingField('bookmark_email_body', Textarea::class, $this->__('Corps de l\'email') . ' "' . $this->__('Envoyer à un ami') . '"', [
             'hint' => $this->__('Laisser vide pour utiliser la valeur par défaut'),
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('bookmarkPrint', Checkbox::class, $this->__('Activer l\'impression des marques-pages'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('bookmarkPrint', Checkbox::class, $this->__('Activer l\'impression des marques-pages'), [
             'default' => false,
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('bookmarkCornerSize', Integer::class, $this->__('Taille des marques-pages'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('bookmarkCornerSize', Integer::class, $this->__('Taille des marques-pages'), [
             'hint' => $this->__('Taille relative à la largeur de la page'),
             'default' => 8,
         ]);
-        $this->addSettingField('bookmarkOffset', Integer::class, $this->__('Décaler de x pixels vers l\'intérieur'), [
+        $this->_addSettingField('bookmarkOffset', Integer::class, $this->__('Décaler de x pixels vers l\'intérieur'), [
             'default' => 0,
         ]);
-        $this->addSettingField('bookmarkPermanentIcon', Checkbox::class, $this->__('Afficher l\'icône en permanance'), [
+        $this->_addSettingField('bookmarkPermanentIcon', Checkbox::class, $this->__('Afficher l\'icône en permanance'), [
             'default' => false,
         ]);
-        $this->addSettingField('bookmarkBlinkOnPageChange', Checkbox::class, $this->__('Faire clignoter le marque-page à l\'apparition de la page'), [
+        $this->_addSettingField('bookmarkBlinkOnPageChange', Checkbox::class, $this->__('Faire clignoter le marque-page à l\'apparition de la page'), [
             'default' => false,
         ]);
-        $this->addSettingField('bookmarkPosition', SelectFromArray::class, $this->__('Position des marque-pages'), ['default' => 'page', 'options' => ['page' => __('Coin de la page'), 'window' => __('Coin de la fenêtre')]]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('bookmarkDisablePages', LongText::class, $this->__('Désactiver les marques-pages sur ces pages'), [
+        $this->_addSettingField('bookmarkPosition', SelectFromArray::class, $this->__('Position des marque-pages'), ['default' => 'page', 'options' => ['page' => __('Coin de la page'), 'window' => __('Coin de la fenêtre')]]);
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('bookmarkDisablePages', LongText::class, $this->__('Désactiver les marques-pages sur ces pages'), [
             'hint' => '1-3,5 = 1,2,3,5',
         ]);
-        $this->addSettingField('bookmarkUsePDF', SelectFromArray::class, $this->__('PDF à utiliser pour l\'envoi ou le téléchargement de pages marquées'), [
+        $this->_addSettingField('bookmarkUsePDF', SelectFromArray::class, $this->__('PDF à utiliser pour l\'envoi ou le téléchargement de pages marquées'), [
             'options' => [
                 'pages' => $this->__('PDF des pages'),
                 'download' => $this->__('PDF de remplacement'),
@@ -672,44 +672,44 @@ trait PublicationSettings
 
     protected function _help()
     {
-        $this->addSettingField('section_help', FormSection::class, $this->__('Aide'));
-        $this->addSettingField('help', Checkbox::class, $this->__('Activer l\'aide'), [
+        $this->_addSettingField('section_help', FormSection::class, $this->__('Aide'));
+        $this->_addSettingField('help', Checkbox::class, $this->__('Activer l\'aide'), [
             'default' => true,
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('helpStartup', Checkbox::class, $this->__('Afficher l\'aide au démarrage'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('helpStartup', Checkbox::class, $this->__('Afficher l\'aide au démarrage'), [
             'default' => false,
         ]);
-        $this->addSettingField('helpStartupTime', Integer::class, $this->__('Temps d\'affichage'), [
+        $this->_addSettingField('helpStartupTime', Integer::class, $this->__('Temps d\'affichage'), [
             'default' => 15,
             'suffix' => __('secondes'),
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('helpBookmarks', Checkbox::class, $this->__('Améliorer l\'aide des marques-pages'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('helpBookmarks', Checkbox::class, $this->__('Améliorer l\'aide des marques-pages'), [
             'default' => false,
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('helpArrowTooltip', LongText::class, $this->__('Bulle affichée au niveau de la flèche de droite'));
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('landscapeWarning', Textarea::class, $this->__('Avertissement affiché sur mobile au chargement de la publication'));
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('helpArrowTooltip', LongText::class, $this->__('Bulle affichée au niveau de la flèche de droite'));
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('landscapeWarning', Textarea::class, $this->__('Avertissement affiché sur mobile au chargement de la publication'));
 
     }
 
     protected function _index()
     {
-        $this->addSettingField('section_index', FormSection::class, $this->__('Vue d\'index (vignettes)'));
-        $this->addSettingField('index', Checkbox::class, $this->__('Activer l\'index'), [
+        $this->_addSettingField('section_index', FormSection::class, $this->__('Vue d\'index (vignettes)'));
+        $this->_addSettingField('index', Checkbox::class, $this->__('Activer l\'index'), [
             'default' => true,
         ]);
-        $this->addSettingField('indexAutoScroll', Checkbox::class, $this->__('Activer le scroll automatique'), [
+        $this->_addSettingField('indexAutoScroll', Checkbox::class, $this->__('Activer le scroll automatique'), [
             'default' => false,
         ]);
-        $this->addSettingField('pdfThumbnails', FilesOrURL::class, $this->__('PDF utilisé pour générer les miniatures'), [
+        $this->_addSettingField('pdfThumbnails', FilesOrURL::class, $this->__('PDF utilisé pour générer les miniatures'), [
             'accept' => [
                 0 => '*.pdf',
             ],
         ]);
-        $this->addSettingField('indexMessage', Textarea::class, $this->__('Message en haut'), [
+        $this->_addSettingField('indexMessage', Textarea::class, $this->__('Message en haut'), [
             'hint' => $this->__('Message en haut de la vue index'),
         ]);
 
@@ -717,43 +717,43 @@ trait PublicationSettings
 
     protected function _print()
     {
-        $this->addSettingField('section_print', FormSection::class, $this->__('Impression'));
-        $this->addSettingField('print', Checkbox::class, $this->__('Activer l\'impression'), [
+        $this->_addSettingField('section_print', FormSection::class, $this->__('Impression'));
+        $this->_addSettingField('print', Checkbox::class, $this->__('Activer l\'impression'), [
             'default' => true,
         ]);
-        $this->addSettingField('printFullBrochure', Checkbox::class, $this->__('Autoriser l\'impression de la brochure complète'), [
+        $this->_addSettingField('printFullBrochure', Checkbox::class, $this->__('Autoriser l\'impression de la brochure complète'), [
             'default' => true,
         ]);
-        $this->addSettingField('printPageRange', Checkbox::class, $this->__('Activer l\'option pour imprimer une plage de pages'), [
+        $this->_addSettingField('printPageRange', Checkbox::class, $this->__('Activer l\'option pour imprimer une plage de pages'), [
             'default' => false,
         ]);
     }
 
     protected function _search()
     {
-        $this->addSettingField('section_search', FormSection::class, $this->__('Moteur de recherche'));
-        $this->addSettingField('search', Checkbox::class, $this->__('Activer le moteur de recherche'), [
+        $this->_addSettingField('section_search', FormSection::class, $this->__('Moteur de recherche'));
+        $this->_addSettingField('search', Checkbox::class, $this->__('Activer le moteur de recherche'), [
             'default' => true,
         ]);
-        $this->addSettingField('search_mode', SelectFromArray::class, $this->__('Mode'), [
+        $this->_addSettingField('search_mode', SelectFromArray::class, $this->__('Mode'), [
             'options' => ['standard' => __('Standard'), 'robust' => __('Robuste')],
             'default' => 'standard',
         ]);
 
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('ignoreWordLimit', Integer::class, $this->__('Ignorer les mots de moins de X caractères'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('ignoreWordLimit', Integer::class, $this->__('Ignorer les mots de moins de X caractères'), [
             'default' => 3,
             'when' => ['search_mode' => ['standard']]
         ]);
-        $this->addSettingField('ignoreSearch', Textarea::class, $this->__('Mots à ignorer'), [
+        $this->_addSettingField('ignoreSearch', Textarea::class, $this->__('Mots à ignorer'), [
             'hint' => $this->__('Liste des mots à ignorer séparés par des virgules'),
             'when' => ['search_mode' => ['standard']]
         ]);
-        $this->addSettingField('ignoreSearchSeparators', LongText::class, $this->__('Caractères à ne pas considérer comme un séparateur de mot'), [
+        $this->_addSettingField('ignoreSearchSeparators', LongText::class, $this->__('Caractères à ne pas considérer comme un séparateur de mot'), [
             'when' => ['search_mode' => ['standard']]
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('searchWordSelectionAlgorithm', SelectFromArray::class, $this->__('Algorithme de sélection des occurences'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('searchWordSelectionAlgorithm', SelectFromArray::class, $this->__('Algorithme de sélection des occurences'), [
             'options' => [
                 'begins' => $this->__('mot commençant par la requête'),
                 'exact' => $this->__('mot correspondant exactement à la requête'),
@@ -763,7 +763,7 @@ trait PublicationSettings
             'default' => 'begins',
             'when' => ['search_mode' => ['standard']]
         ]);
-        $this->addSettingField('searchPageSelectionAlgorithm', SelectFromArray::class, $this->__('Algorithme de sélection des résultats'), [
+        $this->_addSettingField('searchPageSelectionAlgorithm', SelectFromArray::class, $this->__('Algorithme de sélection des résultats'), [
             'options' => [
                 'AND' => $this->__('les double-pages qui contiennent tous les mots recherchés (ET logique)'),
                 'OR' => $this->__('les double-page qui contiennent un des mots recherché (OU logique)'),
@@ -771,20 +771,20 @@ trait PublicationSettings
             'default' => 'AND',
             'when' => ['search_mode' => ['standard']]
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('highlightResults', Checkbox::class, $this->__('Surligner les résultats'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('highlightResults', Checkbox::class, $this->__('Surligner les résultats'), [
             'default' => true,
         ]);
-        $this->addSettingField('highlightAllOccurences', Checkbox::class, $this->__('Surligner toutes les occurences'), [
+        $this->_addSettingField('highlightAllOccurences', Checkbox::class, $this->__('Surligner toutes les occurences'), [
             'hint' => $this->__('Même sur les pages non considérées comme un résultat'),
             'default' => false,
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('searchShowNoResultsPages', Checkbox::class, $this->__('Afficher les pages sans résultats'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('searchShowNoResultsPages', Checkbox::class, $this->__('Afficher les pages sans résultats'), [
             'default' => false,
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('textExtraction', SelectFromArray::class, $this->__('Méthode d\'extraction des textes'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('textExtraction', SelectFromArray::class, $this->__('Méthode d\'extraction des textes'), [
             'options' => [
                 'fluidbook' => $this->__('Fluidbook (basée sur PDFBox)'),
                 'pdfbox' => $this->__('PDFBox'),
@@ -793,20 +793,20 @@ trait PublicationSettings
             'default' => 'fluidbook',
             'when' => ['search_mode' => ['standard']]
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('searchFullBurger', Checkbox::class, $this->__('Afficher le burger menu complet à l\'ouverture de la recheche'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('searchFullBurger', Checkbox::class, $this->__('Afficher le burger menu complet à l\'ouverture de la recheche'), [
             'default' => false,
         ]);
     }
 
     protected function _sound()
     {
-        $this->addSettingField('section_sound', FormSection::class, $this->__('Ambiance et effets sonores'));
-        $this->addSettingField('soundOn', Checkbox::class, $this->__('Activer les effets sonores à l\'ouverture'), [
+        $this->_addSettingField('section_sound', FormSection::class, $this->__('Ambiance et effets sonores'));
+        $this->_addSettingField('soundOn', Checkbox::class, $this->__('Activer les effets sonores à l\'ouverture'), [
             'default' => true,
         ]);
-        $this->addSettingField('sep_ambientSound1', FormSeparator::class);
-        $this->addSettingField('soundTheme', SelectFromArray::class, $this->__('Thème sonore'), [
+        $this->_addSettingField('sep_ambientSound1', FormSeparator::class);
+        $this->_addSettingField('soundTheme', SelectFromArray::class, $this->__('Thème sonore'), [
             'options' => [
                 'none' => $this->__('Pas de son'),
                 'classic' => $this->__('Classique'),
@@ -817,50 +817,50 @@ trait PublicationSettings
             ],
             'default' => 'classic',
         ]);
-        $this->addSettingField('soundVolume', Percent::class, $this->__('Volume des effets sonores'), ['default' => 100, 'when' => ['soundTheme' => ['operator' => '!=', 'value' => 'none']]]);
-        $this->addSettingField('sep_ambientSound', FormSeparator::class);
-        $this->addSettingField('ambientSound', FilesOrURL::class, $this->__('Ambiance sonore'));
-        $this->addSettingField('ambientSoundVolume', Percent::class, $this->__('Volume de l\'ambiance sonore'), ['default' => 50, 'when' => ['ambientSound' => ['operator' => 'not_empty']]]);
+        $this->_addSettingField('soundVolume', Percent::class, $this->__('Volume des effets sonores'), ['default' => 100, 'when' => ['soundTheme' => ['operator' => '!=', 'value' => 'none']]]);
+        $this->_addSettingField('sep_ambientSound', FormSeparator::class);
+        $this->_addSettingField('ambientSound', FilesOrURL::class, $this->__('Ambiance sonore'));
+        $this->_addSettingField('ambientSoundVolume', Percent::class, $this->__('Volume de l\'ambiance sonore'), ['default' => 50, 'when' => ['ambientSound' => ['operator' => 'not_empty']]]);
     }
 
     protected function _downloadpdf()
     {
-        $this->addSettingField('section_downloadpdf', FormSection::class, $this->__('Fonction de téléchargement'));
-        $this->addSettingField('pdf', Checkbox::class, $this->__('Activer les fonctions de téléchargement'), [
+        $this->_addSettingField('section_downloadpdf', FormSection::class, $this->__('Fonction de téléchargement'));
+        $this->_addSettingField('pdf', Checkbox::class, $this->__('Activer les fonctions de téléchargement'), [
             'default' => true,
         ]);
-        $this->addSettingField('pdfName', LongText::class, $this->__('Nom du fichier PDF'), [
+        $this->_addSettingField('pdfName', LongText::class, $this->__('Nom du fichier PDF'), [
             'default' => '%title%',
         ]);
-        $this->addSettingField('pdfReplace', FilesOrURL::class, $this->__('PDF de remplacement'), [
+        $this->_addSettingField('pdfReplace', FilesOrURL::class, $this->__('PDF de remplacement'), [
             'accept' => [
                 0 => '*.pdf',
             ],
         ]);
-        $this->addSettingField('pdfCompress', Checkbox::class, $this->__('Compression du fichier PDF'), [
+        $this->_addSettingField('pdfCompress', Checkbox::class, $this->__('Compression du fichier PDF'), [
             'default' => false,
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('pdfComplex', Checkbox::class, $this->__('Téchargement de PDF avancé'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('pdfComplex', Checkbox::class, $this->__('Téchargement de PDF avancé'), [
             'hint' => $this->__('Permet à l\'utilisateur de sélectionner les pages qu\'il souhaite télécharger'),
             'default' => false,
         ]);
-        $this->addSettingField('pdfComplexShowCurrent', Checkbox::class, $this->__('Afficher les pages courrantes'), [
+        $this->_addSettingField('pdfComplexShowCurrent', Checkbox::class, $this->__('Afficher les pages courrantes'), [
             'default' => true,
         ]);
-        $this->addSettingField('', FormSeparator::class);
+        $this->_addSettingField('', FormSeparator::class);
         $forms = ['Christaud'];
-        $this->addSettingField('pdfBeforeForm', SelectFromArray::class, $this->__('Remplir un formulaire avant le téléchargement ou l\'impression'), ['default' => '', 'allows_null' => true, 'options' => array_merge(['' => __('Aucun')], array_combine($forms, $forms))]);
+        $this->_addSettingField('pdfBeforeForm', SelectFromArray::class, $this->__('Remplir un formulaire avant le téléchargement ou l\'impression'), ['default' => '', 'allows_null' => true, 'options' => array_merge(['' => __('Aucun')], array_combine($forms, $forms))]);
     }
 
 
     protected function _zoom()
     {
-        $this->addSettingField('section_zoom', FormSection::class, $this->__('Zoom'));
-        $this->addSettingField('zoomClick', Checkbox::class, $this->__('Cliquer sur les pages pour zoomer'), [
+        $this->_addSettingField('section_zoom', FormSection::class, $this->__('Zoom'));
+        $this->_addSettingField('zoomClick', Checkbox::class, $this->__('Cliquer sur les pages pour zoomer'), [
             'default' => true,
         ]);
-        $this->addSettingField('zoomWheel', SelectFromArray::class, $this->__('Zoom molette'), [
+        $this->_addSettingField('zoomWheel', SelectFromArray::class, $this->__('Zoom molette'), [
             'options' => [
                 'disabled' => $this->__('Désactivé'),
                 'wheel' => $this->__('Molette'),
@@ -868,99 +868,99 @@ trait PublicationSettings
             ],
             'default' => 'wheel',
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('zoom', Integer::class, $this->__('Zoom par défaut (atteint au clic)'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('zoom', Integer::class, $this->__('Zoom par défaut (atteint au clic)'), [
             'default' => 200,
         ]);
-        $this->addSettingField('zoomw', Integer::class, $this->__('Zoom maximal (atteint à l\'aide de la molette)'), [
+        $this->_addSettingField('zoomw', Integer::class, $this->__('Zoom maximal (atteint à l\'aide de la molette)'), [
             'default' => 300,
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('zoomMouseMoveMode', SelectFromArray::class, $this->__('Mode de déplacement des pages zoomées (souris)'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('zoomMouseMoveMode', SelectFromArray::class, $this->__('Mode de déplacement des pages zoomées (souris)'), [
             'options' => [
                 'move' => $this->__('Bouger la souris'),
                 $this->__('dragndrop') => $this->__('Drag & drop'),
             ],
             'default' => 'move',
         ]);
-        $this->addSettingField('hideHeaderOnZoom', Checkbox::class, $this->__('Cacher le menu lors du zoom'), [
+        $this->_addSettingField('hideHeaderOnZoom', Checkbox::class, $this->__('Cacher le menu lors du zoom'), [
             'default' => true,
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('zoomAreaDefaultZoomLevel', Number::class, __('Niveau de zoom des zones de zoom'), ['min' => 1, 'max' => 20, 'prefix' => 'x', 'default' => 2]
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('zoomAreaDefaultZoomLevel', Number::class, __('Niveau de zoom des zones de zoom'), ['min' => 1, 'max' => 20, 'prefix' => 'x', 'default' => 2]
         );
-        $this->addSettingField('zoomAreaShowTexts', Checkbox::class, __('Inclure la couche de texte dans les zones de zoom'), ['default' => true]);
+        $this->_addSettingField('zoomAreaShowTexts', Checkbox::class, __('Inclure la couche de texte dans les zones de zoom'), ['default' => true]);
 
 
     }
 
     protected function _chapters()
     {
-        $this->addSettingField('section_sommaire', FormSection::class, $this->__('Sommaire'));
-        $this->addSettingField('chaptersCaptionDisplay', Checkbox::class, $this->__('Afficher le titre "Sommaire" dans la popup'), [
+        $this->_addSettingField('section_sommaire', FormSection::class, $this->__('Sommaire'));
+        $this->_addSettingField('chaptersCaptionDisplay', Checkbox::class, $this->__('Afficher le titre "Sommaire" dans la popup'), [
             'default' => true,
         ]);
-        $this->addSettingField('chaptersFontSize', Integer::class, $this->__('Taille du texte des élements du sommaire'), [
+        $this->_addSettingField('chaptersFontSize', Integer::class, $this->__('Taille du texte des élements du sommaire'), [
             'hint' => 'En % par rapport à la taille normale',
             'min' => 50,
             'max' => 120,
             'default' => 100,
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('displayChaptersIcon', Checkbox::class, $this->__('Affiche l\'icône du sommaire'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('displayChaptersIcon', Checkbox::class, $this->__('Affiche l\'icône du sommaire'), [
             'default' => true,
         ]);
-        $this->addSettingField('displayChaptersPopup', Checkbox::class, $this->__('Toujours afficher le sommaire dans un popup'), [
+        $this->_addSettingField('displayChaptersPopup', Checkbox::class, $this->__('Toujours afficher le sommaire dans un popup'), [
             'default' => true,
         ]);
-        $this->addSettingField('displayChaptersAtStart', Checkbox::class, $this->__('Afficher le sommaire au chargement de la publication'), [
+        $this->_addSettingField('displayChaptersAtStart', Checkbox::class, $this->__('Afficher le sommaire au chargement de la publication'), [
             'default' => false,
         ]);
-        $this->addSettingField('chaptersPage', LongText::class, $this->__('Faire pointer le sommaire sur la page'), [
+        $this->_addSettingField('chaptersPage', LongText::class, $this->__('Faire pointer le sommaire sur la page'), [
             'hint' => $this->__('Laisser vide pour utiliser le sommaire classique'),
         ]);
-        $this->addSettingField('chaptersPosition', SelectFromArray::class, $this->__('Position du sommaire'), [
+        $this->_addSettingField('chaptersPosition', SelectFromArray::class, $this->__('Position du sommaire'), [
             'options' => [
                 'center' => $this->__('Centré'),
                 'chaptersIcon' => $this->__('Aligné sur l\'icône'),
             ],
             'default' => 'center',
         ]);
-        $this->addSettingField('chaptersLevelLimit', Integer::class, $this->__('Limiter à x niveaux'), [
+        $this->_addSettingField('chaptersLevelLimit', Integer::class, $this->__('Limiter à x niveaux'), [
             'default' => 5,
         ]);
-        $this->addSettingField('chaptersCascade', Checkbox::class, $this->__('Sommaire en cascade'), [
+        $this->_addSettingField('chaptersCascade', Checkbox::class, $this->__('Sommaire en cascade'), [
             'default' => false,
         ]);
-        $this->addSettingField('chaptersPagesNumber', SelectFromArray::class, $this->__('Numérotation du sommaire'), [
+        $this->_addSettingField('chaptersPagesNumber', SelectFromArray::class, $this->__('Numérotation du sommaire'), [
             'options' => [
                 'virtual' => $this->__('Virtuelle'),
                 'physical' => $this->__('Physique'),
             ],
             'default' => 'virtual',
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('chaptersColMaxWidth', Integer::class, $this->__('Largeur max d\'une colonne'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('chaptersColMaxWidth', Integer::class, $this->__('Largeur max d\'une colonne'), [
             'default' => 300,
         ]);
-        $this->addSettingField('chaptersColumns', Integer::class, $this->__('Afficher le sommaire sur x colonne(s)'), [
+        $this->_addSettingField('chaptersColumns', Integer::class, $this->__('Afficher le sommaire sur x colonne(s)'), [
             'default' => 1,
         ]);
-        $this->addSettingField('displayChaptersLine', Checkbox::class, $this->__('Affiche une ligne entre le label et le numéro de page'), [
+        $this->_addSettingField('displayChaptersLine', Checkbox::class, $this->__('Affiche une ligne entre le label et le numéro de page'), [
             'default' => true,
         ]);
-        $this->addSettingField('chaptersIndent', Checkbox::class, $this->__('Indenter les éléments (pour les sommaires à plat)'), [
+        $this->_addSettingField('chaptersIndent', Checkbox::class, $this->__('Indenter les éléments (pour les sommaires à plat)'), [
             'default' => true,
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('externalChaptersHTML', FilesOrURL::class, $this->__('Sommaire personnalisé'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('externalChaptersHTML', FilesOrURL::class, $this->__('Sommaire personnalisé'), [
             'hint' => $this->__('Laisser vide pour utiliser le sommaire classique'),
             'accept' => [
                 0 => '*.zip',
             ],
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('mobileChaptersStyle', SelectFromArray::class, $this->__('Style des chapitres'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('mobileChaptersStyle', SelectFromArray::class, $this->__('Style des chapitres'), [
             'options' => [
                 'classic' => $this->__('Classique'),
                 'ina' => $this->__('INA'),
@@ -971,50 +971,50 @@ trait PublicationSettings
 
     protected function _tabs()
     {
-        $this->addSettingField('section_tabs', FormSection::class, $this->__('Onglets'));
-        $this->addSettingField('tabsHTML5', FilesOrURL::class, $this->__('Fichier d\'onglets') . ' (SVG, ZIP)', [
+        $this->_addSettingField('section_tabs', FormSection::class, $this->__('Onglets'));
+        $this->_addSettingField('tabsHTML5', FilesOrURL::class, $this->__('Fichier d\'onglets') . ' (SVG, ZIP)', [
             'hint' => $this->__('Charger un zip rendra les options ci-dessous inopérantes'),
             'accept' => self::$acceptTabs,
         ]);
-        $this->addSettingField('tabsPages', LongText::class, $this->__('Pages des onglets'), [
+        $this->_addSettingField('tabsPages', LongText::class, $this->__('Pages des onglets'), [
             'hint' => $this->__('Numéros de pages séparés par une virgule'),
         ]);
-        $this->addSettingField('tabsSections', LongText::class, $this->__('Sections des onglets'), [
+        $this->_addSettingField('tabsSections', LongText::class, $this->__('Sections des onglets'), [
             'hint' => $this->__('Numéros de pages séparés par une virgule'),
         ]);
-        $this->addSettingField('tabsPagesNumbers', SelectFromArray::class, $this->__('Numérotation utilisée'), [
+        $this->_addSettingField('tabsPagesNumbers', SelectFromArray::class, $this->__('Numérotation utilisée'), [
             'options' => [
                 'virtual' => $this->__('Virtuelle'),
                 'physical' => $this->__('Physique'),
             ],
             'default' => 'virtual',
         ]);
-        $this->addSettingField('tabsDisabledOnPages', LongText::class, $this->__('Onglets inactifs sur les pages'), [
+        $this->_addSettingField('tabsDisabledOnPages', LongText::class, $this->__('Onglets inactifs sur les pages'), [
             'hint' => '1-3,5 = 1,2,3,5',
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('tabsSide', SelectFromArray::class, $this->__('Position des onglets'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('tabsSide', SelectFromArray::class, $this->__('Position des onglets'), [
             'options' => [
                 'left' => $this->__('Gauche'),
                 'right' => $this->__('Droite'),
             ],
             'default' => 'right',
         ]);
-        $this->addSettingField('tabsMargin', Number::class, $this->__('Marge des onglets'), [
+        $this->_addSettingField('tabsMargin', Number::class, $this->__('Marge des onglets'), [
             'hint' => $this->__('Une marge négative = les onglets passent sous la publication'),
             'default' => -10,
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('tabsHideOnPages', LongText::class, $this->__('Cacher les onglets sur les pages'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('tabsHideOnPages', LongText::class, $this->__('Cacher les onglets sur les pages'), [
             'hint' => '1-3,5 = 1,2,3,5',
         ]);
-        $this->addSettingField('tabsHideOnCover', Checkbox::class, $this->__('Cacher les onglets sur la couverture'), [
+        $this->_addSettingField('tabsHideOnCover', Checkbox::class, $this->__('Cacher les onglets sur la couverture'), [
             'default' => false,
         ]);
-        $this->addSettingField('tabsHideOnLastPage', Checkbox::class, $this->__('Cacher les onglets sur la dernière page'), [
+        $this->_addSettingField('tabsHideOnLastPage', Checkbox::class, $this->__('Cacher les onglets sur la dernière page'), [
             'default' => true,
         ]);
-        $this->addSettingField('tabsHideEdges', SelectFromArray::class, $this->__('Masquer les bordures du fluidbook'), [
+        $this->_addSettingField('tabsHideEdges', SelectFromArray::class, $this->__('Masquer les bordures du fluidbook'), [
             'options' => [
                 'none' => $this->__('Aucune'),
                 'left' => $this->__('Gauche'),
@@ -1023,95 +1023,95 @@ trait PublicationSettings
             ],
             'default' => 'right',
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('tabsPriority', Integer::class, 'Priorité des onglets sur les contenus (%)', [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('tabsPriority', Integer::class, 'Priorité des onglets sur les contenus (%)', [
             'hint' => 'La valeur indique la réduction permise de la taille de la publication.',
             'min' => 0,
             'max' => 100,
             'default' => 15,
         ]);
-        $this->addSettingField('tabsLinkWidth', Number::class, $this->__('Largeur des onglets'), [
+        $this->_addSettingField('tabsLinkWidth', Number::class, $this->__('Largeur des onglets'), [
             'hint' => $this->__('Largeur réservée pour les onglets et largeur de la zone cliquable des liens'),
             'default' => 30,
         ]);
-        $this->addSettingField('tabsHideWhenOverlapingArrows', Checkbox::class, $this->__('Cacher les onglets lorsqu\'ils passent sous les flèches de navigation'), [
+        $this->_addSettingField('tabsHideWhenOverlapingArrows', Checkbox::class, $this->__('Cacher les onglets lorsqu\'ils passent sous les flèches de navigation'), [
             'default' => true,
         ]);
-        $this->addSettingField('tabsHideOnPortrait', Checkbox::class, $this->__('Cacher les onglets lorsque le fluidbook est en simple page (Slide, Air, ou portrait)'), [
+        $this->_addSettingField('tabsHideOnPortrait', Checkbox::class, $this->__('Cacher les onglets lorsque le fluidbook est en simple page (Slide, Air, ou portrait)'), [
             'default' => true,
         ]);
-        $this->addSettingField('tabsHideOnZoom', Checkbox::class, $this->__('Cacher les onglets lorsque le fluidbook est zoomé'), [
+        $this->_addSettingField('tabsHideOnZoom', Checkbox::class, $this->__('Cacher les onglets lorsque le fluidbook est zoomé'), [
             'default' => true,
         ]);
     }
 
     protected function _links()
     {
-        $this->addSettingField('section_links', FormSection::class, $this->__('Liens'));
-        $this->addSettingField('permanentLinks', Checkbox::class, $this->__('Liens visibles en permanence'), [
+        $this->_addSettingField('section_links', FormSection::class, $this->__('Liens'));
+        $this->_addSettingField('permanentLinks', Checkbox::class, $this->__('Liens visibles en permanence'), [
             'default' => false,
         ]);
-        $this->addSettingField('mobileLinksRevealAnim', Checkbox::class, $this->__('Animer les liens après un changement de page'), [
+        $this->_addSettingField('mobileLinksRevealAnim', Checkbox::class, $this->__('Animer les liens après un changement de page'), [
             'default' => true,
         ]);
-        $this->addSettingField('linkBlinkTime', Number::class, $this->__('Temps d\'apparition du lien à l\'ouverture de la page'), [
+        $this->_addSettingField('linkBlinkTime', Number::class, $this->__('Temps d\'apparition du lien à l\'ouverture de la page'), [
             'default' => 1.0,
             'suffix' => __('secondes'),
         ]);
-        $this->addSettingField('linkBlinkRepetition', Integer::class, $this->__('Nombre de clignotement lors de l\'apparition des liens'), [
+        $this->_addSettingField('linkBlinkRepetition', Integer::class, $this->__('Nombre de clignotement lors de l\'apparition des liens'), [
             'default' => 1,
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('openLinkAtStartup', LongText::class, $this->__('Déclencher un lien à l\'ouverture du fluidbook'));
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('customLinkClass', LongText::class, $this->__('Classe pour les liens personnalisés'));
-        $this->addSettingField('ignoreLinksTypes', LongText::class, $this->__('Ignorer les liens de type'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('openLinkAtStartup', LongText::class, $this->__('Déclencher un lien à l\'ouverture du fluidbook'));
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('customLinkClass', LongText::class, $this->__('Classe pour les liens personnalisés'));
+        $this->_addSettingField('ignoreLinksTypes', LongText::class, $this->__('Ignorer les liens de type'), [
             'hint' => $this->__('Liste des numéros séparés par des virgules'),
         ]);
-        $this->addSettingField('mobileIgnoreBackgroundLinks', Checkbox::class, $this->__('Ignorer les liens de background'), [
+        $this->_addSettingField('mobileIgnoreBackgroundLinks', Checkbox::class, $this->__('Ignorer les liens de background'), [
             'default' => false,
         ]);
-        $this->addSettingField('linkTooltipManager', LongText::class, $this->__('Gestionnaire des info-bulles'));
-        $this->addSettingField('linkCornerSize', Integer::class, $this->__('Taille des liens de coins de page'), [
+        $this->_addSettingField('linkTooltipManager', LongText::class, $this->__('Gestionnaire des info-bulles'));
+        $this->_addSettingField('linkCornerSize', Integer::class, $this->__('Taille des liens de coins de page'), [
             'hint' => $this->__('Pourcentage de la largeur de la page'),
             'default' => 10,
         ]);
-        $this->addSettingField('linkTooltipMaxWidth', Integer::class, $this->__('Largeur max des infobulles des liens de type "infobulle"'), [
+        $this->_addSettingField('linkTooltipMaxWidth', Integer::class, $this->__('Largeur max des infobulles des liens de type "infobulle"'), [
             'default' => 140,
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('linkTracker', LongText::class, $this->__('Tracking des liens'));
-        $this->addSettingField('linkTrackerRegexp', LongText::class, $this->__('Tracking des liens applicables aux liens du domaine'));
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('linkFilePrefix', LongText::class, $this->__('Préfixer les liens de téléchargement'));
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('linkTracker', LongText::class, $this->__('Tracking des liens'));
+        $this->_addSettingField('linkTrackerRegexp', LongText::class, $this->__('Tracking des liens applicables aux liens du domaine'));
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('linkFilePrefix', LongText::class, $this->__('Préfixer les liens de téléchargement'));
     }
 
     protected function _multimedia()
     {
-        $this->addSettingField('section_multimedia', FormSection::class, $this->__('Multimedia'));
-        $this->addSettingField('textPopupStylesheet', FilesOrURL::class, $this->__('Feuille de style des popups de texte'), [
+        $this->_addSettingField('section_multimedia', FormSection::class, $this->__('Multimedia'));
+        $this->_addSettingField('textPopupStylesheet', FilesOrURL::class, $this->__('Feuille de style des popups de texte'), [
             'accept' => self::$acceptCSS,
         ]);
-        $this->addSettingField('textPopupWidth', Integer::class, $this->__('Largeur optimale des popups'), [
+        $this->_addSettingField('textPopupWidth', Integer::class, $this->__('Largeur optimale des popups'), [
             'default' => 600,
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('iframePopupMaxWidth', Integer::class, $this->__('Largeur maximale des popups iframe'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('iframePopupMaxWidth', Integer::class, $this->__('Largeur maximale des popups iframe'), [
             'default' => 0,
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('OAMChromeFactor', Number::class, $this->__('Facteur OAM Chrome'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('OAMChromeFactor', Number::class, $this->__('Facteur OAM Chrome'), [
             'default' => 1,
         ]);
-        $this->addSettingField('OAMIEFactor', Number::class, $this->__('Facteur OAM IE11'), [
+        $this->_addSettingField('OAMIEFactor', Number::class, $this->__('Facteur OAM IE11'), [
             'default' => 1,
         ]);
     }
 
     protected function _pdf()
     {
-        $this->addSettingField('section_pdf', FormSection::class, 'PDF');
-        $this->addSettingField('PDFRenderer', SelectFromArray::class, $this->__('Rendu des PDF (téléchargement)'), [
+        $this->_addSettingField('section_pdf', FormSection::class, 'PDF');
+        $this->_addSettingField('PDFRenderer', SelectFromArray::class, $this->__('Rendu des PDF (téléchargement)'), [
             'options' => [
                 'native' => $this->__('Navigateur'),
                 'pdfjs' => 'PDF.js',
@@ -1119,7 +1119,7 @@ trait PublicationSettings
             ],
             'default' => 'native',
         ]);
-        $this->addSettingField('PDFRendererIframe', SelectFromArray::class, $this->__('Rendu des PDF (iframes)'), [
+        $this->_addSettingField('PDFRendererIframe', SelectFromArray::class, $this->__('Rendu des PDF (iframes)'), [
             'options' => [
                 'native' => $this->__('Navigateur'),
                 'pdfjs' => 'PDF.js',
@@ -1128,38 +1128,38 @@ trait PublicationSettings
             ],
             'default' => 'native',
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('PDFJSCSS', Textarea::class, 'Styles PDF.js');
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('PDFJSCSS', Textarea::class, 'Styles PDF.js');
     }
 
     protected function _slideshow()
     {
-        $this->addSettingField('section_slideshow', FormSection::class, $this->__('Slideshow'));
-        $this->addSettingField('inlineSlideshowLibrary', SelectFromArray::class, $this->__('Librarie utilisée pour les slideshow intégrés aux pages'), [
+        $this->_addSettingField('section_slideshow', FormSection::class, $this->__('Slideshow'));
+        $this->_addSettingField('inlineSlideshowLibrary', SelectFromArray::class, $this->__('Librarie utilisée pour les slideshow intégrés aux pages'), [
             'options' => [
                 'dummy' => 'Simple (' . $this->__('défaut') . ')',
                 'vacheron' => 'Vacheron',
             ],
             'default' => 'dummy',
         ]);
-        $this->addSettingField('popupSlideshowLibrary', SelectFromArray::class, $this->__('Librarie utilisée pour les slideshow popup'), [
+        $this->_addSettingField('popupSlideshowLibrary', SelectFromArray::class, $this->__('Librarie utilisée pour les slideshow popup'), [
             'options' => [
                 'splide' => 'Splide (' . $this->__('défaut') . ')',
                 'vacheron' => 'Vacheron',
             ],
             'default' => 'splide',
         ]);
-        $this->addSettingField('slideshowControlsSize', SelectFromArray::class, $this->__('Taille des contrôles du slideshow'), ['options' => ['default' => $this->__('Normale'), 'big' => $this->__('Grande')], 'default' => 'default', 'when' => ['popupSlideshowLibrary' => 'vacheron', 'inlineSlideshowLibrary' => ['values' => ['vacheron'], 'operator' => '=', 'logical_operator' => 'OR']]]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('slideshowCaptionSize', LongText::class, $this->__('Taille de police de la légende du diaporama'), [
+        $this->_addSettingField('slideshowControlsSize', SelectFromArray::class, $this->__('Taille des contrôles du slideshow'), ['options' => ['default' => $this->__('Normale'), 'big' => $this->__('Grande')], 'default' => 'default', 'when' => ['popupSlideshowLibrary' => 'vacheron', 'inlineSlideshowLibrary' => ['values' => ['vacheron'], 'operator' => '=', 'logical_operator' => 'OR']]]);
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('slideshowCaptionSize', LongText::class, $this->__('Taille de police de la légende du diaporama'), [
             'hint' => $this->__('Laisser vide pour utiliser la valeur par défaut'),
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('inlineSlideshowTransitionDuration', Number::class, $this->__('Durée de la transition des diaporamas intégrés aux pages'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('inlineSlideshowTransitionDuration', Number::class, $this->__('Durée de la transition des diaporamas intégrés aux pages'), [
             'default' => 0.75,
             'suffix' => __('secondes'),
         ]);
-        $this->addSettingField('inlineSlideshowDuration', Number::class, $this->__('Temps d\'attente des diaporamas intégrés aux pages'), [
+        $this->_addSettingField('inlineSlideshowDuration', Number::class, $this->__('Temps d\'attente des diaporamas intégrés aux pages'), [
             'default' => 7,
             'suffix' => __('secondes'),
         ]);
@@ -1168,21 +1168,21 @@ trait PublicationSettings
 
     protected function _video()
     {
-        $this->addSettingField('section_videos', FormSection::class, $this->__('Vidéos'));
-        $this->addSettingField('webvideoAsLocal', Hidden::class, $this->__('Intégrer les webvidéos en local'), [
+        $this->_addSettingField('section_videos', FormSection::class, $this->__('Vidéos'));
+        $this->_addSettingField('webvideoAsLocal', Hidden::class, $this->__('Intégrer les webvidéos en local'), [
             'default' => false,
         ]);
-        $this->addSettingField('videoObjectFit', SelectFromArray::class, $this->__('Affichage des vidéos inline'), ['default' => 'fill', 'hint' => '<a target="_blank" href="https://developer.mozilla.org/fr-FR/docs/Web/CSS/object-fit">https://developer.mozilla.org/fr-FR/docs/Web/CSS/object-fit</a>
+        $this->_addSettingField('videoObjectFit', SelectFromArray::class, $this->__('Affichage des vidéos inline'), ['default' => 'fill', 'hint' => '<a target="_blank" href="https://developer.mozilla.org/fr-FR/docs/Web/CSS/object-fit">https://developer.mozilla.org/fr-FR/docs/Web/CSS/object-fit</a>
 ', 'options' => [
             'fill' => $this->__('Etirer la vidéo pour qu\'elle occupe l\'espace disponible') . ' (fill)',
             'contain' => $this->__('Afficher la vidéo en respectant son ratio mais sans la recadrer') . ' (contain)',
             'cover' => $this->__('Afficher la vidéo en respectant son ratio et en la recadrant pour qu\'elle occupe l\'espace disponible') . ' (cover)',
         ]]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('brightcovePlayerId', LongText::class, $this->__('Identifiant du player Brightcove'));
-        $this->addSettingField('brightcovePlayerSecret', LongText::class, $this->__('Secret du player Brightcove'));
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('bigPlayImage', FilesOrURL::class, $this->__('Image pour le bouton "Big Play"'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('brightcovePlayerId', LongText::class, $this->__('Identifiant du player Brightcove'));
+        $this->_addSettingField('brightcovePlayerSecret', LongText::class, $this->__('Secret du player Brightcove'));
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('bigPlayImage', FilesOrURL::class, $this->__('Image pour le bouton "Big Play"'), [
             'accept' => self::$acceptImages,
         ]);
     }
@@ -1196,13 +1196,13 @@ trait PublicationSettings
             'twostatesicon' => $this->__('Icône à deux états'),
         ];
 
-        $this->addSettingField('section_audio', FormSection::class, $this->__('Lecteur audio'));
-        $this->addSettingField('audioPlayerTheme', SelectFromArray::class, $this->__('Apparence du lecteur audio'), [
+        $this->_addSettingField('section_audio', FormSection::class, $this->__('Lecteur audio'));
+        $this->_addSettingField('audioPlayerTheme', SelectFromArray::class, $this->__('Apparence du lecteur audio'), [
             'options' => $themes,
             'default' => 'native',
         ]);
 
-        $this->addSettingField('audioPlayerThemePopup', SelectFromArray::class, $this->__('Apparence du lecteur audio en popup'), [
+        $this->_addSettingField('audioPlayerThemePopup', SelectFromArray::class, $this->__('Apparence du lecteur audio en popup'), [
             'default' => 'native',
             'options' => array_merge(['inline' => __('Même apparence que les audios insérés dans les pages')], $themes),
         ]);
@@ -1210,23 +1210,23 @@ trait PublicationSettings
 
     protected function _downloadPortions()
     {
-        $this->addSettingField('section_downloadportion', FormSection::class, $this->__('Téléchargement d\'extraits'));
-        $this->addSettingField('downloadPortionPDF', FilesOrURL::class, 'PDF utilisé pour le téléchargement des extraits');
-        $this->addSettingField('downloadPortionZoom', Integer::class, $this->__('Zoom des images extraites'), [
+        $this->_addSettingField('section_downloadportion', FormSection::class, $this->__('Téléchargement d\'extraits'));
+        $this->_addSettingField('downloadPortionPDF', FilesOrURL::class, 'PDF utilisé pour le téléchargement des extraits');
+        $this->_addSettingField('downloadPortionZoom', Integer::class, $this->__('Zoom des images extraites'), [
             'default' => 8,
         ]);
     }
 
     protected function _productZoom()
     {
-        $this->addSettingField('section_product_zoom', FormSection::class, $this->__('Zooms produits'));
-        $this->addSettingField('product_zoom_references', FilesOrURL::class, $this->__('Références produits'), [
+        $this->_addSettingField('section_product_zoom', FormSection::class, $this->__('Zooms produits'));
+        $this->_addSettingField('product_zoom_references', FilesOrURL::class, $this->__('Références produits'), [
             'hint' => $this->__('Fichier contenant les références produits'),
             'accept' => self::$acceptProductList,
             'destination' => 'commerce',
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('product_zoom_buttons_order', SelectFromArray::class, $this->__('Order des boutons'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('product_zoom_buttons_order', SelectFromArray::class, $this->__('Order des boutons'), [
             'options' => [
                 'right' => $this->__('De la droite vers la gauche'),
                 'left' => $this->__('De la gauche vers la droite'),
@@ -1236,12 +1236,12 @@ trait PublicationSettings
 
 
         for ($i = 1; $i <= 3; $i++) {
-            $this->addSettingField('', FormSeparator::class);
-            $this->addSettingField('product_zoom_label_' . $i, LongText::class, $this->__('Label du bouton') . ' ' . $i, [
+            $this->_addSettingField('', FormSeparator::class);
+            $this->_addSettingField('product_zoom_label_' . $i, LongText::class, $this->__('Label du bouton') . ' ' . $i, [
             ]);
-            $this->addSettingField('product_zoom_tooltip_' . $i, LongText::class, $this->__('Label de l\'infobulle') . ' ' . $i, [
+            $this->_addSettingField('product_zoom_tooltip_' . $i, LongText::class, $this->__('Label de l\'infobulle') . ' ' . $i, [
             ]);
-            $this->addSettingField('product_zoom_icon_' . $i, SelectFromArray::class, $this->__('Icône du bouton') . ' ' . $i, [
+            $this->_addSettingField('product_zoom_icon_' . $i, SelectFromArray::class, $this->__('Icône du bouton') . ' ' . $i, [
                 'options' => [
                     'none' => $this->__('Aucune'),
                     'nav-share' => $this->__('Partage'),
@@ -1261,7 +1261,7 @@ trait PublicationSettings
                 ],
                 'default' => 'none',
             ]);
-            $this->addSettingField('product_zoom_action_' . $i, SelectFromArray::class, $this->__('Action du bouton') . ' ' . $i, [
+            $this->_addSettingField('product_zoom_action_' . $i, SelectFromArray::class, $this->__('Action du bouton') . ' ' . $i, [
                 'options' => [
                     'disabled' => $this->__('Désactiver'),
                     'link' => $this->__('Ouvrir un lien'),
@@ -1276,20 +1276,20 @@ trait PublicationSettings
                 'default' => 'disabled',
             ]);
         }
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('product_share_enabled', Checkbox::class, $this->__('Activer le bouton de partage'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('product_share_enabled', Checkbox::class, $this->__('Activer le bouton de partage'), [
             'default' => true,
         ]);
-        $this->addSettingField('product_share_link', SelectFromArray::class, $this->__('Lien de partage'), [
+        $this->_addSettingField('product_share_link', SelectFromArray::class, $this->__('Lien de partage'), [
             'options' => [
                 'product' => $this->__('Lien du produit'),
                 'page' => $this->__('Lien vers la page du fluidbook'),
             ],
             'default' => 'product',
         ]);
-        $this->addSettingField('product_email_title', LongText::class, $this->__('Titre de l\'email') . ' "' . $this->__('Envoyer à un ami') . '"');
-        $this->addSettingField('product_email_body', Textarea::class, $this->__('Corps de l\'email') . ' "' . $this->__('Envoyer à un ami') . '"');
-        $this->addSettingField('product_tweet', Textarea::class, $this->__('Contenu Partage court'), [
+        $this->_addSettingField('product_email_title', LongText::class, $this->__('Titre de l\'email') . ' "' . $this->__('Envoyer à un ami') . '"');
+        $this->_addSettingField('product_email_body', Textarea::class, $this->__('Corps de l\'email') . ' "' . $this->__('Envoyer à un ami') . '"');
+        $this->_addSettingField('product_tweet', Textarea::class, $this->__('Contenu Partage court'), [
             'hint' => $this->__('Contenu du partagé sur les partages courts'),
             'default' => '%short%',
         ]);
@@ -1298,30 +1298,30 @@ trait PublicationSettings
 
     protected function _accessibility()
     {
-        $this->addSettingField('section_accessibility', FormBigSection::class, $this->__('Accessibilité'));
-        $this->addSettingField('audiodescriptionTexts', FilesOrURL::class, $this->__('Contenus textuels pour l\'audiodescription ou les lecteurs d\'écran'), [
+        $this->_addSettingField('section_accessibility', FormBigSection::class, $this->__('Accessibilité'));
+        $this->_addSettingField('audiodescriptionTexts', FilesOrURL::class, $this->__('Contenus textuels pour l\'audiodescription ou les lecteurs d\'écran'), [
             'accept' => self::$acceptXLSX,
             'hint' => '<a href="/fluidbook-publication/$id/pdftextsforaudiodescription">' . __('Télécharger les contenus extraits du PDF au format audiodescription') . '</a>',
         ]);
-        $this->addSettingField('audiodescriptionVoice', FluidbookTTSVoice::class, $this->__('Voix pour l\'audiodescription'));
+        $this->_addSettingField('audiodescriptionVoice', FluidbookTTSVoice::class, $this->__('Voix pour l\'audiodescription'));
 
     }
 
     protected function _splashScreen()
     {
-        $this->addSettingField('section_splash', FormSection::class, $this->__('Ecran de chargement'));
-        $this->addSettingField('splashImage', FilesOrURL::class, $this->__('Image'), [
+        $this->_addSettingField('section_splash', FormSection::class, $this->__('Ecran de chargement'));
+        $this->_addSettingField('splashImage', FilesOrURL::class, $this->__('Image'), [
             'accept' => self::$acceptImages,
         ]);
-        $this->addSettingField('splashURL', LongText::class, $this->__('URL'));
-        $this->addSettingField('splashTarget', SelectFromArray::class, $this->__('Ouvrir le lien'), [
+        $this->_addSettingField('splashURL', LongText::class, $this->__('URL'));
+        $this->_addSettingField('splashTarget', SelectFromArray::class, $this->__('Ouvrir le lien'), [
             'options' => [
                 '_self' => $this->__('Dans la fenêtre courrante'),
                 '_blank' => $this->__('Dans un nouvel onglet'),
             ],
             'default' => '_self',
         ]);
-        $this->addSettingField('splashMinimalTime', Number::class, $this->__('Temps minimal d\'affichage'), [
+        $this->_addSettingField('splashMinimalTime', Number::class, $this->__('Temps minimal d\'affichage'), [
             'default' => 1,
         ]);
 
@@ -1329,30 +1329,30 @@ trait PublicationSettings
 
     protected function _notes()
     {
-        $this->addSettingField('section_notes', FormSection::class, $this->__('Notes'));
-        $this->addSettingField('notes', Checkbox::class, 'Activer les notes', [
+        $this->_addSettingField('section_notes', FormSection::class, $this->__('Notes'));
+        $this->_addSettingField('notes', Checkbox::class, 'Activer les notes', [
             'default' => false,
         ]);
     }
 
     protected function _articles()
     {
-        $this->addSettingField('section_articles', FormSection::class, $this->__('Articles'));
-        $this->addSettingField('articlesFile', FilesOrURL::class, 'Articles', [
+        $this->_addSettingField('section_articles', FormSection::class, $this->__('Articles'));
+        $this->_addSettingField('articlesFile', FilesOrURL::class, 'Articles', [
             'accept' => self::$acceptXML,
         ]);
-        $this->addSettingField('articlesImages', FilesOrURL::class, $this->__('Images des articles'), [
+        $this->_addSettingField('articlesImages', FilesOrURL::class, $this->__('Images des articles'), [
             'hint' => $this->__('Les noms des fichiers doivent être les même que ceux des balises <image> du XML'),
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('articlesShare', Checkbox::class, $this->__('Activer le partage'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('articlesShare', Checkbox::class, $this->__('Activer le partage'), [
             'default' => true,
         ]);
-        $this->addSettingField('articlesPrint', Checkbox::class, $this->__('Activer l\'impression'), [
+        $this->_addSettingField('articlesPrint', Checkbox::class, $this->__('Activer l\'impression'), [
             'default' => true,
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('articlesStyle', SelectFromArray::class, $this->__('Style'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('articlesStyle', SelectFromArray::class, $this->__('Style'), [
             'options' => [
                 'default' => 'Défaut',
                 'atlantic' => 'Atlantic',
@@ -1361,7 +1361,7 @@ trait PublicationSettings
             ],
             'default' => "default",
         ]);
-        $this->addSettingField('articlesFont', SelectFromArray::class, $this->__('Police des articles'), [
+        $this->_addSettingField('articlesFont', SelectFromArray::class, $this->__('Police des articles'), [
             'options' => [
                 'OpenSans' => 'Open Sans (défaut)',
                 'Montserrat' => 'Montserrat',
@@ -1375,8 +1375,8 @@ trait PublicationSettings
 
     protected function _anchors()
     {
-        $this->addSettingField('section_anchors', FormSection::class, $this->__('Ancres'));
-        $this->addSettingField('anchors', FilesOrURL::class, $this->__('Définir les ancres'), [
+        $this->_addSettingField('section_anchors', FormSection::class, $this->__('Ancres'));
+        $this->_addSettingField('anchors', FilesOrURL::class, $this->__('Définir les ancres'), [
             'accept' => self::$acceptXLSX,
             'hint' => __('Colonne A : numéro de page physique, Colonne B : nom de l\'ancre')
         ]);
@@ -1384,17 +1384,17 @@ trait PublicationSettings
 
     protected function _archives()
     {
-        $this->addSettingField('section_archives', FormSection::class, $this->__('Archives'));
-        $this->addSettingField('externalArchives', FilesOrURL::class, $this->__('Archives'), [
+        $this->_addSettingField('section_archives', FormSection::class, $this->__('Archives'));
+        $this->_addSettingField('externalArchives', FilesOrURL::class, $this->__('Archives'), [
             'accept' => self::$acceptImages,
         ]);
-        $this->addSettingField('archivesLabel', LongText::class, $this->__('Label'));
+        $this->_addSettingField('archivesLabel', LongText::class, $this->__('Label'));
     }
 
     protected function _form()
     {
-        $this->addSettingField('section_form', FormSection::class, $this->__('Formulaire'));
-        $this->addSettingField('form', SelectFromArray::class, $this->__('Formulaire'), [
+        $this->_addSettingField('section_form', FormSection::class, $this->__('Formulaire'));
+        $this->_addSettingField('form', SelectFromArray::class, $this->__('Formulaire'), [
             'options' => [
                 '' => $this->__('Aucun'),
                 'bulle' => 'Bulle Groupe',
@@ -1406,12 +1406,12 @@ trait PublicationSettings
 
     protected function _privacy()
     {
-        $this->addSettingField('section_privacy', FormSection::class, $this->__('Respect de la vie privée'));
-        $this->addSettingField('cookieConsent', Checkbox::class, $this->__('Message cookie'), [
+        $this->_addSettingField('section_privacy', FormSection::class, $this->__('Respect de la vie privée'));
+        $this->_addSettingField('cookieConsent', Checkbox::class, $this->__('Message cookie'), [
             'default' => false,
         ]);
-        $this->addSettingField('cookieConsentMessage', Textarea::class, $this->__('Texte du consentement'));
-        $this->addSettingField('cookieConsentAutoclose', Integer::class, $this->__('Masquer automatiquement après x secondes'), [
+        $this->_addSettingField('cookieConsentMessage', Textarea::class, $this->__('Texte du consentement'));
+        $this->_addSettingField('cookieConsentAutoclose', Integer::class, $this->__('Masquer automatiquement après x secondes'), [
             'default' => 0,
         ]);
     }
@@ -1419,11 +1419,11 @@ trait PublicationSettings
     protected function _cart()
     {
 
-        $this->addSettingField('section_basket', FormSection::class, $this->__('Panier'));
-        $this->addSettingField('basket', Checkbox::class, $this->__('Panier activé'), [
+        $this->_addSettingField('section_basket', FormSection::class, $this->__('Panier'));
+        $this->_addSettingField('basket', Checkbox::class, $this->__('Panier activé'), [
             'default' => false,
         ]);
-        $this->addSettingField('basketManager', SelectFromArray::class, $this->__('Manager de panier'), [
+        $this->_addSettingField('basketManager', SelectFromArray::class, $this->__('Manager de panier'), [
             'options' => [
                 'com.fluidbook.player.basket.BasketManager' => $this->__('Classic'),
                 'com.fluidbook.player.basket.custom.grdf.GrdfBasketManager' => 'Grdf',
@@ -1453,8 +1453,8 @@ trait PublicationSettings
             ],
             'default' => 'com.fluidbook.player.basket.BasketManager',
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('cartIcon', SelectFromArray::class, $this->__('Icône'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('cartIcon', SelectFromArray::class, $this->__('Icône'), [
             'options' => [
                 'nav-basket' => $this->__('Sac'),
                 'nav-cart-caddie' => $this->__('Caddie'),
@@ -1462,55 +1462,55 @@ trait PublicationSettings
             ],
             'default' => 'nav-basket',
         ]);
-        $this->addSettingField('cartLinkAppearance', SelectFromArray::class, $this->__('Apparence des liens panier'), [
+        $this->_addSettingField('cartLinkAppearance', SelectFromArray::class, $this->__('Apparence des liens panier'), [
             'options' => [
                 'link' => $this->__('Lien'),
                 'overlay' => $this->__('Boutons + et - avec overlay'),
             ],
             'default' => 'link',
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('basketReferences', FilesOrURL::class, $this->__('Références produits'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('basketReferences', FilesOrURL::class, $this->__('Références produits'), [
             'hint' => $this->__('Fichier contenant les références produits'),
             'accept' => self::$acceptProductList,
             'destination' => 'commerce',
         ]);
-        $this->addSettingField('basketImages', FilesOrURL::class, $this->__('Images des produits'), [
+        $this->_addSettingField('basketImages', FilesOrURL::class, $this->__('Images des produits'), [
             'destination' => 'commerce',
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('cartHeaderImage', FilesOrURL::class, $this->__('Header panier'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('cartHeaderImage', FilesOrURL::class, $this->__('Header panier'), [
             'accept' => self::$acceptImages,
             'destination' => 'commerce',
         ]);
-        $this->addSettingField('cartHeaderMobileImage', FilesOrURL::class, $this->__('Header panier (mobile)'), [
+        $this->_addSettingField('cartHeaderMobileImage', FilesOrURL::class, $this->__('Header panier (mobile)'), [
             'accept' => self::$acceptImages,
             'destination' => 'commerce',
         ]);
-        $this->addSettingField('cartExtraSettings', Textarea::class, $this->__('Paramètres supplémentaires du panier'));
+        $this->_addSettingField('cartExtraSettings', Textarea::class, $this->__('Paramètres supplémentaires du panier'));
     }
 
     protected function _offline()
     {
-        $this->addSettingField('section_offline', FormSection::class, $this->__('Version offline'));
-        $this->addSettingField('offlineTitle', LongText::class, $this->__('Titre de l\'application'));
-        $this->addSettingField('offlineLink', LongText::class, $this->__('URL du Fluidbook'), [
+        $this->_addSettingField('section_offline', FormSection::class, $this->__('Version offline'));
+        $this->_addSettingField('offlineTitle', LongText::class, $this->__('Titre de l\'application'));
+        $this->_addSettingField('offlineLink', LongText::class, $this->__('URL du Fluidbook'), [
             'hint' => $this->__('URL du fluidbook utilisée pour la version Offline (CD-ROM, clé USB, Exécutables)'),
             'default' => 'http://',
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('offlineWindowsInstallPath', LongText::class, $this->__('Chemin d\'installation par défaut'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('offlineWindowsInstallPath', LongText::class, $this->__('Chemin d\'installation par défaut'), [
             'hint' => $this->__('Par défaut') . ': %LOCALAPPDATA%/%title%',
         ]);
-        $this->addSettingField('offlineWindowsProfilePath', LongText::class, $this->__('Répertoire de stockage du profile'), [
+        $this->_addSettingField('offlineWindowsProfilePath', LongText::class, $this->__('Répertoire de stockage du profile'), [
             'hint' => $this->__('Par défaut') . ': %LOCALAPPDATA%/%title%',
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('offlineEnableAdvancedPrinting', Checkbox::class, $this->__('Activer le menu d\'impression avancée'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('offlineEnableAdvancedPrinting', Checkbox::class, $this->__('Activer le menu d\'impression avancée'), [
             'default' => true,
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('debugConsole', Checkbox::class, $this->__('Activer la console de débuggage'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('debugConsole', Checkbox::class, $this->__('Activer la console de débuggage'), [
             'default' => false,
         ]);
 
@@ -1518,9 +1518,9 @@ trait PublicationSettings
 
     protected function _mobileFirst()
     {
-        $this->addSettingField('section_mobilefirst', FormSection::class, $this->__('Mobile first'));
-        $this->addSettingField('mobilefirstFluidbookId', LongText::class, __('Identifiant du fluidbook "Mobile first"'));
-        $this->addSettingField('mobilefirstBreakpoint', LongText::class, __('Breakpoint du passage à la version "Mobile first" (en pixels)'), [
+        $this->_addSettingField('section_mobilefirst', FormSection::class, $this->__('Mobile first'));
+        $this->_addSettingField('mobilefirstFluidbookId', LongText::class, __('Identifiant du fluidbook "Mobile first"'));
+        $this->_addSettingField('mobilefirstBreakpoint', LongText::class, __('Breakpoint du passage à la version "Mobile first" (en pixels)'), [
             'default' => '640',
         ]);
 
@@ -1528,7 +1528,7 @@ trait PublicationSettings
 
     protected function _secure()
     {
-        $this->addSettingField('bigsection_secure', FormSuperSection::class, $this->__('Sécurisation'));
+        $this->_addSettingField('bigsection_secure', FormSuperSection::class, $this->__('Sécurisation'));
         $this->_secureURL();
         $this->_securePage();
         $this->_secureRestrictions();
@@ -1537,33 +1537,33 @@ trait PublicationSettings
 
     protected function _securePage()
     {
-        $this->addSettingField('section_securepage', FormSection::class, $this->__('Sécurisation par une page de login'));
-        $this->addSettingField('secureClientSideMode', SelectFromArray::class, __('Mode de d\'authentification'), ['default' => '0', 'options' => ['0' => __('Nom d\'utilisateur et un mot de passe'), '1' => __('Nom d\'utilisateur uniquement')]]);
-        $this->addSettingField('secureClientSidePassword', FilesOrURL::class, __('Template HTML'), [
+        $this->_addSettingField('section_securepage', FormSection::class, $this->__('Sécurisation par une page de login'));
+        $this->_addSettingField('secureClientSideMode', SelectFromArray::class, __('Mode de d\'authentification'), ['default' => '0', 'options' => ['0' => __('Nom d\'utilisateur et un mot de passe'), '1' => __('Nom d\'utilisateur uniquement')]]);
+        $this->_addSettingField('secureClientSidePassword', FilesOrURL::class, __('Template HTML'), [
             'accept' => self::$acceptHTML,
             'hint' => __('Laisser vide pour utiliser le template par défaut'),
         ]);
-        $this->addSettingField('secureClientSidePasswordCredentials', Textarea::class, __('Utilisateurs / mots de passe'), [
+        $this->_addSettingField('secureClientSidePasswordCredentials', Textarea::class, __('Utilisateurs / mots de passe'), [
             'hint' => __('Format user:password par ligne'),
         ]);
-        $this->addSettingField('secureClientSideBackgroundImage', FilesOrURL::class, __('Image de fond'), ['accept' => self::$acceptImages, 'hint' => __('Laisser vide pour utiliser le fond du fluidbook')]);
-        $this->addSettingField('secureClientSideFont', FluidbookFont::class, __('Police'), ['default' => 'OpenSans']);
-        $this->addSettingField('secureClientSideLogo', FilesOrURL::class, __('Logo'), ['accept' => self::$acceptImages, 'hint' => __('Laisser vide pour utiliser le logo du loader')]);
-        $this->addSettingField('secureClientSideTitle', Textarea::class, __('Titre du formulaire de login'), ['rows' => 2, 'hint' => __('Laisser vide pour utiliser le titre du fluidbook')]);
-        $this->addSettingField('secureClientSideText', Textarea::class, __('Texte du formulaire de login'), ['rows' => 3]);
-        $this->addSettingField('secureClientSideLocale', FluidbookLocaleCurrent::class, __('Langue du formulaire'), ['default' => 'fluidbook']);
-        $this->addSettingField('secureClientSideStyles', Code::class, __('Styles additionnels'), ['default' => '', 'language' => 'css']);
+        $this->_addSettingField('secureClientSideBackgroundImage', FilesOrURL::class, __('Image de fond'), ['accept' => self::$acceptImages, 'hint' => __('Laisser vide pour utiliser le fond du fluidbook')]);
+        $this->_addSettingField('secureClientSideFont', FluidbookFont::class, __('Police'), ['default' => 'OpenSans']);
+        $this->_addSettingField('secureClientSideLogo', FilesOrURL::class, __('Logo'), ['accept' => self::$acceptImages, 'hint' => __('Laisser vide pour utiliser le logo du loader')]);
+        $this->_addSettingField('secureClientSideTitle', Textarea::class, __('Titre du formulaire de login'), ['rows' => 2, 'hint' => __('Laisser vide pour utiliser le titre du fluidbook')]);
+        $this->_addSettingField('secureClientSideText', Textarea::class, __('Texte du formulaire de login'), ['rows' => 3]);
+        $this->_addSettingField('secureClientSideLocale', FluidbookLocaleCurrent::class, __('Langue du formulaire'), ['default' => 'fluidbook']);
+        $this->_addSettingField('secureClientSideStyles', Code::class, __('Styles additionnels'), ['default' => '', 'language' => 'css']);
 
     }
 
     protected function _secureURL()
     {
-        $this->addSettingField('section_secure_url', FormSection::class, $this->__('Sécurisation par URL'));
-        $this->addSettingField('secureURL', LongText::class, $this->__('URL de sécurisation'), [
+        $this->_addSettingField('section_secure_url', FormSection::class, $this->__('Sécurisation par URL'));
+        $this->_addSettingField('secureURL', LongText::class, $this->__('URL de sécurisation'), [
             'hint' => $this->__('URL interrogée pour vérifier si le visiteur à les droits pour consulter la publication') . ' ' . __('Le fluidbook et l\'url doivent être sur le même domaine'),
             'default' => 'http://',
         ]);
-        $this->addSettingField('secureURLRedirect', LongText::class, $this->__('Redirection'), [
+        $this->_addSettingField('secureURLRedirect', LongText::class, $this->__('Redirection'), [
             'hint' => $this->__('Si l\'authentification échoue, redirection vers cette adresse'),
             'default' => 'http://',
         ]);
@@ -1572,36 +1572,36 @@ trait PublicationSettings
     protected function _secureRestrictions()
     {
 
-        $this->addSettingField('section_secure_restrictions', FormSection::class, $this->__('Restrictions'));
-        $this->addSettingField('restrictPrintDownload', LongText::class, $this->__('Paramètre de l\'url permettant de désactiver la restriction (non vide pour activer les restrictions)'), [
+        $this->_addSettingField('section_secure_restrictions', FormSection::class, $this->__('Restrictions'));
+        $this->_addSettingField('restrictPrintDownload', LongText::class, $this->__('Paramètre de l\'url permettant de désactiver la restriction (non vide pour activer les restrictions)'), [
             'hint' => $this->__('Ne pas indiquer le ?'),
         ]);
-        $this->addSettingField('restrictPrint', Checkbox::class, $this->__('Restreindre l\'impression'), [
+        $this->_addSettingField('restrictPrint', Checkbox::class, $this->__('Restreindre l\'impression'), [
             'default' => false,
         ]);
-        $this->addSettingField('restrictDownload', Checkbox::class, $this->__('Restreindre le téléchargement du pdf'), [
+        $this->_addSettingField('restrictDownload', Checkbox::class, $this->__('Restreindre le téléchargement du pdf'), [
             'default' => false,
         ]);
-        $this->addSettingField('restrictSendBookmark', Checkbox::class, $this->__('Restreindre l\'envoi de marques-pages'), [
+        $this->_addSettingField('restrictSendBookmark', Checkbox::class, $this->__('Restreindre l\'envoi de marques-pages'), [
             'default' => false,
         ]);
     }
 
     protected function _secureOther()
     {
-        $this->addSettingField('section_secure_other', FormSection::class, $this->__('Autres options de sécurisation'));
-        $this->addSettingField('recaptcha', LongText::class, $this->__('Activer reCATPCHA v3 (clé du site)'));
-        $this->addSettingField('preventRightClick', Checkbox::class, $this->__('Essayer d\'empêcher le clic droit'), [
+        $this->_addSettingField('section_secure_other', FormSection::class, $this->__('Autres options de sécurisation'));
+        $this->_addSettingField('recaptcha', LongText::class, $this->__('Activer reCATPCHA v3 (clé du site)'));
+        $this->_addSettingField('preventRightClick', Checkbox::class, $this->__('Essayer d\'empêcher le clic droit'), [
             'default' => false,
         ]);
     }
 
     protected function _multibrochure()
     {
-        $this->addSettingField('section_multibrochure', FormSection::class, $this->__('Multibrochure'));
-        $this->addSettingField('home', LongText::class, $this->__('Accueil de l\'interface multibrochure'));
-        $this->addSettingField('country', LongText::class, $this->__('Pays de la brochure'));
-        $this->addSettingField('multilangDisplay', SelectFromArray::class, $this->__('Affichage'), [
+        $this->_addSettingField('section_multibrochure', FormSection::class, $this->__('Multibrochure'));
+        $this->_addSettingField('home', LongText::class, $this->__('Accueil de l\'interface multibrochure'));
+        $this->_addSettingField('country', LongText::class, $this->__('Pays de la brochure'));
+        $this->_addSettingField('multilangDisplay', SelectFromArray::class, $this->__('Affichage'), [
             'options' => [
                 'lang' => $this->__('Langue'),
                 'lang_country' => $this->__('Langue') . ' (' . $this->__('Pays') . ')',
@@ -1609,7 +1609,7 @@ trait PublicationSettings
             ],
             'default' => 'lang',
         ]);
-        $this->addSettingField('multilang', Textarea::class, $this->__('Langues'), [
+        $this->_addSettingField('multilang', Textarea::class, $this->__('Langues'), [
             'hint' => $this->__('Code langue') . ',' . $this->__('Code pays') . ',' . $this->__('URL'),
         ]);
 
@@ -1617,16 +1617,16 @@ trait PublicationSettings
 
     protected function _plv()
     {
-        $this->addSettingField('section_plv', FormSection::class, $this->__('Mode PLV'));
-        $this->addSettingField('plv', Checkbox::class, $this->__('Activer le mode PLV'), [
+        $this->_addSettingField('section_plv', FormSection::class, $this->__('Mode PLV'));
+        $this->_addSettingField('plv', Checkbox::class, $this->__('Activer le mode PLV'), [
             'default' => false,
         ]);
-        $this->addSettingField('plvTimer', Integer::class, $this->__('Temps'), [
+        $this->_addSettingField('plvTimer', Integer::class, $this->__('Temps'), [
             'min' => 1,
             'max' => 60,
             'default' => 5,
         ]);
-        $this->addSettingField('plvMode', SelectFromArray::class, $this->__('Arrivé à la dernière page'), [
+        $this->_addSettingField('plvMode', SelectFromArray::class, $this->__('Arrivé à la dernière page'), [
             'options' => [
                 'back' => $this->__('Remonter vers la première page'),
                 'first' => $this->__('Recommencer à la première page'),
@@ -1638,73 +1638,73 @@ trait PublicationSettings
 
     protected function _screensaver()
     {
-        $this->addSettingField('section_screensaver', FormSection::class, $this->__('Économiseur d\'écran'));
-        $this->addSettingField('screensaver', FilesOrURL::class, __('Animation'), ['accept' => static::$acceptVideo]);
-        $this->addSettingField('screensaver_sleep_time', Integer::class, __('Activer après un temps d\'inactivité'), ['when' => ['screensaver' => '_not_empty_'], 'suffix' => __('secondes'), 'default' => 60, 'min' => 1]);
-        $this->addSettingField('screensaver_wake_action', SelectFromArray::class, __('Action à effectuer au réveil'), ['when' => ['screensaver' => '_not_empty_'], 'default' => 'none', 'options' => ['none' => __('Aucune action'), 'page' => __('Aller à une page')]]);
-        $this->addSettingField('screensaver_wake_page', Text::class, __('Au réveil, aller à la page'), ['when' => ['screensaver' => '_not_empty_', 'screensaver_wake_action' => 'page'], 'default' => 1]);
+        $this->_addSettingField('section_screensaver', FormSection::class, $this->__('Économiseur d\'écran'));
+        $this->_addSettingField('screensaver', FilesOrURL::class, __('Animation'), ['accept' => static::$acceptVideo]);
+        $this->_addSettingField('screensaver_sleep_time', Integer::class, __('Activer après un temps d\'inactivité'), ['when' => ['screensaver' => '_not_empty_'], 'suffix' => __('secondes'), 'default' => 60, 'min' => 1]);
+        $this->_addSettingField('screensaver_wake_action', SelectFromArray::class, __('Action à effectuer au réveil'), ['when' => ['screensaver' => '_not_empty_'], 'default' => 'none', 'options' => ['none' => __('Aucune action'), 'page' => __('Aller à une page')]]);
+        $this->_addSettingField('screensaver_wake_page', Text::class, __('Au réveil, aller à la page'), ['when' => ['screensaver' => '_not_empty_', 'screensaver_wake_action' => 'page'], 'default' => 1]);
     }
 
     protected function _theme()
     {
-        $this->addSettingField('section_theme', FormSection::class, $this->__('Options du thème'));
-        $this->addSettingField('themeEnableAfterSearch', Checkbox::class, $this->__('Afficher l\'image supplémentaire à droite du moteur de recherche'), [
+        $this->_addSettingField('section_theme', FormSection::class, $this->__('Options du thème'));
+        $this->_addSettingField('themeEnableAfterSearch', Checkbox::class, $this->__('Afficher l\'image supplémentaire à droite du moteur de recherche'), [
             'default' => true,
         ]);
     }
 
     protected function _export()
     {
-        $this->addSettingField('section_package', FormSection::class, $this->__('Option d\'export'));
-        $this->addSettingField('htmlExtension', LongText::class, $this->__('Extension des fichiers html'), [
+        $this->_addSettingField('section_package', FormSection::class, $this->__('Option d\'export'));
+        $this->_addSettingField('htmlExtension', LongText::class, $this->__('Extension des fichiers html'), [
             'hint' => $this->__('Ex : php, htm, html, phtml, asp, aspx'),
             'default' => 'html',
         ]);
-        $this->addSettingField('actualHtmlExtension', LongText::class, $this->__('Extension des fichiers html réellement appliquée au fluidbook'), [
+        $this->_addSettingField('actualHtmlExtension', LongText::class, $this->__('Extension des fichiers html réellement appliquée au fluidbook'), [
             'hint' => $this->__('Ex : php, htm, html, phtml, asp, aspx'),
             'default' => 'html',
         ]);
-        $this->addSettingField('htmlPrepend', Textarea::class, $this->__('Code à insérer en tête des fichiers'));
-        $this->addSettingField('baseUrl', LongText::class, $this->__('Base de l\'url'));
-        $this->addSettingField('forceCompileOnDownload', Checkbox::class, $this->__('Forcer la compilation lors du téléchargement'), [
+        $this->_addSettingField('htmlPrepend', Textarea::class, $this->__('Code à insérer en tête des fichiers'));
+        $this->_addSettingField('baseUrl', LongText::class, $this->__('Base de l\'url'));
+        $this->_addSettingField('forceCompileOnDownload', Checkbox::class, $this->__('Forcer la compilation lors du téléchargement'), [
             'default' => false,
         ]);
-        $this->addSettingField('embedAllLibraries', Checkbox::class, $this->__('Intégrer toutes les bibliothèques JS'), [
+        $this->_addSettingField('embedAllLibraries', Checkbox::class, $this->__('Intégrer toutes les bibliothèques JS'), [
             'default' => false,
         ]);
     }
 
     protected function _demoLink()
     {
-        $this->addSettingField('section_demo', FormSection::class, $this->__('Lien de démo'));
-        $this->addSettingField('disableDemo', Checkbox::class, $this->__('Désactiver le lien de démo'), [
+        $this->_addSettingField('section_demo', FormSection::class, $this->__('Lien de démo'));
+        $this->_addSettingField('disableDemo', Checkbox::class, $this->__('Désactiver le lien de démo'), [
             'default' => false,
             'hint' => __('Si désactivé, le lien n\'est accessible qu\'aux utilisateurs connectés'),
         ]);
-        $this->addSettingField('redirectDemo', LongText::class, $this->__('Rediriger le lien de démo vers'));
+        $this->_addSettingField('redirectDemo', LongText::class, $this->__('Rediriger le lien de démo vers'));
 
     }
 
     protected function _pwa()
     {
-        $this->addSettingField('section_pwa', FormSection::class, $this->__('Progressive Web App'));
-        $this->addSettingField('pwa_ios', Checkbox::class, $this->__('Activer sur iOS'), ['default' => false]);
-        $this->addSettingField('pwa_ios_title', Text::class, $this->__('Titre sur l\'écran d\'accueil'), ['hint' => $this->__('Il est recommandé de ne pas dépasser 10 caractères.') . ' ' . $this->__('Laisser vide pour utiliser le titre de la publication'), 'when' => ['pwa_ios' => '1']]);
+        $this->_addSettingField('section_pwa', FormSection::class, $this->__('Progressive Web App'));
+        $this->_addSettingField('pwa_ios', Checkbox::class, $this->__('Activer sur iOS'), ['default' => false]);
+        $this->_addSettingField('pwa_ios_title', Text::class, $this->__('Titre sur l\'écran d\'accueil'), ['hint' => $this->__('Il est recommandé de ne pas dépasser 10 caractères.') . ' ' . $this->__('Laisser vide pour utiliser le titre de la publication'), 'when' => ['pwa_ios' => '1']]);
     }
 
     protected function _package()
     {
-        $this->addSettingField('section_downloads', FormSection::class, $this->__('Versions disponibles au téléchargement'));
+        $this->_addSettingField('section_downloads', FormSection::class, $this->__('Versions disponibles au téléchargement'));
 
-        $this->addSettingField('hosting_loadbalancer', Checkbox::class, $this->__('Hébergement "Load balancer"'));
-        $this->addSettingField('hosting_loadbalancer_ignore', Textarea::class, __('Ne pas charger ces éléments via le load balancer'), ['when' => ['hosting_loadbalancer' => 1], 'hint' => __('Certains contenus doivent accéder ne doivent pas se trouver sur un autre domaine pour fonctionner')]);
+        $this->_addSettingField('hosting_loadbalancer', Checkbox::class, $this->__('Hébergement "Load balancer"'));
+        $this->_addSettingField('hosting_loadbalancer_ignore', Textarea::class, __('Ne pas charger ces éléments via le load balancer'), ['when' => ['hosting_loadbalancer' => 1], 'hint' => __('Certains contenus doivent accéder ne doivent pas se trouver sur un autre domaine pour fonctionner')]);
 
         foreach (self::getDownloadVersions() as $name => $downloadVersion) {
-            $this->addSettingField('download_' . $name, Checkbox::class, $downloadVersion['label'], [
+            $this->_addSettingField('download_' . $name, Checkbox::class, $downloadVersion['label'], [
                 'default' => $downloadVersion['default'],
             ]);
             if ($downloadVersion['install']) {
-                $this->addSettingField('install_' . $name, ExternalPath::class, __('Installer sur un serveur externe'), ['default' => '', 'servers_model' => FluidbookExternalInstallServer::class, 'when' => ['download_' . $name => 1]]);
+                $this->_addSettingField('install_' . $name, ExternalPath::class, __('Installer sur un serveur externe'), ['default' => '', 'servers_model' => FluidbookExternalInstallServer::class, 'when' => ['download_' . $name => 1]]);
             }
         }
 
@@ -1713,180 +1713,187 @@ trait PublicationSettings
 
     protected function _gamify()
     {
-        $this->addSettingField('section_gamify', FormSection::class, $this->__('Gamification'));
-        $this->addSettingField('gamify_coins_pages', Textarea::class, $this->__('Attribuer des coins lors de la visite des pages'), [
+        $this->_addSettingField('section_gamify', FormSection::class, $this->__('Gamification'));
+        $this->_addSettingField('gamify_coins_pages', Textarea::class, $this->__('Attribuer des coins lors de la visite des pages'), [
             'hint' => __('Format (un par ligne): numéro ou intervale de pages=[variable:]nombre. Par exemple : :example1 ou :example2 ou :example3', ['example1' => '2=5', 'example2' => '5=A:10', 'example3' => '5-8;9=1']),
         ]);
     }
 
     protected function _scorm()
     {
-        $this->addSettingField('section_scorm', FormSection::class, $this->__('SCORM'));
-        $this->addSettingField('scorm_enable', Checkbox::class, $this->__('Activer SCORM'), [
+        $this->_addSettingField('section_scorm', FormSection::class, $this->__('SCORM'));
+        $this->_addSettingField('scorm_enable', Checkbox::class, $this->__('Activer SCORM'), [
             'default' => false,
         ]);
-        $this->addSettingField('scorm_version', SCORMVersion::class, $this->__('Version du standard SCORM'), [
+        $this->_addSettingField('scorm_version', SCORMVersion::class, $this->__('Version du standard SCORM'), [
             'default' => '1.2',
         ]);
-        $this->addSettingField('scorm_id', LongText::class, $this->__('Identifiant SCORM'));
-        $this->addSettingField('scorm_org', LongText::class, $this->__('Organisation SCORM'), [
+        $this->_addSettingField('scorm_id', LongText::class, $this->__('Identifiant SCORM'));
+        $this->_addSettingField('scorm_org', LongText::class, $this->__('Organisation SCORM'), [
             'default' => 'ACME-ORG-1350650111249',
         ]);
-        $this->addSettingField('scorm_title', LongText::class, $this->__('Titre SCORM'), [
+        $this->_addSettingField('scorm_title', LongText::class, $this->__('Titre SCORM'), [
             'hint' => $this->__('Laisser vide pour utiliser le titre de la publication'),
         ]);
-        $this->addSettingField('scorm_variables', Textarea::class, $this->__('Variables SCORM'), [
+        $this->_addSettingField('scorm_variables', Textarea::class, $this->__('Variables SCORM'), [
             'hint' => $this->__('Laisser vide pour utiliser le titre de la publication'),
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('scorm_complete_on_exit', Checkbox::class, 'Marquer le cours comme "Complete" à la fermeture de la fenêtre', [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('scorm_complete_on_exit', Checkbox::class, 'Marquer le cours comme "Complete" à la fermeture de la fenêtre', [
             'default' => false,
         ]);
-        $this->addSettingField('scorm_complete_on_last_page', Checkbox::class, 'Marquer le cours comme "Complete" lorsque le visiteur atteint la dernière page', [
+        $this->_addSettingField('scorm_complete_on_last_page', Checkbox::class, 'Marquer le cours comme "Complete" lorsque le visiteur atteint la dernière page', [
             'default' => false,
         ]);
-        $this->addSettingField('scorm_complete_coins', Integer::class, 'Marquer le cours comme "Complete" lorsque le visiteur accumule X coins', [
+        $this->_addSettingField('scorm_complete_coins', Integer::class, 'Marquer le cours comme "Complete" lorsque le visiteur accumule X coins', [
             'default' => 0,
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('scorm_pass_on_complete', Checkbox::class, $this->__('Marquer le cours comme Pass lorsqu\'il est terminé') . ' (' . $this->__('SCORM 2004 seulement') . ')', [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('scorm_pass_on_complete', Checkbox::class, $this->__('Marquer le cours comme Pass lorsqu\'il est terminé') . ' (' . $this->__('SCORM 2004 seulement') . ')', [
             'default' => true,
         ]);
-        $this->addSettingField('scorm_score100_on_complete', Checkbox::class, $this->__('Marquer le cours comme réussi à 100% lorsqu\'il est terminé'), [
+        $this->_addSettingField('scorm_score100_on_complete', Checkbox::class, $this->__('Marquer le cours comme réussi à 100% lorsqu\'il est terminé'), [
             'default' => false,
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('scorm_quizdata', FilesOrURL::class, $this->__('Données de quiz'));
-        $this->addSettingField('scorm_score', Checkbox::class, $this->__('Activer le support du score'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('scorm_quizdata', FilesOrURL::class, $this->__('Données de quiz'));
+        $this->_addSettingField('scorm_score', Checkbox::class, $this->__('Activer le support du score'), [
             'default' => false,
         ]);
-        $this->addSettingField('scorm_score_min', Integer::class, $this->__('Score minimal pour marquer le contenu comme réussi'), [
+        $this->_addSettingField('scorm_score_min', Integer::class, $this->__('Score minimal pour marquer le contenu comme réussi'), [
             'min' => 0,
             'max' => 100,
             'default' => 50,
         ]);
-        $this->addSettingField('scorm_quiz_as_questionnaire', Checkbox::class, $this->__('Traiter les quiz comme des questionnaires (toutes les réponses sont considérées comme correctes)'), [
+        $this->_addSettingField('scorm_quiz_as_questionnaire', Checkbox::class, $this->__('Traiter les quiz comme des questionnaires (toutes les réponses sont considérées comme correctes)'), [
             'default' => false,
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('scorm_force_attempts', Checkbox::class, $this->__('Forcer la création d\'un "attempt" à chaque ouverture'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('scorm_force_attempts', Checkbox::class, $this->__('Forcer la création d\'un "attempt" à chaque ouverture'), [
             'default' => false,
         ]);
-        $this->addSettingField('scorm_commit_immediately', Checkbox::class, $this->__('Envoyer les données immédiatement au LMS') . ' (' . $this->__('Peut provoquer des ralentissement sur certains LMS') . ')', [
+        $this->_addSettingField('scorm_commit_immediately', Checkbox::class, $this->__('Envoyer les données immédiatement au LMS') . ' (' . $this->__('Peut provoquer des ralentissement sur certains LMS') . ')', [
             'default' => false,
         ]);
-        $this->addSettingField('scorm_finish_on_complete', Checkbox::class, $this->__('Envoyer le signal "Finish" ou "Terminate" en marquant le contenu comme terminé'), [
+        $this->_addSettingField('scorm_finish_on_complete', Checkbox::class, $this->__('Envoyer le signal "Finish" ou "Terminate" en marquant le contenu comme terminé'), [
             'default' => true,
         ]);
     }
 
     protected function _elearning()
     {
-        $this->addSettingField('section_elearning', FormSuperSection::class, __('E-Learning'));
+        $this->_addSettingField('section_elearning', FormSuperSection::class, __('E-Learning'));
         $this->_gamify();
         $this->_scorm();
     }
 
     protected function _statsCustom()
     {
-        $this->addSettingField('section_stats_custom', FormSection::class, __('Autres services'));
-        $this->addSettingField('googleAnalyticsCustom', Code::class, $this->__('Code Stats personnalisé (placé avant fermeture de head)'), [
+        $this->_addSettingField('section_stats_custom', FormSection::class, __('Autres services'));
+        $this->_addSettingField('googleAnalyticsCustom', Code::class, $this->__('Code Stats personnalisé (placé avant fermeture de head)'), [
             'fake' => true,
             'language' => 'html',
             'store_in' => 'settings',
             'translatable' => false,
         ]);
-        $this->addSettingField('statsCustom', Code::class, $this->__('Code Stats personnalisé (placé avant fermeture du body)'), [
+        $this->_addSettingField('statsCustom', Code::class, $this->__('Code Stats personnalisé (placé avant fermeture du body)'), [
             'language' => 'html',
         ]);
-        $this->addSettingField('anchorsAliases', LongText::class, $this->__('Alias des ancres'));
-        $this->addSettingField('relay_url_params', LongText::class, $this->__('Relayer les paramètres d\'url dans les liens sortants'));
+        $this->_addSettingField('anchorsAliases', LongText::class, $this->__('Alias des ancres'));
+        $this->_addSettingField('relay_url_params', LongText::class, $this->__('Relayer les paramètres d\'url dans les liens sortants'));
     }
 
     protected function _statsPiano()
     {
-        $this->addSettingField('section_piano', FormSection::class, __('Piano Analytics'));
-        $this->addSettingField('xiti', Code::class, $this->__('Code Piano Analytics'), [
+        $this->_addSettingField('section_piano', FormSection::class, __('Piano Analytics'));
+        $this->_addSettingField('xiti', Code::class, $this->__('Code Piano Analytics'), [
             'language' => 'html',
         ]);
-        $this->addSettingField('piano_plan', FilesOrURL::class, 'Plan de taggage');
-        $this->addSettingField('xiti_page', Textarea::class, $this->__('Modèle code xiti (pour tags relatifs aux pages)'));
+        $this->_addSettingField('piano_plan', FilesOrURL::class, 'Plan de taggage');
+        $this->_addSettingField('xiti_page', Textarea::class, $this->__('Modèle code xiti (pour tags relatifs aux pages)'));
     }
 
     protected function _statsTagCommander()
     {
-        $this->addSettingField('section_tc', FormSection::class, $this->__('Tag Commander'));
-        $this->addSettingField('tagcommander_plan_type', SelectFromArray::class, __('Type de plan de marquage'),
+        $this->_addSettingField('section_tc', FormSection::class, $this->__('Tag Commander'));
+        $this->_addSettingField('tagcommander_plan_type', SelectFromArray::class, __('Type de plan de marquage'),
             [
                 'options' => ['file' => __('Fichier'), 'esm' => 'ESM (Harmonie Mutuelle)'],
                 'default' => 'file',
             ]
         );
-        $this->addSettingField('tagcommander_id', LongText::class, 'Tag commander ID', [
+        $this->_addSettingField('tagcommander_id', LongText::class, 'Tag commander ID', [
             'when' => ['tagcommander_plan_type' => 'file'],
         ]);
-        $this->addSettingField('tagcommander_scriptname', LongText::class, 'Nom du script Tagcommander', [
+        $this->_addSettingField('tagcommander_scriptname', LongText::class, 'Nom du script Tagcommander', [
             'default' => 'tc_Multisite_Head.js,tc_Multisite_Analytics.js,tc_Multisite_Medias.js',
             'when' => ['tagcommander_plan_type' => 'file'],
         ]);
-        $this->addSettingField('tagcommander_prod', Checkbox::class, 'Production', [
+        $this->_addSettingField('tagcommander_prod', Checkbox::class, 'Production', [
             'default' => true,
         ]);
 
-        $this->addSettingField('tagcommander_plan', FilesOrURL::class, 'Plan de taggage "Tag commander"', [
+        $this->_addSettingField('tagcommander_plan', FilesOrURL::class, 'Plan de taggage "Tag commander"', [
             'when' => ['tagcommander_plan_type' => 'file'],
         ]);
-        $this->addSettingField('tagcommander_event_page', Textarea::class, __('Nom de l\'évenement de vue de page'), [
+        $this->_addSettingField('tagcommander_event_page', Textarea::class, __('Nom de l\'évenement de vue de page'), [
             'default' => 'page',
             'when' => ['tagcommander_plan_type' => 'file'],
         ]);
-        $this->addSettingField('tagcommander_default_vars', Textarea::class, 'Variables par défaut');
+        $this->_addSettingField('tagcommander_default_vars', Textarea::class, 'Variables par défaut');
 
     }
 
     protected function _statsGoogleTagManager()
     {
-        $this->addSettingField('section_gtmStats', FormSection::class, $this->__('Google Tag Manager'));
-        $this->addSettingField('googleTagManager', LongText::class, $this->__('Code Google Tag Manager'));
-        $this->addSettingField('gtag_additional_code', Code::class, $this->__('Code additionnel Google Tag Manager'), [
+        $this->_addSettingField('section_gtmStats', FormSection::class, $this->__('Google Tag Manager'));
+        $this->_addSettingField('googleTagManager', LongText::class, $this->__('Code Google Tag Manager'));
+        $this->_addSettingField('gtag_additional_code', Code::class, $this->__('Code additionnel Google Tag Manager'), [
             'language' => 'html',
         ]);
     }
 
     protected function _statsMatomo()
     {
-        $this->addSettingField('section_matomoStats', FormSection::class, $this->__('Matomo'));
-        $this->addSettingField('matomoServer', Text::class, $this->__('URL du serveur Matomo'), [
+        $this->_addSettingField('section_matomoStats', FormSection::class, $this->__('Matomo'));
+        $this->_addSettingField('matomoServer', Text::class, $this->__('URL du serveur Matomo'), [
             'prefix' => 'https://'
         ]);
-        $this->addSettingField('matomoSiteId', Integer::class, $this->__('Site ID'), ['when' => ['matomoServer' => '_not_empty_']]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('matomoTagManager', Text::class, 'Matomo Tag Manager', ['prefix' => 'https://']);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('matomoTracking', SelectFromArray::class, $this->__('Type de tracker'),
+        $this->_addSettingField('matomoSiteId', Integer::class, $this->__('Site ID'), ['when' => ['matomoServer' => '_not_empty_']]);
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('matomoTagManager', Text::class, 'Matomo Tag Manager', ['prefix' => 'https://']);
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('matomoTracking', SelectFromArray::class, $this->__('Type de tracker'),
             ['default' => 'js', 'options' => ['js' => __('Tracker JS') . ' (' . __('recommandé') . ')', 'pixel' => __('Pixel'), 'proxy' => __('Proxy')]]);
     }
 
     protected function _statsGoogleAnalytics()
     {
-        $this->addSettingField('section_gaStats', FormSection::class, $this->__('Google Analytics'));
-        $this->addSettingField('googleAnalytics', LongText::class, $this->__('Code Google Analytics'));
+        $this->_addSettingField('section_gaStats', FormSection::class, $this->__('Google Analytics'));
+        $this->_addSettingField('googleAnalytics', LongText::class, $this->__('Code Google Analytics'));
     }
 
     protected function _statsFluidbook()
     {
-        $this->addSettingField('section_fluidbookStats', FormSection::class, $this->__('Statistiques Fluidbook'));
-        $this->addSettingField('stats', Checkbox::class, $this->__('Activer les statistiques Fluidbook'), [
+        $this->_addSettingField('section_fluidbookStats', FormSection::class, $this->__('Statistiques Fluidbook'));
+        $this->_addSettingField('stats', Checkbox::class, $this->__('Activer les statistiques Fluidbook'), [
             'default' => true,
         ]);
-        $this->addSettingField('', FormSeparator::class);
-        $this->addSettingField('stats_score', Checkbox::class, $this->__('Afficher les scores dans les rapports'), [
+        $this->_addSettingField('', FormSeparator::class);
+        $this->_addSettingField('stats_score', Checkbox::class, $this->__('Afficher les scores dans les rapports'), [
             'default' => true,
         ]);
-        $this->addSettingField('stats_exclude_ip', Textarea::class, $this->__('Exclure les IP suivantes des statistiques'), [
+        $this->_addSettingField('stats_exclude_ip', Textarea::class, $this->__('Exclure les IP suivantes des statistiques'), [
             'hint' => $this->__('Indiquer une adresse ip de la forme www.xxx.yyy.zzz par ligne'),
         ]);
     }
 
+    protected function _addSettingField($name, $type = 'Text', $label = '', $attributes = [])
+    {
+        if ($type === FilesOrURL::class || $type === 'FilesOrURL') {
+            $attributes['downloadbase'] = '/fluidbook-publication/$id/asset/';
+        }
+        return $this->addSettingField($name, $type, $label, $attributes);
+    }
 
 }