$this->criticalError, 'backupPath' => $this->backupPath, 'backupPathTemplates' => $this->backupPathTemplates, 'backupPathPublic' => $this->backupPathPublic, 'backupPathVar' => $this->backupPathVar, 'totalTemplateFiles' => $this->totalTemplateFiles, 'totalTemplateFilesCopied' => $this->totalTemplateFilesCopied, 'totalTemplateFilesFailed' => $this->totalTemplateFilesFailed ]; } } class StaticSiteBackupManager { public string $projectDir; public StaticSiteBuilder $staticSiteBuilder; public string $backupPath; public string $dateFormat; public int $retentionPeriod; public function __construct( string $projectDir, StaticSiteBuilder $staticSiteBuilder ) { $this->projectDir = $projectDir; $this->staticSiteBuilder = $staticSiteBuilder; $this->backupPath = StaticSiteBackupConfig::$backupPath; $this->dateFormat = StaticSiteBackupConfig::$dateFormat; $this->retentionPeriod = StaticSiteBackupConfig::$retentionPeriod; } public function deleteOld() : void { $thresholdDate = date($this->dateFormat, time() - ($this->retentionPeriod * 86400)); foreach (glob($this->backupPath . '*') as $filename) { $pathinfo = pathinfo($filename); if (is_dir($filename) && $pathinfo['basename'] < $thresholdDate) { $output = @shell_exec('rm -rf ' . $filename); } } } public function restore(string $folderName) : bool { if (is_dir($this->backupPath . $folderName)) { //templates $dir1 = $this->backupPath . $folderName . $this->staticSiteBuilder->staticTemplatePath . '*'; $dir2 = $this->staticSiteBuilder->projectDir . $this->staticSiteBuilder->staticTemplatePath; //echo 'cp -rp ' . $dir1 . ' ' . $dir2 . PHP_EOL; $output = @shell_exec('cp -rp ' . $dir1 . ' ' . $dir2); //public $dir1 = $this->backupPath . $folderName . $this->staticSiteBuilder->staticMediaPath . '*'; $dir2 = $this->staticSiteBuilder->projectDir . $this->staticSiteBuilder->staticMediaPath; //echo 'cp -rp ' . $dir1 . ' ' . $dir2 . PHP_EOL; $output = @shell_exec('cp -rp ' . $dir1 . ' ' . $dir2); //var $dir1 = $this->backupPath . $folderName . $this->staticSiteBuilder->staticVarPath . '*'; $dir2 = $this->staticSiteBuilder->projectDir . $this->staticSiteBuilder->staticVarPath; //echo 'cp -rp ' . $dir1 . ' ' . $dir2 . PHP_EOL; $output = @shell_exec('cp -rp ' . $dir1 . ' ' . $dir2); return true; } return false; } public function run() : StaticSiteBackupResult { $staticSiteBackupResult = new StaticSiteBackupResult(); if ($this->staticSiteBuilder->isRunning()) { $staticSiteBackupResult->criticalError = 'STATIC SITE BUILDER IS RUNNING, TRY AGAIN SHORTLY'; return $staticSiteBackupResult; } //is path writable if (!is_writable($this->backupPath)) { $staticSiteBackupResult->criticalError = 'Backup location is not writable'; return $staticSiteBackupResult; } //get date, use a backup folder name $folderName = date($this->dateFormat); @mkdir($this->backupPath . $folderName, 755); @mkdir($this->backupPath . $folderName . $this->staticSiteBuilder->staticTemplatePath, 0777, true); @mkdir($this->backupPath . $folderName . $this->staticSiteBuilder->staticMediaPath, 0755, true); @mkdir($this->backupPath . $folderName . $this->staticSiteBuilder->staticVarPath, 0755, true); if (!is_dir($this->backupPath . $folderName)) { $staticSiteBackupResult->criticalError = 'Could not create backup directory'; return $staticSiteBackupResult; } if (!is_dir($this->backupPath . $folderName . $this->staticSiteBuilder->staticTemplatePath )) { $staticSiteBackupResult->criticalError = 'Could not create template directory'; return $staticSiteBackupResult; } if (!is_dir($this->backupPath . $folderName . $this->staticSiteBuilder->staticMediaPath )) { $staticSiteBackupResult->criticalError = 'Could not create public directory'; return $staticSiteBackupResult; } if (!is_dir($this->backupPath . $folderName . $this->staticSiteBuilder->staticVarPath )) { $staticSiteBackupResult->criticalError = 'Could not create var directory'; return $staticSiteBackupResult; } $staticSiteBackupResult->backupPath = $this->backupPath . $folderName; //templates $dir1 = $this->staticSiteBuilder->projectDir . $this->staticSiteBuilder->staticTemplatePath . '*'; $dir2 = $this->backupPath . $folderName . $this->staticSiteBuilder->staticTemplatePath; $output = @shell_exec('cp -rp ' . $dir1 . ' ' . $dir2); $staticSiteBackupResult->backupPathTemplates = $this->backupPath . $folderName . $this->staticSiteBuilder->staticTemplatePath; //public $dir1 = $this->staticSiteBuilder->projectDir . $this->staticSiteBuilder->staticMediaPath . '*'; $dir2 = $this->backupPath . $folderName . $this->staticSiteBuilder->staticMediaPath; $output = @shell_exec('cp -rp ' . $dir1 . ' ' . $dir2); $staticSiteBackupResult->backupPathPublic = $this->backupPath . $folderName . $this->staticSiteBuilder->staticMediaPath; //var $dir1 = $this->staticSiteBuilder->projectDir . $this->staticSiteBuilder->staticVarPath . '*'; $dir2 = $this->backupPath . $folderName . $this->staticSiteBuilder->staticVarPath; $output = @shell_exec('cp -rp ' . $dir1 . ' ' . $dir2); $staticSiteBackupResult->backupPathVar = $this->backupPath . $folderName . $this->staticSiteBuilder->staticVarPath; return $staticSiteBackupResult; } }