bug restauration d'un fichier vide

This commit is contained in:
Fred Tempez 2021-11-15 21:44:12 +01:00
parent 776d85895c
commit 711f702c7c
3 changed files with 98 additions and 88 deletions

View File

@ -1,8 +1,10 @@
# Changelog # Changelog
## Version 11.2.00 ## Version 11.2.00
- Correction :
Configuration, restauration d'une archive : La validation du formulaire sans avoir sélectionné de fichier de sauvegarde provoque le crash du site.
- Modifications : - Modifications :
Thème : - Thème :
- Disposition des options de configuration du site. - Disposition des options de configuration du site.
- Bannière : le contenu peut être personnalisé à l'aide d'un éditeur. La bannière au-dessus du site peut s'étendre sur la largeur de la page. - Bannière : le contenu peut être personnalisé à l'aide d'un éditeur. La bannière au-dessus du site peut s'étendre sur la largeur de la page.
- Pages : il est désormais possible de donner un nom de page court qui sera utilisé dans le menu du site, dans les abrres latérales et dans les sélecteurs de page (éditeur / lien). En revanche le nom de la page affiché en haut de celle-ci est inchangé. Dans la plupart des cas le titre court sera identique au titre. - Pages : il est désormais possible de donner un nom de page court qui sera utilisé dans le menu du site, dans les abrres latérales et dans les sélecteurs de page (éditeur / lien). En revanche le nom de la page affiché en haut de celle-ci est inchangé. Dans la plupart des cas le titre court sera identique au titre.

View File

