diff --git a/core/module/config/config.php b/core/module/config/config.php index b17dde0e..a0299776 100644 --- a/core/module/config/config.php +++ b/core/module/config/config.php @@ -18,17 +18,19 @@ class config extends common { public static $actions = [ 'backup' => self::GROUP_ADMIN, + 'copyBackups'=> self::GROUP_ADMIN, 'configMetaImage' => self::GROUP_ADMIN, 'generateFiles' => self::GROUP_ADMIN, 'index' => self::GROUP_ADMIN, 'advanced' => self::GROUP_ADMIN, - 'manage' => self::GROUP_ADMIN, + 'restore' => self::GROUP_ADMIN, 'updateBaseUrl' => self::GROUP_ADMIN, 'script' => self::GROUP_ADMIN, 'logReset' => self::GROUP_ADMIN, 'logDownload'=> self::GROUP_ADMIN, 'blacklistReset' => self::GROUP_ADMIN, - 'blacklistDownload' => self::GROUP_ADMIN + 'blacklistDownload' => self::GROUP_ADMIN, + ]; public static $timezones = [ @@ -191,7 +193,7 @@ class config extends common { $this->addOutput([ 'notification' => $successSitemap ? 'Le sitemap a été mis à jour' : 'Echec d\'écriture, le site map n\'a pas été mis à jour', 'redirect' => helper::baseUrl() . 'config/advanced', - 'state' => $successSitemap + 'state' => $successSitemap ]); } @@ -265,11 +267,11 @@ class config extends common { /** * Procédure d'importation */ - public function manage() { + public function restore() { // Soumission du formulaire if($this->isPost()) { - //if ($this->getInput('configManageImportFile')) - $fileZip = $this->getInput('configManageImportFile'); + //if ($this->getInput('configRestoreImportFile')) + $fileZip = $this->getInput('configRestoreImportFile'); $file_parts = pathinfo($fileZip); $folder = date('Y-m-d-h-i-s', time()); $zip = new ZipArchive(); @@ -277,7 +279,7 @@ class config extends common { // Valeurs en sortie erreur $this->addOutput([ 'notification' => 'Le fichier n\'est pas une archive valide', - 'redirect' => helper::baseUrl() . 'config/manage', + 'redirect' => helper::baseUrl() . 'config/restore', 'state' => false ]); } @@ -286,7 +288,7 @@ class config extends common { // Valeurs en sortie erreur $this->addOutput([ 'notification' => 'Impossible de lire l\'archive', - 'redirect' => helper::baseUrl() . 'config/manage', + 'redirect' => helper::baseUrl() . 'config/restore', 'state' => false ]); } @@ -311,21 +313,21 @@ class config extends common { // V10 valide $version = '10'; // Option active, les users sont stockées - if ($this->getInput('configManageImportUser', helper::FILTER_BOOLEAN) === true ) { + if ($this->getInput('configRestoreImportUser', helper::FILTER_BOOLEAN) === true ) { $users = $this->getData(['user']); } } else { // Version invalide // Valeurs en sortie erreur $this->addOutput([ 'notification' => 'Cette archive n\'est pas une sauvegarde valide', - 'redirect' => helper::baseUrl() . 'config/manage', + 'redirect' => helper::baseUrl() . 'config/restore', 'state' => false ]); } // Préserver les comptes des utilisateurs d'une version 9 si option cochée // Positionnement d'une variable de session lue au constructeurs if ($version === '9') { - $_SESSION['KEEP_USERS'] = $this->getInput('configManageImportUser', helper::FILTER_BOOLEAN); + $_SESSION['KEEP_USERS'] = $this->getInput('configRestoreImportUser', helper::FILTER_BOOLEAN); } // Extraire le zip ou 'site/' $success = $zip->extractTo( 'site/' ); @@ -335,13 +337,13 @@ class config extends common { // Restaurer les users originaux d'une v10 si option cochée if (!empty($users) && $version === '10' && - $this->getInput('configManageImportUser', helper::FILTER_BOOLEAN) === true) { + $this->getInput('configRestoreImportUser', helper::FILTER_BOOLEAN) === true) { $this->setData(['user',$users]); } // Message de notification $notification = $success === true ? 'Restauration réalisée avec succès' : 'Erreur inconnue'; - $redirect = $this->getInput('configManageImportUser', helper::FILTER_BOOLEAN) === true ? helper::baseUrl() . 'config/manage' : helper::baseUrl() . 'user/login/'; + $redirect = $this->getInput('configRestoreImportUser', helper::FILTER_BOOLEAN) === true ? helper::baseUrl() . 'config/restore' : helper::baseUrl() . 'user/login/'; // Valeurs en sortie erreur $this->addOutput([ 'notification' => $notification, @@ -353,7 +355,7 @@ class config extends common { // Valeurs en sortie $this->addOutput([ 'title' => 'Restaurer', - 'view' => 'manage' + 'view' => 'restore' ]); } @@ -399,6 +401,7 @@ class config extends common { 'title' => $this->getInput('configTitle', helper::FILTER_STRING_SHORT, true) ] ]); + $this->setData(['config', 'i18n', 'enabled', $this->getInput('configI18n',helper::FILTER_BOOLEAN) ]); // Générer robots.txt et sitemap $this->generateFiles(); // Valeurs en sortie @@ -428,6 +431,11 @@ class config extends common { $this->getInput('configAdvancedAutoUpdate', helper::FILTER_BOOLEAN) === true) { $this->setData(['core','lastAutoUpdate',0]); } + // Eviter déconnexion automatique après son activation + if ( $this->getData(['config','autoDisconnect']) === false + AND $this->getInput('configAdvancedAutoDisconnect',helper::FILTER_BOOLEAN) === true ) { + $this->setData(['user',$this->getuser('id'),'accessCsrf',$_SESSION['csrf']]); + } // Sauvegarder $this->setData([ 'config', @@ -455,6 +463,7 @@ class config extends common { 'proxyUrl' => $this->getInput('configAdvancedProxyUrl'), 'proxyPort' => $this->getInput('configAdvancedProxyPort',helper::FILTER_INT), 'captchaStrong' => $this->getInput('configAdvancedCaptchaStrong',helper::FILTER_BOOLEAN), + 'autoDisconnect' => $this->getInput('configAdvancedAutoDisconnect',helper::FILTER_BOOLEAN), 'smtp' => [ 'enable' => $this->getInput('configAdvancedSmtpEnable',helper::FILTER_BOOLEAN), 'host' => $this->getInput('configAdvancedSmtpHost',helper::FILTER_STRING_SHORT), @@ -612,7 +621,7 @@ class config extends common { // Valeurs en sortie $this->addOutput([ 'notification' => $success ? $c3. ' conversion' . ($c3 > 1 ? 's' : '') . ' effectuée' . ($c3 > 1 ? 's' : '') : 'Aucune conversion', - 'redirect' => helper::baseUrl() . 'config/manage', + 'redirect' => helper::baseUrl() . 'config/restore', 'state' => $success ? true : false ]); } @@ -729,6 +738,23 @@ class config extends common { } } + /** + * Récupération des backups auto dans le gestionnaire de fichiers + */ + public function copyBackups() { + // Créer le répertoire manquant + if (!is_dir(self::FILE_DIR.'source/backup')) { + mkdir(self::FILE_DIR.'source/backup'); + } + $this->custom_copy(self::BACKUP_DIR, self::FILE_DIR . 'source/backup' ); + // Valeurs en sortie + $this->addOutput([ + 'redirect' => helper::baseUrl() . 'config/advanced', + 'notification' => 'Copie terminée', + 'state' => true + ]); + } + /** * Fonction de parcours des données de module @@ -750,4 +776,31 @@ class config extends common { } return $newArray; } + + /* + * Copie récursive de dossiers + * + */ + private function custom_copy($src, $dst) { + // open the source directory + $dir = opendir($src); + // Make the destination directory if not exist + if (!is_dir($dst)) { + mkdir($dst); + } + // Loop through the files in source directory + while( $file = readdir($dir) ) { + if (( $file != '.' ) && ( $file != '..' )) { + if ( is_dir($src . '/' . $file) ){ + // Recursively calling custom copy function + // for sub directory + $this -> custom_copy($src . '/' . $file, $dst . '/' . $file); + } + else { + copy($src . '/' . $file, $dst . '/' . $file); + } + } + } + closedir($dir); + } } diff --git a/core/module/config/view/advanced/advanced.php b/core/module/config/view/advanced/advanced.php index fd6d03de..34beaf97 100644 --- a/core/module/config/view/advanced/advanced.php +++ b/core/module/config/view/advanced/advanced.php @@ -27,24 +27,34 @@

Maintenance

-
- $this->getData(['config', 'maintenance']) +
+
+ $this->getData(['config', 'maintenance']) + ]); ?> +
+
+
+
+ helper::baseUrl() . 'config/backup', + 'value' => 'Sauvegarder', + 'ico' => 'download-cloud' + ]); ?> +
+
+ helper::baseUrl() . 'config/restore', + 'value' => 'Restaurer', + 'ico' => 'upload-cloud' + ]); ?> +
+
+ helper::baseUrl() . 'config/copyBackups', + 'value' => 'Backups Auto ➜ FileManager' ]); ?>
-
- helper::baseUrl() . 'config/backup', - 'value' => 'Sauvegarder', - 'ico' => 'download' - ]); ?> -
-
- helper::baseUrl() . 'config/manage', - 'value' => 'Restaurer', - 'ico' => 'upload' - ]); ?>
@@ -53,7 +63,6 @@

