diff --git a/application/install/backend/step.php b/application/install/backend/step.php index 44ced65d..227318e9 100644 --- a/application/install/backend/step.php +++ b/application/install/backend/step.php @@ -168,25 +168,47 @@ abstract class InstallStep * Массив для сбора ошибок */ $aErrors = array(); - /** - * Смотрим, какие таблицы существуют в базе данных - */ - $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]; + + 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()); + } } /** - * Если среди таблиц БД уже есть нужная таблица, то выполнять 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()); + } + } } /** * Выполняем запросы по очереди diff --git a/application/install/backend/step/updateVersion.php b/application/install/backend/step/updateVersion.php index 1634307c..42d6667b 100644 --- a/application/install/backend/step/updateVersion.php +++ b/application/install/backend/step/updateVersion.php @@ -79,6 +79,21 @@ class InstallStepUpdateVersion extends InstallStep 'check_table' => 'cron_task' ))); if ($bResult) { + /** + * Проверяем необходимость конвертировать таблицу плагина Page + */ + if ($this->dbCheckTable("prefix_page")) { + $sFile = 'sql' . DIRECTORY_SEPARATOR . 'patch_page_1.3_to_2.0.sql'; + list($bResult, $aErrors) = array_values($this->importDumpDB($oDb, InstallCore::getDataFilePath($sFile), + array( + 'engine' => InstallConfig::get('db.tables.engine'), + 'prefix' => InstallConfig::get('db.table.prefix'), + 'check_table_field' => array('prefix_page', 'id') + ))); + if (!$bResult) { + return $this->addError(join('
', $aErrors)); + } + } /** * Конвертируем опросы * Сначала проверяем необходимость конвертации опросов @@ -603,7 +618,7 @@ class InstallStepUpdateVersion extends InstallStep */ $aFields = array( 'user_id' => $aUser['user_id'], - 'role_id' => 2, + 'role_id' => 2, 'date_create' => date("Y-m-d H:i:s"), ); $this->dbInsertQuery('prefix_rbac_role_user', $aFields); diff --git a/application/install/data/sql/patch_page_1.3_to_2.0.sql b/application/install/data/sql/patch_page_1.3_to_2.0.sql new file mode 100644 index 00000000..1f1b0dc9 --- /dev/null +++ b/application/install/data/sql/patch_page_1.3_to_2.0.sql @@ -0,0 +1,14 @@ +ALTER TABLE `prefix_page` CHANGE `page_id` `id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT ; +ALTER TABLE `prefix_page` CHANGE `page_pid` `pid` INT( 11 ) UNSIGNED NULL DEFAULT NULL ; +ALTER TABLE `prefix_page` CHANGE `page_url` `url` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ; +ALTER TABLE `prefix_page` CHANGE `page_url_full` `url_full` VARCHAR( 254 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ; +ALTER TABLE `prefix_page` CHANGE `page_title` `title` VARCHAR( 200 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ; +ALTER TABLE `prefix_page` CHANGE `page_text` `text` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ; +ALTER TABLE `prefix_page` CHANGE `page_date_add` `date_add` DATETIME NOT NULL ; +ALTER TABLE `prefix_page` CHANGE `page_date_edit` `date_edit` DATETIME NULL DEFAULT NULL ; +ALTER TABLE `prefix_page` CHANGE `page_seo_keywords` `seo_keywords` VARCHAR( 250 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ; +ALTER TABLE `prefix_page` CHANGE `page_seo_description` `seo_description` VARCHAR( 250 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ; +ALTER TABLE `prefix_page` CHANGE `page_active` `active` TINYINT( 1 ) UNSIGNED NOT NULL DEFAULT '1'; +ALTER TABLE `prefix_page` CHANGE `page_main` `main` TINYINT( 1 ) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `prefix_page` CHANGE `page_sort` `sort` INT( 11 ) NOT NULL ; +ALTER TABLE `prefix_page` CHANGE `page_auto_br` `auto_br` TINYINT( 1 ) NOT NULL DEFAULT '1'; \ No newline at end of file