087 config backup de la v10 WIP

This commit is contained in:
Fred Tempez 2020-05-07 08:36:24 +02:00
parent 1312de02d8
commit 5e748eb3f2
8 changed files with 513 additions and 432 deletions

0
core/class/phpmailer/Exception.class.php Normal file → Executable file
View File

0
core/class/phpmailer/PHPMailer.class.php Normal file → Executable file
View File

View File

@ -36,7 +36,7 @@ class common {
const THUMBS_WIDTH = 640;
// Numéro de version
const ZWII_VERSION = '10.0.086';
const ZWII_VERSION = '10.0.087';
const ZWII_UPDATE_CHANNEL = "v10";
public static $actions = [];

View File

@ -8,7 +8,7 @@
*
* @author Rémi Jean <remi.jean@outlook.com>
* @copyright Copyright (C) 2008-2018, Rémi Jean
* @author Frédéric Tempez <frederic.tempez@outlook.com>
* * @author Frédéric Tempez <frederic.tempez@outlook.com>
* @copyright Copyright (C) 2018-2020, Frédéric Tempez
* @license GNU General Public License, version 3
* @link http://zwiicms.com/
@ -18,16 +18,14 @@ class config extends common {
public static $actions = [
'backup' => self::GROUP_ADMIN,
'restore' => self::GROUP_ADMIN,
'configMetaImage' => self::GROUP_ADMIN,
'generateFiles' => self::GROUP_ADMIN,
'updateRobots' => self::GROUP_ADMIN,
'index' => self::GROUP_ADMIN,
'updateOnline' => self::GROUP_ADMIN
'manage' => self::GROUP_ADMIN,
'updateBaseUrl' => self::GROUP_ADMIN
];
public static $newVersion;
public static $timezones = [
'Pacific/Midway' => '(GMT-11:00) Midway Island',
'US/Samoa' => '(GMT-11:00) Samoa',
@ -205,6 +203,7 @@ class config extends common {
unlink('robots.bak');
return(fclose($filenew));
}
/**
* Sauvegarde des données
*/
@ -271,11 +270,11 @@ class config extends common {
/**
* Procédure d'importation
*/
public function restore() {
public function manage() {
// Soumission du formulaire
if($this->isPost()) {
//if ($this->getInput('configrestoreImportFile'))
$fileZip = $this->getInput('configRestoreImportFile');
//if ($this->getInput('configManageImportFile'))
$fileZip = $this->getInput('configManageImportFile');
$file_parts = pathinfo($fileZip);
$folder = date('Y-m-d-h-i-s', time());
$zip = new ZipArchive();
@ -283,7 +282,7 @@ class config extends common {
// Valeurs en sortie erreur
$this->addOutput([
'notification' => 'Le fichier n\'est pas une archive valide',
'redirect' => helper::baseUrl() . 'config/restore',
'redirect' => helper::baseUrl() . 'config/manage',
'state' => false
]);
}
@ -292,7 +291,7 @@ class config extends common {
// Valeurs en sortie erreur
$this->addOutput([
'notification' => 'Impossible de lire l\'archive',
'redirect' => helper::baseUrl() . 'config/restore',
'redirect' => helper::baseUrl() . 'config/manage',
'state' => false
]);
}
@ -314,28 +313,27 @@ class config extends common {
in_array('core.json',$files) === true &&
in_array ('user.json', $files) === true &&
in_array ('config.json', $files) === true ) {
// V10 valide user et config
// V10 valide
$version = '10';
// Option active, les users sont stockées
if ($this->getInput('configRestoreImportUser', helper::FILTER_BOOLEAN) === true ) {
if ($this->getInput('configManageImportUser', 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/restore',
'redirect' => helper::baseUrl() . 'config/manage',
'state' => false
]);
}
// Préserver les comptes des utilisateurs d'une version 9 si option cochée
// Positionnement d'une variable de session lue au constructeur
if ($version === '9') {
$_SESSION['KEEP_USERS'] = $this->getInput('configRestoreImportUser', helper::FILTER_BOOLEAN);
}
// Extraire le zip
// Extraire le zip ou 'site/'
$success = $zip->extractTo( 'site/' );
// Fermer l'archive
$zip->close();
@ -343,13 +341,20 @@ class config extends common {
// Restaurer les users originaux d'une v10 si option cochée
if (!empty($users) &&
$version === '10' &&
$this->getInput('configRestoreImportUser', helper::FILTER_BOOLEAN) === true) {
$this->getInput('configManageImportUser', helper::FILTER_BOOLEAN) === true) {
$this->setData(['user',$users]);
}
/*
if ($version === '9' ) {
$this->importData($this->getInput('configManageImportUser', helper::FILTER_BOOLEAN));
$this->setData(['core','dataVersion',0]);
}*/
// Met à jours les URL dans les contenus de page
// Message de notification
$notification = $success === true ? 'Sauvegarde importée avec succès' : 'Erreur d\'extraction';
$redirect = $this->getInput('configRestoreImportUser', helper::FILTER_BOOLEAN) === true ? helper::baseUrl() . 'config/restore' : helper::baseUrl() . 'user/login/';
$redirect = $this->getInput('configManageImportUser', helper::FILTER_BOOLEAN) === true ? helper::baseUrl() . 'config/manage' : helper::baseUrl() . 'user/login/';
// Valeurs en sortie erreur
$this->addOutput([
'notification' => $notification,
@ -360,8 +365,8 @@ class config extends common {
// Valeurs en sortie
$this->addOutput([
'title' => 'Restaurer une sauvegarde',
'view' => 'restore'
'title' => 'Sauvegarder / Restaurer',
'view' => 'manage'
]);
}
@ -378,6 +383,12 @@ class config extends common {
$this->getInput('configAutoUpdate', helper::FILTER_BOOLEAN) === true) {
$this->setData(['core','lastAutoUpdate',0]);
}
if ($this->getInput('configLegalCheck', helper::FILTER_BOOLEAN) === true ) {
$legalPageId = $this->getInput('configLegalPageId', helper::FILTER_ID);
} else {
$legalPageId = '';
}
$this->setData([
'config',
[
@ -472,10 +483,6 @@ class config extends common {
]);
}
}
class configHelper extends helper {
/**
* Met à jour les données de site avec l'adresse trannsmise
*/
@ -511,4 +518,5 @@ class configHelper extends helper {
'state' => $success ? true : false
]);
}
}

View File

@ -14,3 +14,12 @@
* Modification de l'affichage de l'icône de langues
*/
var configdisablei18nDOM = $("#configdisablei18n");
configdisablei18nDOM.on("change", function() {
if ($("input[name=configdisablei18n]").is(':checked')) {
$(".zwiico-flag").css('display','none');
} else {
$(".zwiico-flag").css('display','block');
}
});

View File

@ -1,4 +1,5 @@
<?php echo template::formOpen('configForm'); ?>
<div class="notranslate">
<div class="row">
<div class="col2">
<?php echo template::button('configBack', [
@ -8,7 +9,21 @@
'value' => 'Accueil'
]); ?>
</div>
<div class="col2 offset8">
<div class="col2 offset4">
<?php echo template::button('configManageButton', [
'href' => helper::baseUrl() . 'config/backup',
'value' => 'Sauvegarder',
'ico' => 'download'
]); ?>
</div>
<div class="col2">
<?php echo template::button('configManageButton', [
'href' => helper::baseUrl() . 'config/manage',
'value' => 'Restaurer',
'ico' => 'upload'
]); ?>
</div>
<div class="col2">
<?php echo template::submit('configSubmit'); ?>
</div>
</div>
@ -35,30 +50,32 @@
<?php echo template::text('configTitle', [
'label' => 'Titre du site',
'value' => $this->getData(['config', 'title']),
'help' => 'Le titre apparaît dans la barre de titre et les partages sur les réseaux sociaux.'
'help' => 'Il apparaît dans la barre de titre et les partages sur les réseaux sociaux.'
]); ?>
</div>
<div class="col12">
</div>
<?php echo template::textarea('configMetaDescription', [
'label' => 'Description du site',
'value' => $this->getData(['config', 'metaDescription']),
'help' => 'La description apparaît dans les partages sur les réseaux sociaux.'
'help' => 'Elle apparaît dans les partages sur les réseaux sociaux.'
]); ?>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col12">
<div class="block">
<h4>Réglages</h4>
<h4>Paramètres</h4>
<?php $error = helper::urlGetContents('http://zwiicms.com/update/' . common::ZWII_UPDATE_CHANNEL . '/version');?>
<?php if ($error !== false) : ?>
<?php $error = true; ?>
<?php endif;?>
<div class="row">
<div class="col3">
<?php echo template::file('configFavicon', [
'type' => 1,
'help' => 'Pensez à supprimer le cache de votre navigateur si la favicon ne change pas.',
'label' => 'Favicon thème clair',
'label' => 'Favicon',
'value' => $this->getData(['config', 'favicon'])
]); ?>
</div>
@ -109,175 +126,127 @@
]); ?>
</div>
</div>
<div class="row">
<div class="col6">
<?php echo template::checkbox('configExportAutoBackup', true, 'Sauvegarde automatique quotidienne', [
'checked' => $this->getData(['config', 'autoBackup']),
'help' => '<p>Une archive contenant le dossier /site/data est copiée dans le dossier \'site/backup\'. La sauvegarde est conservée pendant 30 jours.</p><p>Les fichiers du site ne sont pas sauvegardés automatiquement.</p>'
]); ?>
</div>
<div class="col6">
<?php echo template::checkbox('configMaintenance', true, 'Site en maintenance', [
'checked' => $this->getData(['config', 'maintenance'])
]); ?>
</div>
</div>
<div class="row">
<div class="col6">
<?php echo template::checkbox('configAutoUpdate', true, 'Mise à jour automatique', [
'checked' => $this->getData(['config', 'autoUpdate']),
'help' => 'Vérifie une fois par jour l\'existence d\'une mise à jour.'
]); ?>
</div>
<div class="col3">
<?php echo template::button('configUpdateForced', [
'href' => helper::baseUrl() . 'install/update',
'value' => 'Mise à jour manuelle',
'disabled' => !$error
]); ?>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col12">
<div class="col6">
<div class="block">
<h4>Réseaux sociaux</h4>
<div class="row">
<div class="col4">
<div class="col6">
<?php echo template::text('configSocialFacebookId', [
'help' => 'Saisissez votre ID : https://www.facebook.com/[ID].',
'label' => 'Facebook',
'value' => $this->getData(['config', 'social', 'facebookId'])
]); ?>
</div>
<div class="col4">
<div class="col6">
<?php echo template::text('configSocialInstagramId', [
'help' => 'Saisissez votre ID : https://www.instagram.com/[ID].',
'label' => 'Instagram',
'value' => $this->getData(['config', 'social', 'instagramId'])
]); ?>
</div>
<div class="col4">
<?php echo template::text('configSocialTwitterId', [
'help' => 'Saisissez votre ID : https://twitter.com/[ID].',
'label' => 'Twitter',
'value' => $this->getData(['config', 'social', 'twitterId'])
]); ?>
</div>
</div>
<div class="row">
<div class="col4">
<div class="col6">
<?php echo template::text('configSocialYoutubeId', [
'help' => 'ID de la chaîne : https://www.youtube.com/channel/[ID].',
'label' => 'Chaîne Youtube',
'value' => $this->getData(['config', 'social', 'youtubeId'])
]); ?>
</div>
<div class="col4">
<div class="col6">
<?php echo template::text('configSocialYoutubeUserId', [
'help' => 'Saisissez votre ID Utilisateur : https://www.youtube.com/user/[ID].',
'label' => 'Youtube',
'value' => $this->getData(['config', 'social', 'youtubeUserId'])
]); ?>
</div>
<div class="col4">
</div>
<div class="row">
<div class="col6">
<?php echo template::text('configSocialTwitterId', [
'help' => 'Saisissez votre ID : https://twitter.com/[ID].',
'label' => 'Twitter',
'value' => $this->getData(['config', 'social', 'twitterId'])
]); ?>
</div>
<div class="col6">
<?php echo template::text('configSocialPinterestId', [
'help' => 'Saisissez votre ID : https://pinterest.com/[ID].',
'label' => 'Pinterest',
'value' => $this->getData(['config', 'social', 'pinterestId'])
]); ?>
</div>
</div>
<div class="row">
<div class="col4 offset2">
<?php echo template::text('configSocialGithubId', [
'help' => 'Saisissez votre ID Github : https://github.com/[ID].',
'label' => 'Github',
'value' => $this->getData(['config', 'social', 'githubId'])
]); ?>
</div>
<div class="col4">
<div class="col6">
<?php echo template::text('configSocialLinkedinId', [
'help' => 'Saisissez votre ID Linkedin : https://fr.linkedin.com/in/[ID].',
'label' => 'Linkedin',
'value' => $this->getData(['config', 'social', 'linkedinId'])
]); ?>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col12">
<div class="block">
<h4>Sauvegardes</h4>
<div class="row">
<div class="col6">
<?php echo template::checkbox('configAutoBackup', true, 'Sauvegarde automatisée quotidienne partielle', [
'checked' => $this->getData(['config', 'autoBackup']),
'help' => '<p>Une archive contenant le dossier /site/data est copiée dans le dossier \'site/backup\'. La sauvegarde est conservée pendant 30 jours.</p><p>Le contenu du gestionnaire de fichiers n\'est pas sauvegardé.</p>'
]); ?>
</div>
<div class="col3">
<?php echo template::button('configManageButtonBackup', [
'href' => helper::baseUrl() . 'config/backup',
'value' => 'Sauvegarde'
]); ?>
</div>
<div class="col3">
<?php echo template::button('configManageButtonRestore', [
'href' => helper::baseUrl() . 'config/restore',
'value' => 'Restauration'
]); ?>
</div>
</div>
<div class="row">
<div class="col12">
<?php echo template::checkbox('configMaintenance', true, 'Site en maintenance', [
'checked' => $this->getData(['config', 'maintenance'])
<?php echo template::text('configSocialGithubId', [
'help' => 'Saisissez votre ID Github : https://github.com/[ID].',
'label' => 'Github',
'value' => $this->getData(['config', 'social', 'githubId'])
]); ?>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col12">
<div class="block">
<h4>Mise à jour</h4>
<?php $error = helper::urlGetContents('http://zwiicms.com/update/' . common::ZWII_UPDATE_CHANNEL . '/version');?>
<?php if ($error !== false) : ?>
<?php $error = true; ?>
<?php endif;?>
<div class="row">
<div class="col12">
<?php echo 'Vous disposez de ZwiiCMS version <strong>' . common::ZWII_VERSION . '</strong>' . '.'; ?>
<?php if ($error): ?>
<?php echo 'La version de la mise à jour en ligne est <strong>' . helper::urlGetContents('http://zwiicms.com/update/' . common::ZWII_UPDATE_CHANNEL . '/version') . '</strong>' . '.';?>
<?php else: ?>
<p>Votre configuration interdit les mises à jour automatiques. <a href="https://zwiicms.com" target="_blank">Cliquez sur ce lien</a> pour connaître la version disponible en ligne.</p>
<?php endif;?>
</div>
</div>
<div class="row">
<!--</div>
<div class="row">-->
<div class="col6">
<?php echo template::checkbox('configAutoUpdate', true, 'Recherche de mise à jour automatisée ', [
'checked' => $error ? $this->getData(['config', 'autoUpdate']) : false,
'help' => 'Vérification de l\'existence d\'une mise à jour en ligne une fois par jour.',
'disabled' => !$error
]); ?>
</div>
<div class="col3">
<?php echo template::button('configUpdateForced', [
'href' => helper::baseUrl() . 'install/update',
'value' => 'Mise à jour forcée',
'disabled' => !$error
]); ?>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col12">
<div class="block">
<h4>Référencement</h4>
<div class="row">
<div class="col6">
<div class="row">
<div class="col10 offset1">
<div class="col5">
<?php echo template::button('configMetaImage', [
'href' => helper::baseUrl() . 'config/configMetaImage',
'value' => 'Rafraîchir la capture d\'écran Open Graph'
]); ?>
</div>
</div>
<div class="row">
<div class="col10 offset1">
<div class="col5 offset2">
<?php echo template::button('configSiteMap', [
'href' => helper::baseUrl() . 'config/generateFiles',
'value' => 'Rafraîchir sitemap.xml et robots.txt'
'value' => 'Générer sitemap.xml et robots.txt'
]); ?>
</div>
</div>
</div>
<div class="col6 textAlignCenter">
<img id="metaImage" src="<?php echo helper::baseUrl(false) . self::FILE_DIR.'source/screenshot.png';?>" data-tippy-content="Cette capture d'écran est nécessaire aux partages sur les réseaux sociaux. Elle est régénérée lorsque le fichier 'screenshot.png' est effacé du gestionnaire de fichiers." />
<div class="row">
<div class="col12 textAlignCenter">
<img src="<?php echo helper::baseUrl(false) . self::FILE_DIR.'source/screenshot.png';?>" data-tippy-content="Cette capture d'écran est nécessaire aux partages sur les réseaux sociaux. Elle est régénérée lorsque le fichier 'screenshot.png' est effacé du gestionnaire de fichiers." />
</div>
</div>
</div>
@ -336,7 +305,7 @@
'selected' => $this->getData(['config', 'proxyType'])
]); ?>
</div>
<div class="col6">
<div class="col8">
<?php echo template::text('configProxyUrl', [
'label' => 'Adresse du proxy',
'placeholder' => 'cache.proxy.fr',
@ -405,4 +374,5 @@
</div>
</div>
</div>
</div>
<?php echo template::formClose(); ?>

View File

@ -0,0 +1,15 @@
/**
* This file is part of Zwii.
*
* For full copyright and license information, please see the LICENSE
* file that was distributed with this source code.
*
* @author Rémi Jean <remi.jean@outlook.com>
* @copyright Copyright (C) 2008-2018, Rémi Jean
* @author Frédéric Tempez <frederic.tempez@outlook.com>
* @copyright Copyright (C) 2018-2020, Frédéric Tempez
* @license GNU General Public License, version 3
* @link http://zwiicms.com/
*/
@import url("core/layout/admin.css");

View File

@ -0,0 +1,79 @@
<?php echo template::formOpen('configManageForm'); ?>
<div class="row">
<div class="col2">
<?php echo template::button('configManageBack', [
'class' => 'buttonGrey',
'href' => helper::baseUrl() . 'config',
'ico' => 'left',
'value' => 'Retour'
]); ?>
</div>
</div>
<div class="row">
<div class="col12">
<div class="block">
<h4>Restauration ou transfert d'un site</h4>
<div class="row">
<?php echo template::file('configManageImportFile', [
'label' => 'Sélectionnez une archive au format ZIP',
'type' => 2,
'help' => 'L\'archive a été déposée dans le gestionaire de fichiers. Les archives inférieures à la version 9 ne sont pas acceptées.'
]); ?>
</div>
<div class="row">
<?php echo template::checkbox('configManageImportUser', true, 'Préserver les comptes des utilisateurs déjà installés', [
'checked' => true
]); ?>
</div>
<div class="col4 offset4">
<?php echo template::submit('configManageSubmit',[
'value' => 'Restaurer'
]); ?>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col12">
<div class="block">
<h4>Conversion des URL après transfert de site</h4>
<div class="row">
<div class="col5">
<?php
if (is_null($this->getData(['core', 'baseUrl'])) ) {
$baseUrlValue = 'Pas de donnée dans la sauvegarde';
$buttonClass = 'disabled';
} elseif ($this->getData(['core', 'baseUrl']) === '') {
$baseUrlValue = '/';
$buttonClass = (helper::baseUrl(false,false) !== $this->getData(['core', 'baseUrl']) ) ? '' : 'disabled';
} else {
$baseUrlValue = $this->getData(['core', 'baseUrl']);
$buttonClass = (helper::baseUrl(false,false) !== $this->getData(['core', 'baseUrl']) ) ? '' : 'disabled';
}
echo template::text('configManageBaseURLToConvert', [
'label' => 'Dossier d\'installation de l\'archive' ,
'value' => $baseUrlValue,
'readonly' => true,
'help' => 'Lors de la restauration d\'un backup d\'une version 9.2.10 ou supérieure, l\'URL de base est stockée dans la configuration sinon cette donnée est vide.'
]); ?>
</div>
<div class="col5">
<?php echo template::text('configManageCurrentURL', [
'label' => 'Dossier du site actuel',
'value' => helper::baseUrl(false,false),
'readonly' => true,
'help' => 'Dossier du site installé.'
]); ?>
</div>
<div class="col2 verticalAlignBottom">
<?php echo template::button('configManageUpdateBaseURLButton', [
'href' => helper::baseUrl() . 'config/updateBaseUrl',
'class' => $buttonClass,
'value' => 'convertir'
]); ?>
</div>
</div>
</div>
</div>
</div>
<?php echo template::formClose(); ?>