Réglages

-
-
- $this->getData(['config', 'cookieConsent']) +
+ $this->getData(['config', 'cookieConsent']), + 'help' => 'Activation obligatoire selon les lois françaises sauf si vous utilisez votre propre système de consentement.' ]); ?>
-
- $this->getData(['config','captchaStrong']), - 'help' => 'Option recommandée pour sécuriser la connexion. S\'applique à tous les captchas du site. Le captcha simple se limite à une addition de nombres de 0 à 10. Le captcha renforcé utilise quatre opérations de nombres de 0 à 20.' - ]); ?> -
- -
- + helper::checkRewrite(), - 'help' => 'Vérifiez d\'abord que votre serveur l\'autorise : ce n\'est pas le cas chez Free.' + 'help' => 'Vérifiez d\'abord que votre serveur autorise l\'URL rewriting (ce qui n\'est pas le cas chez Free).' ]); ?>
+ +
+
+
+ $this->getData(['config', 'autoBackup']), + 'help' => 'Une archive contenant le dossier /site/data est copiée dans le dossier \'site/backup\'. La sauvegarde est conservée pendant 30 jours.

Les fichiers du site ne sont pas sauvegardés automatiquement. Activation recommandée.' + ]); ?> +

+
+ file_exists('site/data/.backup'), + 'help' => 'Un fichier .backup.json est généré à chaque édition ou effacement d\'une donnée. La désactivation entraîne la suppression de ces fichiers.' + ]); ?> +
-
- $this->getData(['config', 'autoBackup']), - 'help' => '

