* @copyright 2007-2014 PrestaShop SA * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) * International Registered Trademark & Property of PrestaShop SA */ abstract class InstallControllerConsole { /** * @var array List of installer steps */ protected static $steps = array('process'); protected static $instances = array(); /** * @var string Current step */ public $step; /** * @var array List of errors */ public $errors = array(); /** * @var InstallController */ public $controller; /** * @var InstallSession */ public $session; /** * @var InstallLanguages */ public $language; /** * @var InstallAbstractModel */ public $model; /** * Validate current step */ abstract public function validate(); final public static function execute($argc, $argv) { if (!($argc-1)) { $available_arguments = Datas::getInstance()->getArgs(); echo 'Arguments available:'."\n"; foreach ($available_arguments as $key => $arg) { $name = isset($arg['name']) ? $arg['name'] : $key; echo '--'.$name."\t".(isset($arg['help']) ? $arg['help'] : '').(isset($arg['default']) ? "\t".'(Default: '.$arg['default'].')' : '')."\n"; } exit; } $errors = Datas::getInstance()->getAndCheckArgs($argv); if (Datas::getInstance()->show_license) { echo strip_tags(file_get_contents(_PS_INSTALL_PATH_.'theme/views/license_content.phtml')); exit; } if ($errors !== true) { if (count($errors)) foreach ($errors as $error) echo $error."\n"; exit; } // Include all controllers foreach (self::$steps as $step) { if (!file_exists(_PS_INSTALL_CONTROLLERS_PATH_.'console/'.$step.'.php')) throw new PrestashopInstallerException("Controller file 'console/{$step}.php' not found"); require_once _PS_INSTALL_CONTROLLERS_PATH_.'console/'.$step.'.php'; $classname = 'InstallControllerConsole'.$step; self::$instances[$step] = new $classname($step); } $datas = Datas::getInstance(); /* redefine HTTP_HOST */ $_SERVER['HTTP_HOST'] = $datas->http_host; @date_default_timezone_set($datas->timezone); if (!$current_step = $datas->step) return false; self::$instances[$current_step]->process(); } final public function __construct($step) { $this->step = $step; $this->datas = Datas::getInstance(); // Set current language $this->language = InstallLanguages::getInstance(); if (!$this->datas->language) die('No language defined'); $this->language->setLanguage($this->datas->language); $this->init(); } /** * Initialize model */ public function init() { } public function printErrors() { $errors = $this->model_install->getErrors(); if (count($errors)) { if (!is_array($errors)) $errors = array($errors); echo 'Errors :'."\n"; foreach ($errors as $error_process) foreach ($error_process as $error) echo (is_string($error) ? $error : print_r($error, true))."\n"; die; } } /** * Get translated string * * @param string $str String to translate * @param ... All other params will be used with sprintf * @return string */ public function l($str) { $args = func_get_args(); return call_user_func_array(array($this->language, 'l'), $args); } public function process() { } }