formButtons = false; // Check for zip extension installed $this->zip = extension_loaded('zip'); } // Install the plugin and create the workspace directory public function install($position=0) { parent::install($position); $workspace = $this->workspace(); return mkdir($workspace, 0755, true); } // Uninstall the plugin and delete the workspace directory public function uninstall() { parent::uninstall(); $workspace = $this->workspace(); return Filesystem::deleteRecursive($workspace); } // Redefine workspace public function workspace() { return PATH_CONTENT.'updater'.DS; } // Check if the root directory is writable private function isWritable() { return is_writable(PATH_ROOT); } // Create a copy of all the system and compress it // Returns the name of the backup directory private function makeFullBackup() { $currentDate = Date::current(BACKUP_DATE_FORMAT); $backupDirectory = $this->workspace().$currentDate; // Copy all the files to a backup directory formed by date Filesystem::copyRecursive(PATH_CONTENT, $backupDirectory, $backupDirectory); // Compress the backup directory if (Filesystem::zip($backupDirectory, $backupDirectory.'.zip')) { Filesystem::deleteRecursive($backupDirectory); } return $backupDirectory; } // Download the latest version of Bludit private function downloadLatestVersion() { TCP::download('https://bludit-latest.zip', $this->workspace().DS.'bludit-latest.zip'); } public function post() { if (isset($_POST['createBackup'])) { return $this->createBackup(); } elseif (isset($_POST['restoreBackup'])) { return $this->restoreBackup($_POST['restoreBackup']); } elseif (isset($_POST['deleteBackup'])) { return $this->deleteBackup($_POST['deleteBackup']); } return false; } public function form() { global $Language; $backups = Filesystem::listDirectories($this->workspace(), '*', true); if ($this->zip) { $backups = Filesystem::listFiles($this->workspace(), '*', 'zip', true); } $html = '
'; $html .= ''; $html .= '
'; $html .= '
'; foreach ($backups as $backup) { $filename = pathinfo($backup,PATHINFO_FILENAME); $basename = pathinfo($backup,PATHINFO_BASENAME); $html .= '
'; $html .= '

'.Date::format($filename, BACKUP_DATE_FORMAT, 'F j, Y, g:i a').'

'; // Allow download if a zip file if ($this->zip) { $html .= ' '.$Language->get('download').''; } $html .= ''; $html .= ''; $html .= '
'; $html .= '
'; } return $html; } public function createBackup() { // Current backup directory $currentDate = Date::current(BACKUP_DATE_FORMAT); $backupDir = $this->workspace().$currentDate; // Copy directories to backup directory // $directoriesToBackup is a private variable of this class foreach ($this->directoriesToBackup as $dir) { $destination = $backupDir.DS.basename($dir); Filesystem::copyRecursive($dir, $destination); } // Compress backup directory if ($this->zip) { if (Filesystem::zip($backupDir, $backupDir.'.zip')) { Filesystem::deleteRecursive($backupDir); } } return true; } public function restoreBackup($filename) { // Remove current files foreach ($this->directoriesToBackup as $dir) { Filesystem::deleteRecursive($dir); } // Recover backuped files // Zip format if ($this->zip) { $tmp = $this->workspace().$filename.'.zip'; return Filesystem::unzip($tmp, PATH_CONTENT); } // Directory format $tmp = $this->workspace().$filename; return Filesystem::copyRecursive($tmp, PATH_CONTENT); } public function deleteBackup($filename) { // Zip format if ($this->zip) { $tmp = $this->workspace().$filename.'.zip'; return Filesystem::rmfile($tmp); } // Directory format $tmp = $this->workspace().$filename; return Filesystem::deleteRecursive($tmp); } }