Une archive contenant le dossier /site/data est copiée dans le dossier \'site/backup\'. La sauvegarde est conservée pendant 30 jours.

Les fichiers du site ne sont pas sauvegardés automatiquement.

' - ]); ?> +
+ $this->getData(['config','captchaStrong']), + 'help' => 'Option recommandée pour sécuriser la connexion. S\'applique à tous les captchas du site. Le captcha simple se limite à une addition de nombres de 0 à 10. Le captcha complexe utilise quatre opérations de nombres de 0 à 20. Activation recommandée.' + ]); ?>
-
- file_exists('site/data/.backup'), - 'help' => '

Un fichier .backup.json est généré à chaque édition ou effacement d\'une donnée. La désactivation entraîne la suppression de ces fichiers.

' +
+ $this->getData(['config','autoDisconnect']), + 'help' => 'Déconnecte les sessions ouvertes précédemment sur d\'autres navigateurs ou terminaux. Activation recommandée.' ]); ?>
@@ -119,30 +137,30 @@
-

Mise à jour automatisée

- +

Mises à jour automatisée

+
- $this->getData(['config', 'autoUpdate']), - 'help' => 'Vérifie une fois par jour l\'existence d\'une mise à jour.', - 'disabled' => !$error + 'help' => 'La vérification est quotidienne. Option désactivée si la configuration du serveur ne le permet pas.', + 'disabled' => !$updateError ]); ?>
-
- + $this->getData(['config', 'autoUpdateHtaccess']), 'help' => 'Lors d\'une mise à jour automatique, conserve le fichier htaccess de la racine du site.', - 'disabled' => !$error + 'disabled' => !$updateError ]); ?>
-
+
'download-cloud', 'href' => helper::baseUrl() . 'install/update', 'value' => 'Mise à jour manuelle', 'class' => 'buttonRed', - 'disabled' => !$error + 'disabled' => !$updateError ]); ?>
@@ -320,7 +338,7 @@
-
+
$this->getData(['config', 'connect','captcha']) ]); ?> diff --git a/core/module/config/view/backup/backup.php b/core/module/config/view/backup/backup.php index a284ef9f..0ba3a31c 100644 --- a/core/module/config/view/backup/backup.php +++ b/core/module/config/view/backup/backup.php @@ -18,7 +18,7 @@
-

