From: Vincent Vanwaelscappel Date: Tue, 13 Jun 2023 18:00:54 +0000 (+0200) Subject: wip #4211 @1.5 X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=d04856a655605164f709485ddbcd0bb9539eaaf7;p=fluidbook-toolbox.git wip #4211 @1.5 --- diff --git a/app/Models/Base/ToolboxSettingsModel.php b/app/Models/Base/ToolboxSettingsModel.php index a6dc47dd2..7c5688398 100644 --- a/app/Models/Base/ToolboxSettingsModel.php +++ b/app/Models/Base/ToolboxSettingsModel.php @@ -3,6 +3,7 @@ namespace App\Models\Base; use Cubist\Backpack\Magic\EntityData; +use Cubist\Backpack\Magic\Fields\Field; class ToolboxSettingsModel extends ToolboxModel { @@ -11,6 +12,8 @@ class ToolboxSettingsModel extends ToolboxModel */ protected $_settingsData = null; + protected static array $defaultSettingsAttributes = ['fake' => true, 'translatable' => false, 'store_in' => 'settings','default'=>'']; + /** * @return EntityData @@ -23,4 +26,18 @@ class ToolboxSettingsModel extends ToolboxModel } return $this->_settingsData; } + + /** + * @param string|array $name + * @param string $type + * @param string $label + * @param array $attributes + * @return Field + * @throws \Exception + */ + public function addSettingField($name, $type = 'Text', $label = '', $attributes = []) + { + $attributes = self::normalizeAttributes($name, $type, $label, $attributes); + return $this->addField($name, $type, $label, array_merge(self::$defaultSettingsAttributes, $attributes)); + } } diff --git a/app/Models/Traits/PublicationSettings.php b/app/Models/Traits/PublicationSettings.php index 902b12d87..9f7b5692d 100644 --- a/app/Models/Traits/PublicationSettings.php +++ b/app/Models/Traits/PublicationSettings.php @@ -31,6 +31,101 @@ use Cubist\Backpack\Magic\Fields\Textarea; */ trait PublicationSettings { + protected static $acceptImages = ['.svg', '.jpg', '.jpeg', '.png', '.gif']; + + public function setSettingsFields() + { + $this->_mainSettings(); + $this->_mainFeatures(); + $this->_appearance(); + $this->_linksAndMultimedia(); + $this->_ecommerce(); + $this->_packageAndDownload(); + $this->_stats(); + $this->_accessibility(); + $this->_elearning(); + $this->_advanced(); + } + + protected function _mainSettings() + { + $this->_description(); + $this->_general(); + } + + + protected function _mainFeatures() + { + $this->addSettingField('bigsection_main_features', FormSuperSection::class, $this->__('Fonctionnalités')); + $this->_menu(); + $this->_index(); + $this->_chapters(); + $this->_share(); + $this->_bookmarks(); + $this->_downloadpdf(); + $this->_print(); + $this->_sound(); + $this->_fullscreen(); + $this->_notes(); + $this->_search(); + $this->_help(); + } + + protected function _appearance() + { + $this->addSettingField('bigsection_appearance', FormSuperSection::class, $this->__('Apparence & interface')); + $this->_visualization(); + $this->_mobileFirst(); + $this->_theme(); + $this->_slider(); + $this->_landing(); + $this->_splashScreen(); + $this->_zoom(); + $this->_tabs(); + } + + protected function _ecommerce() + { + $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->_links(); + $this->_multimedia(); + $this->_video(); + $this->_pdf(); + $this->_slideshow(); + $this->_audioplayer(); + $this->_downloadPortions(); + $this->_articles(); + $this->_assets(); + } + + protected function _advanced() + { + $this->addSettingField('bigsection_advanced', FormSuperSection::class, $this->__('Paramètres avancés')); + $this->_archives(); + $this->_form(); + $this->_plv(); + $this->_performances(); + } + + protected function _packageAndDownload() + { + $this->addSettingField('bigsection_package', FormSuperSection::class, $this->__('Packages & Téléchargements')); + $this->_seo(); + $this->_multibrochure(); + $this->_secure(); + $this->_package(); + $this->_offline(); + $this->_export(); + $this->_demoLink(); + } + /** * @return array[] */ @@ -50,26 +145,27 @@ trait PublicationSettings ]; } - public function setSettingsFields() + + protected function _slider() { - $acceptImages = ['.svg', '.jpg', '.jpeg', '.png', '.gif']; + $this->addSettingField('section_slider', FormSection::class, $this->__('Slider')); + $this->addSettingField('sliderImage', FilesOrURL::class, $this->__('Image pour le slider'), [ + 'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Image pour le slider!\\u00a7!","grade":3,"fileFilter":{"name":"\\u00a7!\\u00a7Images!\\u00a7! (*.svg, *.jpg, *.png, *.gif)","extensions":"*.svg;*.jpg;*.png;*.gif"}}', + 'accept' => self::$acceptImages, + ]); + } - $this->addField('section_important', FormSection::class, $this->__('Description de la publication')); - $this->addField('title', LongText::class, $this->__('Titre de la publication'), [ + protected function _description() + { + $this->addSettingField('section_important', FormSection::class, $this->__('Description de la publication')); + $this->addSettingField('title', LongText::class, $this->__('Titre de la publication'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7Titre de la publication!\\u00a7!","embed":false}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('mobileLVersion', FluidbookDevelopmentVersion::class, $this->__('Version logicielle'), [ + $this->addSettingField('mobileLVersion', FluidbookDevelopmentVersion::class, $this->__('Version logicielle'), [ 'v2' => '{"type":"combo","default":"stable","editable":true,"label":"\\u00a7!\\u00a7Version logicielle!\\u00a7!","grade":1,"datas":{"master : git (stable)":"stable","master : local (dev)":"dev","icon-bar : git":"icon-bar|git","icon-bar : local":"icon-bar|local"}}', 'default' => 'stable', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('mobileVersion', SelectFromArray::class, $this->__('Version mobile'), [ + $this->addSettingField('mobileVersion', SelectFromArray::class, $this->__('Version mobile'), [ 'v2' => '{"type":"combo","default":"html5-desktop","editable":true,"label":"\\u00a7!\\u00a7Version mobile!\\u00a7!","grade":3,"datas":{"\\u00a7!\\u00a7Rediriger vers le PDF!\\u00a7!":"pdf","\\u00a7!\\u00a7Version HTML5 recommand\\u00e9e (vecteurs sur desktop)!\\u00a7!":"html5-desktop","\\u00a7!\\u00a7Version HTML5 vecteurs!\\u00a7!":"html5","\\u00a7!\\u00a7Version HTML5 en images!\\u00a7!":"html5-images"}}', 'options' => [ //'pdf' => $this->__('Rediriger vers le PDF'), @@ -78,261 +174,169 @@ trait PublicationSettings 'html5-images' => $this->__('Version HTML5 en images'), ], 'default' => 'html5-desktop', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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'), [ 'v2' => '{"type":"text","default":"http:\\/\\/","editable":true,"label":"\\u00a7!\\u00a7URL du lien de retour au site!\\u00a7!"}', 'default' => 'http://', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('signature', FluidbookSignature::class, $this->__('Signature'), [ + $this->addSettingField('signature', FluidbookSignature::class, $this->__('Signature'), [ 'v2' => '{"type":"combo","default":"1","editable":true,"label":"\\u00a7!\\u00a7Signature!\\u00a7!","grade":3,"datasFunc":"wsDroits::getSignatures()","datas":{"Fluidbook":"1","--":"3","W&CIE":"13","InfoStrates":"16","Mati\\u00e8re grise":"17","Analogue":"22","Wonderful":"23","Kadreo":"24","EPCOM":"26","ABW":"27","Gill & Macmillan":"28","Double-ID":"29","STUDIOFRANCE":"30","French Vision":"31","Studio LWA":"32","Graphiworks (GW)":"33","Kazoar":"34","agenceL2R.com":"35","ID:":"36","Agence L2R":"37","Agence Beaurepaire":"38","Shokola":"39","HemsleyFraser":"40","Taches d\'encre":"41","kstories":"42","L2R Diff\\u00e9rence":"43","WR2STUDIO":"44","Creads":"45","Longrine":"46","Haute mer":"47","Melting K":"48","Argo":"49","Give Me More":"50","Impact Communication":"51","ici Barb\\u00e8s":"52"}}', 'default' => '1', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_assets', FormSection::class, $this->__('Assets')); - $this->addField('assetsDir', LongText::class, $this->__('Utiliser le dossier d\'assets du fluidbook'), [ + } + + protected function _assets() + { + $this->addSettingField('section_assets', FormSection::class, $this->__('Assets')); + $this->addSettingField('assetsDir', LongText::class, $this->__('Utiliser le dossier d\'assets du fluidbook'), [ 'v2' => '{"type":"text","label":"\\u00a7!\\u00a7Utiliser le dossier d\'assets du fluidbook!\\u00a7!","default":"","editable":true,"grade":5}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('linksAssets', FilesOrURL::class, $this->__('Charger ou remplacer des fichiers de liens'), [ + $this->addSettingField('linksAssets', FilesOrURL::class, $this->__('Charger ou remplacer des fichiers de liens'), [ 'v2' => '{"type":"freefile","label":"\\u00a7!\\u00a7Charger ou remplacer des fichiers de liens!\\u00a7!","default":"","editable":true,"grade":3,"multiple":true}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_share', FormSection::class, $this->__('Fonctions de partage')); - $this->addField('share', Checkbox::class, $this->__('Activer les fonctions de partage'), [ + + } + + protected function _share() + { + $this->addSettingField('section_share', FormSection::class, $this->__('Fonctions de partage')); + $this->addSettingField('share', Checkbox::class, $this->__('Activer les fonctions de partage'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Activer les fonctions de partage!\\u00a7!"}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('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') . '"', [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7Titre de l\'email!\\u00a7! \\"\\u00a7!\\u00a7Envoyer \\u00e0 un ami!\\u00a7!\\"","hint":"\\u00a7!\\u00a7Laisser vide pour utiliser la valeur par d\\u00e9faut!\\u00a7!"}', 'hint' => $this->__('Laisser vide pour utiliser la valeur par défaut'), - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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') . '"', [ 'v2' => '{"type":"textarea","default":"","editable":true,"label":"\\u00a7!\\u00a7Corps de l\'email!\\u00a7! \\"\\u00a7!\\u00a7Envoyer \\u00e0 un ami!\\u00a7!\\"","hint":"\\u00a7!\\u00a7Laisser vide pour utiliser la valeur par d\\u00e9faut!\\u00a7!"}', 'hint' => $this->__('Laisser vide pour utiliser la valeur par défaut'), - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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'), [ 'v2' => '{"type":"boolean","default":true,"editable":false,"label":"\\u00a7!\\u00a7Permettre au lecteur de modifier le corps de l\'email!\\u00a7!"}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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'), [ 'v2' => '{"type":"boolean","default":false,"editable":false,"label":"\\u00a7!\\u00a7Demander au destinataire un accus\\u00e9 de r\\u00e9ception!\\u00a7!","grade":3}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('sendasfluidbook', Checkbox::class, $this->__('Envoyer le mail comme Fluidbook'), [ + $this->addSettingField('sendasfluidbook', Checkbox::class, $this->__('Envoyer le mail comme Fluidbook'), [ 'v2' => '{"type":"boolean","default":false,"editable":false,"label":"\\u00a7!\\u00a7Envoyer le mail comme Fluidbook!\\u00a7!","grade":3,"hint":"\\u00a7!\\u00a7L\'exp\\u00e9diteur appara\\u00eetra en reply-to!\\u00a7!"}', 'hint' => $this->__('L\'expéditeur apparaîtra en reply-to'), 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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:)'), [ 'v2' => '{"type":"boolean","default":false,"editable":false,"label":"\\u00a7!\\u00a7Envoyer le mail via le client mail du visiteur (mailto:)!\\u00a7!","grade":3}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('facebook_title', LongText::class, $this->__('Titre du contenu partagé'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('facebook_title', LongText::class, $this->__('Titre du contenu partagé'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7Titre du contenu partag\\u00e9!\\u00a7!","hint":"\\u00a7!\\u00a7Titre propos\\u00e9 sur les fonction de partage (par d\\u00e9faut, titre de la publication)!\\u00a7!"}', 'hint' => $this->__('Titre proposé sur les fonction de partage (par défaut, titre de la publication)'), - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('facebook_description', Textarea::class, $this->__('Description du contenu partagé'), [ + $this->addSettingField('facebook_description', Textarea::class, $this->__('Description du contenu partagé'), [ 'v2' => '{"type":"textarea","default":"","editable":true,"label":"\\u00a7!\\u00a7Description du contenu partag\\u00e9!\\u00a7!","grade":1,"hint":"\\u00a7!\\u00a7Description propos\\u00e9e sur les fonctions de partage (par d\\u00e9faut, vide)!\\u00a7!"}', 'hint' => $this->__('Description proposée sur les fonctions de partage (par défaut, vide)'), - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('facebook_image', FilesOrURL::class, $this->__('Miniature affichée'), [ + $this->addSettingField('facebook_image', FilesOrURL::class, $this->__('Miniature affichée'), [ 'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Miniature affich\\u00e9e!\\u00a7!","fileFilter":{"name":"\\u00a7!\\u00a7Images!\\u00a7! (*.jpg, *.png)","extensions":"*.jpg;*.jpeg;*.png"}}', - 'default' => '', 'accept' => [ 0 => '.jpg', 1 => '.jpeg', 2 => '.png', ], - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('twitter_description', Textarea::class, $this->__('Contenu Partage court'), [ + $this->addSettingField('twitter_description', Textarea::class, $this->__('Contenu Partage court'), [ 'v2' => '{"type":"textarea","default":"%title% : %short%","editable":true,"label":"\\u00a7!\\u00a7Contenu Partage court!\\u00a7!","hint":"\\u00a7!\\u00a7Contenu du partag\\u00e9 sur les partages courts!\\u00a7!"}', 'hint' => $this->__('Contenu du partage sur les partages courts'), 'default' => '%title% : %short%', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('friend', Checkbox::class, $this->__('E-mail'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('friend', Checkbox::class, $this->__('E-mail'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7E-mail!\\u00a7!"}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('facebook', Checkbox::class, $this->__('Facebook'), [ + $this->addSettingField('facebook', Checkbox::class, $this->__('Facebook'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Facebook!\\u00a7!"}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('twitter', Checkbox::class, $this->__('Twitter'), [ + $this->addSettingField('twitter', Checkbox::class, $this->__('Twitter'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Twitter!\\u00a7!"}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('whatsapp', Checkbox::class, $this->__('WhatsApp'), [ + $this->addSettingField('whatsapp', Checkbox::class, $this->__('WhatsApp'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7WhatsApp!\\u00a7!"}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('linkedin', Checkbox::class, $this->__('LinkedIn'), [ + $this->addSettingField('linkedin', Checkbox::class, $this->__('LinkedIn'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7LinkedIn!\\u00a7!"}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('pinterest', Checkbox::class, $this->__('Pinterest'), [ + $this->addSettingField('pinterest', Checkbox::class, $this->__('Pinterest'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Pinterest!\\u00a7!"}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('googleplus', Checkbox::class, $this->__('Google +'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('googleplus', Checkbox::class, $this->__('Google +'), [ 'v2' => '{"type":"boolean","default":false,"editable":false,"label":"\\u00a7!\\u00a7Google +!\\u00a7!"}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('viadeo', Checkbox::class, $this->__('Viadeo'), [ + $this->addSettingField('viadeo', Checkbox::class, $this->__('Viadeo'), [ 'v2' => '{"type":"boolean","default":false,"editable":false,"label":"\\u00a7!\\u00a7Viadeo!\\u00a7!"}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('customSharer', LongText::class, $this->__('Classe personnalisée de partage'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('customSharer', LongText::class, $this->__('Classe personnalisée de partage'), [ 'v2' => '{"type":"text","default":"","editable":false,"label":"\\u00a7!\\u00a7Classe personnalis\\u00e9e de partage!\\u00a7!","grade":5}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('friendWidth', Integer::class, $this->__('Largeur du menu'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('friendWidth', Integer::class, $this->__('Largeur du menu'), [ 'v2' => '{"type":"integer","default":319,"editable":false,"label":"\\u00a7!\\u00a7Largeur du menu!\\u00a7!","grade":5}', 'default' => 319, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('friendHeight', Integer::class, $this->__('Largeur du menu'), [ + $this->addSettingField('friendHeight', Integer::class, $this->__('Largeur du menu'), [ 'v2' => '{"type":"integer","default":500,"editable":false,"label":"\\u00a7!\\u00a7Largeur du menu!\\u00a7!","grade":5}', 'default' => 500, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_seo', FormSection::class, $this->__('Optimisation pour les moteurs de recherche')); - $this->addField('seoVersion', Checkbox::class, $this->__('Générer une version pour les moteurs de recherche'), [ + + } + + 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'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7G\\u00e9n\\u00e9rer une version pour les moteurs de recherche!\\u00a7!"}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Autoriser le parcours par les moteurs de recherche!\\u00a7!"}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('seoDescription', Textarea::class, $this->__('Meta tag Description'), [ + $this->addSettingField('seoDescription', Textarea::class, $this->__('Meta tag Description'), [ 'v2' => '{"type":"textarea","default":"","editable":true,"label":"\\u00a7!\\u00a7Meta tag Description!\\u00a7!"}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('seoKeywords', Textarea::class, $this->__('Meta tag Keywords'), [ + $this->addSettingField('seoKeywords', Textarea::class, $this->__('Meta tag Keywords'), [ 'v2' => '{"type":"textarea","default":"","editable":true,"label":"\\u00a7!\\u00a7Meta tag Keywords!\\u00a7!"}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('seoBaseURL', LongText::class, $this->__('URL de base'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('seoBaseURL', LongText::class, $this->__('URL de base'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7URL de base!\\u00a7!","grade":5}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('seoAdvanced', FilesOrURL::class, $this->__('Données SEO par page'), [ + $this->addSettingField('seoAdvanced', FilesOrURL::class, $this->__('Données SEO par page'), [ 'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Donn\\u00e9es SEO par page!\\u00a7!","grade":5,"fileFilter":{"name":"\\u00a7!\\u00a7Fichier Excel!\\u00a7! (.xlsx)","extensions":"*.xlsx"}}', - 'default' => '', 'accept' => [ 0 => '.xlsx', ], - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_3d_mode', FormSection::class, $this->__('Options de visualisation')); - $this->addField('mobileNavigationType', SelectFromArray::class, $this->__('Mode de navigation'), [ + + } + + protected function _visualization() + { + $this->addSettingField('section_3d_mode', FormSection::class, $this->__('Options de visualisation')); + $this->addSettingField('mobileNavigationType', SelectFromArray::class, $this->__('Mode de navigation'), [ 'v2' => '{"type":"combo","default":"book","editable":true,"label":"\\u00a7!\\u00a7Mode de navigation!\\u00a7!","grade":5,"datas":{"\\u00a7!\\u00a7Normal (automatique)!\\u00a7!":"book","\\u00a7!\\u00a7Normal (double page)!\\u00a7!":"landscape","\\u00a7!\\u00a7Normal (une page)!\\u00a7!":"portrait","\\u00a7!\\u00a7Mobile first!\\u00a7!":"mobilefirst","\\u00a7!\\u00a7Magazine tablette!\\u00a7!":"tab"}}', 'options' => [ 'book' => $this->__('Normal (automatique)'), @@ -342,12 +346,9 @@ trait PublicationSettings 'tab' => $this->__('Magazine tablette'), ], 'default' => 'book', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('mobileTransitions', SelectFromArray::class, $this->__('Transitions entre les pages'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('mobileTransitions', SelectFromArray::class, $this->__('Transitions entre les pages'), [ 'v2' => '{"type":"combo","default":"flip3d","editable":true,"label":"\\u00a7!\\u00a7Transitions entre les pages!\\u00a7!","grade":3,"datas":{"\\u00a7!\\u00a7Aucune transition!\\u00a7!":"none","\\u00a7!\\u00a7Opacit\\u00e9!\\u00a7!":"fade","\\u00a7!\\u00a7Glisser!\\u00a7!":"slide","\\u00a7!\\u00a7Tourner (rigide)!\\u00a7!":"flip","\\u00a7!\\u00a7Tourner (souple)!\\u00a7!":"flip3d"}}', 'options' => [ 'none' => $this->__('Aucune transition'), @@ -357,50 +358,30 @@ trait PublicationSettings 'flip3d' => $this->__('Tourner (souple)'), ], 'default' => 'flip3d', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('mobileTransitionDuration', Number::class, $this->__('Durée de la transition'), [ + $this->addSettingField('mobileTransitionDuration', Number::class, $this->__('Durée de la transition'), [ 'v2' => '{"type":"float","default":0.5,"editable":true,"label":"\\u00a7!\\u00a7Dur\\u00e9e de la transition!\\u00a7!"}', 'default' => 0.5, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('mobileTransitionDurationSlide', Number::class, $this->__('Durée de la transition (fade, slide)'), [ + $this->addSettingField('mobileTransitionDurationSlide', Number::class, $this->__('Durée de la transition (fade, slide)'), [ 'v2' => '{"type":"float","default":0,"editable":true,"label":"\\u00a7!\\u00a7Dur\\u00e9e de la transition (fade, slide)!\\u00a7!","hint":"\\u00a7!\\u00a7Laisser \\u00e0 z\\u00e9ro pour utiliser la valeur g\\u00e9n\\u00e9rale!\\u00a7!"}', 'hint' => $this->__('Laisser à zéro pour utiliser la valeur générale'), 'default' => 0, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('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'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Ajouter un fond blanc aux pages!\\u00a7!"}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('rasterizePages', Hidden::class, $this->__('Ecraser les pages'), [ + $this->addSettingField('rasterizePages', Hidden::class, $this->__('Ecraser les pages'), [ 'v2' => '{"type":"textarea","default":"","editable":true,"label":"\\u00a7!\\u00a7Ecraser les pages!\\u00a7!","hint":"1-3,5 = 1,2,3,5","grade":1}', 'hint' => '1-3,5 = 1,2,3,5', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('vectorPages', Hidden::class, $this->__('Conserver les pages en vecteur'), [ + $this->addSettingField('vectorPages', Hidden::class, $this->__('Conserver les pages en vecteur'), [ 'v2' => '{"type":"textarea","default":"","editable":true,"label":"\\u00a7!\\u00a7Conserver les pages en vecteur!\\u00a7!","hint":"1-3,5 = 1,2,3,5","grade":1}', 'hint' => '1-3,5 = 1,2,3,5', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); -// $this->addField('visualisationMode', SelectFromArray::class, $this->__('Mode de visualisation 3D'), [ +// $this->addSettingField('visualisationMode', SelectFromArray::class, $this->__('Mode de visualisation 3D'), [ // 'v2' => '{"type":"combo","default":"3","editable":false,"label":"\\u00a7!\\u00a7Mode de visualisation 3D!\\u00a7!","datas":{"\\u00a7!\\u00a7Mode 3D!\\u00a7!":"0","\\u00a7!\\u00a7Mode 2D (cam\\u00e9ra fixe et pages \\u00e0 plat)!\\u00a7!":"1","\\u00a7!\\u00a7Laisser le choix \\u00e0 l\'utilisateur (mode 3D par d\\u00e9faut)!\\u00a7!":"2","\\u00a7!\\u00a7Laisser le choix \\u00e0 l\'utilisateur (mode 2D par d\\u00e9faut)!\\u00a7!":"3"}}', // 'options' => [ // 0 => $this->__('Mode 3D'), @@ -409,142 +390,89 @@ trait PublicationSettings // 3 => $this->__('Laisser le choix à l\'utilisateur (mode 2D par défaut)'), // ], // 'default' => '3', -// 'fake' => true, -// 'store_in' => 'settings', -// 'translatable' => false, // ]); -// $this->addField('antialiasReading', Checkbox::class, $this->__('Amélioration de la lisibilité en mode 2D'), [ +// $this->addSettingField('antialiasReading', Checkbox::class, $this->__('Amélioration de la lisibilité en mode 2D'), [ // 'v2' => '{"type":"boolean","default":true,"editable":false,"label":"\\u00a7!\\u00a7Am\\u00e9lioration de la lisibilit\\u00e9 en mode 2D!\\u00a7!"}', // 'default' => true, -// 'fake' => true, -// 'store_in' => 'settings', -// 'translatable' => false, // ]); - $this->addField('correctCenter', Checkbox::class, $this->__('Corriger les lignes blanches entre les pages'), [ + $this->addSettingField('correctCenter', Checkbox::class, $this->__('Corriger les lignes blanches entre les pages'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Corriger les lignes blanches entre les pages!\\u00a7!","grade":2}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); -// $this->addField('pagesBaseAngle', Integer::class, $this->__('Angle de base entre les pages'), [ +// $this->addSettingField('pagesBaseAngle', Integer::class, $this->__('Angle de base entre les pages'), [ // 'v2' => '{"type":"integer","default":2,"editable":false,"label":"\\u00a7!\\u00a7Angle de base entre les pages!\\u00a7!","grade":3,"hint":"\\u00a7!\\u00a70 : Publication \\u00e0 plat!\\u00a7!\\n\\u00a7!\\u00a72 : Valeur par d\\u00e9faut!\\u00a7!"}', // 'hint' => $this->__('0 : Publication à plat') . ' //' . $this->__('2 : Valeur par défaut'), // 'default' => 2, -// 'fake' => true, -// 'store_in' => 'settings', -// 'translatable' => false, // ]); - $this->addField('centerBook', Checkbox::class, $this->__('Centrer la publication sur les couvertures'), [ + $this->addSettingField('centerBook', Checkbox::class, $this->__('Centrer la publication sur les couvertures'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Centrer la publication sur les couvertures!\\u00a7!","grade":2}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('mobileReducedMargins', Checkbox::class, $this->__('Marges réduites sur mobile'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('mobileReducedMargins', Checkbox::class, $this->__('Marges réduites sur mobile'), [ 'v2' => '{"type":"boolean","default":0,"editable":true,"label":"\\u00a7!\\u00a7Marges réduites sur mobile!\\u00a7!","grade":3}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('extraXSpace', Integer::class, $this->__('Marge supplémentaire horizontale'), [ + $this->addSettingField('extraXSpace', Integer::class, $this->__('Marge supplémentaire horizontale'), [ 'v2' => '{"type":"integer","default":0,"editable":true,"label":"\\u00a7!\\u00a7Marge suppl\\u00e9mentaire horizontale!\\u00a7!","grade":3}', 'default' => 0, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('mobileExtraXSpace', Integer::class, $this->__('Marge supplémentaire horizontale (Mobile)'), [ + $this->addSettingField('mobileExtraXSpace', Integer::class, $this->__('Marge supplémentaire horizontale (Mobile)'), [ 'v2' => '{"type":"integer","default":0,"editable":true,"label":"\\u00a7!\\u00a7Marge suppl\\u00e9mentaire horizontale!\\u00a7!","grade":3}', 'default' => 0, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('extraYSpace', Integer::class, $this->__('Marge supplémentaire verticale'), [ + $this->addSettingField('extraYSpace', Integer::class, $this->__('Marge supplémentaire verticale'), [ 'v2' => '{"type":"integer","default":0,"editable":true,"label":"\\u00a7!\\u00a7Marge suppl\\u00e9mentaire verticale!\\u00a7!","grade":3}', 'default' => 0, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('viewMode', SelectFromArray::class, $this->__('Mode de visualisation (beta)'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('viewMode', SelectFromArray::class, $this->__('Mode de visualisation (beta)'), [ 'v2' => '{"type":"combo","default":"0","editable":false,"label":"\\u00a7!\\u00a7Mode de visualisation (beta)!\\u00a7!","datas":{"\\u00a7!\\u00a7Classique!\\u00a7!":"0","\\u00a7!\\u00a7Diaporama!\\u00a7!":"1"},"grade":5}', 'options' => [ 0 => $this->__('Classique'), 1 => $this->__('Diaporama'), ], 'default' => '0', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('dynamicBackgroundColor', Textarea::class, 'Couleur de fond dynamique', [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('dynamicBackgroundColor', Textarea::class, 'Couleur de fond dynamique', [ 'v2' => '{"type":"textarea","default":"","editable":true,"label":"Couleur de fond dynamique","grade":3}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('svgToCanvas', Checkbox::class, $this->__('Activer le rendu svgtocanvas'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('svgToCanvas', Checkbox::class, $this->__('Activer le rendu svgtocanvas'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Activer le rendu svgtocanvas!\\u00a7!"}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('svgToCanvasUpscale', Number::class, $this->__('Upscale de la fonction svgtocanvas'), [ + $this->addSettingField('svgToCanvasUpscale', Number::class, $this->__('Upscale de la fonction svgtocanvas'), [ 'v2' => '{"type":"float","default":1,"editable":true,"label":"\\u00a7!\\u00a7Upscale de la fonction svgtocanvas!\\u00a7!"}', 'default' => 1, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('svgTextMethod', SelectFromArray::class, $this->__('Méthode d\'extraction des textes en SVG'), [ + $this->addSettingField('svgTextMethod', SelectFromArray::class, $this->__('Méthode d\'extraction des textes en SVG'), [ 'v2' => '{"type":"combo","default":"pdftocairo","editable":true,"label":"\\u00a7!\\u00a7M\\u00e9thode d\'extraction des textes en SVG!\\u00a7!","datas":{"\\u00a7!\\u00a7Cairo!\\u00a7!":"pdf","\\u00a7!\\u00a7Mu!\\u00a7!":"mu"}}', 'options' => [ 'pdf' => $this->__('Cairo'), 'mu' => $this->__('Mu'), ], 'default' => 'pdf', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('textsThickness', Number::class, $this->__('Epaisseur des textes'), [ + $this->addSettingField('textsThickness', Number::class, $this->__('Epaisseur des textes'), [ 'v2' => '{"type":"float","default":1,"editable":true,"label":"\\u00a7!\\u00a7Epaisseur des textes!\\u00a7!"}', 'default' => 1, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7Appliquer l\'\\u00e9paisseur des texte sur les pages!\\u00a7!"}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('imageFormat', SelectFromArray::class, $this->__('Format des images'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('imageFormat', SelectFromArray::class, $this->__('Format des images'), [ 'v2' => '{"type":"combo","default":"jpg","editable":true,"datas":{"JPEG":"jpg","PNG":"png"},"grade":2,"label":"\\u00a7!\\u00a7Format des images!\\u00a7!"}', 'options' => [ 'jpg' => 'JPEG', 'png' => 'PNG', ], 'default' => 'jpg', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('maxResolution', SelectFromArray::class, $this->__('Résolution maximale des pages'), [ + $this->addSettingField('maxResolution', SelectFromArray::class, $this->__('Résolution maximale des pages'), [ 'v2' => '{"type":"combo","default":300,"editable":true,"datas":{"300dpi":300,"150dpi":150,"125dpi":125,"100dpi":100},"grade":2,"label":"\\u00a7!\\u00a7R\\u00e9solution maximale des pages!\\u00a7!"}', 'options' => [ 300 => '300dpi', @@ -553,26 +481,21 @@ trait PublicationSettings 100 => '100dpi', ], 'default' => 300, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('JPEGQuality', Integer::class, $this->__('Qualité JPEG'), [ + $this->addSettingField('JPEGQuality', Integer::class, $this->__('Qualité JPEG'), [ 'v2' => '{"type":"integer","default":85,"editable":true,"grade":2,"label":"\\u00a7!\\u00a7Qualit\\u00e9 JPEG!\\u00a7!"}', 'default' => 85, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_performances', FormSection::class, $this->__('Performances')); - $this->addField('rasterizeOnSafari', Checkbox::class, $this->__('Ecraser les pages pour Safari (Mac OS)'), [ + } + + protected function _performances() + { + $this->addSettingField('section_performances', FormSection::class, $this->__('Performances')); + $this->addSettingField('rasterizeOnSafari', Checkbox::class, $this->__('Ecraser les pages pour Safari (Mac OS)'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Ecraser les pages pour Safari (Mac OS)!\\u00a7!","grade":1}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('performance3DMode', SelectFromArray::class, $this->__('Performance de la 3D'), [ + $this->addSettingField('performance3DMode', SelectFromArray::class, $this->__('Performance de la 3D'), [ 'v2' => '{"type":"combo","datas":{"\\u00a7!\\u00a7Tester la machine!\\u00a7!":"auto","\\u00a7!\\u00a7Haute!\\u00a7!":"highPerf","\\u00a7!\\u00a7Moyenne!\\u00a7!":"lowPerf","\\u00a7!\\u00a7Basse!\\u00a7!":"veryLowPerf"},"default":"auto","editable":true,"label":"\\u00a7!\\u00a7Performance de la 3D!\\u00a7!","grade":1}', 'options' => [ 'auto' => $this->__('Tester la machine'), @@ -581,158 +504,97 @@ trait PublicationSettings 'veryLowPerf' => $this->__('Basse'), ], 'default' => 'auto', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_general', FormSection::class, $this->__('Fonctionnalités générales')); - $this->addField('tooltipTimer', Number::class, $this->__('Temps maximum d\'apparition des infos-bulles (en secondes)'), [ + } + + 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-bulles (en secondes)'), [ 'v2' => '{"type":"float","default":3,"editable":true,"label":"\\u00a7!\\u00a7Temps maximum d\'apparition des infos-bulles (en secondes)!\\u00a7!"}', 'default' => 3, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('mobilePlugins', Textarea::class, $this->__('Plugin'), [ + $this->addSettingField('mobilePlugins', Textarea::class, $this->__('Plugin'), [ 'v2' => '{"type":"textarea","default":"","editable":true,"label":"\\u00a7!\\u00a7Plugin!\\u00a7!","grade":5}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('preload', Integer::class, $this->__('Nombre de pages à précharger'), [ + $this->addSettingField('preload', Integer::class, $this->__('Nombre de pages à précharger'), [ 'v2' => '{"type":"integer","default":16,"editable":false,"label":"\\u00a7!\\u00a7Nombre de pages \\u00e0 pr\\u00e9charger!\\u00a7!","grade":3}', 'default' => 16, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('maxPages', Integer::class, $this->__('Nombre de pages maximal affiché à l\'ouverture du fluidbook (pas de limite = 0)'), [ + $this->addSettingField('maxPages', Integer::class, $this->__('Nombre de pages maximal affiché à l\'ouverture du fluidbook (pas de limite = 0)'), [ 'v2' => '{"type":"integer","default":0,"editable":true,"label":"\\u00a7!\\u00a7Nombre de pages maximal affich\\u00e9 \\u00e0 l\'ouverture du fluidbook (pas de limite = 0)!\\u00a7!","grade":3}', 'default' => 0, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('pages', ReadOnlyValue::class, $this->__('Nombre de pages'), [ + $this->addSettingField('pages', ReadOnlyValue::class, $this->__('Nombre de pages'), [ 'v2' => '{"type":"integer","default":0,"editable":false,"label":"\\u00a7!\\u00a7Nombre de pages!\\u00a7!"}', 'default' => 0, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('width', ReadOnlyValue::class, $this->__('Largeur'), [ + $this->addSettingField('width', ReadOnlyValue::class, $this->__('Largeur'), [ 'v2' => '{"type":"float","default":0,"editable":false,"label":"\\u00a7!\\u00a7Largeur!\\u00a7!"}', 'default' => 0, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('height', ReadOnlyValue::class, $this->__('Hauteur'), [ + $this->addSettingField('height', ReadOnlyValue::class, $this->__('Hauteur'), [ 'v2' => '{"type":"float","default":0,"editable":false,"label":"\\u00a7!\\u00a7Hauteur!\\u00a7!"}', 'default' => 0, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_menu', FormSection::class, $this->__('Menu')); - $this->addField('navOrder', Textarea::class, $this->__('Ordre des icônes dans la nav'), [ + } + + protected function _menu() + { + $this->addSettingField('section_menu', FormSection::class, $this->__('Menu')); + $this->addSettingField('navOrder', Textarea::class, $this->__('Ordre des icônes dans la nav'), [ 'v2' => '{"type":"textarea","default":"index, chapters, search, print, friend, bookmark, pdf, notes, archives, basket, fullscreen, sound, 3d, extra, extra1, extra2, extra3, extra4, extra5, help, lang","editable":true,"label":"\\u00a7!\\u00a7Ordre des ic\\u00f4nes dans la nav!\\u00a7!","grade":3}', 'default' => 'index, chapters, search, print, friend, bookmark, pdf, notes, archives, basket, fullscreen, sound, 3d, extra, extra1, extra2, extra3, extra4, extra5, help, lang', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('navOrderH', Textarea::class, $this->__('Ordre des icônes dans la nav') . ' (' . $this->__('Si différente') . ')', [ + $this->addSettingField('navOrderH', Textarea::class, $this->__('Ordre des icônes dans la nav') . ' (' . $this->__('Si différente') . ')', [ 'v2' => '{"type":"textarea","default":"","editable":true,"label":"\\u00a7!\\u00a7Ordre des ic\\u00f4nes dans la nav!\\u00a7! (\\u00a7!\\u00a7Si diff\\u00e9rente!\\u00a7!)","grade":3}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('mobileNavScale', Integer::class, $this->__('Taille du menu (en %)'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('mobileNavScale', Integer::class, $this->__('Taille du menu (en %)'), [ 'v2' => '{"type":"integer","default":100,"editable":true,"label":"\\u00a7!\\u00a7Taille du menu (en %)!\\u00a7!","grade":3}', 'default' => 100, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('menuBreakpoint', LongText::class, $this->__('Breakpoint burger menu'), [ + $this->addSettingField('menuBreakpoint', LongText::class, $this->__('Breakpoint burger menu'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7Breakpoint burger menu!\\u00a7!","hint":"Par d\\u00e9faut 1023px","grade":3}', 'hint' => 'Par défaut 1023px', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('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'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Afficher l\'image apr\\u00e8s le moteur de recherche sur la version HTML5!\\u00a7!","grade":1}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('navExtraImage', FilesOrURL::class, $this->__('Image pour navigation'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('navExtraImage', FilesOrURL::class, $this->__('Image pour navigation'), [ 'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Image pour navigation!\\u00a7!","fileFilter":{"name":"\\u00a7!\\u00a7Images!\\u00a7! (*.svg, *.jpg, *.png, *.gif)","extensions":"*.svg;*.jpg;*.png;*.gif"}}', - 'default' => '', - 'accept' => $acceptImages, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, + 'accept' => self::$acceptImages, ]); - $this->addField('navExtraImageMobile', FilesOrURL::class, $this->__('Image pour mobile'), [ + $this->addSettingField('navExtraImageMobile', FilesOrURL::class, $this->__('Image pour mobile'), [ 'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Image pour mobile!\\u00a7!","fileFilter":{"name":"\\u00a7!\\u00a7Images!\\u00a7! (*.svg, *.jpg, *.png, *.gif)","extensions":"*.svg;*.jpg;*.png;*.gif"}}', - 'default' => '', - 'accept' => $acceptImages, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, + 'accept' => self::$acceptImages, ]); - $this->addField('navExtraLink', LongText::class, $this->__('URL'), [ + $this->addSettingField('navExtraLink', LongText::class, $this->__('URL'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7URL!\\u00a7!"}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('navExtraTooltip', LongText::class, $this->__('Infobulle ou label'), [ + $this->addSettingField('navExtraTooltip', LongText::class, $this->__('Infobulle ou label'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7Infobulle ou label!\\u00a7!"}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('navExtraIcon1', FilesOrURL::class, $this->__('Icône supplémentaire') . ' 1', [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('navExtraIcon1', FilesOrURL::class, $this->__('Icône supplémentaire') . ' 1', [ 'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Ic\\u00f4ne suppl\\u00e9mentaire!\\u00a7! 1","fileFilter":{"name":"\\u00a7!\\u00a7Images!\\u00a7! (*.svg, *.jpg, *.png, *.gif)","extensions":"*.svg;*.jpg;*.png;*.gif"}}', - 'default' => '', - 'accept' => $acceptImages, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, + 'accept' => self::$acceptImages, ]); - $this->addField('navExtraType1', SelectFromArray::class, $this->__('Type'), [ + $this->addSettingField('navExtraType1', SelectFromArray::class, $this->__('Type'), [ 'v2' => '{"type":"combo","datas":{"\\u00a7!\\u00a7Ic\\u00f4ne + Label!\\u00a7!":"icon","\\u00a7!\\u00a7Image!\\u00a7!":"image"},"default":"icon","editable":true,"label":"\\u00a7!\\u00a7Type!\\u00a7!"}', 'options' => [ 'icon' => $this->__('Icône + Label'), 'image' => $this->__('Image'), ], 'default' => 'icon', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('navExtraLink1', LongText::class, $this->__('URL') . ' 1', [ + $this->addSettingField('navExtraLink1', LongText::class, $this->__('URL') . ' 1', [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7URL!\\u00a7! 1"}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('navExtraVisibility1', SelectFromArray::class, $this->__('Visible') . ' 1', [ + $this->addSettingField('navExtraVisibility1', SelectFromArray::class, $this->__('Visible') . ' 1', [ 'v2' => '{"type":"combo","datas":{"\\u00a7!\\u00a7Navigation horizontale!\\u00a7!":"horizontal","\\u00a7!\\u00a7Navigation burger!\\u00a7!":"burger","\\u00a7!\\u00a7Navigations horizontale et burger!\\u00a7!":"both"},"default":"both","editable":true,"label":"\\u00a7!\\u00a7Visible!\\u00a7! 1"}', 'options' => [ 'horizontal' => $this->__('Navigation horizontale'), @@ -740,38 +602,24 @@ trait PublicationSettings 'both' => $this->__('Navigations horizontale et burger'), ], 'default' => 'both', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('navExtraIcon2', FilesOrURL::class, $this->__('Icône supplémentaire') . ' 2', [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('navExtraIcon2', FilesOrURL::class, $this->__('Icône supplémentaire') . ' 2', [ 'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Ic\\u00f4ne suppl\\u00e9mentaire!\\u00a7! 2","fileFilter":{"name":"\\u00a7!\\u00a7Images!\\u00a7! (*.svg, *.jpg, *.png, *.gif)","extensions":"*.svg;*.jpg;*.png;*.gif"}}', - 'default' => '', - 'accept' => $acceptImages, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, + 'accept' => self::$acceptImages, ]); - $this->addField('navExtraType2', SelectFromArray::class, $this->__('Type'), [ + $this->addSettingField('navExtraType2', SelectFromArray::class, $this->__('Type'), [ 'v2' => '{"type":"combo","datas":{"\\u00a7!\\u00a7Ic\\u00f4ne + Label!\\u00a7!":"icon","\\u00a7!\\u00a7Image!\\u00a7!":"image"},"default":"icon","editable":true,"label":"\\u00a7!\\u00a7Type!\\u00a7!"}', 'options' => [ 'icon' => $this->__('Icône + Label'), 'image' => $this->__('Image'), ], 'default' => 'icon', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('navExtraLink2', LongText::class, $this->__('URL') . ' 2', [ + $this->addSettingField('navExtraLink2', LongText::class, $this->__('URL') . ' 2', [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7URL!\\u00a7! 2"}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('navExtraVisibility2', SelectFromArray::class, $this->__('Visible') . ' 2', [ + $this->addSettingField('navExtraVisibility2', SelectFromArray::class, $this->__('Visible') . ' 2', [ 'v2' => '{"type":"combo","datas":{"\\u00a7!\\u00a7Navigation horizontale!\\u00a7!":"horizontal","\\u00a7!\\u00a7Navigation burger!\\u00a7!":"burger","\\u00a7!\\u00a7Navigations horizontale et burger!\\u00a7!":"both"},"default":"both","editable":true,"label":"\\u00a7!\\u00a7Visible!\\u00a7! 2"}', 'options' => [ 'horizontal' => $this->__('Navigation horizontale'), @@ -779,38 +627,24 @@ trait PublicationSettings 'both' => $this->__('Navigations horizontale et burger'), ], 'default' => 'both', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('navExtraIcon3', FilesOrURL::class, $this->__('Icône supplémentaire') . ' 3', [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('navExtraIcon3', FilesOrURL::class, $this->__('Icône supplémentaire') . ' 3', [ 'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Ic\\u00f4ne suppl\\u00e9mentaire!\\u00a7! 3","fileFilter":{"name":"\\u00a7!\\u00a7Images!\\u00a7! (*.svg, *.jpg, *.png, *.gif)","extensions":"*.svg;*.jpg;*.png;*.gif"}}', - 'default' => '', - 'accept' => $acceptImages, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, + 'accept' => self::$acceptImages, ]); - $this->addField('navExtraType3', SelectFromArray::class, $this->__('Type'), [ + $this->addSettingField('navExtraType3', SelectFromArray::class, $this->__('Type'), [ 'v2' => '{"type":"combo","datas":{"\\u00a7!\\u00a7Ic\\u00f4ne + Label!\\u00a7!":"icon","\\u00a7!\\u00a7Image!\\u00a7!":"image"},"default":"icon","editable":true,"label":"\\u00a7!\\u00a7Type!\\u00a7!"}', 'options' => [ 'icon' => $this->__('Icône + Label'), 'image' => $this->__('Image'), ], 'default' => 'icon', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('navExtraLink3', LongText::class, $this->__('URL') . ' 3', [ + $this->addSettingField('navExtraLink3', LongText::class, $this->__('URL') . ' 3', [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7URL!\\u00a7! 3"}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('navExtraVisibility3', SelectFromArray::class, $this->__('Visible') . ' 3', [ + $this->addSettingField('navExtraVisibility3', SelectFromArray::class, $this->__('Visible') . ' 3', [ 'v2' => '{"type":"combo","datas":{"\\u00a7!\\u00a7Navigation horizontale!\\u00a7!":"horizontal","\\u00a7!\\u00a7Navigation burger!\\u00a7!":"burger","\\u00a7!\\u00a7Navigations horizontale et burger!\\u00a7!":"both"},"default":"both","editable":true,"label":"\\u00a7!\\u00a7Visible!\\u00a7! 3"}', 'options' => [ 'horizontal' => $this->__('Navigation horizontale'), @@ -818,38 +652,24 @@ trait PublicationSettings 'both' => $this->__('Navigations horizontale et burger'), ], 'default' => 'both', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('navExtraIcon4', FilesOrURL::class, $this->__('Icône supplémentaire') . ' 4', [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('navExtraIcon4', FilesOrURL::class, $this->__('Icône supplémentaire') . ' 4', [ 'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Ic\\u00f4ne suppl\\u00e9mentaire!\\u00a7! 4","fileFilter":{"name":"\\u00a7!\\u00a7Images!\\u00a7! (*.svg, *.jpg, *.png, *.gif)","extensions":"*.svg;*.jpg;*.png;*.gif"}}', - 'default' => '', - 'accept' => $acceptImages, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, + 'accept' => self::$acceptImages, ]); - $this->addField('navExtraType4', SelectFromArray::class, $this->__('Type'), [ + $this->addSettingField('navExtraType4', SelectFromArray::class, $this->__('Type'), [ 'v2' => '{"type":"combo","datas":{"\\u00a7!\\u00a7Ic\\u00f4ne + Label!\\u00a7!":"icon","\\u00a7!\\u00a7Image!\\u00a7!":"image"},"default":"icon","editable":true,"label":"\\u00a7!\\u00a7Type!\\u00a7!"}', 'options' => [ 'icon' => $this->__('Icône + Label'), 'image' => $this->__('Image'), ], 'default' => 'icon', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('navExtraLink4', LongText::class, $this->__('URL') . ' 4', [ + $this->addSettingField('navExtraLink4', LongText::class, $this->__('URL') . ' 4', [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7URL!\\u00a7! 4"}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('navExtraVisibility4', SelectFromArray::class, $this->__('Visible') . ' 4', [ + $this->addSettingField('navExtraVisibility4', SelectFromArray::class, $this->__('Visible') . ' 4', [ 'v2' => '{"type":"combo","datas":{"\\u00a7!\\u00a7Navigation horizontale!\\u00a7!":"horizontal","\\u00a7!\\u00a7Navigation burger!\\u00a7!":"burger","\\u00a7!\\u00a7Navigations horizontale et burger!\\u00a7!":"both"},"default":"both","editable":true,"label":"\\u00a7!\\u00a7Visible!\\u00a7! 4"}', 'options' => [ 'horizontal' => $this->__('Navigation horizontale'), @@ -857,38 +677,24 @@ trait PublicationSettings 'both' => $this->__('Navigations horizontale et burger'), ], 'default' => 'both', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('navExtraIcon5', FilesOrURL::class, $this->__('Icône supplémentaire') . ' 5', [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('navExtraIcon5', FilesOrURL::class, $this->__('Icône supplémentaire') . ' 5', [ 'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Ic\\u00f4ne suppl\\u00e9mentaire!\\u00a7! 5","fileFilter":{"name":"\\u00a7!\\u00a7Images!\\u00a7! (*.svg, *.jpg, *.png, *.gif)","extensions":"*.svg;*.jpg;*.png;*.gif"}}', - 'default' => '', - 'accept' => $acceptImages, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, + 'accept' => self::$acceptImages, ]); - $this->addField('navExtraType5', SelectFromArray::class, $this->__('Type'), [ + $this->addSettingField('navExtraType5', SelectFromArray::class, $this->__('Type'), [ 'v2' => '{"type":"combo","datas":{"\\u00a7!\\u00a7Ic\\u00f4ne + Label!\\u00a7!":"icon","\\u00a7!\\u00a7Image!\\u00a7!":"image"},"default":"icon","editable":true,"label":"\\u00a7!\\u00a7Type!\\u00a7!"}', 'options' => [ 'icon' => $this->__('Icône + Label'), 'image' => $this->__('Image'), ], 'default' => 'icon', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('navExtraLink5', LongText::class, $this->__('URL') . ' 5', [ + $this->addSettingField('navExtraLink5', LongText::class, $this->__('URL') . ' 5', [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7URL!\\u00a7! 5"}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('navExtraVisibility5', SelectFromArray::class, $this->__('Visible') . ' 5', [ + $this->addSettingField('navExtraVisibility5', SelectFromArray::class, $this->__('Visible') . ' 5', [ 'v2' => '{"type":"combo","datas":{"\\u00a7!\\u00a7Navigation horizontale!\\u00a7!":"horizontal","\\u00a7!\\u00a7Navigation burger!\\u00a7!":"burger","\\u00a7!\\u00a7Navigations horizontale et burger!\\u00a7!":"both"},"default":"both","editable":true,"label":"\\u00a7!\\u00a7Visible!\\u00a7! 5"}', 'options' => [ 'horizontal' => $this->__('Navigation horizontale'), @@ -896,148 +702,103 @@ trait PublicationSettings 'both' => $this->__('Navigations horizontale et burger'), ], 'default' => 'both', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('mobileBottomNav', LongText::class, $this->__('Barre de boutons en bas'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('mobileBottomNav', LongText::class, $this->__('Barre de boutons en bas'), [ 'v2' => '{"type":"text","default":"","editable":"true","label":"\\u00a7!\\u00a7Barre de boutons en bas!\\u00a7!","hint":"\\u00a7!\\u00a7Identifiants des boutons s\\u00e9par\\u00e9s par des virgules!\\u00a7!"}', 'hint' => $this->__('Identifiants des boutons séparés par des virgules'), - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_landing', FormSection::class, $this->__('Landing page')); - $this->addField('landingPage', FilesOrURL::class, $this->__('Contenu de la landing page'), [ + + + } + + protected function _landing() + { + $this->addSettingField('section_landing', FormSection::class, $this->__('Landing page')); + $this->addSettingField('landingPage', FilesOrURL::class, $this->__('Contenu de la landing page'), [ 'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Landing Page content!\\u00a7!","grade":3}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_fs', FormSection::class, $this->__('Plein écran')); - $this->addField('fullscreen', Checkbox::class, $this->__('Activer le mode plein-écran'), [ + } + + protected function _fullscreen() + { + $this->addSettingField('section_fs', FormSection::class, $this->__('Plein écran')); + $this->addSettingField('fullscreen', Checkbox::class, $this->__('Activer le mode plein-écran'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Activer le mode plein-\\u00e9cran!\\u00a7!"}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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)'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Lancer la publication en mode plein \\u00e9cran (lorsque possible)!\\u00a7!"}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_bookmark', FormSection::class, $this->__('Marques-pages')); - $this->addField('bookmark', Checkbox::class, $this->__('Activer les marques-pages'), [ + } + + protected function _bookmarks() + { + $this->addSettingField('section_bookmark', FormSection::class, $this->__('Marques-pages')); + $this->addSettingField('bookmark', Checkbox::class, $this->__('Activer les marques-pages'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Activer les marques-pages!\\u00a7!"}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('bookmarkView', SelectFromArray::class, $this->__('Menu des marques-pages'), [ + $this->addSettingField('bookmarkView', SelectFromArray::class, $this->__('Menu des marques-pages'), [ 'v2' => '{"type":"combo","datas":{"\\u00a7!\\u00a7R\\u00e9duit!\\u00a7!":"small","\\u00a7!\\u00a7Complet!\\u00a7!":"large"},"default":"small","editable":true,"label":"\\u00a7!\\u00a7Menu des marques-pages!\\u00a7!"}', 'options' => [ 'small' => $this->__('Réduit'), 'large' => $this->__('Complet'), ], 'default' => 'small', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('bookmarkFunctionsMainMenu', Checkbox::class, $this->__('Fonctions vers menus généraux'), [ + $this->addSettingField('bookmarkFunctionsMainMenu', Checkbox::class, $this->__('Fonctions vers menus généraux'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Fonctions vers menus g\\u00e9n\\u00e9raux!\\u00a7!","hint":"\\u00a7!\\u00a7Les fonctions des marques pages (T\\u00e9l\\u00e9charger, Imprimer, Envoyer) dirigent vers les menus g\\u00e9n\\u00e9raux!\\u00a7!"}', 'hint' => $this->__('Les fonctions des marques pages (Télécharger, Imprimer, Envoyer) dirigent vers les menus généraux'), 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('bookmarkEmpty', Checkbox::class, $this->__('Bouton pour effacer les marques-pages'), [ + $this->addSettingField('bookmarkEmpty', Checkbox::class, $this->__('Bouton pour effacer les marques-pages'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Bouton pour effacer les marques-pages!\\u00a7!"}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('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'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Activer l\'envoi des marques-pages par e-mail!\\u00a7!"}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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') . '"', [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7Titre de l\'email!\\u00a7! \\"\\u00a7!\\u00a7Envoyer \\u00e0 un ami!\\u00a7!\\"","hint":"\\u00a7!\\u00a7Laisser vide pour utiliser la valeur par d\\u00e9faut!\\u00a7!"}', 'hint' => $this->__('Laisser vide pour utiliser la valeur par défaut'), - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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') . '"', [ 'v2' => '{"type":"textarea","default":"","editable":true,"label":"\\u00a7!\\u00a7Corps de l\'email!\\u00a7! \\"\\u00a7!\\u00a7Envoyer \\u00e0 un ami!\\u00a7!\\"","hint":"\\u00a7!\\u00a7Laisser vide pour utiliser la valeur par d\\u00e9faut!\\u00a7!"}', 'hint' => $this->__('Laisser vide pour utiliser la valeur par défaut'), - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('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'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Activer l\'impression des marques-pages!\\u00a7!"}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('bookmarkCornerSize', Integer::class, $this->__('Taille des marques-pages'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('bookmarkCornerSize', Integer::class, $this->__('Taille des marques-pages'), [ 'v2' => '{"type":"integer","default":8,"editable":true,"label":"\\u00a7!\\u00a7Taille des marques-pages!\\u00a7!","hint":"\\u00a7!\\u00a7Taille relative \\u00e0 la largeur de la page!\\u00a7!"}', 'hint' => $this->__('Taille relative à la largeur de la page'), 'default' => 8, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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'), [ 'v2' => '{"type":"integer","default":0,"editable":true,"label":"\\u00a7!\\u00a7D\\u00e9caler de x pixels vers l\'int\\u00e9rieur!\\u00a7!"}', 'default' => 0, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('bookmarkPermanentIcon', Checkbox::class, $this->__('Afficher l\'icône en permanance'), [ + $this->addSettingField('bookmarkPermanentIcon', Checkbox::class, $this->__('Afficher l\'icône en permanance'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Afficher l\'ic\\u00f4ne en permanance!\\u00a7!"}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Faire clignoter le marque page \\u00e0 l\'apparition de la page!\\u00a7!"}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('bookmarkDisablePages', LongText::class, $this->__('Désactiver les marques-pages sur ces pages'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('bookmarkDisablePages', LongText::class, $this->__('Désactiver les marques-pages sur ces pages'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7D\\u00e9sactiver les marques-pages sur ces pages!\\u00a7!","hint":"1-3,5 = 1,2,3,5","grade":1}', 'hint' => '1-3,5 = 1,2,3,5', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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'), [ 'v2' => '{"type":"combo","default":"pages","editable":true,"label":"\\u00a7!\\u00a7PDF \\u00e0 utiliser pour l\'envoi ou le t\\u00e9l\\u00e9chargement de pages marqu\\u00e9es!\\u00a7!","datas":{"\\u00a7!\\u00a7PDF des pages!\\u00a7!":"pages","\\u00a7!\\u00a7PDF de remplacement!\\u00a7!":"download","\\u00a7!\\u00a7PDF des miniatures!\\u00a7!":"thumbnails"}}', 'options' => [ 'pages' => $this->__('PDF des pages'), @@ -1045,153 +806,109 @@ trait PublicationSettings 'thumbnails' => $this->__('PDF des miniatures'), ], 'default' => 'pages', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_help', FormSection::class, $this->__('Aide')); - $this->addField('help', Checkbox::class, $this->__('Activer l\'aide'), [ + + } + + protected function _help() + { + $this->addSettingField('section_help', FormSection::class, $this->__('Aide')); + $this->addSettingField('help', Checkbox::class, $this->__('Activer l\'aide'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Activer l\'aide!\\u00a7!"}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('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'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Afficher l\'aide au d\\u00e9marrage!\\u00a7!"}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('helpStartupTime', Integer::class, $this->__('Temps d\'affichage en secondes'), [ + $this->addSettingField('helpStartupTime', Integer::class, $this->__('Temps d\'affichage en secondes'), [ 'v2' => '{"type":"integer","default":15,"editable":true,"label":"\\u00a7!\\u00a7Temps d\'affichage en secondes!\\u00a7!"}', 'default' => 15, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('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'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Am\\u00e9liorer l\'aide des marques-pages!\\u00a7!"}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('helpArrowTooltip', LongText::class, $this->__('Bulle affichée au niveau de la flèche de droite'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('helpArrowTooltip', LongText::class, $this->__('Bulle affichée au niveau de la flèche de droite'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7Bulle affich\\u00e9e au niveau de la fl\\u00e8che de droite!\\u00a7!","grade":5}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('landscapeWarning', Textarea::class, $this->__('Avertissement affiché sur mobile au chargement de la publication'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('landscapeWarning', Textarea::class, $this->__('Avertissement affiché sur mobile au chargement de la publication'), [ 'v2' => '{"type":"textarea","default":"","editable":true,"label":"\\u00a7!\\u00a7Avertissement affich\\u00e9 sur mobile au chargement de la publication!\\u00a7!","grade":5,"embed":false}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_index', FormSection::class, $this->__('Vue d\'index (vignettes)')); - $this->addField('index', Checkbox::class, $this->__('Activer l\'index'), [ + + } + + protected function _index() + { + $this->addSettingField('section_index', FormSection::class, $this->__('Vue d\'index (vignettes)')); + $this->addSettingField('index', Checkbox::class, $this->__('Activer l\'index'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Activer l index!\\u00a7!"}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('indexAutoScroll', Checkbox::class, $this->__('Activer le scroll automatique'), [ + $this->addSettingField('indexAutoScroll', Checkbox::class, $this->__('Activer le scroll automatique'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Activer le scroll automatique!\\u00a7!"}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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'), [ 'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7PDF utilis\\u00e9 pour g\\u00e9n\\u00e9rer les miniatures!\\u00a7!","grade":1,"fileFilter":{"name":"\\u00a7!\\u00a7Document PDF!\\u00a7! (*.pdf)","extensions":"*.pdf"}}', - 'default' => '', 'accept' => [ 0 => '*.pdf', ], - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('indexMessage', Textarea::class, $this->__('Message en haut'), [ + $this->addSettingField('indexMessage', Textarea::class, $this->__('Message en haut'), [ 'v2' => '{"type":"textarea","default":"","editable":true,"label":"\\u00a7!\\u00a7Message en haut!\\u00a7!","grade":1,"hint":"\\u00a7!\\u00a7Message en haut de la vue index!\\u00a7!"}', 'hint' => $this->__('Message en haut de la vue index'), - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_print', FormSection::class, $this->__('Impression')); - $this->addField('print', Checkbox::class, $this->__('Activer l\'impression'), [ + + } + + protected function _print() + { + $this->addSettingField('section_print', FormSection::class, $this->__('Impression')); + $this->addSettingField('print', Checkbox::class, $this->__('Activer l\'impression'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Activer l\'impression!\\u00a7!"}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Autoriser l\'impression de la brochure compl\\u00e8te!\\u00a7!"}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Activer l\'option pour imprimer une plage de pages!\\u00a7!"}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_search', FormSection::class, $this->__('Moteur de recherche')); - $this->addField('search', Checkbox::class, $this->__('Activer le moteur de recherche'), [ + } + + protected function _search() + { + $this->addSettingField('section_search', FormSection::class, $this->__('Moteur de recherche')); + $this->addSettingField('search', Checkbox::class, $this->__('Activer le moteur de recherche'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Activer le moteur de recherche!\\u00a7!"}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('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'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Afficher le burger menu complet \\u00e0 l\'ouverture de la recheche!\\u00a7!"}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('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'), [ 'v2' => '{"type":"integer","default":3,"editable":true,"label":"\\u00a7!\\u00a7Ignorer les mots de moins de X caract\\u00e8res!\\u00a7!"}', 'default' => 3, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('ignoreSearch', Textarea::class, $this->__('Mots à ignorer'), [ + $this->addSettingField('ignoreSearch', Textarea::class, $this->__('Mots à ignorer'), [ 'v2' => '{"type":"textarea","default":"","editable":true,"label":"\\u00a7!\\u00a7Mots \\u00e0 ignorer!\\u00a7!","hint":"\\u00a7!\\u00a7Liste des mots \\u00e0 ignorer s\\u00e9par\\u00e9s par des virgules!\\u00a7!","grade":5}', 'hint' => $this->__('Liste des mots à ignorer séparés par des virgules'), - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7Caract\\u00e8res \\u00e0 ne pas consid\\u00e9rer comme un s\\u00e9parateur de mot!\\u00a7!"}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('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'), [ 'v2' => '{"type":"combo","editable":true,"default":"begins","datas":{"\\u00a7!\\u00a7mot commen\\u00e7ant par la requ\\u00eate!\\u00a7!":"begins","\\u00a7!\\u00a7mot correspondant exactement \\u00e0 la requ\\u00eate!\\u00a7!":"exact","\\u00a7!\\u00a7mot contenant la requ\\u00eate!\\u00a7!":"contains","\\u00a7!\\u00a7expression exacte!\\u00a7!":"expression"},"label":"\\u00a7!\\u00a7Algorithme de s\\u00e9lection des occurences!\\u00a7!"}', 'options' => [ 'begins' => $this->__('mot commençant par la requête'), @@ -1200,47 +917,32 @@ trait PublicationSettings 'expression' => $this->__('expression exacte'), ], 'default' => 'begins', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('searchPageSelectionAlgorithm', SelectFromArray::class, $this->__('Algorithme de sélection des résultats'), [ + $this->addSettingField('searchPageSelectionAlgorithm', SelectFromArray::class, $this->__('Algorithme de sélection des résultats'), [ 'v2' => '{"type":"combo","editable":true,"default":"AND","datas":{"\\u00a7!\\u00a7les double-pages qui contiennent tous les mots recherch\\u00e9s (ET logique)!\\u00a7!":"AND","\\u00a7!\\u00a7les double-page qui contiennent un des mots recherch\\u00e9 (OU logique)!\\u00a7!":"OR"},"label":"\\u00a7!\\u00a7Algorithme de s\\u00e9lection des r\\u00e9sultats!\\u00a7!"}', '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)'), ], 'default' => 'AND', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('highlightResults', Checkbox::class, $this->__('Surligner les résultats'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('highlightResults', Checkbox::class, $this->__('Surligner les résultats'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Surligner les r\\u00e9sultats!\\u00a7!"}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('highlightAllOccurences', Checkbox::class, $this->__('Surligner toutes les occurences'), [ + $this->addSettingField('highlightAllOccurences', Checkbox::class, $this->__('Surligner toutes les occurences'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Surligner toutes les occurences!\\u00a7!","hint":"\\u00a7!\\u00a7M\\u00eame sur les pages non consid\\u00e9r\\u00e9es comme un r\\u00e9sultat!\\u00a7!"}', 'hint' => $this->__('Même sur les pages non considérées comme un résultat'), 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('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'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Afficher les pages sans r\\u00e9sultats!\\u00a7!"}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('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'), [ 'v2' => '{"type":"combo","default":"pdfbox","editable":true,"label":"\\u00a7!\\u00a7M\\u00e9thode d\'extraction des textes!\\u00a7!","datas":{"\\u00a7!\\u00a7PDFBox!\\u00a7!":"pdfbox","\\u00a7!\\u00a7Poppler!\\u00a7!":"poppler","\\u00a7!\\u00a7Fluidbook (exp\\u00e9rimentation bas\\u00e9e sur PDFBox)!\\u00a7!":"fluidbook"}}', 'options' => [ 'fluidbook' => $this->__('Fluidbook (basée sur PDFBox)'), @@ -1248,12 +950,13 @@ trait PublicationSettings 'poppler' => $this->__('Poppler'), ], 'default' => 'fluidbook', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_sound', FormSection::class, $this->__('Effets sonores')); - $this->addField('soundTheme', SelectFromArray::class, $this->__('Thème sonore'), [ + } + + protected function _sound() + { + $this->addSettingField('section_sound', FormSection::class, $this->__('Effets sonores')); + $this->addSettingField('soundTheme', SelectFromArray::class, $this->__('Thème sonore'), [ 'v2' => '{"type":"combo","default":"classic","editable":true,"label":"\\u00a7!\\u00a7Th\\u00e8me sonore!\\u00a7!","datas":{"\\u00a7!\\u00a7Pas de son!\\u00a7!":"none","\\u00a7!\\u00a7Classique!\\u00a7!":"classic","\\u00a7!\\u00a7Papier \\u00e9pais!\\u00a7!":"heavy","\\u00a7!\\u00a7Papier fin!\\u00a7!":"light","\\u00a7!\\u00a7Silencieux!\\u00a7!":"silent","\\u00a7!\\u00a7Woosh!\\u00a7!":"woosh"}}', 'options' => [ 'none' => $this->__('Pas de son'), @@ -1264,95 +967,69 @@ trait PublicationSettings 'woosh' => $this->__('Woosh'), ], 'default' => 'classic', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('soundOn', Checkbox::class, $this->__('Activer les effets sonores à l\'ouverture'), [ + $this->addSettingField('soundOn', Checkbox::class, $this->__('Activer les effets sonores à l\'ouverture'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Activer les effets sonores \\u00e0 l\'ouverture!\\u00a7!"}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('ambientSound', FilesOrURL::class, $this->__('Ambiance sonore'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('ambientSound', FilesOrURL::class, $this->__('Ambiance sonore'), [ 'v2' => '{"type":"freefile","default":"","editable":false,"label":"\\u00a7!\\u00a7Ambiance sonore!\\u00a7!","grade":3,"fileFilter":{"name":"\\u00a7!\\u00a7Fichier sonore!\\u00a7! (*.mp3, *.wav)","extensions":"*.mp3;*.wav"}}', - 'default' => '', 'accept' => [ 0 => '*.mp3', 0 => '*.wav', ], - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('ambientSoundVolume', Integer::class, $this->__('Volume de l\'ambiance sonore'), [ + $this->addSettingField('ambientSoundVolume', Integer::class, $this->__('Volume de l\'ambiance sonore'), [ 'v2' => '{"type":"integer","default":50,"editable":false,"label":"\\u00a7!\\u00a7Volume de l\'ambiance sonore!\\u00a7!","min":0,"max":100}', 'min' => 0, 'max' => 100, 'default' => 50, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_downloadpdf', FormSection::class, $this->__('Fonction de téléchargement')); - $this->addField('pdf', Checkbox::class, $this->__('Activer les fonctions de téléchargement'), [ + } + + 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'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Activer les fonctions de t\\u00e9l\\u00e9chargement!\\u00a7!"}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('pdfName', LongText::class, $this->__('Nom du fichier PDF'), [ + $this->addSettingField('pdfName', LongText::class, $this->__('Nom du fichier PDF'), [ 'v2' => '{"type":"text","default":"document.pdf","editable":true,"label":"\\u00a7!\\u00a7Nom du fichier PDF!\\u00a7!"}', 'default' => 'document.pdf', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('pdfReplace', FilesOrURL::class, $this->__('PDF de remplacement'), [ + $this->addSettingField('pdfReplace', FilesOrURL::class, $this->__('PDF de remplacement'), [ 'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7PDF de remplacement!\\u00a7!","grade":3,"fileFilter":{"name":"\\u00a7!\\u00a7Document PDF!\\u00a7! (*.pdf)","extensions":"*.pdf"}}', - 'default' => '', 'accept' => [ 0 => '*.pdf', ], - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('pdfCompress', Checkbox::class, $this->__('Compression du fichier PDF'), [ + $this->addSettingField('pdfCompress', Checkbox::class, $this->__('Compression du fichier PDF'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Compression du fichier PDF!\\u00a7!"}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('pdfComplex', Checkbox::class, $this->__('Téchargement de PDF avancé'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('pdfComplex', Checkbox::class, $this->__('Téchargement de PDF avancé'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7T\\u00e9chargement de PDF avanc\\u00e9!\\u00a7!","hint":"\\u00a7!\\u00a7Permet \\u00e0 l\'utilisateur de s\\u00e9lectionner les pages qu\'il souhaite t\\u00e9l\\u00e9charger!\\u00a7!","grade":3}', 'hint' => $this->__('Permet à l\'utilisateur de sélectionner les pages qu\'il souhaite télécharger'), 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('pdfComplexShowCurrent', Checkbox::class, $this->__('Afficher les pages courrantes'), [ + $this->addSettingField('pdfComplexShowCurrent', Checkbox::class, $this->__('Afficher les pages courrantes'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Afficher les pages courrantes!\\u00a7!","grade":3}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_zoom', FormSection::class, $this->__('Zoom')); - $this->addField('zoomClick', Checkbox::class, $this->__('Cliquer sur les pages pour zoomer'), [ + } + + + protected function _zoom() + { + $this->addSettingField('section_zoom', FormSection::class, $this->__('Zoom')); + $this->addSettingField('zoomClick', Checkbox::class, $this->__('Cliquer sur les pages pour zoomer'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Cliquer sur les pages pour zoomer!\\u00a7!"}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('zoomWheel', SelectFromArray::class, $this->__('Zoom molette'), [ + $this->addSettingField('zoomWheel', SelectFromArray::class, $this->__('Zoom molette'), [ 'v2' => '{"type":"combo","default":"wheel","editable":true,"label":"\\u00a7!\\u00a7Zoom molette!\\u00a7!","datas":{"\\u00a7!\\u00a7D\\u00e9sactiv\\u00e9!\\u00a7!":"disabled","\\u00a7!\\u00a7Molette!\\u00a7!":"wheel","\\u00a7!\\u00a7Ctrl+Molette!\\u00a7!":"ctrlwheel"}}', 'options' => [ 'disabled' => $this->__('Désactivé'), @@ -1360,289 +1037,189 @@ trait PublicationSettings 'ctrlwheel' => $this->__('Ctrl+Molette'), ], 'default' => 'wheel', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('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)'), [ 'v2' => '{"type":"integer","default":200,"editable":true,"label":"\\u00a7!\\u00a7Zoom par d\\u00e9faut (atteint au clic)!\\u00a7!"}', 'default' => 200, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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)'), [ 'v2' => '{"type":"integer","default":300,"editable":true,"label":"\\u00a7!\\u00a7Zoom maximal (atteint \\u00e0 l\'aide de la molette)!\\u00a7!"}', 'default' => 300, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('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)'), [ 'v2' => '{"type":"combo","default":"move","editable":true,"label":"\\u00a7!\\u00a7Mode de d\\u00e9placement des pages zoom\\u00e9es (souris)!\\u00a7!","datas":{"\\u00a7!\\u00a7Bouger la souris!\\u00a7!":"move","\\u00a7!\\u00a7Drag & drop!\\u00a7!":"\\u00a7!\\u00a7dragndrop!\\u00a7!"}}', 'options' => [ 'move' => $this->__('Bouger la souris'), $this->__('dragndrop') => $this->__('Drag & drop'), ], 'default' => 'move', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('hideHeaderOnZoom', Checkbox::class, $this->__('Cacher le menu lors du zoom'), [ + $this->addSettingField('hideHeaderOnZoom', Checkbox::class, $this->__('Cacher le menu lors du zoom'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Cacher le menu lors du zoom!\\u00a7!"}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('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, 'v2' => '{"type":"float","default":2,"editable":true,"label":"\\u00a7!\\u00a7Niveau de zoom des zones de zoom!\\u00a7!"}'] ); - $this->addField('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, 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Inclure la couche de texte dans les zones de zoom!\\u00a7!"}']); - $this->addField('section_slider', FormSection::class, $this->__('Slider')); - $this->addField('sliderImage', FilesOrURL::class, $this->__('Image pour le slider'), [ - 'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Image pour le slider!\\u00a7!","grade":3,"fileFilter":{"name":"\\u00a7!\\u00a7Images!\\u00a7! (*.svg, *.jpg, *.png, *.gif)","extensions":"*.svg;*.jpg;*.png;*.gif"}}', - 'default' => '', - 'accept' => $acceptImages, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, - ]); - $this->addField('section_sommaire', FormSection::class, $this->__('Sommaire')); - $this->addField('chaptersCaptionDisplay', Checkbox::class, $this->__('Afficher le titre "Sommaire" dans la popup'), [ + + } + + protected function _chapters() + { + $this->addSettingField('section_sommaire', FormSection::class, $this->__('Sommaire')); + $this->addSettingField('chaptersCaptionDisplay', Checkbox::class, $this->__('Afficher le titre "Sommaire" dans la popup'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Afficher le titre \\"Sommaire\\" dans la popup!\\u00a7!","grade":3}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('chaptersFontSize', Integer::class, $this->__('Taille du texte des élements du sommaire'), [ + $this->addSettingField('chaptersFontSize', Integer::class, $this->__('Taille du texte des élements du sommaire'), [ 'v2' => '{"type":"integer","default":100,"min":50,"max":120,"editable":true,"label":"\\u00a7!\\u00a7Taille du texte des \\u00e9lements du sommaire!\\u00a7!","hint":"En % par rapport \\u00e0 la taille normale","grade":3}', 'hint' => 'En % par rapport à la taille normale', 'min' => 50, 'max' => 120, 'default' => 100, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('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'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Affiche l\'ic\\u00f4ne du sommaire!\\u00a7!","grade":1}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('displayChaptersPopup', Checkbox::class, $this->__('Toujours afficher le sommaire dans un popup'), [ + $this->addSettingField('displayChaptersPopup', Checkbox::class, $this->__('Toujours afficher le sommaire dans un popup'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Always display chapters in a popup!\\u00a7!","grade":1}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Afficher le sommaire au chargement de la publication!\\u00a7!","grade":3}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('chaptersPage', LongText::class, $this->__('Faire pointer le sommaire sur la page'), [ + $this->addSettingField('chaptersPage', LongText::class, $this->__('Faire pointer le sommaire sur la page'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7Faire pointer le sommaire sur la page!\\u00a7!","grade":3,"hint":"\\u00a7!\\u00a7Laisser vide pour utiliser le sommaire classique!\\u00a7!","size":5}', 'hint' => $this->__('Laisser vide pour utiliser le sommaire classique'), - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('chaptersPosition', SelectFromArray::class, $this->__('Position du sommaire'), [ + $this->addSettingField('chaptersPosition', SelectFromArray::class, $this->__('Position du sommaire'), [ 'v2' => '{"type":"combo","default":"center","editable":false,"label":"\\u00a7!\\u00a7Position du sommaire!\\u00a7!","datas":{"\\u00a7!\\u00a7Centr\\u00e9!\\u00a7!":"center","\\u00a7!\\u00a7Align\\u00e9 sur l\'ic\\u00f4ne!\\u00a7!":"chaptersIcon"}}', 'options' => [ 'center' => $this->__('Centré'), 'chaptersIcon' => $this->__('Aligné sur l\'icône'), ], 'default' => 'center', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('chaptersLevelLimit', Integer::class, $this->__('Limiter à x niveaux'), [ + $this->addSettingField('chaptersLevelLimit', Integer::class, $this->__('Limiter à x niveaux'), [ 'v2' => '{"type":"integer","default":5,"editable":true,"label":"\\u00a7!\\u00a7Limiter \\u00e0 x niveaux!\\u00a7!"}', 'default' => 5, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('chaptersCascade', Checkbox::class, $this->__('Sommaire en cascade'), [ + $this->addSettingField('chaptersCascade', Checkbox::class, $this->__('Sommaire en cascade'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Sommaire en cascade!\\u00a7!","grade":3}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('chaptersPagesNumber', SelectFromArray::class, $this->__('Numérotation du sommaire'), [ + $this->addSettingField('chaptersPagesNumber', SelectFromArray::class, $this->__('Numérotation du sommaire'), [ 'v2' => '{"type":"combo","default":"virtual","editable":true,"label":"\\u00a7!\\u00a7Num\\u00e9rotation du sommaire!\\u00a7!","datas":{"\\u00a7!\\u00a7Virtuelle!\\u00a7!":"virtual","\\u00a7!\\u00a7Physique!\\u00a7!":"physical"}}', 'options' => [ 'virtual' => $this->__('Virtuelle'), 'physical' => $this->__('Physique'), ], 'default' => 'virtual', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('chaptersColMaxWidth', Integer::class, $this->__('Largeur max d\'une colonne'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('chaptersColMaxWidth', Integer::class, $this->__('Largeur max d\'une colonne'), [ 'v2' => '{"type":"integer","default":300,"editable":true,"label":"\\u00a7!\\u00a7Largeur max d\'une colonne!\\u00a7!","grade":3}', 'default' => 300, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('chaptersColumns', Integer::class, $this->__('Afficher le sommaire sur x colonne(s)'), [ + $this->addSettingField('chaptersColumns', Integer::class, $this->__('Afficher le sommaire sur x colonne(s)'), [ 'v2' => '{"type":"integer","default":1,"editable":true,"label":"\\u00a7!\\u00a7Afficher le sommaire sur x colonne(s)!\\u00a7!","grade":3}', 'default' => 1, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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'), [ 'v2' => '{"type":"boolean","default":true,"editable":false,"label":"\\u00a7!\\u00a7Affiche une ligne entre le label et le num\\u00e9ro de page!\\u00a7!","grade":5}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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)'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Indenter les \\u00e9l\\u00e9ments (pour les sommaires \\u00e0 plat)!\\u00a7!"}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('externalChaptersHTML', FilesOrURL::class, $this->__('Sommaire personnalisé'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('externalChaptersHTML', FilesOrURL::class, $this->__('Sommaire personnalisé'), [ 'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Sommaire personnalis\\u00e9!\\u00a7!","grade":3,"fileFilter":{"name":"\\u00a7!\\u00a7Archive ZIP!\\u00a7! (*.zip)","extensions":"*.zip"},"hint":"\\u00a7!\\u00a7Laisser vide pour utiliser le sommaire classique!\\u00a7!"}', 'hint' => $this->__('Laisser vide pour utiliser le sommaire classique'), - 'default' => '', 'accept' => [ 0 => '*.zip', ], - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('mobileChaptersStyle', SelectFromArray::class, $this->__('Style des chapitres'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('mobileChaptersStyle', SelectFromArray::class, $this->__('Style des chapitres'), [ 'v2' => '{"type":"combo","default":"classic","editable":true,"label":"\\u00a7!\\u00a7Style des chapitres!\\u00a7!","datas":{"\\u00a7!\\u00a7Classique!\\u00a7!":"classic","\\u00a7!\\u00a7INA!\\u00a7!":"ina"}}', 'options' => [ 'classic' => $this->__('Classique'), 'ina' => $this->__('INA'), ], 'default' => 'classic', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_tabs', FormSection::class, $this->__('Onglets')); - $this->addField('tabsHTML5', FilesOrURL::class, $this->__('Fichier d\'onglets') . ' (SVG, ZIP)', [ + } + + protected function _tabs() + { + $this->addSettingField('section_tabs', FormSection::class, $this->__('Onglets')); + $this->addSettingField('tabsHTML5', FilesOrURL::class, $this->__('Fichier d\'onglets') . ' (SVG, ZIP)', [ 'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Fichier d\'onglets!\\u00a7! (SVG, ZIP)","grade":3,"hint":"\\u00a7!\\u00a7Charger un zip rendra les options ci-dessous inop\\u00e9rantes!\\u00a7!","fileFilter":{"name":"\\u00a7!\\u00a7Fichier onglets!\\u00a7! (*.svg, *.zip)","extensions":"*.svg;*.zip"}}', 'hint' => $this->__('Charger un zip rendra les options ci-dessous inopérantes'), - 'default' => '', 'accept' => [ 0 => '.zip', 1 => '.svg', ], - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('tabsPages', LongText::class, $this->__('Pages des onglets'), [ + $this->addSettingField('tabsPages', LongText::class, $this->__('Pages des onglets'), [ 'v2' => '{"type":"text","label":"\\u00a7!\\u00a7Pages des onglets!\\u00a7!","editable":true,"default":"","grade":5,"hint":"\\u00a7!\\u00a7Num\\u00e9ros de pages s\\u00e9paras par une virgule!\\u00a7!"}', 'hint' => $this->__('Numéros de pages séparés par une virgule'), - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('tabsSections', LongText::class, $this->__('Sections des onglets'), [ + $this->addSettingField('tabsSections', LongText::class, $this->__('Sections des onglets'), [ 'v2' => '{"type":"text","label":"\\u00a7!\\u00a7Sections des onglets!\\u00a7!","editable":true,"default":"","grade":5,"hint":"\\u00a7!\\u00a7Num\\u00e9ros de pages s\\u00e9par\\u00e9s par une virgule!\\u00a7!"}', 'hint' => $this->__('Numéros de pages séparés par une virgule'), - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('tabsPagesNumbers', SelectFromArray::class, $this->__('Numérotation utilisée'), [ + $this->addSettingField('tabsPagesNumbers', SelectFromArray::class, $this->__('Numérotation utilisée'), [ 'v2' => '{"type":"combo","label":"\\u00a7!\\u00a7Num\\u00e9rotation utilis\\u00e9e!\\u00a7!","editable":true,"default":"virtual","grade":5,"datas":{"\\u00a7!\\u00a7Virtuelle!\\u00a7!":"virtual","\\u00a7!\\u00a7Physique!\\u00a7!":"physical"}}', 'options' => [ 'virtual' => $this->__('Virtuelle'), 'physical' => $this->__('Physique'), ], 'default' => 'virtual', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('tabsDisabledOnPages', LongText::class, $this->__('Onglets inactifs sur les pages'), [ + $this->addSettingField('tabsDisabledOnPages', LongText::class, $this->__('Onglets inactifs sur les pages'), [ 'v2' => '{"type":"text","label":"\\u00a7!\\u00a7Onglets inactifs sur les pages!\\u00a7!","editable":true,"default":"","grade":5,"hint":"1-3,5 = 1,2,3,5"}', 'hint' => '1-3,5 = 1,2,3,5', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('tabsSide', SelectFromArray::class, $this->__('Position des onglets'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('tabsSide', SelectFromArray::class, $this->__('Position des onglets'), [ 'v2' => '{"type":"combo","label":"\\u00a7!\\u00a7Position des onglets!\\u00a7!","editable":true,"default":"right","grade":5,"datas":{"\\u00a7!\\u00a7Gauche!\\u00a7!":"left","\\u00a7!\\u00a7Droite!\\u00a7!":"right"}}', 'options' => [ 'left' => $this->__('Gauche'), 'right' => $this->__('Droite'), ], 'default' => 'right', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('tabsMargin', Number::class, $this->__('Marge des onglets'), [ + $this->addSettingField('tabsMargin', Number::class, $this->__('Marge des onglets'), [ 'v2' => '{"type":"float","label":"\\u00a7!\\u00a7Marge des onglets!\\u00a7!","editable":true,"default":-10,"grade":5,"hint":"\\u00a7!\\u00a7Une marge n\\u00e9gative = les onglets passent sous la publication!\\u00a7!"}', 'hint' => $this->__('Une marge négative = les onglets passent sous la publication'), 'default' => -10, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('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'), [ 'v2' => '{"type":"text","label":"\\u00a7!\\u00a7Cacher les onglets sur les pages!\\u00a7!","editable":true,"default":"","grade":5,"hint":"1-3,5 = 1,2,3,5"}', 'hint' => '1-3,5 = 1,2,3,5', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('tabsHideOnCover', Checkbox::class, $this->__('Cacher les onglets sur la couverture'), [ + $this->addSettingField('tabsHideOnCover', Checkbox::class, $this->__('Cacher les onglets sur la couverture'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Cacher les onglets sur la couverture!\\u00a7!","grade":5}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Cacher les onglets sur la derni\\u00e8re page!\\u00a7!","grade":5}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('tabsHideEdges', SelectFromArray::class, $this->__('Masquer les bordures du fluidbook'), [ + $this->addSettingField('tabsHideEdges', SelectFromArray::class, $this->__('Masquer les bordures du fluidbook'), [ 'v2' => '{"type":"combo","label":"\\u00a7!\\u00a7Masquer les bordures du fluidbook!\\u00a7!","editable":true,"default":"right","grade":5,"datas":{"\\u00a7!\\u00a7Aucune!\\u00a7!":"none","\\u00a7!\\u00a7Gauche!\\u00a7!":"left","\\u00a7!\\u00a7Droite!\\u00a7!":"right","\\u00a7!\\u00a7Les deux!\\u00a7!":"both"}}', 'options' => [ 'none' => $this->__('Aucune'), @@ -1651,198 +1228,127 @@ trait PublicationSettings 'both' => $this->__('Les deux'), ], 'default' => 'right', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('tabsPriority', Integer::class, 'Priorité des onglets sur les contenus (%)', [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('tabsPriority', Integer::class, 'Priorité des onglets sur les contenus (%)', [ 'v2' => '{"type":"integer","min":0,"max":100,"default":15,"editable":true,"label":"Priorit\\u00e9 des onglets sur les contenus (%)","hint":"La valeur indique la r\\u00e9duction permise de la taille de la publication."}', 'hint' => 'La valeur indique la réduction permise de la taille de la publication.', 'min' => 0, 'max' => 100, 'default' => 15, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('tabsLinkWidth', Number::class, $this->__('Largeur des onglets'), [ + $this->addSettingField('tabsLinkWidth', Number::class, $this->__('Largeur des onglets'), [ 'v2' => '{"type":"float","label":"\\u00a7!\\u00a7Largeur des onglets!\\u00a7!","editable":true,"default":30,"grade":5,"hint":"\\u00a7!\\u00a7Largeur r\\u00e9serv\\u00e9e pour les onglets et largeur de la zone cliquable des liens!\\u00a7!"}', 'hint' => $this->__('Largeur réservée pour les onglets et largeur de la zone cliquable des liens'), 'default' => 30, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Cacher les onglets lorsqu\'ils passent sous les fl\\u00e8ches de navigation!\\u00a7!","grade":5}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('tabsHideOnPortrait', Checkbox::class, $this->__('Cacher les onglets lorsque le fluidbook est en mode portrait'), [ + $this->addSettingField('tabsHideOnPortrait', Checkbox::class, $this->__('Cacher les onglets lorsque le fluidbook est en mode portrait'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Cacher les onglets lorsque le fluidbook est en mode portrait!\\u00a7!","grade":5}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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é'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Cacher les onglets lorsque le fluidbook est zoom\\u00e9!\\u00a7!","grade":5}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_links', FormSection::class, $this->__('Liens')); - $this->addField('permanentLinks', Checkbox::class, $this->__('Liens visibles en permanence'), [ + } + + protected function _links() + { + $this->addSettingField('section_links', FormSection::class, $this->__('Liens')); + $this->addSettingField('permanentLinks', Checkbox::class, $this->__('Liens visibles en permanence'), [ 'v2' => '{"type":"boolean","default":false,"editable":false,"label":"\\u00a7!\\u00a7Liens visibles en permanence!\\u00a7!","grade":3}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Animer les liens apr\\u00e8s un changement de page!\\u00a7!","grade":3}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('linkBlinkTime', Number::class, $this->__('Temps d\'apparition du lien à l\'ouverture de la page (en secondes)'), [ + $this->addSettingField('linkBlinkTime', Number::class, $this->__('Temps d\'apparition du lien à l\'ouverture de la page (en secondes)'), [ 'v2' => '{"type":"float","default":1,"editable":true,"label":"\\u00a7!\\u00a7Temps d\'apparition du lien \\u00e0 l\'ouverture de la page (en secondes)!\\u00a7!"}', 'default' => 1.0, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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'), [ 'v2' => '{"type":"integer","default":1,"editable":true,"label":"\\u00a7!\\u00a7Nombre de clignotement lors de l\'apparition des liens!\\u00a7!"}', 'default' => 1, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('openLinkAtStartup', LongText::class, $this->__('Déclencher un lien à l\'ouverture du fluidbook'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('openLinkAtStartup', LongText::class, $this->__('Déclencher un lien à l\'ouverture du fluidbook'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7D\\u00e9clencher un lien \\u00e0 l\'ouverture du fluidbook!\\u00a7!"}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('customLinkClass', LongText::class, $this->__('Classe pour les liens personnalisés'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('customLinkClass', LongText::class, $this->__('Classe pour les liens personnalisés'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7Classe pour les liens personnalis\\u00e9s!\\u00a7!","grade":5}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('ignoreLinksTypes', LongText::class, $this->__('Ignorer les liens de type'), [ + $this->addSettingField('ignoreLinksTypes', LongText::class, $this->__('Ignorer les liens de type'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7Ignorer les liens de type!\\u00a7!","hint":"\\u00a7!\\u00a7Liste des num\\u00e9ros s\\u00e9par\\u00e9s par des virgules!\\u00a7!","grade":5}', 'hint' => $this->__('Liste des numéros séparés par des virgules'), - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('mobileIgnoreBackgroundLinks', Checkbox::class, $this->__('Ignorer les liens de background'), [ + $this->addSettingField('mobileIgnoreBackgroundLinks', Checkbox::class, $this->__('Ignorer les liens de background'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Ignorer les liens de background!\\u00a7!"}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('linkTooltipManager', LongText::class, $this->__('Gestionnaire des info-bulles'), [ + $this->addSettingField('linkTooltipManager', LongText::class, $this->__('Gestionnaire des info-bulles'), [ 'v2' => '{"type":"text","default":"","editable":false,"label":"\\u00a7!\\u00a7Gestionnaire des info-bulles!\\u00a7!","grade":5}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('linkCornerSize', Integer::class, $this->__('Taille des liens de coins de page'), [ + $this->addSettingField('linkCornerSize', Integer::class, $this->__('Taille des liens de coins de page'), [ 'v2' => '{"type":"integer","default":10,"editable":false,"label":"\\u00a7!\\u00a7Taille des liens de coins de page!\\u00a7!","hint":"\\u00a7!\\u00a7Pourcentage de la largeur de la page!\\u00a7!"}', 'hint' => $this->__('Pourcentage de la largeur de la page'), 'default' => 10, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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"'), [ 'v2' => '{"type":"integer","default":140,"editable":true,"label":"\\u00a7!\\u00a7Largeur max des infobulles des liens de type \\"infobulle\\"!\\u00a7!"}', 'default' => 140, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('linkTracker', LongText::class, $this->__('Tracking des liens'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('linkTracker', LongText::class, $this->__('Tracking des liens'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7Tracking des liens!\\u00a7!","grade":5}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('linkTrackerRegexp', LongText::class, $this->__('Tracking des liens applicables aux liens du domaine'), [ + $this->addSettingField('linkTrackerRegexp', LongText::class, $this->__('Tracking des liens applicables aux liens du domaine'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7Tracking des liens applicables aux liens du domaine!\\u00a7!","grade":5}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('linkFilePrefix', LongText::class, $this->__('Préfixer les liens de téléchargement'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('linkFilePrefix', LongText::class, $this->__('Préfixer les liens de téléchargement'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7Pr\\u00e9fixer les liens de t\\u00e9l\\u00e9chargement!\\u00a7!"}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_multimedia', FormSection::class, $this->__('Multimedia')); - $this->addField('textPopupStylesheet', FilesOrURL::class, $this->__('Feuille de style des popups de texte'), [ + } + + protected function _multimedia() + { + $this->addSettingField('section_multimedia', FormSection::class, $this->__('Multimedia')); + $this->addSettingField('textPopupStylesheet', FilesOrURL::class, $this->__('Feuille de style des popups de texte'), [ 'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Feuille de style des popups de texte!\\u00a7!","fileFilter":{"name":"\\u00a7!\\u00a7Feuille de style!\\u00a7! (.css)","extensions":"*.css"}}', - 'default' => '', 'accept' => [ 0 => '.css', ], - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('textPopupWidth', Integer::class, $this->__('Largeur optimale des popups'), [ + $this->addSettingField('textPopupWidth', Integer::class, $this->__('Largeur optimale des popups'), [ 'v2' => '{"type":"integer","default":600,"editable":true,"label":"\\u00a7!\\u00a7Largeur optimale des popups!\\u00a7!"}', 'default' => 600, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('iframePopupMaxWidth', Integer::class, $this->__('Largeur maximale des popups iframe'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('iframePopupMaxWidth', Integer::class, $this->__('Largeur maximale des popups iframe'), [ 'v2' => '{"type":"integer","default":0,"editable":true,"label":"\\u00a7!\\u00a7Largeur maximale des popups iframe!\\u00a7!"}', 'default' => 0, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('OAMChromeFactor', Number::class, $this->__('Facteur OAM Chrome'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('OAMChromeFactor', Number::class, $this->__('Facteur OAM Chrome'), [ 'v2' => '{"type":"float","default":1,"editable":true,"label":"\\u00a7!\\u00a7Facteur OAM Chrome!\\u00a7!"}', 'default' => 1, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('OAMIEFactor', Number::class, $this->__('Facteur OAM IE11'), [ + $this->addSettingField('OAMIEFactor', Number::class, $this->__('Facteur OAM IE11'), [ 'v2' => '{"type":"float","default":1,"editable":true,"label":"\\u00a7!\\u00a7Facteur OAM IE11!\\u00a7!"}', 'default' => 1, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_pdf', FormSection::class, 'PDF'); - $this->addField('PDFRenderer', SelectFromArray::class, $this->__('Rendu des PDF (téléchargement)'), [ + } + + protected function _pdf() + { + $this->addSettingField('section_pdf', FormSection::class, 'PDF'); + $this->addSettingField('PDFRenderer', SelectFromArray::class, $this->__('Rendu des PDF (téléchargement)'), [ 'v2' => '{"type":"combo","datas":{"\\u00a7!\\u00a7Navigateur!\\u00a7!":"native","PDF.js":"pdfjs","PDF.js (legacy)":"pdfjs-legacy"},"default":"native","editable":true,"label":"\\u00a7!\\u00a7Rendu des PDF (t\\u00e9l\\u00e9chargement)!\\u00a7!"}', 'options' => [ 'native' => $this->__('Navigateur'), @@ -1850,11 +1356,8 @@ trait PublicationSettings 'pdfjs-legacy' => 'PDF.js (legacy)', ], 'default' => 'native', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('PDFRendererIframe', SelectFromArray::class, $this->__('Rendu des PDF (iframes)'), [ + $this->addSettingField('PDFRendererIframe', SelectFromArray::class, $this->__('Rendu des PDF (iframes)'), [ 'v2' => '{"type":"combo","datas":{"\\u00a7!\\u00a7Navigateur!\\u00a7!":"native","PDF.js":"pdfjs","PDF.js (legacy)":"pdfjs-legacy","\\u00a7!\\u00a7Ecraser en SVG!\\u00a7!":"svg"},"default":"native","editable":true,"label":"\\u00a7!\\u00a7Rendu des PDF (iframes)!\\u00a7!"}', 'options' => [ 'native' => $this->__('Navigateur'), @@ -1863,107 +1366,78 @@ trait PublicationSettings 'svg' => $this->__('Ecraser en SVG'), ], 'default' => 'native', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('PDFJSCSS', Textarea::class, 'Styles PDF.js', [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('PDFJSCSS', Textarea::class, 'Styles PDF.js', [ 'v2' => '{"type":"textarea","default":"","editable":true,"label":"Styles PDF.js"}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_slideshow', FormSection::class, $this->__('Slideshow')); - $this->addField('inlineSlideshowLibrary', SelectFromArray::class, $this->__('Librarie utilisée pour les slideshow intégrés aux pages'), [ + } + + 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'), [ 'v2' => '{"type":"combo","datas":{"Simple (\\u00a7!\\u00a7d\\u00e9faut!\\u00a7!)":"dummy","Vacheron":"vacheron"},"default":"dummy","editable":true,"grade":3,"label":"\\u00a7!\\u00a7Librarie utilis\\u00e9e pour les slideshow int\\u00e9gr\\u00e9s aux pages!\\u00a7!"}', 'options' => [ 'dummy' => 'Simple (' . $this->__('défaut') . ')', 'vacheron' => 'Vacheron', ], 'default' => 'dummy', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('popupSlideshowLibrary', SelectFromArray::class, $this->__('Librarie utilisée pour les slideshow popup'), [ + $this->addSettingField('popupSlideshowLibrary', SelectFromArray::class, $this->__('Librarie utilisée pour les slideshow popup'), [ 'v2' => '{"type":"combo","datas":{"Splide (\\u00a7!\\u00a7d\\u00e9faut!\\u00a7!)":"splide","Vacheron":"vacheron"},"default":"splide","editable":true,"grade":3,"label":"\\u00a7!\\u00a7Librarie utilis\\u00e9e pour les slideshow popup!\\u00a7!"}', 'options' => [ 'splide' => 'Splide (' . $this->__('défaut') . ')', 'vacheron' => 'Vacheron', ], 'default' => 'splide', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('slideshowCaptionSize', LongText::class, $this->__('Taille de police de la légende du diaporama'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('slideshowCaptionSize', LongText::class, $this->__('Taille de police de la légende du diaporama'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7Taille de police de la l\\u00e9gende du diaporama!\\u00a7!","hint":"\\u00a7!\\u00a7Laisser vide pour utiliser la valeur par d\\u00e9faut!\\u00a7!"}', 'hint' => $this->__('Laisser vide pour utiliser la valeur par défaut'), - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('inlineSlideshowTransitionDuration', Number::class, $this->__('Durée de la transition des diaporamas intégrés aux pages(s)'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('inlineSlideshowTransitionDuration', Number::class, $this->__('Durée de la transition des diaporamas intégrés aux pages(s)'), [ 'v2' => '{"type":"float","default":0.75,"editable":true,"label":"\\u00a7!\\u00a7Dur\\u00e9e de la transition des diaporamas int\\u00e9gr\\u00e9s aux pages(s)!\\u00a7!"}', 'default' => 0.75, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('inlineSlideshowDuration', Number::class, $this->__('Temps d\'attente des diaporamas intégrés aux pages (s)'), [ + $this->addSettingField('inlineSlideshowDuration', Number::class, $this->__('Temps d\'attente des diaporamas intégrés aux pages (s)'), [ 'v2' => '{"type":"float","default":7,"editable":true,"label":"\\u00a7!\\u00a7Temps d\'attente des diaporamas int\\u00e9gr\\u00e9s aux pages (s)!\\u00a7!"}', 'default' => 7, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_videos', FormSection::class, $this->__('Vidéos')); - $this->addField('webvideoAsLocal', Checkbox::class, $this->__('Intégrer les webvidéos en local'), [ + + } + + protected function _video() + { + $this->addSettingField('section_videos', FormSection::class, $this->__('Vidéos')); + $this->addSettingField('webvideoAsLocal', Checkbox::class, $this->__('Intégrer les webvidéos en local'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Int\\u00e9grer les webvid\\u00e9os en local!\\u00a7!"}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('mobileVideosPath', LongText::class, $this->__('Chemin vers les vidéos'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('mobileVideosPath', LongText::class, $this->__('Chemin vers les vidéos'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7Chemin vers les vid\\u00e9os!\\u00a7!","grade":5}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('brightcovePlayerId', LongText::class, $this->__('Identifiant du player Brightcove'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('brightcovePlayerId', LongText::class, $this->__('Identifiant du player Brightcove'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7Brightcove Player Id!\\u00a7!","grade":3}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('brightcovePlayerSecret', LongText::class, $this->__('Secret du player Brightcove'), [ + $this->addSettingField('brightcovePlayerSecret', LongText::class, $this->__('Secret du player Brightcove'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7Brightcove Player Secret!\\u00a7!","grade":3}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('bigPlayImage', FilesOrURL::class, $this->__('Image pour le bouton "Big Play"'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('bigPlayImage', FilesOrURL::class, $this->__('Image pour le bouton "Big Play"'), [ 'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Image pour le bouton \\"Big Play\\"!\\u00a7!","grade":3,"fileFilter":{"name":"\\u00a7!\\u00a7Images!\\u00a7! (*.svg, *.jpg, *.png, *.gif)","extensions":"*.svg;*.jpg;*.png;*.gif"}}', - 'default' => '', - 'accept' => $acceptImages, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, + 'accept' => self::$acceptImages, ]); - $this->addField('section_audio', FormSection::class, $this->__('Lecteur audio')); - $this->addField('audioPlayerTheme', SelectFromArray::class, $this->__('Apparence du lecteur audio'), [ + } + + protected function _audioplayer() + { + $this->addSettingField('section_audio', FormSection::class, $this->__('Lecteur audio')); + $this->addSettingField('audioPlayerTheme', SelectFromArray::class, $this->__('Apparence du lecteur audio'), [ 'v2' => '{"type":"combo","default":"native","editable":true,"label":"\\u00a7!\\u00a7Apparence du lecteur audio!\\u00a7!","datas":{"\\u00a7!\\u00a7Apparence native du navigateur!\\u00a7!":"native","\\u00a7!\\u00a7Zone cliquable invisible!\\u00a7!":"invisible","\\u00a7!\\u00a7Circulaire!\\u00a7!":"redbull"}}', 'options' => [ 'native' => $this->__('Apparence native du navigateur'), @@ -1972,67 +1446,50 @@ trait PublicationSettings 'twostatesicon' => $this->__('Icône à deux états'), ], 'default' => 'native', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_downloadportion', FormSection::class, $this->__('Téléchargement d\'extraits')); - $this->addField('downloadPortionPDF', FilesOrURL::class, 'PDF utilisé pour le téléchargement des extraits', [ + } + + 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', [ 'v2' => '{"type":"freefile","default":"","editable":true,"label":"PDF utilis\\u00e9 pour le t\\u00e9l\\u00e9chargement des extraits"}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('downloadPortionZoom', Integer::class, $this->__('Zoom des images extraites'), [ + $this->addSettingField('downloadPortionZoom', Integer::class, $this->__('Zoom des images extraites'), [ 'v2' => '{"type":"integer","default":8,"editable":true,"label":"\\u00a7!\\u00a7Zoom des images extraites!\\u00a7!"}', 'default' => 8, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_product_zoom', FormSection::class, $this->__('Zooms produits')); - $this->addField('product_zoom_references', FilesOrURL::class, $this->__('Références produits'), [ + } + + 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'), [ 'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7R\\u00e9f\\u00e9rences produits!\\u00a7!","grade":3,"fileFilter":{"name":"\\u00a7!\\u00a7Liste de produits!\\u00a7!","extensions":" (*.xml, *.xlsx)"},"hint":"\\u00a7!\\u00a7Fichier contenant les r\\u00e9f\\u00e9rences produits!\\u00a7!","dir":"commerce"}', 'hint' => $this->__('Fichier contenant les références produits'), - 'default' => '', 'accept' => [ 0 => '.xml', 1 => '.xlsx', ], 'destination' => 'commerce', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('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'), [ 'v2' => '{"type":"combo","datas":{"\\u00a7!\\u00a7De la droite vers la gauche!\\u00a7!":"right","\\u00a7!\\u00a7De la gauche vers la droite!\\u00a7!":"left"},"editable":true,"grade":3,"default":"right","label":"\\u00a7!\\u00a7Order des boutons!\\u00a7!"}', 'options' => [ 'right' => $this->__('De la droite vers la gauche'), 'left' => $this->__('De la gauche vers la droite'), ], 'default' => 'right', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('product_zoom_label_1', LongText::class, $this->__('Label du bouton') . ' 1', [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('product_zoom_label_1', LongText::class, $this->__('Label du bouton') . ' 1', [ 'v2' => '{"type":"text","label":"\\u00a7!\\u00a7Label du bouton!\\u00a7! 1","default":"","editable":true,"grade":3}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('product_zoom_tooltip_1', LongText::class, $this->__('Label de l\'infobulle') . ' 1', [ + $this->addSettingField('product_zoom_tooltip_1', LongText::class, $this->__('Label de l\'infobulle') . ' 1', [ 'v2' => '{"type":"text","label":"\\u00a7!\\u00a7Label de l\'infobulle!\\u00a7! 1","default":"","editable":true,"grade":3}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('product_zoom_icon_1', SelectFromArray::class, $this->__('Icône du bouton') . ' 1', [ + $this->addSettingField('product_zoom_icon_1', SelectFromArray::class, $this->__('Icône du bouton') . ' 1', [ 'v2' => '{"type":"combo","datas":{"\\u00a7!\\u00a7Aucune!\\u00a7!":"none","\\u00a7!\\u00a7Partage!\\u00a7!":"nav-share","\\u00a7!\\u00a7Ecran!\\u00a7!":"icon-site","\\u00a7!\\u00a7T\\u00e9l\\u00e9charger!\\u00a7!":"nav-download","PDF":"icon-pdf","Video":"icon-video","\\u00a7!\\u00a7Lien!\\u00a7!":"icon-link","\\u00a7!\\u00a7Code!\\u00a7!":"icon-code","\\u00a7!\\u00a7QR code!\\u00a7!":"icon-qr","\\u00a7!\\u00a7Article!\\u00a7!":"icon-article","\\u00a7!\\u00a7Panier (sac)!\\u00a7!":"nav-basket","\\u00a7!\\u00a7Panier (caddie)!\\u00a7!":"nav-cart-caddie","\\u00a7!\\u00a7Panier (wishlist)!\\u00a7!":"nav-cart-wishlist","\\u00a7!\\u00a7360\\u00b0!\\u00a7!":"icon-360","\\u00a7!\\u00a7Photo!\\u00a7!":"icon-photo"},"label":"\\u00a7!\\u00a7Ic\\u00f4ne du bouton!\\u00a7! 1","default":"click","editable":true,"grade":3}', 'options' => [ 'none' => $this->__('Aucune'), @@ -2052,11 +1509,8 @@ trait PublicationSettings 'icon-photo' => $this->__('Photo'), ], 'default' => 'none', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('product_zoom_action_1', SelectFromArray::class, $this->__('Action du bouton') . ' 1', [ + $this->addSettingField('product_zoom_action_1', SelectFromArray::class, $this->__('Action du bouton') . ' 1', [ 'v2' => '{"type":"combo","datas":{"\\u00a7!\\u00a7D\\u00e9sactiver!\\u00a7!":"disabled","\\u00a7!\\u00a7Ouvrir un lien!\\u00a7!":"link","\\u00a7!\\u00a7Ouvrir en iframe!\\u00a7!":"iframe","\\u00a7!\\u00a7Copier un contenu!\\u00a7!":"copy","\\u00a7!\\u00a7Web Vid\\u00e9o!\\u00a7!":"video","\\u00a7!\\u00a7Vid\\u00e9o!\\u00a7!":"videofile","\\u00a7!\\u00a7Vid\\u00e9o (boucle, sans contr\\u00f4le)!\\u00a7!":"videogif","\\u00a7!\\u00a7Voir une image!\\u00a7!":"image","\\u00a7!\\u00a7Ajouter au panier!\\u00a7!":"addtocart"},"label":"\\u00a7!\\u00a7Action du bouton!\\u00a7! 1","default":"disabled","editable":true,"grade":3}', 'options' => [ 'disabled' => $this->__('Désactiver'), @@ -2070,26 +1524,15 @@ trait PublicationSettings 'addtocart' => $this->__('Ajouter au panier'), ], 'default' => 'disabled', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('product_zoom_label_2', LongText::class, $this->__('Label du bouton') . ' 2', [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('product_zoom_label_2', LongText::class, $this->__('Label du bouton') . ' 2', [ 'v2' => '{"type":"text","label":"\\u00a7!\\u00a7Label du bouton!\\u00a7! 2","default":"","editable":true,"grade":3}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('product_zoom_tooltip_2', LongText::class, $this->__('Label de l\'infobulle') . ' 2', [ + $this->addSettingField('product_zoom_tooltip_2', LongText::class, $this->__('Label de l\'infobulle') . ' 2', [ 'v2' => '{"type":"text","label":"\\u00a7!\\u00a7Label de l\'infobulle!\\u00a7! 2","default":"","editable":true,"grade":3}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('product_zoom_icon_2', SelectFromArray::class, $this->__('Icône du bouton') . ' 2', [ + $this->addSettingField('product_zoom_icon_2', SelectFromArray::class, $this->__('Icône du bouton') . ' 2', [ 'v2' => '{"type":"combo","datas":{"\\u00a7!\\u00a7Aucune!\\u00a7!":"none","\\u00a7!\\u00a7Partage!\\u00a7!":"nav-share","\\u00a7!\\u00a7Ecran!\\u00a7!":"icon-site","\\u00a7!\\u00a7T\\u00e9l\\u00e9charger!\\u00a7!":"nav-download","PDF":"icon-pdf","Video":"icon-video","\\u00a7!\\u00a7Lien!\\u00a7!":"icon-link","\\u00a7!\\u00a7Code!\\u00a7!":"icon-code","\\u00a7!\\u00a7QR code!\\u00a7!":"icon-qr","\\u00a7!\\u00a7Article!\\u00a7!":"icon-article","\\u00a7!\\u00a7Panier (sac)!\\u00a7!":"nav-basket","\\u00a7!\\u00a7Panier (caddie)!\\u00a7!":"nav-cart-caddie","\\u00a7!\\u00a7Panier (wishlist)!\\u00a7!":"nav-cart-wishlist","\\u00a7!\\u00a7360\\u00b0!\\u00a7!":"icon-360","\\u00a7!\\u00a7Photo!\\u00a7!":"icon-photo"},"label":"\\u00a7!\\u00a7Ic\\u00f4ne du bouton!\\u00a7! 2","default":"click","editable":true,"grade":3}', 'options' => [ 'none' => $this->__('Aucune'), @@ -2109,11 +1552,8 @@ trait PublicationSettings 'icon-photo' => $this->__('Photo'), ], 'default' => 'none', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('product_zoom_action_2', SelectFromArray::class, $this->__('Action du bouton') . ' 2', [ + $this->addSettingField('product_zoom_action_2', SelectFromArray::class, $this->__('Action du bouton') . ' 2', [ 'v2' => '{"type":"combo","datas":{"\\u00a7!\\u00a7D\\u00e9sactiver!\\u00a7!":"disabled","\\u00a7!\\u00a7Ouvrir un lien!\\u00a7!":"link","\\u00a7!\\u00a7Ouvrir en iframe!\\u00a7!":"iframe","\\u00a7!\\u00a7Copier un contenu!\\u00a7!":"copy","\\u00a7!\\u00a7Web Vid\\u00e9o!\\u00a7!":"video","\\u00a7!\\u00a7Vid\\u00e9o!\\u00a7!":"videofile","\\u00a7!\\u00a7Vid\\u00e9o (boucle, sans contr\\u00f4le)!\\u00a7!":"videogif","\\u00a7!\\u00a7Voir une image!\\u00a7!":"image","\\u00a7!\\u00a7Ajouter au panier!\\u00a7!":"addtocart"},"label":"\\u00a7!\\u00a7Action du bouton!\\u00a7! 2","default":"disabled","editable":true,"grade":3}', 'options' => [ 'disabled' => $this->__('Désactiver'), @@ -2127,26 +1567,15 @@ trait PublicationSettings 'addtocart' => $this->__('Ajouter au panier'), ], 'default' => 'disabled', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('product_zoom_label_3', LongText::class, $this->__('Label du bouton') . ' 3', [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('product_zoom_label_3', LongText::class, $this->__('Label du bouton') . ' 3', [ 'v2' => '{"type":"text","label":"\\u00a7!\\u00a7Label du bouton!\\u00a7! 3","default":"","editable":true,"grade":3}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('product_zoom_tooltip_3', LongText::class, $this->__('Label de l\'infobulle') . ' 3', [ + $this->addSettingField('product_zoom_tooltip_3', LongText::class, $this->__('Label de l\'infobulle') . ' 3', [ 'v2' => '{"type":"text","label":"\\u00a7!\\u00a7Label de l\'infobulle!\\u00a7! 3","default":"","editable":true,"grade":3}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('product_zoom_icon_3', SelectFromArray::class, $this->__('Icône du bouton') . ' 3', [ + $this->addSettingField('product_zoom_icon_3', SelectFromArray::class, $this->__('Icône du bouton') . ' 3', [ 'v2' => '{"type":"combo","datas":{"\\u00a7!\\u00a7Aucune!\\u00a7!":"none","\\u00a7!\\u00a7Partage!\\u00a7!":"nav-share","\\u00a7!\\u00a7Ecran!\\u00a7!":"icon-site","\\u00a7!\\u00a7T\\u00e9l\\u00e9charger!\\u00a7!":"nav-download","PDF":"icon-pdf","Video":"icon-video","\\u00a7!\\u00a7Lien!\\u00a7!":"icon-link","\\u00a7!\\u00a7Code!\\u00a7!":"icon-code","\\u00a7!\\u00a7QR code!\\u00a7!":"icon-qr","\\u00a7!\\u00a7Article!\\u00a7!":"icon-article","\\u00a7!\\u00a7Panier (sac)!\\u00a7!":"nav-basket","\\u00a7!\\u00a7Panier (caddie)!\\u00a7!":"nav-cart-caddie","\\u00a7!\\u00a7Panier (wishlist)!\\u00a7!":"nav-cart-wishlist","\\u00a7!\\u00a7360\\u00b0!\\u00a7!":"icon-360","\\u00a7!\\u00a7Photo!\\u00a7!":"icon-photo"},"label":"\\u00a7!\\u00a7Ic\\u00f4ne du bouton!\\u00a7! 3","default":"click","editable":true,"grade":3}', 'options' => [ 'none' => $this->__('Aucune'), @@ -2166,11 +1595,8 @@ trait PublicationSettings 'icon-photo' => $this->__('Photo'), ], 'default' => 'none', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('product_zoom_action_3', SelectFromArray::class, $this->__('Action du bouton') . ' 3', [ + $this->addSettingField('product_zoom_action_3', SelectFromArray::class, $this->__('Action du bouton') . ' 3', [ 'v2' => '{"type":"combo","datas":{"\\u00a7!\\u00a7D\\u00e9sactiver!\\u00a7!":"disabled","\\u00a7!\\u00a7Ouvrir un lien!\\u00a7!":"link","\\u00a7!\\u00a7Ouvrir en iframe!\\u00a7!":"iframe","\\u00a7!\\u00a7Copier un contenu!\\u00a7!":"copy","\\u00a7!\\u00a7Web Vid\\u00e9o!\\u00a7!":"video","\\u00a7!\\u00a7Vid\\u00e9o!\\u00a7!":"videofile","\\u00a7!\\u00a7Vid\\u00e9o (boucle, sans contr\\u00f4le)!\\u00a7!":"videogif","\\u00a7!\\u00a7Voir une image!\\u00a7!":"image","\\u00a7!\\u00a7Ajouter au panier!\\u00a7!":"addtocart"},"label":"\\u00a7!\\u00a7Action du bouton!\\u00a7! 3","default":"disabled","editable":true,"grade":3}', 'options' => [ 'disabled' => $this->__('Désactiver'), @@ -2184,63 +1610,44 @@ trait PublicationSettings 'addtocart' => $this->__('Ajouter au panier'), ], 'default' => 'disabled', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('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'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"grade":"3","label":"\\u00a7!\\u00a7Activer le bouton de partage!\\u00a7!"}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('product_share_link', SelectFromArray::class, $this->__('Lien de partage'), [ + $this->addSettingField('product_share_link', SelectFromArray::class, $this->__('Lien de partage'), [ 'v2' => '{"type":"combo","default":"product","editable":true,"label":"\\u00a7!\\u00a7Lien de partage!\\u00a7!","datas":{"\\u00a7!\\u00a7Lien du produit!\\u00a7!":"product","\\u00a7!\\u00a7Lien vers la page du fluidbook!\\u00a7!":"page"}}', 'options' => [ 'product' => $this->__('Lien du produit'), 'page' => $this->__('Lien vers la page du fluidbook'), ], 'default' => 'product', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('product_email_title', LongText::class, $this->__('Titre de l\'email') . ' "' . $this->__('Envoyer à un ami') . '"', [ + $this->addSettingField('product_email_title', LongText::class, $this->__('Titre de l\'email') . ' "' . $this->__('Envoyer à un ami') . '"', [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7Titre de l\'email!\\u00a7! \\"\\u00a7!\\u00a7Envoyer \\u00e0 un ami!\\u00a7!\\""}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('product_email_body', Textarea::class, $this->__('Corps de l\'email') . ' "' . $this->__('Envoyer à un ami') . '"', [ + $this->addSettingField('product_email_body', Textarea::class, $this->__('Corps de l\'email') . ' "' . $this->__('Envoyer à un ami') . '"', [ 'v2' => '{"type":"textarea","default":"","editable":true,"label":"\\u00a7!\\u00a7Corps de l\'email!\\u00a7! \\"\\u00a7!\\u00a7Envoyer \\u00e0 un ami!\\u00a7!\\""}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('product_tweet', Textarea::class, $this->__('Contenu Partage court'), [ + $this->addSettingField('product_tweet', Textarea::class, $this->__('Contenu Partage court'), [ 'v2' => '{"type":"textarea","default":"%short%","editable":true,"label":"\\u00a7!\\u00a7Contenu Partage court!\\u00a7!","hint":"\\u00a7!\\u00a7Contenu du partag\\u00e9 sur les partages courts!\\u00a7!"}', 'hint' => $this->__('Contenu du partagé sur les partages courts'), 'default' => '%short%', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_accessibility', FormSection::class, $this->__('Accessibilité')); - $this->addField('audiodescriptionTexts', FilesOrURL::class, $this->__('Contenus textuels pour l\'audiodescription ou les lecteurs d\'écran'), [ + + } + + 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'), [ 'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Contenus textuels pour l\'audiodescription ou les lecteurs d\'\\u00e9cran!\\u00a7!","fileFilter":{"name":"\\u00a7!\\u00a7Fichier Excel!\\u00a7! (.xlsx)","extensions":"*.xlsx"}}', - 'default' => '', 'accept' => [ 0 => '.xlsx', ], - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('audiodescriptionVoice', SelectFromArray::class, $this->__('Voix pour l\'audiodescription'), [ + $this->addSettingField('audiodescriptionVoice', SelectFromArray::class, $this->__('Voix pour l\'audiodescription'), [ 'v2' => '{"type":"combo","datasFunc":"wsDroits::getTTSVoices()","datas":{"":"","Festival (en-US)":"festival:voice_cmu_us_slt_arctic_hts","ReadSpeaker Sophie (en-US)":"readspeaker:Sophie\\/en_us","ReadSpeaker Marc (en-US)":"readspeaker:Marc\\/en_us","Azure Denise (fr-FR)":"azuretts:fr-FR\\/Female\\/fr-FR-DeniseNeural","Azure Henry (fr-FR)":"azuretts:fr-FR\\/Male\\/fr-FR-MaleNeural"},"grade":5,"editable":true,"default":"","label":"\\u00a7!\\u00a7Voix pour l\'audiodescription!\\u00a7!"}', 'options' => [ '' => '', @@ -2250,93 +1657,72 @@ trait PublicationSettings 'azuretts:fr-FR/Female/fr-FR-DeniseNeural' => 'Azure Denise (fr-FR)', 'azuretts:fr-FR/Male/fr-FR-MaleNeural' => 'Azure Henry (fr-FR)', ], - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_splash', FormSection::class, $this->__('Ecran de chargement')); - $this->addField('splashImage', FilesOrURL::class, $this->__('Image'), [ + + } + + protected function _splashScreen() + { + $this->addSettingField('section_splash', FormSection::class, $this->__('Ecran de chargement')); + $this->addSettingField('splashImage', FilesOrURL::class, $this->__('Image'), [ 'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Image!\\u00a7!","grade":3,"fileFilter":{"name":"\\u00a7!\\u00a7Images!\\u00a7! (*.jpg, *.png)","extensions":"*.jpg;*.jpeg;*.png"}}', - 'default' => '', 'accept' => [ 0 => '.jpg', 1 => '.jpeg', 2 => '.png', ], - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('splashURL', LongText::class, $this->__('URL'), [ + $this->addSettingField('splashURL', LongText::class, $this->__('URL'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7URL!\\u00a7!","grade":3}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('splashTarget', SelectFromArray::class, $this->__('Ouvrir le lien'), [ + $this->addSettingField('splashTarget', SelectFromArray::class, $this->__('Ouvrir le lien'), [ 'v2' => '{"type":"combo","datas":{"\\u00a7!\\u00a7Dans la fen\\u00eatre courrante!\\u00a7!":"_self","\\u00a7!\\u00a7Dans un nouvel onglet!\\u00a7!":"_blank"},"default":"_self","editable":true,"label":"\\u00a7!\\u00a7Ouvrir le lien!\\u00a7!","grade":3}', 'options' => [ '_self' => $this->__('Dans la fenêtre courrante'), '_blank' => $this->__('Dans un nouvel onglet'), ], 'default' => '_self', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('splashMinimalTime', Number::class, $this->__('Temps minimal d\'affichage'), [ + $this->addSettingField('splashMinimalTime', Number::class, $this->__('Temps minimal d\'affichage'), [ 'v2' => '{"type":"float","default":1,"editable":true,"label":"\\u00a7!\\u00a7Temps minimal d\'affichage!\\u00a7!","grade":3}', 'default' => 1, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_notes', FormSection::class, $this->__('Notes')); - $this->addField('notes', Checkbox::class, 'Activer les notes', [ + + } + + protected function _notes() + { + $this->addSettingField('section_notes', FormSection::class, $this->__('Notes')); + $this->addSettingField('notes', Checkbox::class, 'Activer les notes', [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"Activer les notes","grade":3}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_articles', FormSection::class, $this->__('Articles')); - $this->addField('articlesFile', FilesOrURL::class, 'Articles', [ + } + + protected function _articles() + { + $this->addSettingField('section_articles', FormSection::class, $this->__('Articles')); + $this->addSettingField('articlesFile', FilesOrURL::class, 'Articles', [ 'v2' => '{"type":"freefile","default":"","editable":true,"label":"Articles","grade":3,"fileFilter":{"name":"\\u00a7!\\u00a7Liste d\'articles!\\u00a7! (*.xml)","extensions":"*.xml"}}', - 'default' => '', 'accept' => [ 0 => '.xml', ], - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('articlesImages', FilesOrURL::class, $this->__('Images des articles'), [ + $this->addSettingField('articlesImages', FilesOrURL::class, $this->__('Images des articles'), [ 'v2' => '{"type":"freefile","label":"\\u00a7!\\u00a7Images des articles!\\u00a7!","default":"","hint":"\\u00a7!\\u00a7Les noms des fichiers doivent \\u00eatre les m\\u00eame que ceux des balises du XML!\\u00a7!","editable":true,"grade":3,"dir":"articles","multiple":true}', 'hint' => $this->__('Les noms des fichiers doivent être les même que ceux des balises du XML'), - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('articlesShare', Checkbox::class, $this->__('Activer le partage'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('articlesShare', Checkbox::class, $this->__('Activer le partage'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Activer le partage!\\u00a7!","grade":3}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('articlesPrint', Checkbox::class, $this->__('Activer l\'impression'), [ + $this->addSettingField('articlesPrint', Checkbox::class, $this->__('Activer l\'impression'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Activer l\'impression!\\u00a7!","grade":3}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('articlesStyle', SelectFromArray::class, $this->__('Style'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('articlesStyle', SelectFromArray::class, $this->__('Style'), [ 'v2' => '{"type":"combo","default":true,"editable":true,"label":"\\u00a7!\\u00a7Style!\\u00a7!","grade":3,"datas":{"D\\u00e9faut":"default","Atlantic":"atlantic","Harmonie Mutuelle":"harmonie-mutuelle","Business Immo":"business-immo"}}', 'options' => [ 'default' => 'Défaut', @@ -2345,11 +1731,8 @@ trait PublicationSettings 'business-immo' => 'Business Immo', ], 'default' => "default", - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('articlesFont', SelectFromArray::class, $this->__('Police des articles'), [ + $this->addSettingField('articlesFont', SelectFromArray::class, $this->__('Police des articles'), [ 'v2' => '{"type":"combo","label":"\\u00a7!\\u00a7Police des articles!\\u00a7!","default":"OpenSans","datas":{"Open Sans (d\\u00e9faut)":"OpenSans","Montserrat":"Montserrat","Arial, Helvetica, sans-serif (police syst\\u00e8me)":"Arial","Police syst\\u00e8me sans-serif":"sans-serif"},"editable":true,"grade":3}', 'options' => [ 'OpenSans' => 'Open Sans (défaut)', @@ -2358,32 +1741,30 @@ trait PublicationSettings 'sans-serif' => 'Police système sans-serif', ], 'default' => 'OpenSans', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_archives', FormSection::class, $this->__('Archives')); - $this->addField('externalArchives', FilesOrURL::class, $this->__('Archives'), [ + + } + + protected function _archives() + { + $this->addSettingField('section_archives', FormSection::class, $this->__('Archives')); + $this->addSettingField('externalArchives', FilesOrURL::class, $this->__('Archives'), [ 'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Archives!\\u00a7!","grade":3,"fileFilter":{"name":"\\u00a7!\\u00a7Images!\\u00a7! (*.jpg, *.png)","extensions":"*.jpg;*.jpeg;*.png"}}', - 'default' => '', 'accept' => [ 0 => '.jpg', 1 => '.jpeg', 2 => '.png', ], - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('archivesLabel', LongText::class, $this->__('Label'), [ + $this->addSettingField('archivesLabel', LongText::class, $this->__('Label'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7Label!\\u00a7!","grade":5}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_form', FormSection::class, $this->__('Formulaire')); - $this->addField('form', SelectFromArray::class, $this->__('Formulaire'), [ + } + + protected function _form() + { + $this->addSettingField('section_form', FormSection::class, $this->__('Formulaire')); + $this->addSettingField('form', SelectFromArray::class, $this->__('Formulaire'), [ 'v2' => '{"type":"combo","default":"","editable":true,"grade":5,"label":"\\u00a7!\\u00a7Formulaire!\\u00a7!","datas":{"\\u00a7!\\u00a7Aucun!\\u00a7!":"","Bulle Groupe":"bulle","Bourbon \\/ Suggestions":"bourbon","Avery":"avery"}}', 'options' => [ '' => $this->__('Aucun'), @@ -2391,42 +1772,34 @@ trait PublicationSettings 'bourbon' => 'Bourbon / Suggestions', 'avery' => 'Avery', ], - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_privacy', FormSection::class, $this->__('Respect de la vie privée')); - $this->addField('cookieConsent', Checkbox::class, $this->__('Message cookie'), [ + } + + protected function _privacy() + { + $this->addSettingField('section_privacy', FormSection::class, $this->__('Respect de la vie privée')); + $this->addSettingField('cookieConsent', Checkbox::class, $this->__('Message cookie'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Message cookie!\\u00a7!"}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('cookieConsentMessage', Textarea::class, $this->__('Texte du consentement'), [ + $this->addSettingField('cookieConsentMessage', Textarea::class, $this->__('Texte du consentement'), [ 'v2' => '{"type":"textarea","default":"","editable":true,"label":"\\u00a7!\\u00a7Texte du consentement!\\u00a7!"}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('cookieConsentAutoclose', Integer::class, $this->__('Masquer automatiquement après x secondes'), [ + $this->addSettingField('cookieConsentAutoclose', Integer::class, $this->__('Masquer automatiquement après x secondes'), [ 'v2' => '{"type":"integer","default":0,"editable":true,"label":"\\u00a7!\\u00a7Masquer automatiquement apr\\u00e8s x secondes!\\u00a7!"}', 'default' => 0, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_basket', FormSection::class, $this->__('Panier')); - $this->addField('basket', Checkbox::class, $this->__('Panier activé'), [ + } + + protected function _cart() + { + + $this->addSettingField('section_basket', FormSection::class, $this->__('Panier')); + $this->addSettingField('basket', Checkbox::class, $this->__('Panier activé'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Panier activ\\u00e9!\\u00a7!","grade":5}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('basketManager', SelectFromArray::class, $this->__('Manager de panier'), [ + $this->addSettingField('basketManager', SelectFromArray::class, $this->__('Manager de panier'), [ 'v2' => '{"type":"combo","default":"classic","editable":true,"label":"\\u00a7!\\u00a7Manager de panier!\\u00a7!","datas":{"\\u00a7!\\u00a7Classic!\\u00a7!":"com.fluidbook.player.basket.BasketManager","Grdf":"com.fluidbook.player.basket.custom.grdf.GrdfBasketManager","Grdf 2013":"com.fluidbook.player.basket.custom.grdf.grdf2013.GrdfBasketManager2013","Grdf 2015":"com.fluidbook.player.basket.custom.grdf.grdf2015.GrdfBasketManager2015","Essilor":"com.fluidbook.player.basket.custom.essilor.EssilorBasketManager","Essilor Recap":"com.fluidbook.player.basket.custom.essilorrecap.EssilorRecapBasketManager","Wesco Ventes":"com.fluidbook.player.basket.custom.wesco.WescoBasketManager","Atlantic Download":"com.fluidbook.player.basket.custom.atlantic.AtlanticDownloadBasketManager","Remarkable":"Remarkable","Mopec":"Mopec","Puma":"Puma","MIF":"MIF","Flexipan":"Flexipan","Zoom + lien produit (d\\u00e9pr\\u00e9ci\\u00e9, utiliser la fonctionnalit\\u00e9 \\"Zoom produits\\")":"ZoomProductLink","Wishlist Jou\\u00e9club":"JoueclubWishlist","GrandVision":"GrandVision","Grand Pavois":"GrandPavois","Wishlist Jou\\u00e9club No\\u00ebl 2021":"JoueclubWishlist2021","Thiriet":"Thiriet","CFOC":"CFOC","Bastide":"Bastide"},"grade":5}', 'options' => [ 'com.fluidbook.player.basket.BasketManager' => $this->__('Classic'), @@ -2453,12 +1826,9 @@ trait PublicationSettings 'Bastide' => 'Bastide', ], 'default' => 'com.fluidbook.player.basket.BasketManager', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('cartIcon', SelectFromArray::class, $this->__('Icône'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('cartIcon', SelectFromArray::class, $this->__('Icône'), [ 'v2' => '{"type":"combo","datas":{"\\u00a7!\\u00a7Sac!\\u00a7!":"nav-basket","\\u00a7!\\u00a7Caddie!\\u00a7!":"nav-cart-caddie","\\u00a7!\\u00a7Wishlist!\\u00a7!":"nav-cart-wishlist"},"default":"nav-basket","label":"\\u00a7!\\u00a7Ic\\u00f4ne!\\u00a7!","editable":true,"grade":5}', 'options' => [ 'nav-basket' => $this->__('Sac'), @@ -2466,239 +1836,161 @@ trait PublicationSettings 'nav-cart-wishlist' => $this->__('Wishlist'), ], 'default' => 'nav-basket', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('cartLinkAppearance', SelectFromArray::class, $this->__('Apparence des liens panier'), [ + $this->addSettingField('cartLinkAppearance', SelectFromArray::class, $this->__('Apparence des liens panier'), [ 'v2' => '{"type":"combo","default":"link","editable":true,"label":"\\u00a7!\\u00a7Apparence des liens panier!\\u00a7!","grade":3,"datas":{"\\u00a7!\\u00a7Lien!\\u00a7!":"link","\\u00a7!\\u00a7Boutons + et - avec overlay!\\u00a7!":"overlay"}}', 'options' => [ 'link' => $this->__('Lien'), 'overlay' => $this->__('Boutons + et - avec overlay'), ], 'default' => 'link', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('basketReferences', FilesOrURL::class, $this->__('Références produits'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('basketReferences', FilesOrURL::class, $this->__('Références produits'), [ 'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7R\\u00e9f\\u00e9rences produits!\\u00a7!","grade":3,"fileFilter":{"name":"\\u00a7!\\u00a7Liste de produits!\\u00a7!","extensions":" (*.xml, *.xlsx)"},"hint":"\\u00a7!\\u00a7Fichier contenant les r\\u00e9f\\u00e9rences produits!\\u00a7!","dir":"commerce"}', 'hint' => $this->__('Fichier contenant les références produits'), - 'default' => '', 'accept' => [ 0 => '.xml', 1 => '.xlsx', ], 'destination' => 'commerce', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('basketImages', FilesOrURL::class, $this->__('Images des produits'), [ + $this->addSettingField('basketImages', FilesOrURL::class, $this->__('Images des produits'), [ 'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Images des produits!\\u00a7!","grade":3,"multiple":true,"dir":"commerce"}', - 'default' => '', 'destination' => 'commerce', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('cartHeaderImage', FilesOrURL::class, $this->__('Header panier'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('cartHeaderImage', FilesOrURL::class, $this->__('Header panier'), [ 'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Header panier!\\u00a7!","grade":3,"fileFilter":{"name":"\\u00a7!\\u00a7Images!\\u00a7! (*.jpg, *.png)","extensions":"*.jpg;*.jpeg;*.png"},"dir":"commerce"}', - 'default' => '', 'accept' => [ 0 => '.jpg', 1 => '.jpeg', 2 => '.png', ], 'destination' => 'commerce', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('cartHeaderMobileImage', FilesOrURL::class, $this->__('Header panier (mobile)'), [ + $this->addSettingField('cartHeaderMobileImage', FilesOrURL::class, $this->__('Header panier (mobile)'), [ 'v2' => '{"type":"freefile","default":"","editable":true,"label":"\\u00a7!\\u00a7Header panier (mobile)!\\u00a7!","grade":3,"fileFilter":{"name":"\\u00a7!\\u00a7Images!\\u00a7! (*.jpg, *.png)","extensions":"*.jpg;*.jpeg;*.png"},"dir":"commerce"}', - 'default' => '', 'accept' => [ 0 => '.jpg', 1 => '.jpeg', 2 => '.png', ], 'destination' => 'commerce', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('cartExtraSettings', Textarea::class, $this->__('Paramètres panier'), [ + $this->addSettingField('cartExtraSettings', Textarea::class, $this->__('Paramètres panier'), [ 'v2' => '{"type":"textarea","default":"","editable":true,"label":"\\u00a7!\\u00a7Param\\u00e8tres panier!\\u00a7!","grade":3}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_offline', FormSection::class, $this->__('Version offline')); - $this->addField('offlineTitle', LongText::class, $this->__('Titre de l\'application'), [ + } + + protected function _offline() + { + $this->addSettingField('section_offline', FormSection::class, $this->__('Version offline')); + $this->addSettingField('offlineTitle', LongText::class, $this->__('Titre de l\'application'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7Titre de l\'application!\\u00a7!"}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('offlineLink', LongText::class, $this->__('URL du Fluidbook'), [ + $this->addSettingField('offlineLink', LongText::class, $this->__('URL du Fluidbook'), [ 'v2' => '{"type":"text","default":"http:\\/\\/","editable":true,"label":"\\u00a7!\\u00a7URL du Fluidbook!\\u00a7!","hint":"\\u00a7!\\u00a7URL du fluidbook utilis\\u00e9e pour la version Offline (CD-ROM, cl\\u00e9 USB, Ex\\u00e9cutables)!\\u00a7!"}', 'hint' => $this->__('URL du fluidbook utilisée pour la version Offline (CD-ROM, clé USB, Exécutables)'), 'default' => 'http://', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('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'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7Chemin d\'installation par d\\u00e9faut!\\u00a7!","hint":"\\u00a7!\\u00a7Par d\\u00e9faut!\\u00a7!: %LOCALAPPDATA%\\/%title%"}', 'hint' => $this->__('Par défaut') . ': %LOCALAPPDATA%/%title%', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('offlineWindowsProfilePath', LongText::class, $this->__('Répertoire de stockage du profile'), [ + $this->addSettingField('offlineWindowsProfilePath', LongText::class, $this->__('Répertoire de stockage du profile'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7R\\u00e9pertoire de stockage du profile!\\u00a7!","hint":"\\u00a7!\\u00a7Par d\\u00e9faut!\\u00a7!: %LOCALAPPDATA%\\/%title%"}', 'hint' => $this->__('Par défaut') . ': %LOCALAPPDATA%/%title%', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('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'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Activer le menu d\'impression avanc\\u00e9e!\\u00a7!"}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('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'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Activer la console de d\\u00e9buggage!\\u00a7!"}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_mobilefirst', FormSection::class, $this->__('Mobile first')); - $this->addField('mobilefirstFluidbookId', LongText::class, 'Identifiant du fluidbook "Mobile first"', [ + + } + + protected function _mobileFirst() + { + $this->addSettingField('section_mobilefirst', FormSection::class, $this->__('Mobile first')); + $this->addSettingField('mobilefirstFluidbookId', LongText::class, 'Identifiant du fluidbook "Mobile first"', [ 'v2' => '{"type":"text","default":"","editable":true,"label":"Identifiant du fluidbook \\"Mobile first\\"","grade":5}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('mobilefirstBreakpoint', LongText::class, 'Breakpoint du passage à la version "Mobile first" (en pixels)', [ + $this->addSettingField('mobilefirstBreakpoint', LongText::class, 'Breakpoint du passage à la version "Mobile first" (en pixels)', [ 'v2' => '{"type":"text","default":"640","editable":true,"label":"Breakpoint du passage \\u00e0 la version \\"Mobile first\\" (en pixels)","grade":5}', 'default' => '640', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_secure', FormSection::class, $this->__('Sécurisation')); - $this->addField('secureURL', LongText::class, $this->__('URL de sécurisation'), [ + + } + + protected function _secure() + { + $this->addSettingField('section_secure', FormSection::class, $this->__('Sécurisation')); + $this->addSettingField('secureURL', LongText::class, $this->__('URL de sécurisation'), [ 'v2' => '{"type":"text","default":"http:\\/\\/","editable":true,"label":"\\u00a7!\\u00a7URL de s\\u00e9curisation!\\u00a7!","grade":5,"hint":"\\u00a7!\\u00a7URL int\\u00e9rrog\\u00e9 pour v\\u00e9rifier si le visiteur \\u00e0 les droits pour consulter la publication!\\u00a7!"}', 'hint' => $this->__('URL interrogée pour vérifier si le visiteur à les droits pour consulter la publication'), 'default' => 'http://', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('secureURLRedirect', LongText::class, $this->__('Redirection'), [ + $this->addSettingField('secureURLRedirect', LongText::class, $this->__('Redirection'), [ 'v2' => '{"type":"text","default":"http:\\/\\/","editable":true,"label":"\\u00a7!\\u00a7Redirection!\\u00a7!","grade":5,"hint":"\\u00a7!\\u00a7Si l\'authentification \\u00e9choue, redirection vers cette adresse!\\u00a7!"}', 'hint' => $this->__('Si l\'authentification échoue, redirection vers cette adresse'), 'default' => 'http://', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('secureClientSidePassword', FilesOrURL::class, 'Sécurisation par mot de passe côté client', [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('secureClientSidePassword', FilesOrURL::class, 'Sécurisation par mot de passe côté client', [ 'v2' => '{"type":"freefile","label":"S\\u00e9curisation par mot de passe c\\u00f4t\\u00e9 client","editable":true,"default":"","grade":3,"fileFilter":{"name":"\\u00a7!\\u00a7Fichier HTML!\\u00a7! (*.html)","extensions":"*.html"}}', - 'default' => '', 'accept' => [ 0 => '.html', ], - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('secureClientSidePasswordCredentials', Textarea::class, 'Utilisateurs / mots de passe', [ + $this->addSettingField('secureClientSidePasswordCredentials', Textarea::class, 'Utilisateurs / mots de passe', [ 'v2' => '{"type":"textarea","label":"Utilisateurs \\/ mots de passe","editable":true,"default":"","grade":3,"hint":"Format user:password par ligne"}', 'hint' => 'Format user:password par ligne', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('preventRightClick', Checkbox::class, $this->__('Essayer d\'empêcher le clic droit'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('preventRightClick', Checkbox::class, $this->__('Essayer d\'empêcher le clic droit'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Essayer d\'emp\\u00eacher le clic droit!\\u00a7!","grade":1}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('restrictPrintDownload', LongText::class, $this->__('Paramètre de l\'url permettant de désactiver la restriction (non vide pour activer les restrictions)'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('restrictPrintDownload', LongText::class, $this->__('Paramètre de l\'url permettant de désactiver la restriction (non vide pour activer les restrictions)'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7Param\\u00e8tre de l\'url permettant de d\\u00e9sactiver la restriction (non vide pour activer les restrictions)!\\u00a7!","grade":5,"hint":"\\u00a7!\\u00a7Ne pas indiquer le ?!\\u00a7!"}', 'hint' => $this->__('Ne pas indiquer le ?'), - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('restrictPrint', Checkbox::class, $this->__('Restreindre l\'impression'), [ + $this->addSettingField('restrictPrint', Checkbox::class, $this->__('Restreindre l\'impression'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Restreindre l\'impression!\\u00a7!","grade":5}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('restrictDownload', Checkbox::class, $this->__('Restreindre le téléchargement du pdf'), [ + $this->addSettingField('restrictDownload', Checkbox::class, $this->__('Restreindre le téléchargement du pdf'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Restreindre le t\\u00e9l\\u00e9chargement du pdf!\\u00a7!","grade":5}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('restrictSendBookmark', Checkbox::class, $this->__('Restreindre l\'envoi de marques-pages'), [ + $this->addSettingField('restrictSendBookmark', Checkbox::class, $this->__('Restreindre l\'envoi de marques-pages'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Restreindre l\'envoi de marques-pages!\\u00a7!","grade":5}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('recaptcha', LongText::class, $this->__('Activer reCATPCHA v3 (clé du site)'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('recaptcha', LongText::class, $this->__('Activer reCATPCHA v3 (clé du site)'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7Activer reCATPCHA v3 (cl\\u00e9 du site)!\\u00a7!"}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_multibrochure', FormSection::class, $this->__('Multibrochure')); - $this->addField('home', LongText::class, $this->__('Accueil de l\'interface multibrochure'), [ + } + + protected function _multibrochure() + { + $this->addSettingField('section_multibrochure', FormSection::class, $this->__('Multibrochure')); + $this->addSettingField('home', LongText::class, $this->__('Accueil de l\'interface multibrochure'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7Accueil de l\'interface multibrochure!\\u00a7!","grade":5}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('country', LongText::class, $this->__('Pays de la brochure'), [ + $this->addSettingField('country', LongText::class, $this->__('Pays de la brochure'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7Pays de la brochure!\\u00a7!"}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('multilangDisplay', SelectFromArray::class, $this->__('Affichage'), [ + $this->addSettingField('multilangDisplay', SelectFromArray::class, $this->__('Affichage'), [ 'v2' => '{"type":"combo","default":"lang","editable":true,"label":"\\u00a7!\\u00a7Affichage!\\u00a7!","datas":{"\\u00a7!\\u00a7Langue!\\u00a7!":"lang","\\u00a7!\\u00a7Langue!\\u00a7! (\\u00a7!\\u00a7Pays!\\u00a7!)":"lang_country","\\u00a7!\\u00a7Pays!\\u00a7! (\\u00a7!\\u00a7Langue!\\u00a7!)":"country_lang"}}', 'options' => [ 'lang' => $this->__('Langue'), @@ -2706,432 +1998,283 @@ trait PublicationSettings 'country_lang' => $this->__('Pays') . ' (' . $this->__('Langue') . ')', ], 'default' => 'lang', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('multilang', Textarea::class, $this->__('Langues'), [ + $this->addSettingField('multilang', Textarea::class, $this->__('Langues'), [ 'v2' => '{"type":"textarea","default":"","editable":true,"label":"\\u00a7!\\u00a7Langues!\\u00a7!","hint":"\\u00a7!\\u00a7Code langue!\\u00a7!,\\u00a7!\\u00a7Code pays!\\u00a7!,\\u00a7!\\u00a7URL!\\u00a7!"}', 'hint' => $this->__('Code langue') . ',' . $this->__('Code pays') . ',' . $this->__('URL'), - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_plv', FormSection::class, $this->__('Mode PLV')); - $this->addField('plv', Checkbox::class, $this->__('Activer le mode PLV'), [ + + } + + protected function _plv() + { + $this->addSettingField('section_plv', FormSection::class, $this->__('Mode PLV')); + $this->addSettingField('plv', Checkbox::class, $this->__('Activer le mode PLV'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Activer le mode PLV!\\u00a7!","grade":3}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('plvTimer', Integer::class, $this->__('Temps'), [ + $this->addSettingField('plvTimer', Integer::class, $this->__('Temps'), [ 'v2' => '{"type":"integer","min":1,"max":60,"default":5,"editable":true,"label":"\\u00a7!\\u00a7Temps!\\u00a7!","grade":3}', 'min' => 1, 'max' => 60, 'default' => 5, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('plvMode', SelectFromArray::class, $this->__('Arrivé à la dernière page'), [ + $this->addSettingField('plvMode', SelectFromArray::class, $this->__('Arrivé à la dernière page'), [ 'v2' => '{"type":"combo","default":"first","editable":true,"label":"\\u00a7!\\u00a7Arriv\\u00e9 \\u00e0 la derni\\u00e8re page!\\u00a7!","grade":3,"datas":{"\\u00a7!\\u00a7Remonter vers la premi\\u00e8re page!\\u00a7!":"back","\\u00a7!\\u00a7Recommencer \\u00e0 la premi\\u00e8re page!\\u00a7!":"first"}}', 'options' => [ 'back' => $this->__('Remonter vers la première page'), 'first' => $this->__('Recommencer à la première page'), ], 'default' => 'first', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_theme', FormSection::class, $this->__('Options du thème')); - $this->addField('themeEnableAfterSearch', Checkbox::class, $this->__('Afficher l\'image supplémentaire à droite du moteur de recherche'), [ + + } + + 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'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Afficher l\'image suppl\\u00e9mentaire \\u00e0 droite du moteur de recherche!\\u00a7!","grade":3}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_package', FormSection::class, $this->__('Option d\'export')); - $this->addField('htmlExtension', LongText::class, $this->__('Extension des fichiers html'), [ + } + + protected function _export() + { + $this->addSettingField('section_package', FormSection::class, $this->__('Option d\'export')); + $this->addSettingField('htmlExtension', LongText::class, $this->__('Extension des fichiers html'), [ 'v2' => '{"type":"text","default":"html","editable":true,"label":"\\u00a7!\\u00a7Extension des fichiers html!\\u00a7!","grade":5,"hint":"\\u00a7!\\u00a7Ex : php, htm, html, phtml, asp, aspx!\\u00a7!"}', 'hint' => $this->__('Ex : php, htm, html, phtml, asp, aspx'), 'default' => 'html', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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'), [ 'v2' => '{"type":"text","default":"html","editable":false,"label":"\\u00a7!\\u00a7Extension des fichiers html r\\u00e9ellement appliqu\\u00e9e au fluidbook!\\u00a7!","grade":5,"hint":"\\u00a7!\\u00a7Ex : php, htm, html, phtml, asp!\\u00a7!"}', 'hint' => $this->__('Ex : php, htm, html, phtml, asp'), 'default' => 'html', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('htmlPrepend', Textarea::class, $this->__('Code à insérer en tête des fichiers'), [ + $this->addSettingField('htmlPrepend', Textarea::class, $this->__('Code à insérer en tête des fichiers'), [ 'v2' => '{"type":"textarea","default":"","editable":true,"label":"\\u00a7!\\u00a7Code \\u00e0 ins\\u00e9rer en t\\u00eate des fichiers!\\u00a7!","grade":5}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('baseUrl', LongText::class, $this->__('Base de l\'url'), [ + $this->addSettingField('baseUrl', LongText::class, $this->__('Base de l\'url'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7Base de l\'url!\\u00a7!","grade":5}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('forceCompileOnDownload', Checkbox::class, $this->__('Forcer la compilation lors du téléchargement'), [ + $this->addSettingField('forceCompileOnDownload', Checkbox::class, $this->__('Forcer la compilation lors du téléchargement'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Forcer la compilation lors du t\\u00e9l\\u00e9chargement!\\u00a7!","grade":3}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('embedAllLibraries', Checkbox::class, $this->__('Intégrer toutes les bibliothèques JS'), [ + $this->addSettingField('embedAllLibraries', Checkbox::class, $this->__('Intégrer toutes les bibliothèques JS'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Int\\u00e9grer toutes les biblioth\\u00e8ques JS!\\u00a7!","grade":3}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_demo', FormSection::class, $this->__('Lien de démo')); - $this->addField('disableDemo', Checkbox::class, $this->__('Désactiver le lien de démo'), [ + } + + 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'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7D\\u00e9sactiver le lien de d\\u00e9mo!\\u00a7!","grade":5}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('redirectDemo', LongText::class, $this->__('Rediriger le lien de démo vers'), [ + $this->addSettingField('redirectDemo', LongText::class, $this->__('Rediriger le lien de démo vers'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7Rediriger le lien de d\\u00e9mo vers!\\u00a7!","grade":5}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_downloads', FormSection::class, $this->__('Versions disponibles au téléchargement')); + } + + protected function _package() + { + $this->addSettingField('section_downloads', FormSection::class, $this->__('Versions disponibles au téléchargement')); foreach (self::getDownloadVersions() as $name => $downloadVersion) { - $this->addField('download_' . $name, Checkbox::class, $downloadVersion['label'], [ + $this->addSettingField('download_' . $name, Checkbox::class, $downloadVersion['label'], [ 'v2' => json_encode(['type' => 'boolean', 'editable' => true, 'default' => $downloadVersion['default'], 'label' => $downloadVersion['label'], 'grade' => 3]), 'default' => $downloadVersion['default'], - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); if ($downloadVersion['install']) { - $this->addField('install_' . $name, ExternalPath::class, 'Installer sur un serveur externe', ['default' => '', 'fake' => true, 'translatable' => false, 'store_in' => 'settings', '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]]); } } - - $this->_stats(); - $this->_elearning(); - } - protected function _elearning() + + protected function _gamify() { - $this->addField('section_elearning', FormSuperSection::class, __('E-Learning')); - $this->addField('section_gamify', FormSection::class, $this->__('Gamification')); - $this->addField('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'), [ 'v2' => '{"type":"textarea","default":"","editable":true,"label":"\\u00a7!\\u00a7Attribuer des coins lors de la visite des pages!\\u00a7!"}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_scorm', FormSection::class, $this->__('SCORM')); - $this->addField('scorm_enable', Checkbox::class, $this->__('Activer SCORM'), [ + } + + protected function _scorm() + { + $this->addSettingField('section_scorm', FormSection::class, $this->__('SCORM')); + $this->addSettingField('scorm_enable', Checkbox::class, $this->__('Activer SCORM'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Activer SCORM!\\u00a7!","grade":5}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('scorm_version', SCORMVersion::class, $this->__('Version du standard SCORM'), [ + $this->addSettingField('scorm_version', SCORMVersion::class, $this->__('Version du standard SCORM'), [ 'v2' => '{"type":"combo","default":"1.2","editable":true,"label":"\\u00a7!\\u00a7Version du standard SCORM!\\u00a7!","grade":5,"datas":{"\\u00a7!\\u00a7SCORM 1.2!\\u00a7!":"1.2","\\u00a7!\\u00a7SCORM 2004 3rd edition!\\u00a7!":"2004.3","\\u00a7!\\u00a7SCORM 2004 4th edition!\\u00a7!":"2004"}}', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('scorm_id', LongText::class, $this->__('Identifiant SCORM'), [ + $this->addSettingField('scorm_id', LongText::class, $this->__('Identifiant SCORM'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7Identifiant SCORM!\\u00a7!","grade":5}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('scorm_org', LongText::class, $this->__('Organisation SCORM'), [ + $this->addSettingField('scorm_org', LongText::class, $this->__('Organisation SCORM'), [ 'v2' => '{"type":"text","default":"ACME-ORG-1350650111249","editable":true,"label":"\\u00a7!\\u00a7Organisation SCORM!\\u00a7!","grade":5}', 'default' => 'ACME-ORG-1350650111249', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('scorm_title', LongText::class, $this->__('Titre SCORM'), [ + $this->addSettingField('scorm_title', LongText::class, $this->__('Titre SCORM'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7Titre SCORM!\\u00a7!","grade":5,"hint":"\\u00a7!\\u00a7Laisser vide pour utiliser le titre de la publication!\\u00a7!"}', 'hint' => $this->__('Laisser vide pour utiliser le titre de la publication'), - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('scorm_variables', Textarea::class, $this->__('Variables SCORM'), [ + $this->addSettingField('scorm_variables', Textarea::class, $this->__('Variables SCORM'), [ 'v2' => '{"type":"textarea","default":"","editable":true,"label":"\\u00a7!\\u00a7Variables SCORM!\\u00a7!","grade":5,"hint":"\\u00a7!\\u00a7Laisser vide pour utiliser le titre de la publication!\\u00a7!"}', 'hint' => $this->__('Laisser vide pour utiliser le titre de la publication'), - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('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', [ 'v2' => '{"type":"boolean","default":false,"label":"Marquer le cours comme \\"Complete\\" \\u00e0 la fermeture de la fen\\u00eatre","editable":true}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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', [ 'v2' => '{"type":"boolean","default":false,"label":"Marquer le cours comme \\"Complete\\" lorsque le visiteur atteint la derni\\u00e8re page","editable":true}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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', [ 'v2' => '{"type":"integer","default":0,"label":"Marquer le cours comme \\"Complete\\" lorsque le visiteur accumule X coins","editable":true}', 'default' => 0, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('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') . ')', [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Marquer le cours comme Pass lorsqu\'il est termin\\u00e9!\\u00a7! (\\u00a7!\\u00a7SCORM 2004 seulement!\\u00a7!)"}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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é'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Marquer le cours comme r\\u00e9ussi \\u00e0 100% lorsqu\'il est termin\\u00e9!\\u00a7!"}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('scorm_quizdata', FilesOrURL::class, $this->__('Données de quiz'), [ + $this->addSettingField('', FormSeparator::class); + $this->addSettingField('scorm_quizdata', FilesOrURL::class, $this->__('Données de quiz'), [ 'v2' => '{"type":"freefile","editable":true,"default":"","label":"\\u00a7!\\u00a7Donn\\u00e9es de quiz!\\u00a7!"}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('scorm_score', Checkbox::class, $this->__('Activer le support du score'), [ + $this->addSettingField('scorm_score', Checkbox::class, $this->__('Activer le support du score'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Activer le support du score!\\u00a7!","grade":5}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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'), [ 'v2' => '{"type":"integer","min":0,"max":100,"default":50,"editable":true,"label":"\\u00a7!\\u00a7Score minimal pour marquer le contenu comme r\\u00e9ussi!\\u00a7!","grade":5}', 'min' => 0, 'max' => 100, 'default' => 50, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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)'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Traiter les quiz comme des questionnaires (toutes les r\\u00e9ponses sont consid\\u00e9r\\u00e9es comme correctes)!\\u00a7!","grade":5}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('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'), [ 'v2' => '{"type":"boolean","default":false,"label":"\\u00a7!\\u00a7Forcer la cr\\u00e9ation d\'un \\"attempt\\" \\u00e0 chaque ouverture!\\u00a7!","editable":true}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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') . ')', [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Envoyer les donn\\u00e9es imm\\u00e9diatement au LMS!\\u00a7! (\\u00a7!\\u00a7Peut provoquer des ralentissement sur certains LMS!\\u00a7!)"}', 'default' => false, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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é'), [ 'v2' => '{"type":"boolean","default":false,"editable":true,"label":"\\u00a7!\\u00a7Envoyer le signal \\"Finish\\" ou \\"Terminate\\" en marquant le contenu comme terminé!\\u00a7!"}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); } + protected function _elearning() + { + $this->addSettingField('section_elearning', FormSuperSection::class, __('E-Learning')); + $this->_gamify(); + $this->_scorm(); + } + protected function _stats() { - $this->addField('bigsection_stats', FormSuperSection::class, $this->__('Statistiques')); - $this->addField('section_fluidbookStats', FormSection::class, $this->__('Statistiques Fluidbook')); - $this->addField('stats', Checkbox::class, $this->__('Activer les statistiques Fluidbook'), [ + $this->addSettingField('bigsection_stats', FormSuperSection::class, $this->__('Statistiques et vie privée')); + $this->addSettingField('section_fluidbookStats', FormSection::class, $this->__('Statistiques Fluidbook')); + $this->addSettingField('stats', Checkbox::class, $this->__('Activer les statistiques Fluidbook'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Activer les statistiques Fluidbook!\\u00a7!","grade":3}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('', FormSeparator::class); - $this->addField('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'), [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"\\u00a7!\\u00a7Afficher les scores dans les rapports!\\u00a7!","grade":5}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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'), [ 'v2' => '{"type":"textarea","default":"","editable":true,"label":"\\u00a7!\\u00a7Exclure les IP suivantes des statistiques!\\u00a7!","grade":3,"hint":"\\u00a7!\\u00a7Indiquer une adresse ip de la forme www.xxx.yyy.zzz par ligne!\\u00a7!"}', 'hint' => $this->__('Indiquer une adresse ip de la forme www.xxx.yyy.zzz par ligne'), - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_gaStats', FormSection::class, $this->__('Google Analytics')); - $this->addField('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'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7Code Google Analytics!\\u00a7!","size":10}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_gtmStats', FormSection::class, $this->__('Google Tag Manager')); - $this->addField('googleTagManager', LongText::class, $this->__('Code Google Tag Manager'), [ + $this->addSettingField('section_gtmStats', FormSection::class, $this->__('Google Tag Manager')); + $this->addSettingField('googleTagManager', LongText::class, $this->__('Code Google Tag Manager'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7Code Google Tag Manager!\\u00a7!","size":10}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('gtag_additional_code', Code::class, $this->__('Code additionnel Google Tag Manager'), [ + $this->addSettingField('gtag_additional_code', Code::class, $this->__('Code additionnel Google Tag Manager'), [ 'v2' => '{"type":"textarea","default":"","editable":true,"label":"\\u00a7!\\u00a7Code additionnel Google Tag Manager!\\u00a7!"}', - 'default' => '', - 'fake' => true, 'language' => 'html', - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_tc', FormSection::class, $this->__('Tag Commander')); - $this->addField('tagcommander_id', LongText::class, 'Tag commander ID', [ + $this->addSettingField('section_tc', FormSection::class, $this->__('Tag Commander')); + $this->addSettingField('tagcommander_id', LongText::class, 'Tag commander ID', [ 'v2' => '{"type":"text","default":"","editable":true,"label":"Tag commander ID","grade":3}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('tagcommander_scriptname', LongText::class, 'Nom du script Tagcommander', [ + $this->addSettingField('tagcommander_scriptname', LongText::class, 'Nom du script Tagcommander', [ 'v2' => '{"type":"text","default":"tc_Multisite_Head.js,tc_Multisite_Analytics.js,tc_Multisite_Medias.js","editable":true,"label":"Nom du script Tagcommander","grade":3}', 'default' => 'tc_Multisite_Head.js,tc_Multisite_Analytics.js,tc_Multisite_Medias.js', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('tagcommander_prod', Checkbox::class, 'Production', [ + $this->addSettingField('tagcommander_prod', Checkbox::class, 'Production', [ 'v2' => '{"type":"boolean","default":true,"editable":true,"label":"Production","grade":3}', 'default' => true, - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('tagcommander_plan', FilesOrURL::class, 'Plan de taggage "Tag commander"', [ + $this->addSettingField('tagcommander_plan', FilesOrURL::class, 'Plan de taggage "Tag commander"', [ 'v2' => '{"type":"freefile","default":"","editable":true,"label":"Plan de taggage \\"Tag commander\\"","grade":3}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('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'), [ 'v2' => '{"type":"text","default":"page","editable":true,"grade":3}', 'default' => 'page', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('tagcommander_default_vars', Textarea::class, 'Variables par défaut', [ + $this->addSettingField('tagcommander_default_vars', Textarea::class, 'Variables par défaut', [ 'v2' => '{"type":"textarea","default":"","editable":true,"label":"Variables par d\\u00e9faut","grade":3}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_piano', FormSection::class, __('Piano Analytics')); - $this->addField('xiti', Code::class, $this->__('Code Piano Analytics'), [ + $this->addSettingField('section_piano', FormSection::class, __('Piano Analytics')); + $this->addSettingField('xiti', Code::class, $this->__('Code Piano Analytics'), [ 'v2' => '{"type":"textarea","default":"","editable":true,"label":"\\u00a7!\\u00a7Code global!\\u00a7!"}', - 'default' => '', - 'fake' => true, 'language' => 'html', - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('piano_plan', FilesOrURL::class, 'Plan de taggage', [ + $this->addSettingField('piano_plan', FilesOrURL::class, 'Plan de taggage', [ 'v2' => '{"type":"freefile","default":"","editable":true,"label":"Plan de taggage","grade":3}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('xiti_page', Textarea::class, $this->__('Modèle code xiti (pour tags relatifs aux pages)'), [ + $this->addSettingField('xiti_page', Textarea::class, $this->__('Modèle code xiti (pour tags relatifs aux pages)'), [ 'v2' => '{"type":"textarea","default":"","editable":true,"label":"\\u00a7!\\u00a7Mod\\u00e8le code xiti (pour tags relatifs aux pages)!\\u00a7!"}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('section_stats_custom', FormSection::class, __('Autres services')); - $this->addField('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)'), [ 'v2' => '{"type":"textarea","default":"","editable":true,"label":"\\u00a7!\\u00a7Code Stats personnalis\\u00e9 (plac\\u00e9 avant fermeture de head)!\\u00a7!"}', - 'default' => '', 'fake' => true, 'language' => 'html', 'store_in' => 'settings', 'translatable' => false, ]); - $this->addField('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)'), [ 'v2' => '{"type":"textarea","default":"","editable":true,"label":"\\u00a7!\\u00a7Code Stats personnalis\\u00e9 (plac\\u00e9 avant fermeture du body)!\\u00a7!"}', - 'default' => '', - 'fake' => true, 'language' => 'html', - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('anchorsAliases', LongText::class, $this->__('Alias des ancres'), [ + $this->addSettingField('anchorsAliases', LongText::class, $this->__('Alias des ancres'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7Alias des ancres!\\u00a7!"}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); - $this->addField('relay_url_params', LongText::class, $this->__('Relayer les paramètres d\'url dans les liens sortants'), [ + $this->addSettingField('relay_url_params', LongText::class, $this->__('Relayer les paramètres d\'url dans les liens sortants'), [ 'v2' => '{"type":"text","default":"","editable":true,"label":"\\u00a7!\\u00a7Relayer les param\\u00e8tres d\'url dans les liens sortants!\\u00a7!","grade":3}', - 'default' => '', - 'fake' => true, - 'store_in' => 'settings', - 'translatable' => false, ]); + $this->_privacy(); } }