improved backup zipping
This commit is contained in:
		@@ -15,7 +15,7 @@ abstract class BackupUtil {
 | 
			
		||||
	/*
 | 
			
		||||
	 * Constants
 | 
			
		||||
	 */
 | 
			
		||||
	const FOLDER_NAME_BACKUP = 'backup/';
 | 
			
		||||
	const FOLDER_NAME_BACKUP = 'backup';
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Perform a Full Backup of ManiaControl
 | 
			
		||||
@@ -33,13 +33,14 @@ abstract class BackupUtil {
 | 
			
		||||
			trigger_error("Couldn't create Backup Zip!");
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
		$excludes   = array('backup', 'logs', 'ManiaControl.log');
 | 
			
		||||
		$pathInfo   = pathInfo(ManiaControlDir);
 | 
			
		||||
		$parentPath = $pathInfo['dirname'] . DIRECTORY_SEPARATOR;
 | 
			
		||||
		$dirName    = $pathInfo['basename'];
 | 
			
		||||
		$excludes      = array();
 | 
			
		||||
		$baseFileNames = array('configs', 'core', 'plugins', 'ManiaControl.php');
 | 
			
		||||
		$pathInfo      = pathInfo(ManiaControlDir);
 | 
			
		||||
		$parentPath    = $pathInfo['dirname'] . DIRECTORY_SEPARATOR;
 | 
			
		||||
		$dirName       = $pathInfo['basename'];
 | 
			
		||||
		$backupZip->addEmptyDir($dirName);
 | 
			
		||||
		self::zipDirectory($backupZip, ManiaControlDir, strlen($parentPath), $excludes);
 | 
			
		||||
		return $backupZip->close();;
 | 
			
		||||
		self::zipDirectory($backupZip, ManiaControlDir, strlen($parentPath), $excludes, $baseFileNames);
 | 
			
		||||
		return $backupZip->close();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
@@ -48,7 +49,7 @@ abstract class BackupUtil {
 | 
			
		||||
	 * @return string
 | 
			
		||||
	 */
 | 
			
		||||
	private static function getBackupFolder() {
 | 
			
		||||
		$backupFolder = ManiaControlDir . self::FOLDER_NAME_BACKUP;
 | 
			
		||||
		$backupFolder = ManiaControlDir . self::FOLDER_NAME_BACKUP . DIRECTORY_SEPARATOR;
 | 
			
		||||
		if (!is_dir($backupFolder) && !mkdir($backupFolder)) {
 | 
			
		||||
			trigger_error("Couldn't create Backup Folder!");
 | 
			
		||||
			return false;
 | 
			
		||||
@@ -61,25 +62,33 @@ abstract class BackupUtil {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Add a complete Directory to the ZipArchive
 | 
			
		||||
	 * Add a Directory to the ZipArchive
 | 
			
		||||
	 *
 | 
			
		||||
	 * @param \ZipArchive $zipArchive
 | 
			
		||||
	 * @param string      $folderName
 | 
			
		||||
	 * @param int         $prefixLength
 | 
			
		||||
	 * @param array       $excludes
 | 
			
		||||
	 * @param array       $baseFileNames
 | 
			
		||||
	 * @return bool
 | 
			
		||||
	 */
 | 
			
		||||
	private static function zipDirectory(\ZipArchive &$zipArchive, $folderName, $prefixLength, array $excludes = array()) {
 | 
			
		||||
	private static function zipDirectory(\ZipArchive &$zipArchive, $folderName, $prefixLength, array $excludes = array(), array $baseFileNames = array()) {
 | 
			
		||||
		$folderHandle = opendir($folderName);
 | 
			
		||||
		if (!is_resource($folderHandle)) {
 | 
			
		||||
			trigger_error("Couldn't open Folder '{$folderName}' for Backup!");
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
		$useBaseFileNames = (count($baseFileNames) > 0);
 | 
			
		||||
		while (false !== ($file = readdir($folderHandle))) {
 | 
			
		||||
			if (substr($file, 0, 1) === '.') {
 | 
			
		||||
				// Skip such .files
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
			if (in_array($file, $excludes)) {
 | 
			
		||||
				// Excluded
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
			if ($useBaseFileNames && !in_array($file, $baseFileNames)) {
 | 
			
		||||
				// Not one of the base files
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
			$filePath  = $folderName . DIRECTORY_SEPARATOR . $file;
 | 
			
		||||
@@ -114,12 +123,12 @@ abstract class BackupUtil {
 | 
			
		||||
			trigger_error("Couldn't create Backup Zip!");
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
		$excludes   = array();
 | 
			
		||||
		$pathInfo   = pathInfo(ManiaControlDir . 'plugins');
 | 
			
		||||
		$directory  = ManiaControlDir . 'plugins';
 | 
			
		||||
		$pathInfo   = pathInfo($directory);
 | 
			
		||||
		$parentPath = $pathInfo['dirname'] . DIRECTORY_SEPARATOR;
 | 
			
		||||
		$dirName    = $pathInfo['basename'];
 | 
			
		||||
		$backupZip->addEmptyDir($dirName);
 | 
			
		||||
		self::zipDirectory($backupZip, ManiaControlDir . 'plugins', strlen($parentPath), $excludes);
 | 
			
		||||
		return $backupZip->close();;
 | 
			
		||||
		self::zipDirectory($backupZip, $directory, strlen($parentPath));
 | 
			
		||||
		return $backupZip->close();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user