@ -283,91 +283,96 @@ class config extends common {
*/ */
public function restore() { public function restore() {
// Soumission du formulaire // Soumission du formulaire
if($this->isPost()) { if($this->isPost() ) {
//if ($this->getInput('configRestoreImportFile'))
$fileZip = $this->getInput('configRestoreImportFile'); $success = false;
$file_parts = pathinfo($fileZip);
$folder = date('Y-m-d-h-i-s', time());
$zip = new ZipArchive();
if ($file_parts['extension'] !== 'zip') {
// Valeurs en sortie erreur
$this->addOutput([
'notification' => 'Le fichier n\'est pas une archive valide',
'redirect' => helper::baseUrl() . 'config/restore',
'state' => false
]);
}
$successOpen = $zip->open(self::FILE_DIR . 'source/' . $fileZip);
if ($successOpen === FALSE) {
// Valeurs en sortie erreur
$this->addOutput([
'notification' => 'Impossible de lire l\'archive',
'redirect' => helper::baseUrl() . 'config/restore',
'state' => false
]);
}
// Lire le contenu de l'archive dans le tableau files
for( $i = 0; $i < $zip->numFiles; $i++ ){
$stat = $zip->statIndex( $i );
$files [] = ( basename( $stat['name'] ));
}
// Lire la dataversion if ($this->getInput('configRestoreImportFile', null, true) ) {
$tmpDir = uniqid(4);
$success = $zip->extractTo( self::TEMP_DIR . $tmpDir );
$data = file_get_contents( self::TEMP_DIR . $tmpDir . '/data/core.json');
$obj = json_decode($data);
$dataVersion = strval ($obj->core->dataVersion);
switch (strlen($dataVersion)) {
case 4:
if (substr($dataVersion,0,1) === '9' ) {
$version = 9;
} else {
$version = 0;
}
break;
case 5:
$version = substr($dataVersion,0,2);
break;
default:
$version = 0;
break;
}
$this->removeDir(self::TEMP_DIR . $tmpDir );
if ($version >= 10 ) { $fileZip = $this->getInput('configRestoreImportFile');
// Option active, les users sont stockées $file_parts = pathinfo($fileZip);
if ($this->getInput('configRestoreImportUser', helper::FILTER_BOOLEAN) === true ) { $folder = date('Y-m-d-h-i-s', time());
$users = $this->getData(['user']); $zip = new ZipArchive();
if ($file_parts['extension'] !== 'zip') {
// Valeurs en sortie erreur
$this->addOutput([
'notification' => 'Le fichier n\'est pas une archive valide',
'redirect' => helper::baseUrl() . 'config/restore',
'state' => false
]);
} }
} elseif ($version === 0) { // Version invalide $successOpen = $zip->open(self::FILE_DIR . 'source/' . $fileZip);
// Valeurs en sortie erreur if ($successOpen === FALSE) {
$this->addOutput([ // Valeurs en sortie erreur
'notification' => 'Cette archive n\'est pas une sauvegarde valide', $this->addOutput([
'redirect' => helper::baseUrl() . 'config/restore', 'notification' => 'Impossible de lire l\'archive',
'state' => false '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 // Lire le contenu de l'archive dans le tableau files
if ($version === 9) { for( $i = 0; $i < $zip->numFiles; $i++ ){
$_SESSION['KEEP_USERS'] = $this->getInput('configRestoreImportUser', helper::FILTER_BOOLEAN); $stat = $zip->statIndex( $i );
} $files [] = ( basename( $stat['name'] ));
// Extraire le zip ou 'site/' }
$this->removeDir(self::DATA_DIR);
$success = $zip->extractTo( 'site/' ); // Lire la dataversion
// Fermer l'archive $tmpDir = uniqid(4);
$zip->close(); $success = $zip->extractTo( self::TEMP_DIR . $tmpDir );
$data = file_get_contents( self::TEMP_DIR . $tmpDir . '/data/core.json');
$obj = json_decode($data);
$dataVersion = strval ($obj->core->dataVersion);
switch (strlen($dataVersion)) {
case 4:
if (substr($dataVersion,0,1) === '9' ) {
$version = 9;
} else {
$version = 0;
}
break;
case 5:
$version = substr($dataVersion,0,2);
break;
default:
$version = 0;
break;
}
$this->removeDir(self::TEMP_DIR . $tmpDir );
if ($version >= 10 ) {
// Option active, les users sont stockées
if ($this->getInput('configRestoreImportUser', helper::FILTER_BOOLEAN) === true ) {
$users = $this->getData(['user']);
}
} elseif ($version === 0) { // Version invalide
// Valeurs en sortie erreur
$this->addOutput([
'notification' => 'Cette archive n\'est pas une sauvegarde valide',
'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('configRestoreImportUser', helper::FILTER_BOOLEAN);
}
// Extraire le zip ou 'site/'
$this->removeDir(self::DATA_DIR);
$success = $zip->extractTo( 'site/' );
// Fermer l'archive
$zip->close();
// Restaurer les users originaux d'une v10 si option cochée // Restaurer les users originaux d'une v10 si option cochée
if (!empty($users) && if (!empty($users) &&
$version >= 10 && $version >= 10 &&
$this->getInput('configRestoreImportUser', helper::FILTER_BOOLEAN) === true) { $this->getInput('configRestoreImportUser', helper::FILTER_BOOLEAN) === true) {
$this->setData(['user',$users]); $this->setData(['user',$users]);
}
} }
// Message de notification // Message de notification
$notification = $success === true ? 'Restauration réalisée avec succès' : 'Erreur inconnue'; $notification = $success === true ? 'Restauration effectuée avec succès' : 'Erreur inconnue';
$redirect = $this->getInput('configRestoreImportUser', helper::FILTER_BOOLEAN) === true ? helper::baseUrl() . 'config/restore' : helper::baseUrl() . 'user/login/'; $redirect = $this->getInput('configRestoreImportUser', helper::FILTER_BOOLEAN) === true ? helper::baseUrl() . 'config/restore' : helper::baseUrl() . 'user/login/';
// Valeurs en sortie erreur // Valeurs en sortie erreur
$this->addOutput([ $this->addOutput([

View File

@ -14,11 +14,6 @@ $( document).ready(function() {
$("#configBackupForm").submit( function(e){ $("#configBackupForm").submit( function(e){
$("#configBackupSubmit").addClass("disabled").prop("disabled", true); $("#configBackupSubmit").addClass("disabled").prop("disabled", true);
e.preventDefault(); e.preventDefault();
/**
if ($("input[name=configBackupOption]").is(':checked')) {
$('body').css('cursor', 'wait');
}
*/
var url = "<?php echo helper::baseUrl() . $this->getUrl(0); ?>/backup"; var url = "<?php echo helper::baseUrl() . $this->getUrl(0); ?>/backup";
$.ajax({ $.ajax({
type: "POST", type: "POST",
@ -38,11 +33,19 @@ $( document).ready(function() {
}); });
}); });
/** /**
* Aspect de la souris * Confirmation de sauvegarde complète
*/ */
$("#configBackupSubmit").click(function(event) { $("#configBackupSubmit").on("click", function() {
$('body').css('cursor', 'wait'); if ($("input[name=configBackupOption]").is(':checked')) {
return core.confirm("Une sauvegarde avec le contenu du gestionnaire de fichier peut prendre du temps à générer. Confirmez-vous ?", function() {
//$(location).attr("href", _this.attr("href"));
$('body').css('cursor', 'wait');
$('form#configBackupForm').submit();
});
}
}); });
}); });