vérification de l'archive de thème importée

This commit is contained in:
Fred Tempez 2020-09-26 18:27:46 +02:00
parent 65a064ef92
commit 89ab970806
2 changed files with 36 additions and 15 deletions

View File

@ -6,7 +6,9 @@
- Filtrage des pages affichées dans la configuration et initialisation après une mise à jour. - Filtrage des pages affichées dans la configuration et initialisation après une mise à jour.
- Pages de recherche et des mentions vides, modification de la valeur en l'absence de choix. - Pages de recherche et des mentions vides, modification de la valeur en l'absence de choix.
- Libellé des pages d'erreur non sélectionnées "Page par défaut" - Libellé des pages d'erreur non sélectionnées "Page par défaut"
- Erreur de position du menu fixe en haut de page, recharge la classe après la perte de la session. - Erreur de position du menu fixe en haut de page des membres simples et dans après une déconnexion automatique
- Modification :
- Extraction d'une archive : vérification du contenu avant import.
## version 10.3.00 ## version 10.3.00
- Corrections : - Corrections :

47
core/module/theme/theme.php Normal file → Executable file
View File

@ -610,32 +610,50 @@ class theme extends common {
public function manage() { public function manage() {
if($this->isPost() ) { if($this->isPost() ) {
$zipFilename = $this->getInput('themeManageImport', helper::FILTER_STRING_SHORT, true); $zipFilename = $this->getInput('themeManageImport', helper::FILTER_STRING_SHORT, true);
$tempFolder = uniqid();
$zip = new ZipArchive(); $zip = new ZipArchive();
if ($zip->open(self::FILE_DIR.'source/'.$zipFilename) === TRUE) { if ($zip->open(self::FILE_DIR.'source/'.$zipFilename) === TRUE) {
$zip->extractTo('.'); mkdir (self::TEMP_DIR . $tempFolder);
$zip->extractTo(self::TEMP_DIR . $tempFolder );
// Archive de thème ?
if ( file_exists(self::TEMP_DIR . $tempFolder . '/site/data/custom.css')
AND file_exists(self::TEMP_DIR . $tempFolder . '/site/data/theme.css')
AND file_exists(self::TEMP_DIR . $tempFolder . '/site/data/theme.json') ) {
// traiter l'archive
$success = $zip->extractTo('.');
// traitement de l'erreur
$notification = $success ? 'Le thème a été importé' : 'Erreur lors de l\'extraction, vérifiez les permissions.';
// Supprimmer le dossier temporaire
$install = new install;
$install->removeAll(self::TEMP_DIR . $tempFolder);
} else {
// pas une archive de thème
$success = false;
$notification = 'Ce n\'est pas l\'archive d\'un thème !';
}
$zip->close(); $zip->close();
} else {
// erreur à l'ouverture
$success = false;
$notification = 'Impossible d\'ouvrir l\'archive';
}
// Valeurs en sortie // Valeurs en sortie
$this->addOutput([ $this->addOutput([
'redirect' => helper::baseUrl() . 'theme' 'notification' => $notification,
]); 'state' => $success,
} else { 'title' => 'Gestion des thèmes',
$this->addOutput([ 'view' => 'manage'
'notification' => 'Erreur avec le thème <b>'.$zipFilename.'</b>', ]);;
'redirect' => helper::baseUrl() . 'theme/manage'
]);
}
} }
// Valeurs en sortie // Valeurs en sortie
$this->addOutput([ $this->addOutput([
'title' => 'Gestion des thèmes', 'title' => 'Gestion des thèmes',
'view' => 'manage' 'view' => 'manage'
]); ]);
} }
/** /**
* Export du thème * Export du thème
*/ */
@ -651,7 +669,7 @@ class theme extends common {
readfile(self::TEMP_DIR . $zipFilename); readfile(self::TEMP_DIR . $zipFilename);
// Nettoyage du dossier // Nettoyage du dossier
unlink (self::TEMP_DIR . $zipFilename); unlink (self::TEMP_DIR . $zipFilename);
die(); exit();
} }
/** /**
@ -679,7 +697,7 @@ class theme extends common {
* construction du zip * construction du zip
* @param string $modele theme ou admin * @param string $modele theme ou admin
*/ */
public function makezip($modele) { private function makezip($modele) {
// Creation du dossier // Creation du dossier
$zipFilename = $modele . ' ' .date('d m Y').' '.date('H i s ').'.zip'; $zipFilename = $modele . ' ' .date('d m Y').' '.date('H i s ').'.zip';
$zip = new ZipArchive(); $zip = new ZipArchive();
@ -709,4 +727,5 @@ class theme extends common {
} }
return ($zipFilename); return ($zipFilename);
} }
} }