Esempio n. 1
0
 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));
 }
Esempio n. 2
0
 /**
  * Обработка отправки формы
  *
  * @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;
 }
Esempio n. 3
0
    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);
}
Esempio n. 4
0
 public function lang($sName)
 {
     return InstallCore::getLang($sName);
 }
Esempio n. 5
0
 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;
 }
Esempio n. 6
0
 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);
 }
Esempio n. 8
0
 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);
 }