Sauvegarde et export du thème

This commit is contained in:
fredtempez 2018-12-28 16:52:58 +01:00
parent 836f0a51b7
commit 2d1faaa735
2 changed files with 57 additions and 16 deletions

View File

@ -26,7 +26,8 @@ class theme extends common {
'site' => self::GROUP_ADMIN, 'site' => self::GROUP_ADMIN,
'manage' => self::GROUP_ADMIN, 'manage' => self::GROUP_ADMIN,
'export' => self::GROUP_ADMIN, 'export' => self::GROUP_ADMIN,
'import' => self::GROUP_ADMIN 'import' => self::GROUP_ADMIN,
'save' => self::GROUP_ADMIN
]; ];
public static $aligns = [ public static $aligns = [
'left' => 'À gauche', 'left' => 'À gauche',
@ -449,9 +450,7 @@ class theme extends common {
public function manage() { public function manage() {
if($this->isPost() ) { if($this->isPost() ) {
$archive = $this->getInput('themeManageImport', helper::FILTER_STRING_SHORT, true); $archive = $this->getInput('themeManageImport', helper::FILTER_STRING_SHORT, true);
echo $archive;
// import ok
} }
// Valeurs en sortie // Valeurs en sortie
$this->addOutput([ $this->addOutput([
@ -465,6 +464,42 @@ class theme extends common {
* Export du thème * Export du thème
*/ */
public function export() { public function export() {
// Creation du dossier
$zipFilename = 'theme-'.date('dmYhms').'-'.rand(100,999).'.zip';
$zip = new ZipArchive();
if ($zip->open('site/tmp/' . $zipFilename, ZipArchive::CREATE | ZipArchive::OVERWRITE ) === TRUE) {
$zip->addFile('site/data/theme.json','site/data/theme.json');
if ($this->getData(['theme','body','image']) !== '' ) {
$zip->addFile('site/file/source/'.$this->getData(['theme','body','image']),
'site/file/source/'.$this->getData(['theme','body','image'])
);
}
if ($this->getData(['theme','header','image']) !== '' ) {
$zip->addFile('site/file/source/'.$this->getData(['theme','header','image']),
'site/file/source/'.$this->getData(['theme','header','image'])
);
}
$ret = $zip->close();
}
// Téléchargement du ZIP
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Transfer-Encoding: binary');
header('Content-Disposition: attachment; filename="' . $zipFilename . '"');
header('Content-Length: ' . filesize('site/tmp/' . $zipFilename));
readfile('site/tmp/' . $zipFilename);
// Nettoyage du dossier
unlink ('site/tmp/' . $zipFilename);
// Valeurs en sortie
$this->addOutput([
'display' => self::DISPLAY_RAW
]);
}
/**
* Export du thème
*/
public function save() {
// Creation du dossier // Creation du dossier
$zipFilename = 'theme-'.date('dmYhms').'-'.rand(100,999).'.zip'; $zipFilename = 'theme-'.date('dmYhms').'-'.rand(100,999).'.zip';
$zip = new ZipArchive(); $zip = new ZipArchive();
@ -483,17 +518,14 @@ class theme extends common {
$ret = $zip->close(); $ret = $zip->close();
} }
// Téléchargement du ZIP // Téléchargement du ZIP
header('Content-Description: File Transfer'); copy ('site/tmp/' . $zipFilename , 'site/file/source/' . $zipFilename);
header('Content-Type: application/octet-stream');
header('Content-Transfer-Encoding: binary');
header('Content-Disposition: attachment; filename="' . $zipFilename . '"');
header('Content-Length: ' . filesize('site/tmp/' . $zipFilename));
readfile('site/tmp/' . $zipFilename);
// Nettoyage du dossier // Nettoyage du dossier
unlink ('site/tmp/' . $zipFilename); unlink ('site/tmp/' . $zipFilename);
// Valeurs en sortie // Valeurs en sortie
$this->addOutput([ $this->addOutput([
'display' => self::DISPLAY_RAW 'notification' => 'Archive <b>'.$zipFilename.'</b> sauvegardée dans fichiers',
'redirect' => helper::baseUrl() . 'theme/manage',
'state' => true
]); ]);
} }

View File

@ -26,14 +26,23 @@
</div> </div>
<div class="col6"> <div class="col6">
<div class="block"> <div class="block">
<h4>Exporter les données du thème</h4> <h4>Enregistrer les données du thème</h4>
<div class="col5 offset3"> <div class="row">
<div class="col5 offset1">
<?php echo template::button('themeSave', [
'href' => helper::baseUrl() . 'theme/save',
'value' => 'Sauvegarder le thème dans les fichiers'
]); ?>
</div>
<div class="col5">
<?php echo template::button('themeExport', [ <?php echo template::button('themeExport', [
'href' => helper::baseUrl() . 'theme/export', 'href' => helper::baseUrl() . 'theme/export',
'value' => 'Générer une archive ZIP' 'value' => 'Télécharger une archive du thème'
]); ?> ]); ?>
</div> </div>
<p \>L'archive ZIP contient la structure du thème avec l'arborescence complète à copier dans le dossier site. Les images sont comprises dans l'archive. </div>
L'archive ZIP contient la structure du thème avec l'arborescence complète à copier dans le dossier site. Les images sont comprises dans l'archive.
<p \>Le nom du thème est généré à partir du groupe date heure et d'un nombre aléatoire.
</div> </div>
</div> </div>
</div> </div>