Paramètre

+

Paramètres de la sauvegarde

+
+
+
+

Langues étrangères

+
+
+ $this->getData(['config', 'i18n', 'enabled']), + 'help'=> 'Une nouvelle icône apparaîtra dans la barre d\'administration. Consultez l\'aide de la page concernée pour en apprendre plus.' + ]); ?> +
+
+
+
+
@@ -101,7 +116,7 @@ 'Aucune'] , helper::arrayCollumn($pages, 'title', 'SORT_ASC') ) , [ 'label' => 'Recherche dans le site', 'selected' => $this->getData(['locale', 'searchPageId']), - 'help' => 'Sélectionner la page "Recherche" ou une page contenant le module "Recherche". Une option du pied de page ajoute un lien discret vers cette page.' + 'help' => 'Sélectionnez une page contenant le module \'Recherche\'. Une option du pied de page ajoute un lien discret vers cette page.' ]); ?>
@@ -131,6 +146,7 @@ ]); ?>
+

Lorsque les langues étrangères sont activées, il convient d'adapter les pages spéciales.

diff --git a/core/module/config/view/manage/manage.css b/core/module/config/view/restore/restore.css old mode 100755 new mode 100644 similarity index 100% rename from core/module/config/view/manage/manage.css rename to core/module/config/view/restore/restore.css diff --git a/core/module/config/view/manage/manage.php b/core/module/config/view/restore/restore.php similarity index 68% rename from core/module/config/view/manage/manage.php rename to core/module/config/view/restore/restore.php index d0b02b15..e642722d 100644 --- a/core/module/config/view/manage/manage.php +++ b/core/module/config/view/restore/restore.php @@ -1,7 +1,7 @@ - +
- 'buttonGrey', 'href' => helper::baseUrl() . 'config/advanced', 'ico' => 'left', @@ -9,7 +9,7 @@ ]); ?>
- 'Restaurer' ]); ?>
@@ -17,18 +17,18 @@
-

Paramètres

+

Archive à restaurer

- 'Sélectionnez une archive au format ZIP', 'type' => 2, 'help' => 'L\'archive a été déposée dans le gestionnaire de fichiers. Les archives inférieures à la version 9 ne sont pas acceptées.' ]); ?>
- true ]); ?>
@@ -40,7 +40,7 @@
-

Conversion des URL

+

Conversion après la restauration

getData(['core', 'baseUrl'])); $buttonClass = helper::baseUrl(false,false) !== $baseUrlValue ? '' : 'disabled'; } - echo template::text('configManageBaseURLToConvert', [ + echo template::text('configRestoreBaseURLToConvert', [ 'label' => 'Dossier de l\'archive' , 'value' => $baseUrlValue, 'readonly' => true, - 'help' => 'Dossier de base du site stockée dans la sauvegarde.' + 'help' => 'Le dossier de base du site est stockée dans la sauvegarde.' ]); ?>
- 'Dossier du site actuel', 'value' => helper::baseUrl(false,false), - 'readonly' => true, - 'help' => 'Dossier du base site actuel.' + 'readonly' => true ]); ?>
- helper::baseUrl() . 'config/updateBaseUrl', 'class' => $buttonClass, 'value' => 'convertir'