removed 'application' folder to have everything in the root directory
This commit is contained in:
		
							
								
								
									
										131
									
								
								core/Files/BackupUtil.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										131
									
								
								core/Files/BackupUtil.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,131 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace ManiaControl\Files;
 | 
			
		||||
 | 
			
		||||
use ManiaControl\Logger;
 | 
			
		||||
use ManiaControl\ManiaControl;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Backup Utility Class
 | 
			
		||||
 *
 | 
			
		||||
 * @author    ManiaControl Team <mail@maniacontrol.com>
 | 
			
		||||
 * @copyright 2014 ManiaControl Team
 | 
			
		||||
 * @license   http://www.gnu.org/licenses/ GNU General Public License, Version 3
 | 
			
		||||
 */
 | 
			
		||||
abstract class BackupUtil {
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Perform a Full Backup of ManiaControl
 | 
			
		||||
	 *
 | 
			
		||||
	 * @return bool
 | 
			
		||||
	 */
 | 
			
		||||
	public static function performFullBackup() {
 | 
			
		||||
		$backupFolder = self::getBackupFolder();
 | 
			
		||||
		if (!$backupFolder) {
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
		$backupFileName = $backupFolder . 'backup_' . ManiaControl::VERSION . '_' . date('y-m-d_H-i') . '_' . time() . '.zip';
 | 
			
		||||
		$backupZip      = new \ZipArchive();
 | 
			
		||||
		if ($backupZip->open($backupFileName, \ZipArchive::CREATE) !== true) {
 | 
			
		||||
			Logger::logError("Couldn't create backup zip!");
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
		$excludes      = array();
 | 
			
		||||
		$baseFileNames = array('configs', 'core', 'plugins', 'ManiaControl.php');
 | 
			
		||||
		$pathInfo      = pathInfo(MANIACONTROL_PATH);
 | 
			
		||||
		$parentPath    = $pathInfo['dirname'] . DIRECTORY_SEPARATOR;
 | 
			
		||||
		$dirName       = $pathInfo['basename'];
 | 
			
		||||
		$backupZip->addEmptyDir($dirName);
 | 
			
		||||
		self::zipDirectory($backupZip, MANIACONTROL_PATH, strlen($parentPath), $excludes, $baseFileNames);
 | 
			
		||||
		return $backupZip->close();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Get the Backup Folder Path and create it if necessary
 | 
			
		||||
	 *
 | 
			
		||||
	 * @return string|bool
 | 
			
		||||
	 */
 | 
			
		||||
	private static function getBackupFolder() {
 | 
			
		||||
		$backupFolder = MANIACONTROL_PATH . 'backup' . DIRECTORY_SEPARATOR;
 | 
			
		||||
		if (!is_dir($backupFolder) && !mkdir($backupFolder)) {
 | 
			
		||||
			Logger::logError("Couldn't create backup folder!");
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
		if (!is_writeable($backupFolder)) {
 | 
			
		||||
			Logger::logError("ManiaControl doesn't have the necessary write rights for the backup folder!");
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
		return $backupFolder;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 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(), array $baseFileNames = array()) {
 | 
			
		||||
		$folderHandle = opendir($folderName);
 | 
			
		||||
		if (!is_resource($folderHandle)) {
 | 
			
		||||
			Logger::logError("Couldn't open folder '{$folderName}' for backup!");
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
		$useBaseFileNames = !empty($baseFileNames);
 | 
			
		||||
		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;
 | 
			
		||||
			$localPath = substr($filePath, $prefixLength);
 | 
			
		||||
			if (is_file($filePath)) {
 | 
			
		||||
				$zipArchive->addFile($filePath, $localPath);
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
			if (is_dir($filePath)) {
 | 
			
		||||
				$zipArchive->addEmptyDir($localPath);
 | 
			
		||||
				self::zipDirectory($zipArchive, $filePath, $prefixLength, $excludes);
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		closedir($folderHandle);
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Perform a Backup of the Plugins
 | 
			
		||||
	 *
 | 
			
		||||
	 * @return bool
 | 
			
		||||
	 */
 | 
			
		||||
	public static function performPluginsBackup() {
 | 
			
		||||
		$backupFolder = self::getBackupFolder();
 | 
			
		||||
		if (!$backupFolder) {
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
		$backupFileName = $backupFolder . 'backup_plugins_' . ManiaControl::VERSION . date('y-m-d_H-i') . '_' . time() . '.zip';
 | 
			
		||||
		$backupZip      = new \ZipArchive();
 | 
			
		||||
		if ($backupZip->open($backupFileName, \ZipArchive::CREATE) !== true) {
 | 
			
		||||
			Logger::logError("Couldn't create backup zip!");
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
		$directory  = MANIACONTROL_PATH . 'plugins';
 | 
			
		||||
		$pathInfo   = pathInfo($directory);
 | 
			
		||||
		$parentPath = $pathInfo['dirname'] . DIRECTORY_SEPARATOR;
 | 
			
		||||
		$dirName    = $pathInfo['basename'];
 | 
			
		||||
		$backupZip->addEmptyDir($dirName);
 | 
			
		||||
		self::zipDirectory($backupZip, $directory, strlen($parentPath));
 | 
			
		||||
		return $backupZip->close();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user