public function process() { set_time_limit(0); /** * Коннект к серверу БД */ if (!($oDb = $this->getDBConnection(InstallConfig::get('db.params.host'), InstallConfig::get('db.params.port'), InstallConfig::get('db.params.user'), InstallConfig::get('db.params.pass'), true))) { return false; } /** * Выбираем БД */ if (!@mysqli_select_db($oDb, InstallConfig::get('db.params.dbname'))) { return $this->addError(InstallCore::getLang('db.errors.db_query')); } $this->setDbParams(array('prefix' => InstallConfig::get('db.table.prefix'), 'engine' => InstallConfig::get('db.tables.engine'))); $sVersion = InstallCore::getRequestStr('from_version'); /** * Проверяем наличие конвертора * Конвертор представляет собой отдельный метод вида converFrom_X1_Y1_Z1_to_X2_Y2_Z2 */ $sMethod = 'convertFrom_' . str_replace('.', '_', $sVersion) . '_to_' . str_replace('.', '_', VERSION); if (!method_exists($this, $sMethod)) { return $this->addError(InstallCore::getLang('steps.updateVersion.errors.not_found_convert')); } InstallCore::setStoredData('update_from_version', $sVersion); /** * Запускаем конвертор */ return call_user_func_array(array($this, $sMethod), array($oDb)); }
/** * Обработка отправки формы * * @return bool */ public function process() { /** * Проверяем корректность емайла */ $sMail = InstallCore::getRequestStr('admin_mail'); if (!preg_match("/^[\\da-z\\_\\-\\.\\+]+@[\\da-z_\\-\\.]+\\.[a-z]{2,5}\$/i", $sMail)) { return $this->addError(InstallCore::getLang('steps.installAdmin.errors.mail')); } /** * Проверяем корректность пароль */ $sPasswd = InstallCore::getRequestStr('admin_passwd'); if (mb_strlen($sPasswd, 'UTF-8') < 3) { return $this->addError(InstallCore::getLang('steps.installAdmin.errors.passwd')); } /** * Получаем данные коннекта к БД из конфига */ InstallConfig::$sFileConfig = dirname(INSTALL_DIR) . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'config.local.php'; /** * Коннект к серверу БД */ if (!($oDb = $this->getDBConnection(InstallConfig::get('db.params.host'), InstallConfig::get('db.params.port'), InstallConfig::get('db.params.user'), InstallConfig::get('db.params.pass')))) { return false; } /** * Выбираем БД */ if (!@mysqli_select_db($oDb, InstallConfig::get('db.params.dbname'))) { return $this->addError(InstallCore::getLang('db.errors.db_query')); } /** * Обновляем пользователя */ $sPrefix = InstallConfig::get('db.table.prefix'); $sQuery = "\n\t\t\tUPDATE `{$sPrefix}user`\n\t\t\tSET\n\t\t\t\t`user_mail`\t = '{$sMail}',\n\t\t\t\t`user_admin`\t = '1',\n\t\t\t\t`user_password` = '" . md5($sPasswd) . "'\n\t\t\tWHERE `user_id` = 1"; if (!mysqli_query($oDb, $sQuery)) { return $this->addError(InstallCore::getLang('db.errors.db_query')); } return true; }
if (!isset($aArgs[2])) { console_echo(InstallCore::getLang('console.command.run.params_step_empty'), true); } $sStep = install_func_camelize($aArgs[2]); $sClass = 'InstallStep' . ucfirst($sStep); if (!class_exists($sClass)) { console_echo(InstallCore::getLang('Not found step ' . $sStep), true); } /** * Хардкодим параметр для шага обновления * TODO: убрать и переделать на нормальную консольную утилиту */ $_REQUEST['from_version'] = isset($aArgs[3]) ? $aArgs[3] : ''; /** * Создаем объект шага и запускаем его */ $oStep = new $sClass('fake', array()); if ($oStep->process()) { console_echo(InstallCore::getLang('console.command_successful')); } else { $aErrors = $oStep->getErrors(); if ($aErrors) { $sMsgError = join("\n", $aErrors); } else { $sMsgError = InstallCore::getLang('console.command_failed'); } console_echo($sMsgError, true); } } else { console_echo(InstallCore::getLang('console.command_empty'), true); }
public function lang($sName) { return InstallCore::getLang($sName); }
public static function checkFile($bCheckWritable = true) { if (is_null(self::$sFileConfig) or !file_exists(self::$sFileConfig)) { self::$sLastError = InstallCore::getLang('config.errors.file_not_found'); return false; } if ($bCheckWritable) { if (!is_writable(self::$sFileConfig)) { self::$sLastError = InstallCore::getLang('config.errors.file_not_writable'); return false; } } return true; }
protected function processDbCheck() { /** * Коннект к серверу БД */ if (!($oDb = $this->getDBConnection(InstallCore::getRequestStr('db.params.host'), InstallCore::getRequestStr('db.params.port'), InstallCore::getRequestStr('db.params.user'), InstallCore::getRequestStr('db.params.pass')))) { return false; } /** * Выбор БД */ $sNameDb = InstallCore::getRequestStr('db.params.dbname'); if (!InstallCore::getRequest('db_create')) { if (!@mysqli_select_db($oDb, $sNameDb)) { return $this->addError(InstallCore::getLang('steps.installDb.errors.db_not_found')); } } else { /** * Пытаемся создать БД */ @mysqli_query($oDb, "CREATE DATABASE IF NOT EXISTS `{$sNameDb}` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci"); if (!@mysqli_select_db($oDb, $sNameDb)) { return $this->addError(InstallCore::getLang('steps.installDb.errors.db_not_create')); } } /** * Проверяем корректность префикса таблиц */ if (!preg_match('#^[a-z0-9\\_]*$#i', InstallCore::getRequestStr('db.table.prefix'))) { return $this->addError(InstallCore::getLang('steps.installDb.errors.db_table_prefix')); } /** * Определяем поддержку InnoDB */ $sEngineDB = 'MyISAM'; if ($aRes = @mysqli_query($oDb, 'SHOW ENGINES')) { while ($aRow = mysqli_fetch_assoc($aRes)) { if (strtoupper($aRow['Engine']) == 'INNODB' and in_array(strtoupper($aRow['Support']), array('DEFAULT', 'YES'))) { $sEngineDB = 'InnoDB'; break; } } } $sPathRootWeb = $this->getPathRootWeb(); $aDirs = array(); $sDirs = trim(str_replace('http://' . $_SERVER['HTTP_HOST'], '', $sPathRootWeb), '/'); if ($sDirs != '') { $aDirs = explode('/', $sDirs); } /** * Прописываем параметры в конфиг */ $aSave = array('db.params.host' => InstallCore::getRequestStr('db.params.host'), 'db.params.port' => InstallCore::getRequestStr('db.params.port'), 'db.params.dbname' => InstallCore::getRequestStr('db.params.dbname'), 'db.params.user' => InstallCore::getRequestStr('db.params.user'), 'db.params.pass' => InstallCore::getRequestStr('db.params.pass'), 'db.table.prefix' => InstallCore::getRequestStr('db.table.prefix'), 'db.tables.engine' => $sEngineDB, 'path.root.web' => $sPathRootWeb, 'path.offset_request_url' => count($aDirs)); if (!InstallConfig::save($aSave)) { return $this->addError(InstallConfig::$sLastError); } return array($oDb, $sEngineDB); }
public function show() { /** * Проверяем требования */ $sAdditionalSolution = ''; $aRequirements = array(); if (!version_compare(PHP_VERSION, '5.3.2', '>=')) { $aRequirements[] = array('name' => 'php_version', 'current' => PHP_VERSION); } if (!in_array(strtolower(@ini_get('safe_mode')), array('0', 'off', ''))) { $aRequirements[] = array('name' => 'safe_mode', 'current' => InstallCore::getLang('yes')); } if (!@preg_match('//u', '')) { $aRequirements[] = array('name' => 'utf8', 'current' => InstallCore::getLang('no')); } if (!@extension_loaded('mbstring')) { $aRequirements[] = array('name' => 'mbstring', 'current' => InstallCore::getLang('no')); } if (!in_array(strtolower(@ini_get('mbstring.func_overload')), array('0', '4', 'no overload'))) { $aRequirements[] = array('name' => 'mbstring_func_overload', 'current' => InstallCore::getLang('yes')); } if (!@extension_loaded('SimpleXML')) { $aRequirements[] = array('name' => 'xml', 'current' => InstallCore::getLang('no')); } if (@extension_loaded('xdebug')) { $iLevel = (int) @ini_get('xdebug.max_nesting_level'); if ($iLevel < 1000) { $aRequirements[] = array('name' => 'xdebug', 'current' => InstallCore::getLang('yes') . " ({$iLevel})"); } } /** * Права на запись файлов */ $bWriteSolutions = false; $sAppDir = dirname(INSTALL_DIR); $sDir = dirname($sAppDir) . DIRECTORY_SEPARATOR . 'uploads'; if (!is_dir($sDir) or !is_writable($sDir)) { $aRequirements[] = array('name' => 'dir_uploads', 'current' => InstallCore::getLang('is_not_writable')); $bWriteSolutions = true; } $sDir = $sAppDir . DIRECTORY_SEPARATOR . 'plugins'; if (!is_dir($sDir) or !is_writable($sDir)) { $aRequirements[] = array('name' => 'dir_plugins', 'current' => InstallCore::getLang('is_not_writable')); $bWriteSolutions = true; } $sDir = $sAppDir . DIRECTORY_SEPARATOR . 'tmp'; if (!is_dir($sDir) or !is_writable($sDir)) { $aRequirements[] = array('name' => 'dir_tmp', 'current' => InstallCore::getLang('is_not_writable')); $bWriteSolutions = true; } $sDir = $sAppDir . DIRECTORY_SEPARATOR . 'logs'; if (!is_dir($sDir) or !is_writable($sDir)) { $aRequirements[] = array('name' => 'dir_logs', 'current' => InstallCore::getLang('is_not_writable')); $bWriteSolutions = true; } $sFile = $sAppDir . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'config.local.php'; if (!is_file($sFile) or !is_writable($sFile)) { $aRequirements[] = array('name' => 'file_config_local', 'current' => InstallCore::getLang('is_not_writable')); $bWriteSolutions = true; } if (count($aRequirements)) { InstallCore::setNextStepDisable(); } if ($bWriteSolutions) { $sBuildPath = $sAppDir . DIRECTORY_SEPARATOR . 'install' . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'build.sh'; $sAdditionalSolution .= '<b>' . InstallCore::getLang('steps.checkRequirements.writable_solution') . '</b><br/>'; $sAdditionalSolution .= '<i>chmod 0755 ' . $sBuildPath . '</i><br/>'; $sAdditionalSolution .= '<i>' . $sBuildPath . '</i><br/>'; } $this->assign('requirements', $aRequirements); $this->assign('additionalSolution', $sAdditionalSolution); }
protected function importDumpDB($oDb, $sFile, $aParams = null) { $sFileQuery = @file_get_contents($sFile); if (is_null($aParams)) { $aParams = $this->aDbParams; } if (isset($aParams['prefix'])) { $sFileQuery = str_replace('prefix_', $aParams['prefix'], $sFileQuery); } $aQuery = preg_split("#;(\n|\r)#", $sFileQuery, null, PREG_SPLIT_NO_EMPTY); /** * Массив для сбора ошибок */ $aErrors = array(); if (isset($aParams['check_table'])) { /** * Смотрим, какие таблицы существуют в базе данных */ $aDbTables = array(); $aResult = @mysqli_query($oDb, "SHOW TABLES"); if (!$aResult) { return array('result' => false, 'errors' => array($this->addError(InstallCore::getLang('db.errors.db_query')))); } while ($aRow = mysqli_fetch_array($aResult, MYSQLI_NUM)) { $aDbTables[] = $aRow[0]; } /** * Если среди таблиц БД уже есть нужная таблица, то выполнять SQL-дамп не нужно */ if (in_array($aParams['prefix'] . $aParams['check_table'], $aDbTables)) { return array('result' => true, 'errors' => array()); } } /** * Проверка на существование поля */ if (isset($aParams['check_table_field'])) { list($sCheckTable, $sCheckField) = $aParams['check_table_field']; $sCheckTable = str_replace('prefix_', $aParams['prefix'], $sCheckTable); $aResult = @mysqli_query($oDb, "SHOW FIELDS FROM `{$sCheckTable}`"); if (!$aResult) { return array('result' => false, 'errors' => array($this->addError(InstallCore::getLang('db.errors.db_query')))); } while ($aRow = mysqli_fetch_assoc($aResult)) { if ($aRow['Field'] == $sCheckField) { return array('result' => true, 'errors' => array()); } } } /** * Выполняем запросы по очереди */ foreach ($aQuery as $sQuery) { $sQuery = trim($sQuery); /** * Заменяем движек, если таковой указан в запросе */ if (isset($aParams['engine'])) { $sQuery = str_ireplace('ENGINE=InnoDB', "ENGINE={$aParams['engine']}", $sQuery); } if ($sQuery != '') { $bResult = mysqli_query($oDb, $sQuery); if (!$bResult) { $aErrors[] = mysqli_error($oDb); } } } return array('result' => count($aErrors) ? false : true, 'errors' => $aErrors); }