[9.3.00] sauvegarde auto et manuelle

This commit is contained in:
fredtempez 2019-08-07 18:16:43 +02:00
parent 9b5ed2eb0d
commit b1c04577c1
2 changed files with 62 additions and 50 deletions

View File

@ -1022,7 +1022,10 @@ class core extends common {
if($lastClearTmp > $this->getData(['core', 'lastClearTmp']) + 86400) { if($lastClearTmp > $this->getData(['core', 'lastClearTmp']) + 86400) {
$iterator = new DirectoryIterator(self::TEMP_DIR); $iterator = new DirectoryIterator(self::TEMP_DIR);
foreach($iterator as $fileInfos) { foreach($iterator as $fileInfos) {
if($fileInfos->isFile() AND $fileInfos->getBasename() !== '.gitkeep') { if( $fileInfos->isFile() &&
$fileInfos->getBasename() !== '.htaccess' &&
$fileInfos->getBasename() !== '.gitkeep'
) {
@unlink($fileInfos->getPathname()); @unlink($fileInfos->getPathname());
} }
} }
@ -1032,30 +1035,41 @@ class core extends common {
$this->saveData(); $this->saveData();
} }
// Backup automatique des données // Backup automatique des données
$lastBackup = mktime(0, 0, 0); $lastBackup = mktime(0, 0, 0);
if( if(
$this->getData(['config', 'autoBackup']) $this->getData(['config', 'autoBackup'])
AND $lastBackup > $this->getData(['core', 'lastBackup']) + 86400 AND $lastBackup > $this->getData(['core', 'lastBackup']) + 86400
AND $this->getData(['user']) // Pas de backup pendant l'installation AND $this->getData(['user']) // Pas de backup pendant l'installation
) { ) {
// Copie du fichier de données // Copie du fichier de données
copy(self::DATA_DIR.'core.json', self::BACKUP_DIR . date('Y-m-d', $lastBackup) . '.json'); // Creation du ZIP
// Date du dernier backup $fileName = date('Y-m-d-h-i-s', time()) . '.zip';
$this->setData(['core', 'lastBackup', $lastBackup]); $zip = new ZipArchive();
// Enregistre les données if($zip->open(self::TEMP_DIR . $fileName, ZipArchive::CREATE) === TRUE){
$this->saveData(); foreach(core::scanDir('site/') as $file) {
// Supprime les backups de plus de 30 jours $zip->addFile($file);
$iterator = new DirectoryIterator(self::BACKUP_DIR); }
foreach($iterator as $fileInfos) { }
if(
$fileInfos->isFile() $zip->close();
AND $fileInfos->getBasename() !== '.htaccess' copy(self::TEMP_DIR . $fileName, self::BACKUP_DIR . $fileName );
AND $fileInfos->getMTime() + (86400 * 30) < time() unlink (self::TEMP_DIR . $fileName);
) { // Date du dernier backup
@unlink($fileInfos->getPathname()); $this->setData(['core', 'lastBackup', $lastBackup]);
// Enregistre les données
$this->saveData();
// Supprime les backups de plus de 30 jours
$iterator = new DirectoryIterator(self::BACKUP_DIR);
foreach($iterator as $fileInfos) {
if(
$fileInfos->isFile()
AND $fileInfos->getBasename() !== '.htaccess'
AND $fileInfos->getMTime() + (86400 * 30) < time()
) {
@unlink($fileInfos->getPathname());
}
} }
} }
}
// Crée le fichier de personnalisation avancée // Crée le fichier de personnalisation avancée
if(file_exists(self::DATA_DIR.'custom.css') === false) { if(file_exists(self::DATA_DIR.'custom.css') === false) {
file_put_contents(self::DATA_DIR.'custom.css', file_get_contents('core/module/theme/resource/custom.css')); file_put_contents(self::DATA_DIR.'custom.css', file_get_contents('core/module/theme/resource/custom.css'));
@ -1536,6 +1550,30 @@ class core extends common {
} }
} }
/**
* Scan le contenu d'un dossier et de ses sous-dossiers
* @param string $dir Dossier à scanner
* @return array
*/
public static function scanDir($dir) {
$dirContent = [];
$iterator = new DirectoryIterator($dir);
foreach($iterator as $fileInfos) {
if(in_array($fileInfos->getFilename(), ['.', '..', 'backup'])) {
continue;
}
elseif($fileInfos->isDir()) {
$dirContent = array_merge($dirContent, self::scanDir($fileInfos->getPathname()));
}
else {
$dirContent[] = $fileInfos->getPathname();
}
}
return $dirContent;
}
} }
class helper { class helper {

View File

@ -204,7 +204,7 @@ class config extends common {
$fileName = date('Y-m-d-h-i-s', time()) . '.zip'; $fileName = date('Y-m-d-h-i-s', time()) . '.zip';
$zip = new ZipArchive(); $zip = new ZipArchive();
if($zip->open(self::TEMP_DIR . $fileName, ZipArchive::CREATE) === TRUE){ if($zip->open(self::TEMP_DIR . $fileName, ZipArchive::CREATE) === TRUE){
foreach(configHelper::scanDir('site/') as $file) { foreach(core::scanDir('site/') as $file) {
$zip->addFile($file); $zip->addFile($file);
} }
} }
@ -352,29 +352,3 @@ class config extends common {
} }
} }
class configHelper extends helper {
/**
* Scan le contenu d'un dossier et de ses sous-dossiers
* @param string $dir Dossier à scanner
* @return array
*/
public static function scanDir($dir) {
$dirContent = [];
$iterator = new DirectoryIterator($dir);
foreach($iterator as $fileInfos) {
if(in_array($fileInfos->getFilename(), ['.', '..', 'backup'])) {
continue;
}
elseif($fileInfos->isDir()) {
$dirContent = array_merge($dirContent, self::scanDir($fileInfos->getPathname()));
}
else {
$dirContent[] = $fileInfos->getPathname();
}
}
return $dirContent;
}
}