Skip to content
class.ISPConfig.inc.php 3.57 KiB
Newer Older
<?php


if(function_exists('spl_autoload_register')) {
	spl_autoload_register('ISPConfig::autoload');
}
		
/**
 * Main controller class
 *
 * @author croydon
 */
class ISPConfig {
	private static $is_cli_run = false;
	private static $cli_script = false;
	
	private static $autoload_files = array(
		'PXBashColor' => LIB_DIR . '/libbashcolor.inc.php'
	);
	
	private static function init() {
		if(php_sapi_name() == 'cli') {
			self::$is_cli_run = true;
			
			$argc = 0;
			$argv = array();
			if(isset($_SERVER['argc'])) {
				$argc = $_SERVER['argc'];
			}
			if(isset($_SERVER['argv'])) {
				$argv = $_SERVER['argv'];
			}
			
			if(isset($argv[0])) {
				self::$cli_script = basename($argv[0]);
			}
			
			for($a = 1; $a < $argc; $a++) {
				if(substr($argv[$a], 0, 2) == '--') {
					$sArg = substr($argv[$a], 2);
					if(strpos($sArg, '=') !== false) {
						list($sKey, $sValue) = explode('=', $sArg);
					} else {
						$sKey = $sArg;
						$sValue = true;
					}
					if($sKey != 'module' && $sKey != 'method') {
						$_GET[$sKey] = $sValue;
					}
				} elseif(!array_key_exists('module', $_GET)) {
					$_GET['module'] = $argv[$a];
				} elseif(!array_key_exists('method', $_GET)) {
					$_GET['method'] = $argv[$a];
				}
			}
		}
		
	}
	
	/**
	 * @param string $class_name
	 * @throws ISPConfigClassException
	 */
	public static function autoload($class_name) {
		if(preg_match('/^\w+$/', $class_name) === false) {
			throw new ISPConfigClassException($class_name . ' is not a valid class name.');
		}
		
		$class_dir = LIB_DIR;
		if(preg_match('/Exception$/', $class_name)) {
			$class_dir .= '/exceptions';
		} elseif(preg_match('/Module$/', $class_name)) {
			$class_dir .= '/modules';
		} elseif(preg_match('/API$/', $class_name)) {
			$class_dir .= '/api';
		} elseif(preg_match('/OS$/', $class_name)) {
			$class_dir .= '/os';
		}
		
		$use_file = null;
		if(isset(self::$autoload_files[$class_name])) {
			$use_file = self::$autoload_files[$class_name];
		} elseif(file_exists($class_dir . '/class.' . $class_name . '.inc.php')) {
			$use_file = $class_dir . '/class.' . $class_name . '.inc.php';
		} elseif(file_exists($class_dir . '/class.' . strtolower($class_name) . '.inc.php')) {
			$use_file = $class_dir . '/class.' . strtolower($class_name) . '.inc.php';
		} elseif(preg_match('/^ISPConfig\w+Exception$/', $class_name)) {
			$use_file = LIB_DIR . '/exceptions/class.ISPConfigException.inc.php';
		} else {
			throw new ISPConfigClassException('No class file for ' . $class_name . ' found.');
		}

		if($class_name != 'ISPConfigLog') {
			ISPConfigLog::debug('Trying to autoload class file "' . $use_file . '" for class "' . $class_name . '"');
		}
		
		if(!file_exists($use_file)) {
			throw new ISPConfigClassException('File ' . $use_file . ' not found for class ' . $class_name . '.');
		}

		include_once $use_file;
		if(!class_exists($class_name)) {
			throw new ISPConfigClassException($class_name . ' not found in file ' . LIB_DIR . '/class.' . $class_name . '.inc.php.');
		}
	}
	
	/**
	 * @return boolean
	 */
	public static function isCLI() {
		return self::$is_cli_run;
	}
	
	/**
	 * @return string
	 */
	public static function getScriptName() {
		return self::$cli_script;
	}
			
	/**
	 * @throws ISPConfigModuleException
	 */
	public static function run() {
		self::init();
		
		// get operating system
		try {
			$os = ISPConfigBaseOS::getOSVersion();
			
			ISPConfigLog::info('Starting perfect server setup for ' . $os['NAME'], true);
			$installer = ISPConfigBaseOS::getOSInstance();
			$installer->runPerfectSetup(true); // dry run for testing
		} catch(Exception $ex) {
			throw $ex;
		}
		
		exit;
	}
	
}