+ * @copyright Copyright (C) 2018-2021, Frédéric Tempez
+ */
+
+
+class install extends common {
+
+ public static $actions = [
+ 'index' => self::GROUP_VISITOR,
+ 'steps' => self::GROUP_ADMIN,
+ 'update' => self::GROUP_ADMIN
+ ];
+
+ // Thèmes proposés à l'installation
+ public static $themes = [];
+
+ public static $newVersion;
+
+
+ /**
+ * Installation
+ */
+ public function index() {
+ // Accès refusé
+ if($this->getData(['user']) !== []) {
+ // Valeurs en sortie
+ $this->addOutput([
+ 'access' => false
+ ]);
+ }
+ // Accès autorisé
+ else {
+ // Soumission du formulaire
+ if($this->isPost()) {
+ $success = true;
+ // Double vérification pour le mot de passe
+ if($this->getInput('installPassword', helper::FILTER_STRING_SHORT, true) !== $this->getInput('installConfirmPassword', helper::FILTER_STRING_SHORT, true)) {
+ self::$inputNotices['installConfirmPassword'] = 'Incorrect';
+ $success = false;
+ }
+ // Utilisateur
+ $userFirstname = $this->getInput('installFirstname', helper::FILTER_STRING_SHORT, true);
+ $userLastname = $this->getInput('installLastname', helper::FILTER_STRING_SHORT, true);
+ $userMail = $this->getInput('installMail', helper::FILTER_MAIL, true);
+ $userId = $this->getInput('installId', helper::FILTER_ID, true);
+
+
+ // Création de l'utilisateur si les données sont complétées.
+ // success retour de l'enregistrement des données
+
+ $success = $this->setData([
+ 'user',
+ $userId,
+ [
+ 'firstname' => $userFirstname,
+ 'forgot' => 0,
+ 'group' => self::GROUP_ADMIN,
+ 'lastname' => $userLastname,
+ 'pseudo' => 'Admin',
+ 'signature' => 1,
+ 'mail' => $userMail,
+ 'password' => $this->getInput('installPassword', helper::FILTER_PASSWORD, true)
+ ]
+ ]);
+
+ // Compte créé, envoi du mail et création des données du site
+ if ($success) { // Formulaire complété envoi du mail
+ // Envoie le mail
+ // Sent contient true si réussite sinon code erreur d'envoi en clair
+ $sent = $this->sendMail(
+ $userMail,
+ 'Installation de votre site',
+ 'Bonjour' . ' ' . $userFirstname . ' ' . $userLastname . ',
' .
+ 'Voici les détails de votre installation.
' .
+ 'URL du site : ' . helper::baseUrl(false) . '
' .
+ 'Identifiant du compte : ' . $this->getInput('installId') . '
',
+ null
+ );
+ // Nettoyer les cookies de langue d'une précédente installation
+ helper::deleteCookie('DELTA_I18N_SITE');
+ helper::deleteCookie('DELTA_I18N_SCRIPT');
+ // Installation du site de test
+ if ($this->getInput('installDefaultData',helper::FILTER_BOOLEAN) === FALSE) {
+ $this->initData('page','fr',true);
+ $this->initData('module','fr',true);
+ }
+ // Images exemples livrées dans tous les cas
+ try {
+ // Décompression dans le dossier de fichier temporaires
+ if (file_exists(self::TEMP_DIR . 'files.tar.gz')) {
+ unlink(self::TEMP_DIR . 'files.tar.gz');
+ }
+ if (file_exists(self::TEMP_DIR . 'files.tar')) {
+ unlink(self::TEMP_DIR . 'files.tar');
+ }
+ copy('core/module/install/ressource/files.tar.gz', self::TEMP_DIR . 'files.tar.gz');
+ $pharData = new PharData(self::TEMP_DIR . 'files.tar.gz');
+ $pharData->decompress();
+ // Installation
+ $pharData->extractTo(__DIR__ . '/../../../', null, true);
+ } catch (Exception $e) {
+ $success = $e->getMessage();
+ }
+ unlink(self::TEMP_DIR . 'files.tar.gz');
+ unlink(self::TEMP_DIR . 'files.tar');
+ // Stocker le dossier d'installation
+ $this->setData(['core', 'baseUrl', helper::baseUrl(false,false) ]);
+ // Créer sitemap
+ $this->createSitemap();
+
+ // Installation du thème sélectionné
+ $dataThemes = file_get_contents('core/module/install/ressource/themes/themes.json');
+ $dataThemes = json_decode($dataThemes, true);
+ $themeId = $dataThemes [$this->getInput('installTheme', helper::FILTER_STRING_SHORT)]['filename'];
+ if ($themeId !== 'default' ) {
+ $theme = new theme;
+ $theme->import('core/module/install/ressource/themes/' . $themeId);
+ }
+
+ // Copie des thèmes dans les fichiers
+ if (!is_dir(self::FILE_DIR . 'source/theme' )) {
+ mkdir(self::FILE_DIR . 'source/theme');
+ }
+ $this->copyDir('core/module/install/ressource/themes', self::FILE_DIR . 'source/theme');
+ unlink(self::FILE_DIR . 'source/theme/themes.json');
+
+ // Valeurs en sortie
+ $this->addOutput([
+ 'redirect' => helper::baseUrl(false),
+ 'notification' => $sent === true ? 'Installation terminée' : $sent,
+ 'state' => ($sent === true && $success === true) ? true : null
+ ]);
+ }
+ }
+ // Récupération de la liste des thèmes
+ $dataThemes = file_get_contents('core/module/install/ressource/themes/themes.json');
+ $dataThemes = json_decode($dataThemes, true);
+ self::$themes = helper::arrayCollumn($dataThemes, 'name');
+
+ // Valeurs en sortie
+ $this->addOutput([
+ 'display' => self::DISPLAY_LAYOUT_LIGHT,
+ 'title' => 'Installation',
+ 'view' => 'index'
+ ]);
+ }
+ }
+
+ /**
+ * Étapes de mise à jour
+ */
+ public function steps() {
+ switch($this->getInput('step', helper::FILTER_INT)) {
+ // Préparation
+ case 1:
+ $success = true;
+ // RAZ la mise à jour auto
+ $this->setData(['core','updateAvailable', false]);
+ // Backup du dossier Data
+ helper::autoBackup(self::BACKUP_DIR,['backup','tmp','file']);
+ // Sauvegarde htaccess
+ if ($this->getData(['config','autoUpdateHtaccess'])) {
+ $success = copy('.htaccess', '.htaccess' . '.bak');
+ }
+ // Nettoyage des fichiers d'installation précédents
+ if(file_exists(self::TEMP_DIR.'update.tar.gz') && $success) {
+ $success = unlink(self::TEMP_DIR.'update.tar.gz');
+ }
+ if(file_exists(self::TEMP_DIR.'update.tar') && $success) {
+ $success = unlink(self::TEMP_DIR.'update.tar');
+ }
+ // Valeurs en sortie
+ $this->addOutput([
+ 'display' => self::DISPLAY_JSON,
+ 'content' => [
+ 'success' => $success,
+ 'data' => null
+ ]
+ ]);
+ break;
+ // Téléchargement
+ case 2:
+ // Téléchargement depuis le serveur de Zwii
+ //$success = (file_put_contents(self::TEMP_DIR.'update.tar.gz', helper::urlGetContents('https://zwiicms.fr/update/' . common::DELTA_UPDATE_CHANNEL . '/update.tar.gz')) !== false);
+ // URL sur le git
+ //$newVersion = helper::urlGetContents('https://zwiicms.fr/update/' . common::DELTA_UPDATE_CHANNEL . '/version');
+ $success = (file_put_contents(self::TEMP_DIR.'update.tar.gz', helper::urlGetContents(common::DELTA_UPDATE_URL . common::DELTA_UPDATE_CHANNEL . '/update.tar.gz')) !== false);
+ // Valeurs en sortie
+ $this->addOutput([
+ 'display' => self::DISPLAY_JSON,
+ 'content' => [
+ 'success' => $success,
+ 'data' => null
+ ]
+ ]);
+ break;
+ // Installation
+ case 3:
+ $success = true;
+ // Check la réécriture d'URL avant d'écraser les fichiers
+ $rewrite = helper::checkRewrite();
+ // Décompression et installation
+ try {
+ // Décompression dans le dossier de fichier temporaires
+ $pharData = new PharData(self::TEMP_DIR.'update.tar.gz');
+ $pharData->decompress();
+ // Installation
+ $pharData->extractTo(__DIR__ . '/../../../', null, true);
+ } catch (Exception $e) {
+ $success = $e->getMessage();
+ }
+ // Nettoyage du dossier
+ if(file_exists(self::TEMP_DIR.'update.tar.gz')) {
+ unlink(self::TEMP_DIR.'update.tar.gz');
+ }
+ if(file_exists(self::TEMP_DIR.'update.tar')) {
+ unlink(self::TEMP_DIR.'update.tar');
+ }
+ // Valeurs en sortie
+ $this->addOutput([
+ 'display' => self::DISPLAY_JSON,
+ 'content' => [
+ 'success' => $success,
+ 'data' => $rewrite
+ ]
+ ]);
+ break;
+ // Configuration
+ case 4:
+ $success = true;
+ $rewrite = $this->getInput('data');
+ // Réécriture d'URL
+ if ($rewrite === "true") {
+ $success = (file_put_contents(
+ '.htaccess',
+ PHP_EOL .
+ '' . PHP_EOL .
+ "\tRewriteEngine on" . PHP_EOL .
+ "\tRewriteBase " . helper::baseUrl(false, false) . PHP_EOL .
+ "\tRewriteCond %{REQUEST_FILENAME} !-f" . PHP_EOL .
+ "\tRewriteCond %{REQUEST_FILENAME} !-d" . PHP_EOL .
+ "\tRewriteRule ^(.*)$ index.php?$1 [L]" . PHP_EOL .
+ '',
+ FILE_APPEND
+ ) !== false);
+ }
+ // Recopie htaccess
+ if ($this->getData(['config','autoUpdateHtaccess']) &&
+ $success && file_exists( '.htaccess.bak')
+ ) {
+ // L'écraser avec le backup
+ $success = copy( '.htaccess.bak' ,'.htaccess' );
+ // Effacer l ebackup
+ unlink('.htaccess.bak');
+ }
+ // Valeurs en sortie
+ $this->addOutput([
+ 'display' => self::DISPLAY_JSON,
+ 'content' => [
+ 'success' => $success,
+ 'data' => null
+ ]
+ ]);
+ break;
+ }
+ }
+
+ /**
+ * Mise à jour
+ */
+ public function update() {
+ // Nouvelle version
+ self::$newVersion = helper::urlGetContents(common::DELTA_UPDATE_URL . common::DELTA_UPDATE_CHANNEL . '/version');
+ // Valeurs en sortie
+ $this->addOutput([
+ 'display' => self::DISPLAY_LAYOUT_LIGHT,
+ 'title' => 'Mise à jour',
+ 'view' => 'update'
+ ]);
+ }
+
+
+}
\ No newline at end of file
diff --git a/core/module/install/ressource/.htaccess b/core/module/install/ressource/.htaccess
new file mode 100644
index 0000000..85278f8
--- /dev/null
+++ b/core/module/install/ressource/.htaccess
@@ -0,0 +1,10 @@
+# Bloque l'accès aux données
+
+ Order deny,allow
+ Deny from all
+
+# Bloque l'accès htaccess
+
+ Order deny,allow
+ Deny from all
+
\ No newline at end of file
diff --git a/core/module/install/ressource/defaultdata.php b/core/module/install/ressource/defaultdata.php
new file mode 100644
index 0000000..5e335c1
--- /dev/null
+++ b/core/module/install/ressource/defaultdata.php
@@ -0,0 +1,878 @@
+ [
+ 'analyticsId' => '',
+ 'autoBackup' => true,
+ 'autoUpdate' => true,
+ 'autoUpdateHtaccess' => false,
+ 'favicon' => 'favicon.ico',
+ 'faviconDark' => 'faviconDark.ico',
+ 'maintenance' => false,
+ 'cookieConsent' => true,
+ 'social' => [
+ 'facebookId' => '',
+ 'instagramId' => '',
+ 'pinterestId' => '',
+ 'twitterId' => '',
+ 'youtubeId' => '',
+ 'youtubeUserId' => '',
+ 'githubId' => ''
+ ],
+ 'timezone' => 'Europe/Paris',
+ 'proxyUrl' => '',
+ 'proxyPort' => '',
+ 'proxyType' => 'tcp://',
+ 'smtp' => [
+ 'enable' => false,
+ ],
+ 'seo' => [
+ 'robots' => true
+ ],
+ 'connect' => [
+ 'timeout' => 600,
+ 'attempt' => 3,
+ 'log' => false,
+ 'anonymousIp' => 2,
+ 'captcha' => true,
+ 'captchaStrong' => false,
+ "captchaType" => 'num',
+ 'autoDisconnect' => true
+ ],
+ 'i18n' => [
+ 'enable'=> true,
+ 'scriptGoogle'=> false,
+ 'showCredits'=> false,
+ 'autoDetect'=> false,
+ 'admin'=> false,
+ 'fr'=> 'none',
+ 'de'=> 'none',
+ 'en'=> 'none',
+ 'es'=> 'none',
+ 'it'=> 'none',
+ 'nl'=> 'none',
+ 'pt'=> 'none'
+ ]
+ ],
+ 'core' => [
+ 'dataVersion' => 3101,
+ 'lastBackup' => 0,
+ 'lastClearTmp' => 0,
+ 'lastAutoUpdate' => 0,
+ 'updateAvailable' => false,
+ 'baseUrl' => ''
+ ],
+ 'locale' => [
+ 'homePageId' => 'accueil',
+ 'page302' => 'none',
+ 'page403' => 'none',
+ 'page404' => 'none',
+ 'legalPageId' => 'none',
+ 'searchPageId' => 'none',
+ 'searchPageLabel' => 'Rechercher',
+ 'sitemapPageLabel' => 'Plan du site',
+ 'legalPageLabel' => 'Mentions légales',
+ 'metaDescription' => 'DeltaCMS est un CMS sans base de données qui permet de créer et gérer facilement un site web sans aucune connaissance en programmation.',
+ 'title' => 'Avec DeltaCMS installez votre site en quelques clics !',
+ 'cookies' => [
+ 'cookiesDeltaText' => 'Ce site utilise des cookies nécessaires à son fonctionnement, ils permettent de fluidifier son fonctionnement par exemple en mémorisant les données de connexion, la langue que vous avez choisie ou la validation de ce message.',
+ 'cookiesExtText' => '',
+ 'cookiesTitleText' => 'Gérer les cookies',
+ 'cookiesLinkMlText' => 'Consulter les mentions légales',
+ 'cookiesCheckboxExtText' => '',
+ 'cookiesFooterText' => 'Cookies',
+ 'cookiesButtonText' => 'J\'ai compris'
+ ]
+ ],
+ 'page' => [
+ 'accueil' => [
+ 'typeMenu' => 'text',
+ 'iconUrl' => '',
+ 'disable' => false,
+ 'content' => 'accueil.html',
+ 'hideTitle' => false,
+ 'homePageId' => true,
+ 'breadCrumb' => false,
+ 'metaDescription' => '',
+ 'metaTitle' => '',
+ 'moduleId' => '',
+ 'modulePosition' => 'bottom',
+ 'parentPageId' => '',
+ 'position' => 1,
+ 'group' => self::GROUP_VISITOR,
+ 'targetBlank' => false,
+ 'title' => 'Accueil',
+ 'shortTitle' => 'Accueil',
+ 'block' => '12',
+ 'barLeft' => '',
+ 'barRight' => '',
+ 'displayMenu' => 'none',
+ 'hideMenuSide' => false,
+ 'hideMenuChildren' =>false
+ ]
+ ],
+ 'module' => [],
+ 'user' => [],
+ 'theme' => [
+ 'body' => [
+ 'backgroundColor' => 'rgba(103, 127, 163, 1)',
+ 'image' => '',
+ 'imageAttachment' => 'scroll',
+ 'imageRepeat' => 'no-repeat',
+ 'imagePosition' => 'top center',
+ 'imageSize' => 'auto',
+ 'toTopbackgroundColor' => 'rgba(33, 34, 35, .8)',
+ 'toTopColor' => 'rgba(255, 255, 255, 1)'
+ ],
+ 'footer' => [
+ 'backgroundColor' => 'rgba(255, 255, 255, 1)',
+ 'font' => 'Open+Sans',
+ 'fontSize' => '.8em',
+ 'fontWeight' => 'normal',
+ 'height' => '5px',
+ 'loginLink' => true,
+ 'margin' => true,
+ 'position' => 'site',
+ 'textColor' => 'rgba(33, 34, 35, 1)',
+ 'copyrightPosition' => 'right',
+ 'copyrightAlign' => 'right',
+ 'text' => 'Pied de page personnalisé
',
+ 'textPosition' => 'left',
+ 'textAlign' => 'left',
+ 'textTransform' => 'none',
+ 'socialsPosition' => 'center',
+ 'socialsAlign' => 'center',
+ 'displayVersion' => true,
+ 'displaySiteMap' => true,
+ 'displayCopyright' => false,
+ 'displayCookie' => false,
+ 'displayLegal' => false,
+ 'displaySearch' => false,
+ 'displayMemberBar' => false,
+ 'template' => '3'
+ ],
+ 'header' => [
+ 'backgroundColor' => 'rgba(32, 59, 82, 1)',
+ 'font' => 'Oswald',
+ 'fontSize' => '2em',
+ 'fontWeight' => 'normal',
+ 'height' => '200px',
+ 'image' => 'theme/defaut/banniere_1500x200.jpg',
+ 'imagePosition' => 'center center',
+ 'imageRepeat' => 'no-repeat',
+ 'margin' => false,
+ 'position' => 'site',
+ 'textAlign' => 'center',
+ 'textColor' => 'rgba(255, 255, 255, 1)',
+ 'textHide' => false,
+ 'textTransform' => 'none',
+ 'linkHomePage' => true,
+ 'imageContainer' => 'auto',
+ 'tinyHidden' => true,
+ 'feature' => 'wallpaper',
+ 'featureContent' => 'Bannière vide
',
+ 'width' => 'container'
+ ],
+ 'menu' => [
+ 'backgroundColor' => 'rgba(32, 59, 82, 0.85)',
+ 'backgroundColorSub' => 'rgba(32, 59, 82, 1)',
+ 'font' => 'Open+Sans',
+ 'fontSize' => '1em',
+ 'fontWeight' => 'normal',
+ 'height' => '15px 10px',
+ 'loginLink' => false,
+ 'margin' => false,
+ 'position' => 'top',
+ 'textAlign' => 'left',
+ 'textColor' => 'rgba(255, 255, 255, 1)',
+ 'textTransform' => 'none',
+ 'fixed' => true,
+ 'activeColorAuto' => true,
+ 'activeColor' => 'rgba(255, 255, 255, 1)',
+ 'activeTextColor' => 'rgba(255, 255, 255, 1)',
+ 'radius' => '0px',
+ 'memberBar' => true,
+ 'burgerLogo' => '',
+ 'burgerContent' => 'title',
+ 'width' => 'container'
+ ],
+ 'site' => [
+ 'backgroundColor' => 'rgba(255, 255, 255, 1)',
+ 'radius' => '0px',
+ 'shadow' => '0px 0px 0px',
+ 'width' => '100%'
+ ],
+ 'block' => [
+ 'backgroundTitleColor' => 'rgba(230, 230, 230, 1)',
+ 'backgroundColor' => 'rgba(241, 241, 241, 1)',
+ 'borderColor' => 'rgba(230, 230, 230, 1)',
+ 'blockBorderRadius' => '5px',
+ 'blockBorderShadow' => '3px 3px 6px',
+ ],
+ 'text' => [
+ 'font' => 'Open+Sans',
+ 'fontSize' => '13px',
+ 'textColor' => 'rgba(33, 34, 35, 1)',
+ 'linkColor' => 'rgba(74, 105, 189, 1)'
+ ],
+ 'title' => [
+ 'font' => 'Oswald',
+ 'fontWeight' => 'normal',
+ 'textColor' => 'rgba(74, 105, 189, 1)',
+ 'textTransform' => 'none'
+ ],
+ 'button' => [
+ 'backgroundColor' => 'rgba(32, 59, 82, 1)'
+ ],
+ 'version' => 0
+ ],
+ 'admin' => [
+ 'backgroundColor' => 'rgba(255, 255, 255, 1)',
+ 'fontText' => 'open+Sans',
+ 'fontSize' => '13px',
+ 'fontTitle' => 'Oswald',
+ 'colorText' => 'rgba(33, 34, 35, 1)',
+ 'colorTitle' => 'rgba(74, 105, 189, 1)',
+ 'backgroundColorButton' => 'rgba(74, 105, 189, 1)',
+ 'backgroundColorButtonGrey' => 'rgba(170, 180, 188, 1)',
+ 'backgroundColorButtonRed' => 'rgba(217, 95, 78, 1)',
+ 'backgroundColorButtonGreen' => 'rgba(162, 223, 57, 1)',
+ 'backgroundColorButtonHelp' => 'rgba(255, 153, 0, 1)',
+ 'backgroundBlockColor' => 'rgba(236, 239, 241, 1)',
+ 'borderBlockColor' => 'rgba(190, 202, 209, 1)'
+ ],
+ 'blacklist' => []
+ ];
+
+
+ public static $siteData = [
+ 'page' => [
+ 'accueil' => [
+ 'typeMenu' => 'text',
+ 'iconUrl' => '',
+ 'disable' => false,
+ 'content' => 'accueil.html',
+ 'hideTitle' => false,
+ 'homePageId' => true,
+ 'breadCrumb' => false,
+ 'metaDescription' => '',
+ 'metaTitle' => '',
+ 'moduleId' => '',
+ 'modulePosition' => 'bottom',
+ 'parentPageId' => '',
+ 'position' => 1,
+ 'group' => self::GROUP_VISITOR,
+ 'targetBlank' => false,
+ 'title' => 'Accueil',
+ 'shortTitle' => 'Accueil',
+ 'block' => '12',
+ 'barLeft' => '',
+ 'barRight' => '',
+ 'displayMenu' => 'none',
+ 'hideMenuSide' => false,
+ 'hideMenuChildren' =>false
+ ],
+ 'enfant' => [
+ 'typeMenu' => 'text',
+ 'iconUrl' => '',
+ 'disable' => false,
+ 'content' => 'enfant.html',
+ 'hideTitle' => false,
+ 'breadCrumb' => true,
+ 'metaDescription' => '',
+ 'metaTitle' => '',
+ 'moduleId' => '',
+ 'modulePosition' => 'bottom',
+ 'parentPageId' => 'accueil',
+ 'position' => 1,
+ 'group' => self::GROUP_VISITOR,
+ 'targetBlank' => false,
+ 'title' => 'Page Enfant',
+ 'shortTitle' => 'Enfant',
+ 'block' => '12',
+ 'barLeft' => '',
+ 'barRight' => '',
+ 'displayMenu' => 'none',
+ 'hideMenuSide' => false,
+ 'hideMenuChildren' =>false
+ ],
+ 'privee' => [
+ 'typeMenu' => 'text',
+ 'iconUrl' => '',
+ 'disable' => false,
+ 'content' => 'privee.html',
+ 'hideTitle' => false,
+ 'breadCrumb' => true,
+ 'metaDescription' => '',
+ 'metaTitle' => '',
+ 'moduleId' => '',
+ 'parentPageId' => '',
+ 'modulePosition' => 'bottom',
+ 'position' => 2,
+ 'group' => self::GROUP_MEMBER,
+ 'targetBlank' => false,
+ 'title' => 'Page privée',
+ 'shortTitle' => 'Privée',
+ 'block' => '12',
+ 'barLeft' => '',
+ 'barRight' => '',
+ 'displayMenu' => 'none',
+ 'hideMenuSide' => false,
+ 'hideMenuChildren' =>false
+ ],
+ 'mise-en-page' => [
+ 'typeMenu' => 'text',
+ 'iconUrl' => '',
+ 'disable' => false,
+ 'content' => 'mise-en-page.html',
+ 'hideTitle' => false,
+ 'breadCrumb' => true,
+ 'metaDescription' => '',
+ 'metaTitle' => '',
+ 'moduleId' => '',
+ 'parentPageId' => 'accueil',
+ 'modulePosition' => 'bottom',
+ 'position' => 2,
+ 'group' => self::GROUP_VISITOR,
+ 'targetBlank' => false,
+ 'title' => 'Mise en page',
+ 'shortTitle' => 'Mise en page',
+ 'block' => '4-8',
+ 'barLeft' => 'barre',
+ 'barRight' => '',
+ 'displayMenu' => 'none',
+ 'hideMenuSide' => false,
+ 'hideMenuChildren' =>false
+ ],
+ 'menu-lateral' => [
+ 'typeMenu' => 'text',
+ 'iconUrl' => '',
+ 'disable' => false,
+ 'content' => 'menu-lateral.html',
+ 'hideTitle' => false,
+ 'breadCrumb' => true,
+ 'metaDescription' => '',
+ 'metaTitle' => '',
+ 'moduleId' => '',
+ 'parentPageId' => 'accueil',
+ 'modulePosition' => 'bottom',
+ 'position' => 3,
+ 'group' => self::GROUP_VISITOR,
+ 'targetBlank' => false,
+ 'title' => 'Barre latérale avec menu',
+ 'shortTitle' => 'Menu latéral',
+ 'block' => '9-3',
+ 'barLeft' => '',
+ 'barRight' => 'barrelateraleavecmenu',
+ 'displayMenu' => 'none',
+ 'hideMenuSide' => false,
+ 'hideMenuChildren' =>false
+ ],
+ 'blog' => [
+ 'typeMenu' => 'text',
+ 'iconUrl' => '',
+ 'disable' => false,
+ 'content' => 'blog.html',
+ 'hideTitle' => false,
+ 'breadCrumb' => false,
+ 'metaDescription' => '',
+ 'metaTitle' => '',
+ 'moduleId' => 'blog',
+ 'modulePosition' => 'bottom',
+ 'parentPageId' => '',
+ 'position' => 3,
+ 'group' => self::GROUP_VISITOR,
+ 'targetBlank' => false,
+ 'title' => 'Blog',
+ 'shortTitle' => 'Blog',
+ 'block' => '12',
+ 'barLeft' => '',
+ 'barRight' => '',
+ 'displayMenu' => 'none',
+ 'hideMenuSide' => false,
+ 'hideMenuChildren' =>false
+ ],
+ 'galeries' => [
+ 'typeMenu' => 'text',
+ 'iconUrl' => '',
+ 'disable' => false,
+ 'content' => 'galeries.html',
+ 'hideTitle' => false,
+ 'breadCrumb' => false,
+ 'metaDescription' => '',
+ 'metaTitle' => '',
+ 'moduleId' => 'gallery',
+ 'modulePosition' => 'bottom',
+ 'parentPageId' => '',
+ 'position' => 4,
+ 'group' => self::GROUP_VISITOR,
+ 'targetBlank' => false,
+ 'title' => 'Galeries d\'images',
+ 'shortTitle' => 'Galeries',
+ 'block' => '12',
+ 'barLeft' => '',
+ 'barRight' => '',
+ 'displayMenu' => 'none',
+ 'hideMenuSide' => false,
+ 'hideMenuChildren' =>false
+ ],
+ 'contact' => [
+ 'typeMenu' => 'text',
+ 'iconUrl' => '',
+ 'disable' => false,
+ 'content' => 'contact.html',
+ 'hideTitle' => false,
+ 'breadCrumb' => false,
+ 'metaDescription' => '',
+ 'metaTitle' => '',
+ 'moduleId' => 'form',
+ 'modulePosition' => 'bottom',
+ 'parentPageId' => '',
+ 'position' => 6,
+ 'group' => self::GROUP_VISITOR,
+ 'targetBlank' => false,
+ 'title' => 'Contact',
+ 'shortTitle' => 'Contact',
+ 'block' => '12',
+ 'barLeft' => '',
+ 'barRight' => '',
+ 'displayMenu' => 'none',
+ 'hideMenuSide' => false,
+ 'hideMenuChildren' =>false
+ ],
+ 'barre' => [
+ 'typeMenu' => 'text',
+ 'iconUrl' => '',
+ 'disable' => false,
+ 'content' => 'barre.html',
+ 'hideTitle' => false,
+ 'breadCrumb' => false,
+ 'metaDescription' => '',
+ 'metaTitle' => '',
+ 'moduleId' => '',
+ 'modulePosition' => 'bottom',
+ 'parentPageId' => '',
+ 'position' => 0 ,
+ 'group' => self::GROUP_VISITOR,
+ 'targetBlank' => false,
+ 'title' => 'Barre latérale',
+ 'shortTitle' => 'Barre latérale',
+ 'block' => 'bar',
+ 'barLeft' => '',
+ 'barRight' => '',
+ 'displayMenu' => 'none',
+ 'hideMenuSide' => false,
+ 'hideMenuChildren' =>false
+ ],
+ 'barrelateraleavecmenu' => [
+ 'typeMenu' => 'text',
+ 'iconUrl' => '',
+ 'disable' => false,
+ 'content' => 'barrelateraleavecmenu.html',
+ 'hideTitle' => false,
+ 'breadCrumb' => false,
+ 'metaDescription' => '',
+ 'metaTitle' => '',
+ 'moduleId' => '',
+ 'modulePosition' => 'bottom',
+ 'parentPageId' => '',
+ 'position' => 0 ,
+ 'group' => self::GROUP_VISITOR,
+ 'targetBlank' => false,
+ 'title' => 'Barre latérale avec menu',
+ 'shortTitle' => 'Barre latérale avec menu',
+ 'block' => 'bar',
+ 'barLeft' => '',
+ 'barRight' => '',
+ 'displayMenu' => 'parents',
+ 'hideMenuSide' => false,
+ 'hideMenuChildren' =>false
+ ],
+ 'mentions-legales' => [
+ 'typeMenu' => 'text',
+ 'iconUrl' => '',
+ 'disable' => false,
+ 'content' => 'mentions-legales.html',
+ 'hideTitle' => true,
+ 'breadCrumb' => false,
+ 'metaDescription' => '',
+ 'metaTitle' => 'Mentions Légales',
+ 'moduleId' => '',
+ 'modulePosition' => 'bottom',
+ 'parentPageId' => '',
+ 'position' => 0,
+ 'group' => 0,
+ 'targetBlank' => false,
+ 'title' => 'Mentions légales',
+ 'shortTitle' => 'Mentions légales',
+ 'block' => '12',
+ 'barLeft' => '',
+ 'barRight' => '',
+ 'displayMenu' => 'none',
+ 'hideMenuSide' => false,
+ 'hideMenuHead' => false,
+ 'hideMenuChildren' => false
+ ],
+ 'erreur302' => [
+ 'typeMenu' => 'text',
+ 'iconUrl' => '',
+ 'disable' => false,
+ 'content' => 'erreur302.html',
+ 'hideTitle' => false,
+ 'breadCrumb' => false,
+ 'metaDescription' => '',
+ 'metaTitle' => '',
+ 'moduleId' => '',
+ 'modulePosition' => '',
+ 'parentPageId' => '',
+ 'position' => 0,
+ 'group' => self::GROUP_VISITOR,
+ 'targetBlank' => false,
+ 'title' => 'Maintenance en cours',
+ 'shortTitle' => 'Maintenance en cours',
+ 'block' => '12',
+ 'barLeft' => '',
+ 'barRight' => '',
+ 'displayMenu' => 'none',
+ 'hideMenuSide' => true,
+ 'hideMenuHead' => true,
+ 'hideMenuChildren' => true
+ ],
+ 'erreur403' => [
+ 'typeMenu' => 'text',
+ 'iconUrl' => '',
+ 'disable' => false,
+ 'content' => 'erreur403.html',
+ 'hideTitle' => false,
+ 'breadCrumb' => false,
+ 'metaDescription' => '',
+ 'metaTitle' => '',
+ 'moduleId' => '',
+ 'modulePosition' => 'bottom',
+ 'parentPageId' => '',
+ 'position' => 0,
+ 'group' => self::GROUP_VISITOR,
+ 'targetBlank' => false,
+ 'title' => 'Erreur 403',
+ 'shortTitle' => 'Erreur 403',
+ 'block' => '12',
+ 'barLeft' => '',
+ 'barRight' => '',
+ 'displayMenu' => 'none',
+ 'hideMenuSide' => false,
+ 'hideMenuChildren' => false
+ ],
+ 'erreur404' => [
+ 'typeMenu' => 'text',
+ 'iconUrl' => '',
+ 'disable' => false,
+ 'content' => 'erreur404.html',
+ 'hideTitle' => false,
+ 'breadCrumb' => false,
+ 'metaDescription' => '',
+ 'metaTitle' => '',
+ 'moduleId' => 'search',
+ 'modulePosition' => 'bottom',
+ 'parentPageId' => '',
+ 'position' => 0,
+ 'group' => self::GROUP_VISITOR,
+ 'targetBlank' => false,
+ 'title' => 'Erreur 404',
+ 'shortTitle' => 'Erreur 404',
+ 'block' => '12',
+ 'barLeft' => '',
+ 'barRight' => '',
+ 'displayMenu' => 'none',
+ 'hideMenuSide' => false,
+ 'hideMenuChildren' =>false
+ ],
+ 'recherche' => [
+ 'typeMenu' => 'icon',
+ 'iconUrl' => 'icones/loupe.png',
+ 'disable' => false,
+ 'content' => 'recherche.html',
+ 'hideTitle' => true,
+ 'breadCrumb' => false,
+ 'metaDescription' => '',
+ 'metaTitle' => '',
+ 'moduleId' => 'search',
+ 'modulePosition' => 'bottom',
+ 'parentPageId' => '',
+ 'position' => 7,
+ 'group' => self::GROUP_VISITOR,
+ 'targetBlank' => false,
+ 'title' => 'Recherche dans le site',
+ 'shortTitle' => 'Rechercher',
+ 'block' => '12',
+ 'barLeft' => '',
+ 'barRight' => '',
+ 'displayMenu' => 'none',
+ 'hideMenuSide' => false,
+ 'hideMenuChildren' => false
+ ],
+ ],
+ 'module' => [
+ 'blog' => [
+ 'config' => [
+ 'feeds' => true,
+ 'feedsLabel' => 'Syndication RSS',
+ 'itemsperPage' => 4
+ ],
+ 'posts' => [
+ 'premier-article' => [
+ 'closeComment' => false,
+ 'comment' => [],
+ 'content' => 'Et eodem impetu Domitianum praecipitem per scalas itidem funibus constrinxerunt, eosque coniunctos per ampla spatia civitatis acri raptavere discursu. iamque artuum et membrorum divulsa conpage superscandentes corpora mortuorum ad ultimam truncata deformitatem velut exsaturati mox abiecerunt in flumen.
Ex his quidam aeternitati se commendari posse per statuas aestimantes eas ardenter adfectant quasi plus praemii de figmentis aereis sensu carentibus adepturi, quam ex conscientia honeste recteque factorum, easque auro curant inbracteari, quod Acilio Glabrioni delatum est primo, cum consiliis armisque regem superasset Antiochum. quam autem sit pulchrum exigua haec spernentem et minima ad ascensus verae gloriae tendere longos et arduos, ut memorat vates Ascraeus, Censorius Cato monstravit. qui interrogatus quam ob rem inter multos... statuam non haberet malo inquit ambigere bonos quam ob rem id non meruerim, quam quod est gravius cur inpetraverim mussitare.
Latius iam disseminata licentia onerosus bonis omnibus Caesar nullum post haec adhibens modum orientis latera cuncta vexabat nec honoratis parcens nec urbium primatibus nec plebeiis.
',
+ 'picture' => 'galerie/toctoc/b.jpg',
+ 'picturePosition' => 'left',
+ 'hidePicture' => false,
+ 'pictureSize' => 20,
+ 'picturePosition' => 'left',
+ 'publishedOn' => 1639816735,
+ 'state' => true,
+ 'title' => 'Premier article',
+ 'userId' => '', // Géré au moment de l'installation
+ 'editConsent' => 'all',
+ 'commentMaxlength' => '500',
+ 'commentApproved' => false,
+ 'commentClose' => false,
+ 'commentNotification' => false,
+ 'commentGroupNotification' => 1
+ ],
+ 'second-article' => [
+ 'closeComment' => false,
+ 'comment' => [],
+ 'content' => 'Et prima post Osdroenam quam, ut dictum est, ab hac descriptione discrevimus, Commagena, nunc Euphratensis, clementer adsurgit, Hierapoli, vetere Nino et Samosata civitatibus amplis inlustris.
Ob haec et huius modi multa, quae cernebantur in paucis, omnibus timeri sunt coepta. et ne tot malis dissimulatis paulatimque serpentibus acervi crescerent aerumnarum, nobilitatis decreto legati mittuntur: Praetextatus ex urbi praefecto et ex vicario Venustus et ex consulari Minervius oraturi, ne delictis supplicia sint grandiora, neve senator quisquam inusitato et inlicito more tormentis exponeretur.
Sed ut tum ad senem senex de senectute, sic hoc libro ad amicum amicissimus scripsi de amicitia. Tum est Cato locutus, quo erat nemo fere senior temporibus illis, nemo prudentior; nunc Laelius et sapiens (sic enim est habitus) et amicitiae gloria excellens de amicitia loquetur. Tu velim a me animum parumper avertas, Laelium loqui ipsum putes. C. Fannius et Q. Mucius ad socerum veniunt post mortem Africani; ab his sermo oritur, respondet Laelius, cuius tota disputatio est de amicitia, quam legens te ipse cognosces.
',
+ 'picture' => 'galerie/grece/port.jpg',
+ 'hidePicture' => false,
+ 'picturePosition' => 'right',
+ 'pictureSize' => 40,
+ 'picturePosition' => 'right',
+ 'publishedOn' => 1639816823,
+ 'state' => true,
+ 'title' => 'Second article',
+ 'userId' => '', // Géré au moment de l'installation
+ 'editConsent' => 'all',
+ 'commentMaxlength' => '500',
+ 'commentApproved' => false,
+ 'commentClose' => false,
+ 'commentNotification' => false,
+ 'commentGroupNotification' => 1
+ ],
+ ],
+ ],
+ 'galeries' => [
+ 'content' => [
+ 'toctoc' => [
+ 'config' => [
+ 'name' => 'Toctoc',
+ 'directory' => self::FILE_DIR.'source/galerie/toctoc',
+ 'homePicture' => 'a.jpg',
+ 'sort' => 'SORT_ASC',
+ 'position' => 0,
+ 'fullscreen' => false
+ ],
+ 'legend' => [
+ 'a.jpg' => '',
+ 'b.jpg' => '',
+ 'c.jpg' => ''
+ ],
+ 'positions' => []
+ ],
+ 'grece' => [
+ 'config' => [
+ 'name' => 'Grèce',
+ 'directory' => self::FILE_DIR.'source/galerie/grece',
+ 'homePicture' => 'philosophe.jpg',
+ 'sort' => 'SORT_ASC',
+ 'position' => 1,
+ 'fullscreen' => false
+ ],
+ 'legend' => [
+ 'chapiteaujpg' => 'Chapiteau',
+ 'philosophejpg' => 'Philosophe',
+ 'portjpg' => 'Port'
+ ],
+ 'positions' => []
+ ],
+ ],
+ 'theme' => [
+ 'thumbAlign' => 'center',
+ 'thumbWidth' => '18em',
+ 'thumbHeight' => '15em',
+ 'thumbMargin' => '.5em',
+ 'thumbBorder' => '.1em',
+ 'thumbOpacity' => '.7',
+ 'thumbBorderColor' => 'rgba(221, 221, 221, 1)',
+ 'thumbRadius' => '.3em',
+ 'thumbShadows' => '1px 1px 10px',
+ 'thumbShadowsColor'=> 'rgba(125, 125, 125, 1)',
+ 'legendHeight' => '.375em',
+ 'legendAlign' => 'center',
+ 'legendTextColor' => 'rgba(255, 255, 255, 1)',
+ 'legendBgColor' => 'rgba(0, 0, 0, .6)',
+ 'style' => 'site/data/modules/gallery/galeries.css'
+ ],
+ 'config' => [
+ 'versionData' => '3.0'
+ ],
+ ],
+ 'contact' => [
+ 'config' => [
+ 'button' => '',
+ 'captcha' => true,
+ 'group' => self::GROUP_ADMIN,
+ 'pageId' => '',
+ 'subject' => ''
+ ],
+ 'data' => [],
+ 'input' => [
+ [
+ 'name' => 'Adresse mail',
+ 'position' => 1,
+ 'required' => true,
+ 'type' => 'mail',
+ 'values' => ''
+ ],
+ [
+ 'name' => 'Sujet',
+ 'position' => 2,
+ 'required' => true,
+ 'type' => 'text',
+ 'values' => ''
+ ],
+ [
+ 'name' => 'Message',
+ 'position' => 3,
+ 'required' => true,
+ 'type' => 'textarea',
+ 'values' => ''
+ ]
+ ]
+ ]
+ ],
+ 'locale' => [
+ 'homePageId' => 'accueil',
+ 'page302' => 'none',
+ 'page403' => 'none',
+ 'page404' => 'none',
+ 'legalPageId' => 'none',
+ 'searchPageId' => 'none',
+ 'metaDescription' => 'DeltaCMS est un CMS sans base de données qui permet de créer et gérer facilement un site web sans aucune connaissance en programmation.',
+ 'title' => 'Avec DeltaCMS installez votre site en quelques clics !'
+ ]
+ ];
+
+ public static $siteContent = [
+ 'accueil' => [
+ 'content' => 'Bienvenue sur votre nouveau site DeltaCMS !
+ Un email contenant le récapitulatif de votre installation vient de vous être envoyé.
+ Connectez-vous dès maintenant à votre espace membre afin de créer un site à votre image ! Vous pourrez personnaliser le thème, créer des pages, ajouter des utilisateurs et bien plus encore !
'
+ ],
+ 'enfant' => [
+ 'content' => 'Vous pouvez assigner des parents à vos pages afin de mieux organiser votre menu !
+
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus ac dolor arcu. Cras dignissim finibus nisi, vulputate egestas mauris faucibus ultricies. Nullam ornare pretium eleifend. Donec placerat purus ut turpis dapibus condimentum. Fusce at leo pharetra nisl vestibulum fermentum. Maecenas feugiat justo at semper tincidunt. Integer in blandit lorem.
+
Ergo ego senator inimicus, si ita vultis, homini, amicus esse, sicut semper fui, rei publicae debeo. Quid? si ipsas inimicitias, depono rei publicae causa, quis me tandem iure reprehendet, praesertim cum ego omnium meorum consiliorum atque factorum exempla semper ex summorum hominum consiliis atque factis mihi censuerim petenda.
+
Principium autem unde latius se funditabat, emersit ex negotio tali. Chilo ex vicario et coniux eius Maxima nomine, questi apud Olybrium ea tempestate urbi praefectum, vitamque suam venenis petitam adseverantes inpetrarunt ut hi, quos suspectati sunt, ilico rapti conpingerentur in vincula, organarius Sericus et Asbolius palaestrita et aruspex Campensis.
+
'
+ ],
+ 'privee'=> [
+ 'content' => 'Cette page n\'est visible que des membres de votre site !
+
+
Eius populus ab incunabulis primis ad usque pueritiae tempus extremum, quod annis circumcluditur fere trecentis, circummurana pertulit bella, deinde aetatem ingressus adultam post multiplices bellorum aerumnas Alpes transcendit et fretum, in iuvenem erectus et virum ex omni plaga quam orbis ambit inmensus, reportavit laureas et triumphos, iamque vergens in senium et nomine solo aliquotiens vincens ad tranquilliora vitae discessit.
+
Exsistit autem hoc loco quaedam quaestio subdifficilis, num quando amici novi, digni amicitia, veteribus sint anteponendi, ut equis vetulis teneros anteponere solemus. Indigna homine dubitatio! Non enim debent esse amicitiarum sicut aliarum rerum satietates; veterrima quaeque, ut ea vina, quae vetustatem ferunt, esse debet suavissima; verumque illud est, quod dicitur, multos modios salis simul edendos esse, ut amicitiae munus expletum sit.
+
'
+ ],
+ 'mise-en-page' => [
+ 'content' => 'Vous pouvez ajouter une ou deux barres latérales aux pages de votre site. Cette mise en page se définit dans les paramètres de page et peut s\'appliquer à l\'ensemble du site ou à certaines pages en particulier, au gré de vos désirs.
+ Pour créer une barre latérale à partir d\'une "Nouvelle page" ou transformer une page existante en barre latérale, sélectionnez l\'option dans la liste des gabarits. On peut bien sûr définir autant de barres latérales qu\'on le souhaite.
+ Cette nouvelle fonctionnalité autorise toutes sortes d\'utilisations : texte, encadrés, images, vidéos... ou simple marge blanche. Seule restriction : on ne peut pas installer un module dans une barre latérale.
+ La liste des barres disponibles et leur emplacement s\'affichent en fonction du gabarit que vous aurez choisi.'
+ ],
+ 'menu-lateral' => [
+ 'content' => '
Cette page illustre la possibilité d\'ajouter un menu dans les barres latérales.
+ Deux types de menus sont disponibles : l\'un reprenant les rubriques du menu principal comme celui-ci, l\'autre listant les pages d\'une même rubrique. Le choix du type de menu se fait dans la page de configuration d\'une barre latérale.
+ Pour ajouter un menu à une page, choisissez une barre latérale avec menu dans la page de configuration. Les bulles d\'aide de la rubrique "Menu" expliquent comment masquer une page.
'
+ ],
+ 'blog' => [
+ 'content' => 'Cette page contient une instance du module de blog. Cliquez sur un article afin de le lire et de poster des commentaires.
'
+ ],
+ 'galeries' => [
+ 'content' => 'Cette page contient une instance du module de galeries photos. Cliquez sur la galerie ci-dessous afin de voir les photos qu\'elle contient.
'
+ ],
+ 'contact' => [
+ 'content' => 'Cette page contient un exemple de formulaire conçu à partir du module de génération de formulaires. Il est configuré pour envoyer les données saisies par mail aux administrateurs du site.
'
+ ],
+ 'barre' => [
+ 'content' => 'DeltaCMS
Le CMS sans base de données à l\'installation simple et rapide
'
+ ],
+ 'barrelateraleavecmenu' => [
+ 'content' => '
'
+ ],
+ 'mentions-legales' => [
+ 'content' => 'Conditions générales d\'utilisation
+ En vigueur au 01/06/2020
+ AvertissementCette page fictive est donnée à titre indicatif elle a été réalisée à l\'aide d\'un générateur : https://www.legalplace.fr
+ Les présentes conditions générales d\'utilisation (dites « CGU ») ont pour objet l\'encadrement juridique des modalités de mise à disposition du site et des services par et de définir les conditions d’accès et d’utilisation des services par « l\'Utilisateur ».
+ Les présentes CGU sont accessibles sur le site à la rubrique «CGU».
+ Toute inscription ou utilisation du site implique l\'acceptation sans aucune réserve ni restriction des présentes CGU par l’utilisateur. Lors de l\'inscription sur le site via le Formulaire d’inscription, chaque utilisateur accepte expressément les présentes CGU en cochant la case précédant le texte suivant : « Je reconnais avoir lu et compris les CGU et je les accepte ».
+ En cas de non-acceptation des CGU stipulées dans le présent contrat, l\'Utilisateur se doit de renoncer à l\'accès des services proposés par le site.
+ www.site.com se réserve le droit de modifier unilatéralement et à tout moment le contenu des présentes CGU.
+ Article 1 : Les mentions légales
+ L’édition et la direction de la publication du site www.site.com est assurée par John Doe, domicilié 1 rue de Paris - 75016 PARIS.
+ Numéro de téléphone est 0102030405
+ Adresse e-mail john.doe@deltacms.fr.
+ L\'hébergeur du site www.site.com est la société Nom de l\'hébergeur, dont le siège social est situé au 12 rue de Lyon - 69001 Lyon, avec le numéro de téléphone : 0401020305.
+ ARTICLE 2 : Accès au site
+ Le site www.site.com permet à l\'Utilisateur un accès gratuit aux services suivants :
+ Le site internet propose les services suivants :
+ Publication
+ Le site est accessible gratuitement en tout lieu à tout Utilisateur ayant un accès à Internet. Tous les frais supportés par l\'Utilisateur pour accéder au service (matériel informatique, logiciels, connexion Internet, etc.) sont à sa charge.
+ L’Utilisateur non membre n\'a pas accès aux services réservés. Pour cela, il doit s’inscrire en remplissant le formulaire. En acceptant de s’inscrire aux services réservés, l’Utilisateur membre s’engage à fournir des informations sincères et exactes concernant son état civil et ses coordonnées, notamment son adresse email.
+ Pour accéder aux services, l’Utilisateur doit ensuite s\'identifier à l\'aide de son identifiant et de son mot de passe qui lui seront communiqués après son inscription.
+ Tout Utilisateur membre régulièrement inscrit pourra également solliciter sa désinscription en se rendant à la page dédiée sur son espace personnel. Celle-ci sera effective dans un délai raisonnable.
+ Tout événement dû à un cas de force majeure ayant pour conséquence un dysfonctionnement du site ou serveur et sous réserve de toute interruption ou modification en cas de maintenance, n\'engage pas la responsabilité de www.site.com. Dans ces cas, l’Utilisateur accepte ainsi ne pas tenir rigueur à l’éditeur de toute interruption ou suspension de service, même sans préavis.
+ L\'Utilisateur a la possibilité de contacter le site par messagerie électronique à l’adresse email de l’éditeur communiqué à l’ARTICLE 1.
+ ARTICLE 3 : Collecte des données
+ Le site est exempté de déclaration à la Commission Nationale Informatique et Libertés (CNIL) dans la mesure où il ne collecte aucune donnée concernant les Utilisateurs.
+ ARTICLE 4 : Propriété intellectuelle
+ Les marques, logos, signes ainsi que tous les contenus du site (textes, images, son…) font l\'objet d\'une protection par le Code de la propriété intellectuelle et plus particulièrement par le droit d\'auteur.
+ L\'Utilisateur doit solliciter l\'autorisation préalable du site pour toute reproduction, publication, copie des différents contenus. Il s\'engage à une utilisation des contenus du site dans un cadre strictement privé, toute utilisation à des fins commerciales et publicitaires est strictement interdite.
+ Toute représentation totale ou partielle de ce site par quelque procédé que ce soit, sans l’autorisation expresse de l’exploitant du site Internet constituerait une contrefaçon sanctionnée par l’article L 335-2 et suivants du Code de la propriété intellectuelle.
+ Il est rappelé conformément à l’article L122-5 du Code de propriété intellectuelle que l’Utilisateur qui reproduit, copie ou publie le contenu protégé doit citer l’auteur et sa source.
+ ARTICLE 5 : Responsabilité
+ Les sources des informations diffusées sur le site www.site.com sont réputées fiables mais le site ne garantit pas qu’il soit exempt de défauts, d’erreurs ou d’omissions.
+ Les informations communiquées sont présentées à titre indicatif et général sans valeur contractuelle. Malgré des mises à jour régulières, le site www.site.com ne peut être tenu responsable de la modification des dispositions administratives et juridiques survenant après la publication. De même, le site ne peut être tenue responsable de l’utilisation et de l’interprétation de l’information contenue dans ce site.
+ L\'Utilisateur s\'assure de garder son mot de passe secret. Toute divulgation du mot de passe, quelle que soit sa forme, est interdite. Il assume les risques liés à l\'utilisation de son identifiant et mot de passe. Le site décline toute responsabilité.
+ Le site www.site.com ne peut être tenu pour responsable d’éventuels virus qui pourraient infecter l’ordinateur ou tout matériel informatique de l’Internaute, suite à une utilisation, à l’accès, ou au téléchargement provenant de ce site.
+ La responsabilité du site ne peut être engagée en cas de force majeure ou du fait imprévisible et insurmontable d\'un tiers.
+ ARTICLE 6 : Liens hypertextes
+ Des liens hypertextes peuvent être présents sur le site. L’Utilisateur est informé qu’en cliquant sur ces liens, il sortira du site www.site.com. Ce dernier n’a pas de contrôle sur les pages web sur lesquelles aboutissent ces liens et ne saurait, en aucun cas, être responsable de leur contenu.
+ ARTICLE 7 : Cookies
+ L’Utilisateur est informé que lors de ses visites sur le site, un cookie peut s’installer automatiquement sur son logiciel de navigation.
+ Les cookies sont de petits fichiers stockés temporairement sur le disque dur de l’ordinateur de l’Utilisateur par votre navigateur et qui sont nécessaires à l’utilisation du site www.site.com. Les cookies ne contiennent pas d’information personnelle et ne peuvent pas être utilisés pour identifier quelqu’un. Un cookie contient un identifiant unique, généré aléatoirement et donc anonyme. Certains cookies expirent à la fin de la visite de l’Utilisateur, d’autres restent.
+ L’information contenue dans les cookies est utilisée pour améliorer le site www.site.com.
+ En naviguant sur le site, L’Utilisateur les accepte.
+ L’Utilisateur doit toutefois donner son consentement quant à l’utilisation de certains cookies.
+ A défaut d’acceptation, l’Utilisateur est informé que certaines fonctionnalités ou pages risquent de lui être refusées.
+ L’Utilisateur pourra désactiver ces cookies par l’intermédiaire des paramètres figurant au sein de son logiciel de navigation.
+ ARTICLE 8 : Droit applicable et juridiction compétente
+ La législation française s\'applique au présent contrat. En cas d\'absence de résolution amiable d\'un litige né entre les parties, les tribunaux français seront seuls compétents pour en connaître.
+ Pour toute question relative à l’application des présentes CGU, vous pouvez joindre l’éditeur aux coordonnées inscrites à l’ARTICLE 1.
'
+ ],
+ 'erreur302' => [
+ 'content' =>'Notre site est actuellement en maintenance. Nous sommes désolés pour la gêne occasionnée et faisons notre possible pour être rapidement de retour.
+ '
+ ],
+ 'erreur403' => [
+ 'content' => 'Vous n\'êtes pas autorisé à accéder à cette page...
Personnalisez cette page à votre convenance sans qu\'elle apparaisse dans les menus.
'
+ ],
+ 'erreur404' => [
+ 'content' => '
Oups ! La page demandée est introuvable...
Personnalisez cette page à votre convenance sans qu\'elle apparaisse dans les menus.
'
+ ],
+ 'recherche' => [
+ 'content' => '
Rechercher dans le site
'
+ ]
+ ];
+}
diff --git a/core/module/install/ressource/files.tar.gz b/core/module/install/ressource/files.tar.gz
new file mode 100644
index 0000000..753ba96
Binary files /dev/null and b/core/module/install/ressource/files.tar.gz differ
diff --git a/core/module/install/ressource/themes/theme_default.zip b/core/module/install/ressource/themes/theme_default.zip
new file mode 100644
index 0000000..ee7c330
Binary files /dev/null and b/core/module/install/ressource/themes/theme_default.zip differ
diff --git a/core/module/install/ressource/themes/theme_hirondelles_960px.zip b/core/module/install/ressource/themes/theme_hirondelles_960px.zip
new file mode 100644
index 0000000..c7d82f8
Binary files /dev/null and b/core/module/install/ressource/themes/theme_hirondelles_960px.zip differ
diff --git a/core/module/install/ressource/themes/theme_montagne_960px.zip b/core/module/install/ressource/themes/theme_montagne_960px.zip
new file mode 100644
index 0000000..db44f63
Binary files /dev/null and b/core/module/install/ressource/themes/theme_montagne_960px.zip differ
diff --git a/core/module/install/ressource/themes/theme_sansbanniere_fluide.zip b/core/module/install/ressource/themes/theme_sansbanniere_fluide.zip
new file mode 100644
index 0000000..7b57aa9
Binary files /dev/null and b/core/module/install/ressource/themes/theme_sansbanniere_fluide.zip differ
diff --git a/core/module/install/ressource/themes/themes.json b/core/module/install/ressource/themes/themes.json
new file mode 100644
index 0000000..14e9a12
--- /dev/null
+++ b/core/module/install/ressource/themes/themes.json
@@ -0,0 +1,18 @@
+{
+ "defaut" : {
+ "name": "Le thème par défaut, ambiance bleue, largeur 100%",
+ "filename": ""
+ },
+ "montagne": {
+ "name": "Thème avec ambiance montagne, largeur 960px",
+ "filename": "theme_montagne_960px.zip"
+ },
+ "hirondelles": {
+ "name": "Thème avec ambiance bleue, largeur 960px",
+ "filename": "theme_hirondelles_960px.zip"
+ },
+ "fluide": {
+ "name": "Thème sans bannière avec ambiance grise, largeur 100%",
+ "filename": "theme_sansbanniere_fluide.zip"
+ }
+}
\ No newline at end of file
diff --git a/core/module/install/view/index/index.css b/core/module/install/view/index/index.css
new file mode 100644
index 0000000..d7c543b
--- /dev/null
+++ b/core/module/install/view/index/index.css
@@ -0,0 +1 @@
+/* Vide */
\ No newline at end of file
diff --git a/core/module/install/view/index/index.js.php b/core/module/install/view/index/index.js.php
new file mode 100644
index 0000000..c96e6b0
--- /dev/null
+++ b/core/module/install/view/index/index.js.php
@@ -0,0 +1,40 @@
+/**
+ * This file is part of DeltaCMS.
+ * For full copyright and license information, please see the LICENSE
+ * file that was distributed with this source code.
+ * @author Sylvain Lelièvre
+ * @copyright Copyright (C) 2021-2022, Sylvain Lelièvre
+ * @license GNU General Public License, version 3
+ * @link https://deltacms.fr/
+ *
+ * Delta was created from version 11.2.00.24 of ZwiiCMS
+ * @author Rémi Jean
+ * @copyright Copyright (C) 2008-2018, Rémi Jean
+ * @author Frédéric Tempez
+ * @copyright Copyright (C) 2018-2021, Frédéric Tempez
+ */
+
+/**
+ * Affichage de l'id en simulant FILTER_ID
+ */
+$("#installId").on("change keydown keyup", function(event) {
+ var userId = $(this).val();
+ if(
+ event.keyCode !== 8 // BACKSPACE
+ && event.keyCode !== 37 // LEFT
+ && event.keyCode !== 39 // RIGHT
+ && event.keyCode !== 46 // DELETE
+ && window.getSelection().toString() !== userId // Texte sélectionné
+ ) {
+ var searchReplace = {
+ "á": "a", "à": "a", "â": "a", "ä": "a", "ã": "a", "å": "a", "ç": "c", "é": "e", "è": "e", "ê": "e", "ë": "e", "í": "i", "ì": "i", "î": "i", "ï": "i", "ñ": "n", "ó": "o", "ò": "o", "ô": "o", "ö": "o", "õ": "o", "ú": "u", "ù": "u", "û": "u", "ü": "u", "ý": "y", "ÿ": "y",
+ "Á": "A", "À": "A", "Â": "A", "Ä": "A", "Ã": "A", "Å": "A", "Ç": "C", "É": "E", "È": "E", "Ê": "E", "Ë": "E", "Í": "I", "Ì": "I", "Î": "I", "Ï": "I", "Ñ": "N", "Ó": "O", "Ò": "O", "Ô": "O", "Ö": "O", "Õ": "O", "Ú": "U", "Ù": "U", "Û": "U", "Ü": "U", "Ý": "Y", "Ÿ": "Y",
+ "'": "-", "\"": "-", " ": "-"
+ };
+ userId = userId.replace(/[áàâäãåçéèêëíìîïñóòôöõúùûüýÿ'" ]/ig, function(match) {
+ return searchReplace[match];
+ });
+ userId = userId.replace(/[^a-z0-9-]/ig, "");
+ $(this).val(userId);
+ }
+});
\ No newline at end of file
diff --git a/core/module/install/view/index/index.php b/core/module/install/view/index/index.php
new file mode 100644
index 0000000..2fc1721
--- /dev/null
+++ b/core/module/install/view/index/index.php
@@ -0,0 +1,61 @@
+Renseignez les champs ci-dessous pour finaliser l'installation.
+
+ 'off',
+ 'label' => 'Identifiant'
+ ]); ?>
+
+
+ 'off',
+ 'label' => 'Mot de passe'
+ ]); ?>
+
+
+ 'off',
+ 'label' => 'Confirmation'
+ ]); ?>
+
+
+ 'off',
+ 'label' => 'Adresse mail'
+ ]); ?>
+
+
+ 'off',
+ 'label' => 'Prénom'
+ ]); ?>
+
+
+ 'off',
+ 'label' => 'Nom'
+ ]); ?>
+
+
+
+
+
+
+ 'Installer'
+ ]); ?>
+
+
+
\ No newline at end of file
diff --git a/core/module/install/view/update/update.css b/core/module/install/view/update/update.css
new file mode 100644
index 0000000..7a3bf64
--- /dev/null
+++ b/core/module/install/view/update/update.css
@@ -0,0 +1,20 @@
+/**
+ * This file is part of DeltaCMS.
+ * For full copyright and license information, please see the LICENSE
+ * file that was distributed with this source code.
+ * @author Sylvain Lelièvre
+ * @copyright Copyright (C) 2021-2022, Sylvain Lelièvre
+ * @license GNU General Public License, version 3
+ * @link https://deltacms.fr/
+ *
+ * Delta was created from version 11.2.00.24 of ZwiiCMS
+ * @author Rémi Jean
+ * @copyright Copyright (C) 2008-2018, Rémi Jean
+ * @author Frédéric Tempez
+ * @copyright Copyright (C) 2018-2021, Frédéric Tempez
+ */
+
+
+/** NE PAS EFFACER
+* admin.css
+*/
\ No newline at end of file
diff --git a/core/module/install/view/update/update.js.php b/core/module/install/view/update/update.js.php
new file mode 100644
index 0000000..667764e
--- /dev/null
+++ b/core/module/install/view/update/update.js.php
@@ -0,0 +1,63 @@
+/**
+ * Exécution des différentes étapes de mise à jour
+ */
+function step(i, data) {
+ // Affiche le texte de progression
+ $(".installUpdateProgressText").hide();
+ $(".installUpdateProgressText[data-id=" + i + "]").show();
+ // Requête ajax
+ $.ajax({
+ type: "POST",
+ url: "?install/steps", // Ignore la réécriture d'URL
+ data: {
+ step: i,
+ data: data
+ },
+ // Succès de la requête
+ success: function(result) {
+ setTimeout(function() {
+ // Succès
+ if(result.success === true) {
+ // Fin de la mise à jour
+ if(i === 4) {
+ // Affiche le message de succès
+ $("#installUpdateSuccess").show();
+ // Déverrouille le bouton "Terminer"
+ $("#installUpdateEnd").removeClass("disabled");
+ // Cache le texte de progression
+ $("#installUpdateProgress").hide();
+ }
+ // Prochaine étape
+ else {
+ step(i + 1, result.data);
+ }
+ }
+ // Échec
+ else {
+ // Affiche le message d'erreur
+ $("#installUpdateErrorStep").text(i);
+ $("#installUpdateError").show();
+ // Déverrouille le bouton "Terminer"
+ $("#installUpdateEnd").removeClass("disabled");
+ // Cache le texte de progression
+ $("#installUpdateProgress").hide();
+ // Affiche le résultat dans la console
+ console.error(result);
+ }
+ }, 2000);
+ },
+ // Échec de la requête
+ error: function(xhr) {
+ // Affiche le message d'erreur
+ $("#installUpdateErrorStep").text(0);
+ $("#installUpdateError").show();
+ // Déverrouille le bouton "Terminer"
+ $("#installUpdateEnd").removeClass("disabled");
+ // Cache le texte de progression
+ $("#installUpdateProgress").hide();
+ // Affiche l'erreur dans la console
+ console.error(xhr);
+ }
+ });
+}
+$(window).on("load", step(1, null));
\ No newline at end of file
diff --git a/core/module/install/view/update/update.php b/core/module/install/view/update/update.php
new file mode 100644
index 0000000..53ababf
--- /dev/null
+++ b/core/module/install/view/update/update.php
@@ -0,0 +1,29 @@
+Mise à jour de Deltacms vers Deltacms .
+Afin d'assurer le bon fonctionnement de Deltacms, veuillez ne pas fermer cette page avant la fin de l'opération.
+
+
+
+
+ 1/4 : Préparation...
+ 2/4 : Téléchargement...
+ 3/4 : Installation...
+ 4/4 : Configuration...
+
+
+
+ Une erreur est survenue lors de l'étape .
+
+
+
+ Mise à jour terminée avec succès.
+
+
+
+ 'Terminer',
+ 'href' => helper::baseUrl() . 'config',
+ 'ico' => 'check',
+ 'class' => 'disabled'
+ ]); ?>
+
+
\ No newline at end of file
diff --git a/core/module/maintenance/maintenance.php b/core/module/maintenance/maintenance.php
new file mode 100644
index 0000000..e3d5f5d
--- /dev/null
+++ b/core/module/maintenance/maintenance.php
@@ -0,0 +1,56 @@
+
+ * @copyright Copyright (C) 2021-2022, Sylvain Lelièvre
+ * @license GNU General Public License, version 3
+ * @link https://deltacms.fr/
+ *
+ * Delta was created from version 11.2.00.24 of ZwiiCMS
+ * @author Rémi Jean
+ * @copyright Copyright (C) 2008-2018, Rémi Jean
+ * @author Frédéric Tempez
+ * @copyright Copyright (C) 2018-2021, Frédéric Tempez
+ */
+
+class maintenance extends common {
+
+ public static $actions = [
+ 'index' => self::GROUP_VISITOR
+ ];
+
+ /**
+ * Maintenance
+ */
+ public function index() {
+ // Redirection vers l'accueil après rafraîchissement et que la maintenance est terminée.
+ if($this->getData(['config', 'maintenance']) == False){
+ header('Location:' . helper::baseUrl());
+ exit();
+ }
+ // Page perso définie et existante
+ if ($this->getData(['locale','page302']) !== 'none'
+ AND $this->getData(['page',$this->getData(['locale','page302'])]) ) {
+ $this->addOutput([
+ 'display' => self::DISPLAY_LAYOUT_LIGHT,
+ 'title' => $this->getData(['page',$this->getData(['locale','page302']),'hideTitle'])
+ ? ''
+ : $this->getData(['page',$this->getData(['locale','page302']),'title']),
+ //'content' => $this->getdata(['page',$this->getData(['locale','page302']),'content']),
+ 'content' => $this->getPage($this->getData(['locale','page302']), self::$i18n),
+ 'view' => 'index'
+ ]);
+ } else {
+ // Valeurs en sortie
+ $this->addOutput([
+ 'display' => self::DISPLAY_LAYOUT_LIGHT,
+ 'title' => 'Maintenance en cours...',
+ 'view' => 'index'
+ ]);
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/core/module/maintenance/view/index/index.css b/core/module/maintenance/view/index/index.css
new file mode 100644
index 0000000..bb166ea
--- /dev/null
+++ b/core/module/maintenance/view/index/index.css
@@ -0,0 +1 @@
+/* vide */
\ No newline at end of file
diff --git a/core/module/maintenance/view/index/index.php b/core/module/maintenance/view/index/index.php
new file mode 100644
index 0000000..de41231
--- /dev/null
+++ b/core/module/maintenance/view/index/index.php
@@ -0,0 +1,10 @@
+Notre site est actuellement en maintenance. Nous sommes désolés pour la gêne occasionnée et faisons notre possible pour être rapidement de retour.
+
+
+ 'Connexion',
+ 'href' => helper::baseUrl() . 'user/login',
+ 'ico' => 'lock'
+ ]); ?>
+
+
\ No newline at end of file
diff --git a/core/module/page/page.php b/core/module/page/page.php
new file mode 100644
index 0000000..fdf4280
--- /dev/null
+++ b/core/module/page/page.php
@@ -0,0 +1,514 @@
+
+ * @copyright Copyright (C) 2021-2022, Sylvain Lelièvre
+ * @license GNU General Public License, version 3
+ * @link https://deltacms.fr/
+ *
+ * Delta was created from version 11.2.00.24 of ZwiiCMS
+ * @author Rémi Jean
+ * @copyright Copyright (C) 2008-2018, Rémi Jean
+ * @author Frédéric Tempez
+ * @copyright Copyright (C) 2018-2021, Frédéric Tempez
+ */
+
+class page extends common {
+
+ public static $actions = [
+ 'add' => self::GROUP_MODERATOR,
+ 'delete' => self::GROUP_MODERATOR,
+ 'edit' => self::GROUP_MODERATOR,
+ 'duplicate' => self::GROUP_MODERATOR
+ ];
+ public static $pagesNoParentId = [
+ '' => 'Aucune'
+ ];
+ public static $pagesBarId = [
+ '' => 'Aucune'
+ ];
+ public static $moduleIds = [];
+
+ public static $typeMenu = [
+ 'text' => 'Texte',
+ 'icon' => 'Icône',
+ 'icontitle' => 'Icône avec bulle de texte'
+ ];
+ // Position du module
+ public static $modulePosition = [
+ 'bottom' => 'En bas',
+ 'top' => 'En haut',
+ 'free' => 'Libre'
+ ];
+ public static $pageBlocks = [
+ '12' => 'Page standard',
+ '4-8' => 'Barre 1/3 - page 2/3',
+ '8-4' => 'Page 2/3 - barre 1/3',
+ '3-9' => 'Barre 1/4 - page 3/4',
+ '9-3' => 'Page 3/4 - barre 1/4',
+ '3-6-3' => 'Barre 1/4 - page 1/2 - barre 1/4',
+ '2-7-3' => 'Barre 2/12 - page 7/12 - barre 3/12 ',
+ '3-7-2' => 'Barre 3/12 - page 7/12 - barre 2/12 ',
+ 'bar' => 'Barre latérale'
+ ];
+ public static $displayMenu = [
+ 'none' => 'Aucun',
+ 'parents' => 'Le menu',
+ 'children' => 'Le sous-menu de la page parente'
+ ];
+
+
+ /**
+ * Duplication
+ */
+ public function duplicate() {
+ // Adresse sans le token
+ $url = explode('&',$this->getUrl(2));
+ // La page n'existe pas
+ if($this->getData(['page', $url[0]]) === null) {
+ // Valeurs en sortie
+ $this->addOutput([
+ 'access' => false
+ ]);
+ } // Jeton incorrect
+ elseif(!isset($_GET['csrf'])) {
+ // Valeurs en sortie
+ $this->addOutput([
+ 'redirect' => helper::baseUrl() . 'page/edit/' . $url[0],
+ 'notification' => 'Jeton invalide'
+ ]);
+ }
+ elseif ($_GET['csrf'] !== $_SESSION['csrf']) {
+ // Valeurs en sortie
+ $this->addOutput([
+ 'redirect' => helper::baseUrl() . 'page/edit/' . $url[0],
+ 'notification' => 'Suppression non autorisée'
+ ]);
+ }
+ // Duplication de la page
+ $pageTitle = $this->getData(['page',$url[0],'title']);
+ $pageId = helper::increment(helper::filter($pageTitle, helper::FILTER_ID), $this->getData(['page']));
+ $pageId = helper::increment($pageId, self::$coreModuleIds);
+ $pageId = helper::increment($pageId, self::$moduleIds);
+ $data = $this->getData([
+ 'page',
+ $url[0]
+ ]);
+ // Ecriture
+ $this->setData (['page',$pageId,$data]);
+ $notification = 'La page a été dupliquée';
+ // Duplication du module présent
+ if ($this->getData(['page',$url[0],'moduleId'])) {
+ $data = $this->getData([
+ 'module',
+ $url[0]
+ ]);
+ // Ecriture
+ $this->setData (['module',$pageId,$data]);
+ $notification = 'La page et son module ont été dupliqués';
+ }
+ // Valeurs en sortie
+ $this->addOutput([
+ 'redirect' => helper::baseUrl() . 'page/edit/' . $pageId,
+ 'notification' => $notification,
+ 'state' => true
+ ]);
+ }
+
+
+ /**
+ * Création
+ */
+ public function add() {
+ $pageTitle = 'Nouvelle page';
+ $pageId = helper::increment(helper::filter($pageTitle, helper::FILTER_ID), $this->getData(['page']));
+ $this->setData([
+ 'page',
+ $pageId,
+ [
+ 'typeMenu' => 'text',
+ 'iconUrl' => '',
+ 'disable' => false,
+ 'content' => $pageId . '.html',
+ 'hideTitle' => false,
+ 'breadCrumb' => false,
+ 'metaDescription' => '',
+ 'metaTitle' => '',
+ 'moduleId' => '',
+ 'parentPageId' => '',
+ 'modulePosition' => 'bottom',
+ 'position' => 0,
+ 'group' => self::GROUP_VISITOR,
+ 'targetBlank' => false,
+ 'title' => $pageTitle,
+ 'shortTitle' => $pageTitle,
+ 'block' => '12',
+ 'barLeft' => '',
+ 'barRight' => '',
+ 'displayMenu' => '0',
+ 'hideMenuSide' => false,
+ 'hideMenuHead' => false,
+ 'hideMenuChildren' => false
+ ]
+ ]);
+ // Creation du contenu de la page
+ if (!is_dir(self::DATA_DIR . self::$i18n . '/content')) {
+ mkdir(self::DATA_DIR . self::$i18n . '/content', 0755);
+ }
+ //file_put_contents(self::DATA_DIR . self::$i18n . '/content/' . $pageId . '.html', 'Contenu de votre nouvelle page.
');
+ $this->setPage($pageId, 'Contenu de votre nouvelle page.
', self::$i18n);
+ // Met à jour le site map
+ $this->createSitemap('all');
+ // Valeurs en sortie
+ $this->addOutput([
+ 'redirect' => helper::baseUrl() . $pageId,
+ 'notification' => 'Nouvelle page créée',
+ 'state' => true
+ ]);
+ }
+
+ /**
+ * Suppression
+ */
+ public function delete() {
+ // $url prend l'adresse sans le token
+ $url = explode('&',$this->getUrl(2));
+ // La page n'existe pas
+ if($this->getData(['page', $url[0]]) === null) {
+ // Valeurs en sortie
+ $this->addOutput([
+ 'access' => false
+ ]);
+ } // Jeton incorrect
+ elseif(!isset($_GET['csrf'])) {
+ // Valeurs en sortie
+ $this->addOutput([
+ 'redirect' => helper::baseUrl() . 'page/edit/' . $url[0],
+ 'notification' => 'Jeton invalide'
+ ]);
+ }
+ elseif ($_GET['csrf'] !== $_SESSION['csrf']) {
+ // Valeurs en sortie
+ $this->addOutput([
+ 'redirect' => helper::baseUrl() . 'page/edit/' . $url[0],
+ 'notification' => 'Suppression non autorisée'
+ ]);
+ }
+ // Impossible de supprimer la page d'accueil
+ elseif($url[0] === $this->getData(['locale', 'homePageId'])) {
+ // Valeurs en sortie
+ $this->addOutput([
+ 'redirect' => helper::baseUrl() . 'config',
+ 'notification' => 'Désactiver la page dans la configuration avant de la supprimer'
+ ]);
+ }
+ // Impossible de supprimer la page de recherche affectée
+ elseif($url[0] === $this->getData(['locale', 'searchPageId'])) {
+ // Valeurs en sortie
+ $this->addOutput([
+ 'redirect' => helper::baseUrl() . 'config',
+ 'notification' => 'Désactiver la page dans la configuration avant de la supprimer'
+ ]);
+ }
+ // Impossible de supprimer la page des mentions légales affectée
+ elseif($url[0] === $this->getData(['locale', 'legalPageId'])) {
+ // Valeurs en sortie
+ $this->addOutput([
+ 'redirect' => helper::baseUrl() . 'config',
+ 'notification' => 'Désactiver la page dans la configuration avant de la supprimer'
+ ]);
+ }
+ // Impossible de supprimer la page des mentions légales affectée
+ elseif($url[0] === $this->getData(['locale', 'page404'])) {
+ // Valeurs en sortie
+ $this->addOutput([
+ 'redirect' => helper::baseUrl() . 'config',
+ 'notification' => 'Désactiver la page dans la configuration avant de la supprimer'
+ ]);
+ }
+ // Impossible de supprimer la page des mentions légales affectée
+ elseif($url[0] === $this->getData(['locale', 'page403'])) {
+ // Valeurs en sortie
+ $this->addOutput([
+ 'redirect' => helper::baseUrl() . 'config',
+ 'notification' => 'Désactiver la page dans la configuration avant de la supprimer'
+ ]);
+ }
+ // Impossible de supprimer la page des mentions légales affectée
+ elseif($url[0] === $this->getData(['locale', 'page302'])) {
+ // Valeurs en sortie
+ $this->addOutput([
+ 'redirect' => helper::baseUrl() . 'config',
+ 'notification' => 'Désactiver la page dans la configuration avant de la supprimer'
+ ]);
+ }
+ // Jeton incorrect
+ elseif(!isset($_GET['csrf'])) {
+ // Valeurs en sortie
+ $this->addOutput([
+ 'redirect' => helper::baseUrl() . 'page/edit/' . $url[0],
+ 'notification' => 'Jeton invalide'
+ ]);
+ }
+ elseif ($_GET['csrf'] !== $_SESSION['csrf']) {
+ // Valeurs en sortie
+ $this->addOutput([
+ 'redirect' => helper::baseUrl() . 'page/edit/' . $url[0],
+ 'notification' => 'Suppression non autorisée'
+ ]);
+ }
+ // Impossible de supprimer une page contenant des enfants
+ elseif($this->getHierarchy($url[0],null)) {
+ // Valeurs en sortie
+ $this->addOutput([
+ 'redirect' => helper::baseUrl() . 'page/edit/' . $url[0],
+ 'notification' => 'Impossible de supprimer une page contenant des enfants'
+ ]);
+ }
+ // Suppression
+ else {
+
+ // Effacer le dossier du module
+ $moduleId = $this->getData(['page',$url[0],'moduleId']);
+ $modulesData = helper::getModules();
+ if (is_dir($modulesData[$moduleId]['dataDirectory']. $url[0])) {
+ $this->removeDir( $modulesData[$moduleId]['dataDirectory']. $url[0] );
+ }
+ // Effacer la page
+ $this->deleteData(['page', $url[0]]);
+ if (file_exists(self::DATA_DIR . self::$i18n . '/content/' . $url[0] . '.html')) {
+ unlink(self::DATA_DIR . self::$i18n . '/content/' . $url[0] . '.html');
+ }
+ $this->deleteData(['module', $url[0]]);
+ // Met à jour le site map
+ $this->createSitemap('all');
+ // Valeurs en sortie
+ $this->addOutput([
+ 'redirect' => helper::baseUrl(false),
+ 'notification' => 'Page supprimée',
+ 'state' => true
+ ]);
+ }
+ }
+
+
+ /**
+ * Édition
+ */
+ public function edit() {
+ // La page n'existe pas
+ if($this->getData(['page', $this->getUrl(2)]) === null) {
+ // Valeurs en sortie
+ $this->addOutput([
+ 'access' => false
+ ]);
+ }
+ // La page existe
+ else {
+ // Soumission du formulaire
+ if($this->isPost()) {
+ // Si le Title n'est pas vide, premier test pour positionner la notification du champ obligatoire
+ if( $this->getInput('pageEditTitle', helper::FILTER_ID, true) !== null && $this->getInput('pageEditTitle') !== '' ){
+ // Génére l'ID si le titre de la page a changé
+ if ( $this->getInput('pageEditTitle') !== $this->getData(['page',$this->getUrl(2),'title']) ) {
+ $pageId = $this->getInput('pageEditTitle', helper::FILTER_ID, true);
+ } else {
+ $pageId = $this->getUrl(2);
+ }
+ // un dossier existe du même nom (erreur en cas de redirection)
+ if (file_exists($pageId)) {
+ $pageId = uniqid($pageId);
+ }
+ // Si l'id a changée
+ if ($pageId !== $this->getUrl(2)) {
+ // Incrémente le nouvel id de la page
+ $pageId = helper::increment($pageId, $this->getData(['page']));
+ $pageId = helper::increment($pageId, self::$coreModuleIds);
+ $pageId = helper::increment($pageId, self::$moduleIds);
+ // Met à jour les enfants
+ foreach($this->getHierarchy($this->getUrl(2),null) as $childrenPageId) {
+ $this->setData(['page', $childrenPageId, 'parentPageId', $pageId]);
+ }
+ // Change l'id de page dans les données des modules
+ if ($this->getData(['module', $this->getUrl(2)]) !== null ) {
+ $this->setData(['module', $pageId, $this->getData(['module', $this->getUrl(2)])]);
+ $this->deleteData(['module', $this->getUrl(2)]);
+ // Renommer le dossier du module
+ $moduleId = $this->getData(['page',$this->getUrl(2),'moduleId']);
+ $modulesData = helper::getModules();
+ if (is_dir($modulesData[$moduleId]['dataDirectory']. $this->getUrl(2))) {
+ // Placer la feuille de style dans un dossier au nom de la nouvelle instance
+ mkdir( $modulesData[$moduleId]['dataDirectory']. $pageId, 0755 );
+ copy( $modulesData[$moduleId]['dataDirectory']. $this->getUrl(2), $modulesData[$moduleId]['dataDirectory']. $pageId);
+ $this->removeDir($modulesData[$moduleId]['dataDirectory']. $this->getUrl(2));
+ // Mettre à jour le nom de la feuille de style
+ $this->setData(['module',$pageId,'theme','style', $modulesData[$moduleId]['dataDirectory']. $pageId]);
+ }
+ }
+ // Si la page correspond à la page d'accueil, change l'id dans la configuration du site
+ if($this->getData(['locale', 'homePageId']) === $this->getUrl(2)) {
+ $this->setData(['locale', 'homePageId', $pageId]);
+ }
+ }
+ // Supprime les données du module en cas de changement de module
+ if($this->getInput('pageEditModuleId') !== $this->getData(['page', $this->getUrl(2), 'moduleId'])) {
+ $this->deleteData(['module', $pageId]);
+ }
+ // Supprime l'ancienne page si l'id a changée
+ if($pageId !== $this->getUrl(2)) {
+ $this->deleteData(['page', $this->getUrl(2)]);
+ unlink (self::DATA_DIR . self::$i18n . '/content/' . $this->getUrl(2) . '.html');
+ }
+ // Traitement des pages spéciales affectées dans la config :
+ if ($this->getUrl(2) === $this->getData(['locale', 'legalPageId']) ) {
+ $this->setData(['locale','legalPageId', $pageId]);
+ }
+ if ($this->getUrl(2) === $this->getData(['locale', 'searchPageId']) ) {
+ $this->setData(['locale','searchPageId', $pageId]);
+ }
+ if ($this->getUrl(2) === $this->getData(['locale', 'page404']) ) {
+ $this->setData(['locale','page404', $pageId]);
+ }
+ if ($this->getUrl(2) === $this->getData(['locale', 'page403']) ) {
+ $this->setData(['locale','page403', $pageId]);
+ }
+ if ($this->getUrl(2) === $this->getData(['locale', 'page302']) ) {
+ $this->setData(['locale','page302', $pageId]);
+ }
+ // Si la page est une page enfant, actualise les positions des autres enfants du parent, sinon actualise les pages sans parents
+ $lastPosition = 1;
+ $hierarchy = $this->getInput('pageEditParentPageId') ? $this->getHierarchy($this->getInput('pageEditParentPageId')) : array_keys($this->getHierarchy());
+ $position = $this->getInput('pageEditPosition', helper::FILTER_INT);
+ foreach($hierarchy as $hierarchyPageId) {
+ // Ignore la page en cours de modification
+ if($hierarchyPageId === $this->getUrl(2)) {
+ continue;
+ }
+ // Incrémente de +1 pour laisser la place à la position de la page en cours de modification
+ if($lastPosition === $position) {
+ $lastPosition++;
+ }
+ // Change la position
+ $this->setData(['page', $hierarchyPageId, 'position', $lastPosition]);
+ // Incrémente pour la prochaine position
+ $lastPosition++;
+ }
+ if ($this->getinput('pageEditBlock') !== 'bar') {
+ $barLeft = $this->getinput('pageEditBarLeft');
+ $barRight = $this->getinput('pageEditBarRight');
+ $hideTitle = $this->getInput('pageEditHideTitle', helper::FILTER_BOOLEAN);
+
+ } else {
+ // Une barre ne peut pas avoir de barres
+ $barLeft = "";
+ $barRight = "";
+ // Une barre est masquée
+ $position = 0;
+ $hideTitle = true;
+ }
+ // Modifie la page ou en crée une nouvelle si l'id a changé
+ $this->setData([
+ 'page',
+ $pageId,
+ [
+ 'typeMenu' => $this->getinput('pageTypeMenu'),
+ 'iconUrl' => $this->getinput('pageIconUrl'),
+ 'disable'=> $this->getinput('pageEditDisable', helper::FILTER_BOOLEAN),
+ 'content' => $pageId . '.html',
+ 'hideTitle' => $hideTitle,
+ 'breadCrumb' => $this->getInput('pageEditbreadCrumb', helper::FILTER_BOOLEAN),
+ 'metaDescription' => $this->getInput('pageEditMetaDescription', helper::FILTER_STRING_LONG),
+ 'metaTitle' => $this->getInput('pageEditMetaTitle'),
+ 'moduleId' => $this->getInput('pageEditModuleId'),
+ 'modulePosition' => $this->getInput('configModulePosition'),
+ 'parentPageId' => $this->getInput('pageEditParentPageId'),
+ 'position' => $position,
+ 'group' => $this->getinput('pageEditBlock') !== 'bar' ? $this->getInput('pageEditGroup', helper::FILTER_INT) : 0,
+ 'targetBlank' => $this->getInput('pageEditTargetBlank', helper::FILTER_BOOLEAN),
+ 'title' => $this->getInput('pageEditTitle', helper::FILTER_STRING_SHORT),
+ 'shortTitle' => $this->getInput('pageEditShortTitle', helper::FILTER_STRING_SHORT, true),
+ 'block' => $this->getinput('pageEditBlock'),
+ 'barLeft' => $barLeft,
+ 'barRight' => $barRight,
+ 'displayMenu' => $this->getinput('pageEditDisplayMenu'),
+ 'hideMenuSide' => $this->getinput('pageEditHideMenuSide', helper::FILTER_BOOLEAN),
+ 'hideMenuHead' => $this->getinput('pageEditHideMenuHead', helper::FILTER_BOOLEAN),
+ 'hideMenuChildren' => $this->getinput('pageEditHideMenuChildren', helper::FILTER_BOOLEAN),
+ ]
+ ]);
+ // Creation du contenu de la page
+ if (!is_dir(self::DATA_DIR . self::$i18n . '/content')) {
+ mkdir(self::DATA_DIR . self::$i18n . '/content', 0755);
+ }
+ $content = empty($this->getInput('pageEditContent', null)) ? '' : str_replace('', '
', $this->getInput('pageEditContent', null));
+ //file_put_contents( self::DATA_DIR . self::$i18n . '/content/' . $pageId . '.html' , $content );
+ $this->setPage($pageId , $content, self::$i18n);
+ // Barre renommée : changement le nom de la barre dans les pages mères
+ if ($this->getinput('pageEditBlock') === 'bar') {
+ foreach ($this->getHierarchy() as $eachPageId=>$parentId) {
+ if ($this->getData(['page',$eachPageId,'barRight']) === $this->getUrl(2)) {
+ $this->setData(['page',$eachPageId,'barRight',$pageId]);
+ }
+ if ($this->getData(['page',$eachPageId,'barLeft']) === $this->getUrl(2)) {
+ $this->setData(['page',$eachPageId,'barLeft',$pageId]);
+ }
+ foreach ($parentId as $childId) {
+ if ($this->getData(['page',$childId,'barRight']) === $this->getUrl(2)) {
+ $this->setData(['page',$childId,'barRight',$pageId]);
+ }
+ if ($this->getData(['page',$childId,'barLeft']) === $this->getUrl(2)) {
+ $this->setData(['page',$childId,'barLeft',$pageId]);
+ }
+ }
+ }
+ }
+ // Met à jour le site map
+ $this->createSitemap('all');
+ // Redirection vers la configuration
+ if($this->getInput('pageEditModuleRedirect', helper::FILTER_BOOLEAN)) {
+ // Valeurs en sortie
+ $this->addOutput([
+ 'redirect' => helper::baseUrl() . $pageId . '/config',
+ 'state' => true
+ ]);
+ }
+ // Redirection vers la page
+ else {
+ // Valeurs en sortie
+ $this->addOutput([
+ 'redirect' => helper::baseUrl() . $pageId,
+ 'notification' => 'Modifications enregistrées',
+ 'state' => true
+ ]);
+ }
+ }
+ }
+ self::$moduleIds = array_merge( ['' => 'Aucun'] , helper::arrayCollumn(helper::getModules(),'realName','SORT_ASC')); // Pages sans parent
+ foreach($this->getHierarchy() as $parentPageId => $childrenPageIds) {
+ if($parentPageId !== $this->getUrl(2)) {
+ self::$pagesNoParentId[$parentPageId] = $this->getData(['page', $parentPageId, 'title']);
+ }
+ }
+ // Pages barre latérales
+ foreach($this->getHierarchy(null,false,true) as $parentPageId => $childrenPageIds) {
+ if($parentPageId !== $this->getUrl(2) &&
+ $this->getData(['page', $parentPageId, 'block']) === 'bar') {
+ self::$pagesBarId[$parentPageId] = $this->getData(['page', $parentPageId, 'title']);
+ }
+ }
+ // Mise à jour de la liste des pages pour TinyMCE
+ $this->pages2Json();
+ // Valeurs en sortie
+ $this->addOutput([
+ 'title' => $this->getData(['page', $this->getUrl(2), 'title']),
+ 'vendor' => [
+ 'tinymce'
+ ],
+ 'view' => 'edit'
+ ]);
+ }
+ }
+}
diff --git a/core/module/page/view/edit/edit.css b/core/module/page/view/edit/edit.css
new file mode 100644
index 0000000..0797b4e
--- /dev/null
+++ b/core/module/page/view/edit/edit.css
@@ -0,0 +1,19 @@
+/**
+ * This file is part of DeltaCMS.
+ * For full copyright and license information, please see the LICENSE
+ * file that was distributed with this source code.
+ * @author Sylvain Lelièvre
+ * @copyright Copyright (C) 2021-2022, Sylvain Lelièvre
+ * @license GNU General Public License, version 3
+ * @link https://deltacms.fr/
+ *
+ * Delta was created from version 11.2.00.24 of ZwiiCMS
+ * @author Rémi Jean
+ * @copyright Copyright (C) 2008-2018, Rémi Jean
+ * @author Frédéric Tempez
+ * @copyright Copyright (C) 2018-2021, Frédéric Tempez
+ */
+
+/** NE PAS EFFACER
+* admin.css
+*/
diff --git a/core/module/page/view/edit/edit.js.php b/core/module/page/view/edit/edit.js.php
new file mode 100644
index 0000000..4807a72
--- /dev/null
+++ b/core/module/page/view/edit/edit.js.php
@@ -0,0 +1,590 @@
+/**
+ * This file is part of DeltaCMS.
+ * For full copyright and license information, please see the LICENSE
+ * file that was distributed with this source code.
+ * @author Sylvain Lelièvre
+ * @copyright Copyright (C) 2021-2022, Sylvain Lelièvre
+ * @license GNU General Public License, version 3
+ * @link https://deltacms.fr/
+ *
+ * Delta was created from version 11.2.00.24 of ZwiiCMS
+ * @author Rémi Jean
+ * @copyright Copyright (C) 2008-2018, Rémi Jean
+ * @author Frédéric Tempez
+ * @copyright Copyright (C) 2018-2021, Frédéric Tempez
+ */
+
+
+/**
+ * Confirmation de suppression
+ */
+$("#pageEditDelete").on("click", function() {
+ var _this = $(this);
+ return core.confirm("Confirmez-vous la suppression de cette page ?", function() {
+ $(location).attr("href", _this.attr("href"));
+ });
+});
+
+$("#pageEditModuleId").on("click", function() {
+ protectModule();
+});
+
+function protectModule() {
+ var oldModule = $("#pageEditModuleIdOld").val();
+ var oldModuleText = $("#pageEditModuleIdOldText").val();
+ var newModule = $("#pageEditModuleId").val();
+ if ( oldModule !== "" &&
+ oldModule !== newModule) {
+ var _this = $(this);
+ core.confirm("Les données du module " + oldModuleText + " seront effacées. Confirmez-vous ?",
+ function() {
+ $(location).attr("href", _this.attr("href"));
+ return true;
+ },
+ function() {
+ $("#pageEditModuleId").val(oldModule);
+ return false;
+ }
+ );
+ }
+}
+
+/**
+* Paramètres par défaut au chargement
+*/
+$( document ).ready(function() {
+
+ /*
+ * Enleve le menu fixe en édition de page
+ */
+ $("nav").removeAttr('id');
+
+ /**
+ * Bloque/Débloque le bouton de configuration au changement de module
+ * Affiche ou masque la position du module selon le call_user_func
+ */
+ if($("#pageEditModuleId").val() === "") {
+ $("#pageEditModuleConfig").addClass("disabled");
+ $("#pageEditContentContainer").hide();
+ }
+ else {
+ $("#pageEditModuleConfig").removeClass("disabled");
+ $("#pageEditContentContainer").hide();
+ $("#pageEditBlock option[value='bar']").remove();
+ }
+
+ /**
+ * Masquer et affiche la sélection de position du module
+ */
+ if( $("#pageEditModuleId").val() === "redirection" ||
+ $("#pageEditModuleId").val() === "" ) {
+ $("#configModulePositionWrapper").removeClass("disabled");
+ $("#configModulePositionWrapper").slideUp();
+ }
+ else {
+ $("#configModulePositionWrapper").addClass("disabled");
+ $("#configModulePositionWrapper").slideDown();
+ }
+
+
+ /**
+ * Masquer et démasquer le contenu pour les modules code et redirection
+ */
+ if( $("#pageEditModuleId").val() === "redirection") {
+ $("#pageEditContentWrapper").removeClass("disabled");
+ $("#pageEditContentWrapper").slideUp();
+ } else {
+ $("#pageEditContentWrapper").addClass("disabled");
+ $("#pageEditContentWrapper").slideDown();
+ }
+ /**
+ * Masquer et démasquer le masquage du titre pour le module redirection
+ */
+ if( $("#pageEditModuleId").val() === "redirection" ) {
+ $("#pageEditHideTitleWrapper").removeClass("disabled");
+ $("#pageEditHideTitleWrapper").hide();
+ $("#pageEditBlockLayout").removeClass("disabled");
+ $("#pageEditBlockLayout").hide();
+
+ } else {
+ $("#pageEditHideTitleWrapper").addClass("disabled");
+ $("#pageEditHideTitleWrapper").show();
+ $("#pageEditBlockLayout").addClass("disabled");
+ $("#pageEditBlockLayout").show();
+ }
+ /**
+ * Masquer et démasquer la sélection des barres
+ */
+ switch ($("#pageEditBlock").val()) {
+ case "bar":
+ case "12":
+ $("#pageEditBarLeftWrapper").removeClass("disabled");
+ $("#pageEditBarLeftWrapper").slideUp();
+ $("#pageEditBarRightWrapper").removeClass("disabled");
+ $("#pageEditBarRightWrapper").slideUp();
+ break;
+ case "3-9":
+ case "4-8":
+ $("#pageEditBarLeftWrapper").addClass("disabled");
+ $("#pageEditBarLeftWrapper").slideDown();
+ $("#pageEditBarRightWrapper").removeClass("disabled");
+ $("#pageEditBarRightWrapper").slideUp();
+ break;
+ case "9-3":
+ case "8-4":
+ $("#pageEditBarLeftWrapper").removeClass("disabled");
+ $("#pageEditBarLeftWrapper").slideUp();
+ $("#pageEditBarRightWrapper").addClass("disabled");
+ $("#pageEditBarRightWrapper").slideDown();
+ break;
+ case "3-6-3":
+ case "2-7-3":
+ case "3-7-2":
+ $("#pageEditBarLeftWrapper").addClass("disabled");
+ $("#pageEditBarLeftWrapper").slideDown();
+ $("#pageEditBarRightWrapper").addClass("disabled");
+ $("#pageEditBarRightWrapper").slideDown();
+ break;
+ };
+ if ($("#pageEditBlock").val() === "bar") {
+ $("#pageEditMenu").removeClass("disabled");
+ $("#pageEditMenu").hide();
+ $("#pageEditHideTitleWrapper").removeClass("disabled");
+ $("#pageEditHideTitleWrapper").slideUp();
+ $("#pageEditbreadCrumbWrapper").removeClass("disabled");
+ $("#pageEditbreadCrumbWrapper").slideUp();
+ $("#pageEditModuleIdWrapper").removeClass("disabled");
+ $("#pageEditModuleIdWrapper").slideUp();
+ $("#pageEditModuleConfig").removeClass("disabled");
+ $("#pageEditModuleConfig").slideUp();
+ $("#pageEditDisplayMenuWrapper").addClass("disabled");
+ $("#pageEditDisplayMenuWrapper").slideDown();
+ $("#pageTypeMenuWrapper").removeClass("disabled");
+ $("#pageTypeMenuWrapper").slideUp();
+ $("#pageEditSeoWrapper").removeClass("disabled");
+ $("#pageEditSeoWrapper").slideUp();
+ $("#pageEditAdvancedWrapper").removeClass("disabled");
+ $("#pageEditAdvancedWrapper").slideUp();
+ /*
+ $("#pageEditBlockLayout").removeClass("col6");
+ $("#pageEditBlockLayout").addClass("col12");
+ */
+
+ } else {
+ $("#pageEditDisplayMenuWrapper").removeClass("disabled");
+ $("#pageEditDisplayMenuWrapper").slideUp();
+ }
+
+ /**
+ * Masquer ou afficher le chemin de fer
+ * Quand le titre est masqué
+ */
+ if ($("input[name=pageEditHideTitle]").is(':checked') ||
+ $("#pageEditParentPageId").val() === "" ) {
+
+ $("#pageEditbreadCrumbWrapper").removeClass("disabled");
+ $("#pageEditbreadCrumbWrapper").slideUp();
+ } else {
+ if ($("#pageEditParentPageId").val() !== "") {
+ $("#pageEditbreadCrumbWrapper").addClass("disabled");
+ $("#pageEditbreadCrumbWrapper").slideDown();
+ }
+ }
+
+ /**
+ * Masquer ou afficher la sélection de l'icône
+ */
+ if ($("#pageTypeMenu").val() !== "text") {
+ $("#pageIconUrlWrapper").addClass("disabled");
+ $("#pageIconUrlWrapper").slideDown();
+ } else {
+ $("#pageIconUrlWrapper").removeClass("disabled");
+ $("#pageIconUrlWrapper").slideUp();
+ }
+
+ /**
+ * Cache les options de masquage dans les menus quand la page n'est pas affichée.
+ */
+ if ($("#pageEditPosition").val() === "0" ) {
+ $("#pageEditHideMenuSideWrapper").removeClass("disabled");
+ $("#pageEditHideMenuSideWrapper").slideUp();
+ } else {
+ $("#pageEditHideMenuSideWrapper").addClass("disabled");
+ $("#pageEditHideMenuSideWrapper").slideDown();
+ }
+
+ /**
+ * Cache l'option de masquage des pages enfants
+ */
+ if ($("#pageEditParentPageId").val() !== "") {
+ $("#pageEditHideMenuChildrenWrapper").removeClass("disabled");
+ $("#pageEditHideMenuChildrenWrapper").slideUp();
+ } else {
+ $("#pageEditHideMenuChildrenWrapper").addClass("disabled");
+ $("#pageEditHideMenuChildrenWrapper").slideDown();
+ }
+
+ /**
+ * Cache le l'option "ne pas afficher les pages enfants dans le menu horizontal" lorsque la page est désactivée
+ */
+ if ($("#pageEditDisable").is(':checked') ) {
+ $("#pageEditHideMenuChildrenWrapper").removeClass("disabled");
+ $("#pageEditHideMenuChildrenWrapper").slideUp();
+ } else {
+ $("#pageEditHideMenuChildrenWrapper").addClass("disabled");
+ $("#pageEditHideMenuChildrenWrapper").slideDown();
+ }
+
+ // Animation des boutons zwiico-help lien vers la documentation
+ var colorButton = getData(['admin', 'backgroundColorButtonHelp'])."'"; ?> ;
+ var blockButton = getData(['admin', 'backgroundBlockColor'])."'"; ?> ;
+ $(".helpDisplayButton").mouseenter(function(){
+ $(this).css("background-color", colorButton);
+ });
+ $(".helpDisplayButton").mouseleave(function(){
+ $(this).css("background-color", blockButton);
+ });
+
+
+});
+
+
+
+/**
+ * Cache le l'option "ne pas afficher les pages enfants dans le menu horizontal" lorsque la page est désactivée
+ */
+var pageEditDisableDOM = $("#pageEditDisable");
+pageEditDisableDOM.on("change", function() {
+ if ($(this).is(':checked') ) {
+ $("#pageEditHideMenuChildrenWrapper").removeClass("disabled");
+ $("#pageEditHideMenuChildrenWrapper").slideUp();
+ $("#pageEditHideMenuChildren").prop("checked", false);
+ } else {
+ $("#pageEditHideMenuChildrenWrapper").addClass("disabled");
+ $("#pageEditHideMenuChildrenWrapper").slideDown();
+ }
+});
+
+
+/**
+* Cache les options de masquage dans les menus quand la page n'est pas affichée.
+*/
+var pageEditPositionDOM = $("#pageEditPosition");
+pageEditPositionDOM.on("change", function() {
+ if ($(this).val() === "0" ) {
+ $("#pageEditHideMenuSideWrapper").removeClass("disabled");
+ $("#pageEditHideMenuSideWrapper").slideUp();
+ } else {
+ $("#pageEditHideMenuSideWrapper").addClass("disabled");
+ $("#pageEditHideMenuSideWrapper").slideDown();
+ }
+});
+
+/**
+ * Bloque/Débloque le bouton de configuration au changement de module
+ * Affiche ou masque la position du module selon le call_user_func
+ */
+var pageEditModuleIdDOM = $("#pageEditModuleId");
+pageEditModuleIdDOM.on("change", function() {
+ if($(this).val() === "") {
+ $("#pageEditModuleConfig").addClass("disabled");
+ $("#pageEditContentContainer").slideDown();
+ $("#pageEditBlock").append('');
+ }
+ else {
+ $("#pageEditModuleConfig").removeClass("disabled");
+ $("#pageEditContentContainer").slideUp();
+ $("#pageEditBlock option[value='bar']").remove();
+ }
+});
+
+
+
+/**
+ * Masquer et affiche la sélection de position du module
+ *
+ * */
+var pageEditModuleIdDOM = $("#pageEditModuleId");
+pageEditModuleIdDOM.on("change", function() {
+ if( $(this).val() === "redirection" ||
+ $(this).val() === "") {
+ $("#configModulePositionWrapper").removeClass("disabled");
+ $("#configModulePositionWrapper").slideUp();
+ }
+ else {
+ $("#configModulePositionWrapper").addClass("disabled");
+ $("#configModulePositionWrapper").slideDown();
+ }
+});
+
+
+
+
+/**
+ * Masquer et démasquer le contenu pour les modules code et redirection
+ */
+var pageEditModuleIdDOM = $("#pageEditModuleId");
+pageEditModuleIdDOM.on("change", function() {
+ if( $(this).val() === "redirection") {
+ $("#pageEditContentWrapper").removeClass("disabled");
+ $("#pageEditContentWrapper").slideUp();
+ }
+ else {
+ $("#pageEditContentWrapper").addClass("disabled");
+ $("#pageEditContentWrapper").slideDown();
+ }
+});
+
+
+
+/**
+ * Masquer et démasquer le masquage du titre pour le module redirection
+ */
+var pageEditModuleIdDOM = $("#pageEditModuleId");
+pageEditModuleIdDOM.on("change", function() {
+ if( $(this).val() === "redirection") {
+ $("#pageEditHideTitleWrapper").removeClass("disabled");
+ $("#pageEditHideTitleWrapper").slideUp();
+ $("#pageEditBlockLayout").removeClass("disabled");
+ $("#pageEditBlockLayout").slideUp();
+ }
+ else {
+ $("#pageEditHideTitleWrapper").addClass("disabled");
+ $("#pageEditHideTitleWrapper").slideDown();
+ $("#pageEditBlockLayout").addClass("disabled");
+ $("#pageEditBlockLayout").slideDown();
+ }
+});
+
+
+/**
+ * Masquer et démasquer la sélection des barres
+ */
+var pageEditBlockDOM = $("#pageEditBlock");
+pageEditBlockDOM.on("change", function() {
+ switch ($(this).val()) {
+ case "bar":
+ case "12":
+ $("#pageEditBarLeftWrapper").removeClass("disabled");
+ $("#pageEditBarLeftWrapper").slideUp();
+ $("#pageEditBarRightWrapper").removeClass("disabled");
+ $("#pageEditBarRightWrapper").slideUp();
+ break;
+ case "3-9":
+ case "4-8":
+ $("#pageEditBarLeftWrapper").addClass("disabled");
+ $("#pageEditBarLeftWrapper").slideDown();
+ $("#pageEditBarRightWrapper").removeClass("disabled");
+ $("#pageEditBarRightWrapper").slideUp();
+ break;
+ case "9-3":
+ case "8-4":
+ $("#pageEditBarLeftWrapper").removeClass("disabled");
+ $("#pageEditBarLeftWrapper").slideUp();
+ $("#pageEditBarRightWrapper").addClass("disabled");
+ $("#pageEditBarRightWrapper").slideDown();
+ break;
+ case "3-6-3":
+ case "2-7-3":
+ case "3-7-2":
+ $("#pageEditBarLeftWrapper").addClass("disabled");
+ $("#pageEditBarLeftWrapper").slideDown();
+ $("#pageEditBarRightWrapper").addClass("disabled");
+ $("#pageEditBarRightWrapper").slideDown();
+ break;
+ }
+ if ($(this).val() === "bar") {
+ $("#pageEditMenu").removeClass("disabled");
+ $("#pageEditMenu").hide();
+ $("#pageEditHideTitleWrapper").removeClass("disabled");
+ $("#pageEditHideTitleWrapper").slideUp();
+ $("#pageTypeMenuWrapper").removeClass("disabled");
+ $("#pageTypeMenuWrapper").slideUp();
+ $("#pageEditSeoWrapper").removeClass("disabled");
+ $("#pageEditSeoWrapper").slideUp();
+ $("#pageEditAdvancedWrapper").removeClass("disabled");
+ $("#pageEditAdvancedWrapper").slideUp();
+ $("#pageEditbreadCrumbWrapper").removeClass("disabled");
+ $("#pageEditbreadCrumbWrapper").slideUp();
+ $("#pageEditModuleIdWrapper").removeClass("disabled");
+ $("#pageEditModuleIdWrapper").slideUp();
+ $("#pageEditModuleConfig").removeClass("disabled");
+ $("#pageEditModuleConfig").slideUp();
+ $("#pageEditDisplayMenuWrapper").addClass("disabled");
+ $("#pageEditDisplayMenuWrapper").slideDown();
+ /*
+ $("#pageEditBlockLayout").removeClass("col6");
+ $("#pageEditBlockLayout").addClass("col12");
+ */
+ } else {
+ $("#pageEditMenu").addClass("disabled");
+ $("#pageEditMenu").show();
+ $("#pageEditHideTitleWrapper").addClass("disabled");
+ $("#pageEditHideTitleWrapper").slideDown();
+ $("#pageTypeMenuWrapper").addClass("disabled");
+ $("#pageTypeMenuWrapper").slideDown();
+ $("#pageEditSeoWrapper").addClass("disabled");
+ $("#pageEditSeoWrapper").slideDown();
+ $("#pageEditAdvancedWrapper").addClass("disabled");
+ $("#pageEditAdvancedWrapper").slideDown();
+ $("#pageEditModuleIdWrapper").addClass("disabled");
+ $("#pageEditModuleIdWrapper").slideDown();
+ $("#pageEditModuleConfig").slideDown();
+ $("#pageEditDisplayMenuWrapper").removeClass("disabled");
+ $("#pageEditDisplayMenuWrapper").slideUp();
+ if ($("#pageEditParentPageId").val() !== "") {
+ $("#pageEditbreadCrumbWrapper").addClass("disabled");
+ $("#pageEditbreadCrumbWrapper").slideDown();
+ }
+ if ($("#pageEditModuleId").val() === "") {
+ $("#pageEditModuleConfig").addClass("disabled");
+ } else {
+ $("#pageEditModuleConfig").removeClass("disabled");
+ }
+ /*
+ $("#pageEditBlockLayout").removeClass("col12");
+ $("#pageEditBlockLayout").addClass("col6");
+ */
+ }
+});
+
+
+
+
+/**
+ * Masquer ou afficher le chemin de fer
+ * Quand le titre est masqué
+ */
+var pageEditHideTitleDOM = $("#pageEditHideTitle");
+pageEditHideTitleDOM.on("change", function() {
+ if ($("input[name=pageEditHideTitle]").is(':checked')) {
+ $("#pageEditbreadCrumbWrapper").removeClass("disabled");
+ $("#pageEditbreadCrumbWrapper").slideUp();
+ } else {
+ if ($("#pageEditParentPageId").val() !== "") {
+ $("#pageEditbreadCrumbWrapper").addClass("disabled");
+ $("#pageEditbreadCrumbWrapper").slideDown();
+ }
+ }
+});
+
+
+/**
+ * Masquer ou afficher le chemin de fer
+ * Quand la page n'est pas mère et que le menu n'est pas masqué
+ */
+var pageEditParentPageIdDOM = $("#pageEditParentPageId");
+pageEditParentPageIdDOM.on("change", function() {
+ if ($(this).val() === "" &&
+ !$('input[name=pageEditHideTitle]').is(':checked') ) {
+ $("#pageEditbreadCrumbWrapper").removeClass("disabled");
+ $("#pageEditbreadCrumbWrapper").slideUp();
+ } else {
+ $("#pageEditbreadCrumbWrapper").addClass("disabled");
+ $("#pageEditbreadCrumbWrapper").slideDown();
+
+ }
+ if ($(this).val() !== "") {
+ $("#pageEditHideMenuChildrenWrapper").removeClass("disabled");
+ $("#pageEditHideMenuChildrenWrapper").slideUp();
+ } else {
+ $("#pageEditHideMenuChildrenWrapper").addClass("disabled");
+ $("#pageEditHideMenuChildrenWrapper").slideDown();
+ }
+});
+
+
+
+/**
+ * Masquer ou afficher la sélection de l'icône
+ */
+var pageTypeMenuDOM = $("#pageTypeMenu");
+pageTypeMenuDOM.on("change", function() {
+ if ($(this).val() !== "text") {
+ $("#pageIconUrlWrapper").addClass("disabled");
+ $("#pageIconUrlWrapper").slideDown();
+ } else {
+ $("#pageIconUrlWrapper").removeClass("disabled");
+ $("#pageIconUrlWrapper").slideUp();
+ }
+});
+
+
+
+
+/**
+ * Soumission du formulaire pour éditer le module
+ */
+$("#pageEditModuleConfig").on("click", function() {
+ $("#pageEditModuleRedirect").val(1);
+ $("#pageEditForm").trigger("submit");
+});
+
+/**
+ * Affiche les pages en fonction de la page parent dans le choix de la position
+ */
+var hierarchy = getHierarchy()); ?>;
+
+var pages = getData(['page'])); ?>;
+
+
+// 9.0.07 corrige une mauvaise sélection d'une page orpheline avec enfant
+var positionInitial = getData(['page',$this->getUrl(2),"position"]); ?>;
+// 9.0.07
+$("#pageEditParentPageId").on("change", function() {
+ var positionDOM = $("#pageEditPosition");
+ positionDOM.empty().append(
+ $("