1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-05-20 17:58:24 +03:00

Fix install.

Исправлена ошибка первого шага.
Организовано сохранение в сессии данных о создании\конвертации базы данных.
Смена названия блога под новое имя администратора.
Удален каталог update.
This commit is contained in:
Alexey Kachayev 2009-12-14 00:32:16 +00:00
parent 07e37311ea
commit 7c0c4908e4
5 changed files with 83 additions and 273 deletions

View file

@ -421,8 +421,13 @@ class Install {
*
* @call $this->Step{__Name__}
*/
function Run() {
$sStepName = $this->GetSessionVar(self::SESSSION_KEY_STEP_NAME, self::INSTALL_DEFAULT_STEP);
function Run($sStepName=null) {
if(is_null($sStepName)){
$sStepName = $this->GetSessionVar(self::SESSSION_KEY_STEP_NAME, self::INSTALL_DEFAULT_STEP);
} else {
$this->SetSessionVar(self::SESSSION_KEY_STEP_NAME,$sStepName);
}
if(!in_array($sStepName,$this->aSteps)) die('Unknown step');
$iKey = array_search($sStepName,$this->aSteps);
@ -434,12 +439,9 @@ class Install {
$this->SetSessionVar(self::SESSSION_KEY_STEP_NAME,$sStepName);
}
if($iKey == count($this->aSteps)-1) {
$this->Assign('next_step_display', 'none');
}
if($iKey == 0) {
$this->Assign('prev_step_display', 'none');
}
$this->Assign('next_step_display', ($iKey == count($this->aSteps)-1)?'none':'block');
$this->Assign('prev_step_display', ($iKey == 0) ? 'none' : 'block');
/**
* Если шаг отновиться к simple mode, то корректируем количество шагов
*/
@ -493,7 +495,10 @@ class Install {
* Прописываем в конфигурацию абсолютные пути
*/
$this->SavePath();
$this->SetSessionVar(self::SESSSION_KEY_STEP_NAME,'Db');
if($this->GetRequest('install_step_next')) {
return $this->Run('Db');
}
}
$this->SetStep('Start');
$this->Layout('steps/start.tpl');
@ -507,16 +512,16 @@ class Install {
/**
* Получаем данные из сессии (если они туда были вложены на предыдущих итерациях шага)
*/
$this->Assign('install_db_server', 'localhost', self::GET_VAR_FROM_SESSION);
$this->Assign('install_db_port', '3306', self::GET_VAR_FROM_SESSION);
$this->Assign('install_db_name', 'social', self::GET_VAR_FROM_SESSION);
$this->Assign('install_db_user', 'root', self::GET_VAR_FROM_SESSION);
$this->Assign('install_db_password', '', self::GET_VAR_FROM_SESSION);
$this->Assign('install_db_create_check', '', self::GET_VAR_FROM_SESSION);
$this->Assign('install_db_prefix', 'prefix_', self::GET_VAR_FROM_SESSION);
$this->Assign('install_db_engine', 'InnoDB', self::GET_VAR_FROM_SESSION);
$this->Assign('install_db_engine_innodb', '', self::GET_VAR_FROM_SESSION);
$this->Assign('install_db_engine_myisam', '', self::GET_VAR_FROM_SESSION);
$this->Assign('install_db_server', 'localhost', self::GET_VAR_FROM_SESSION);
$this->Assign('install_db_port', '3306', self::GET_VAR_FROM_SESSION);
$this->Assign('install_db_name', 'social', self::GET_VAR_FROM_SESSION);
$this->Assign('install_db_user', 'root', self::GET_VAR_FROM_SESSION);
$this->Assign('install_db_password', '', self::GET_VAR_FROM_SESSION);
$this->Assign('install_db_create_check', '', self::GET_VAR_FROM_SESSION);
$this->Assign('install_db_prefix', 'prefix_', self::GET_VAR_FROM_SESSION);
$this->Assign('install_db_engine', 'InnoDB', self::GET_VAR_FROM_SESSION);
$this->Assign('install_db_engine_innodb', '', self::GET_VAR_FROM_SESSION);
$this->Assign('install_db_engine_myisam', '', self::GET_VAR_FROM_SESSION);
$this->Layout('steps/db.tpl');
return true;
@ -593,26 +598,34 @@ class Install {
*/
$this->SetSessionVar('INSTALL_DATABASE_PARAMS',$aParams);
/**
* Проверяем была ли проведена установка базы в течении сеанса.
* Открываем .sql файл и добавляем в базу недостающие таблицы
*/
if(!$aParams['convert']) {
list($bResult,$aErrors) = array_values($this->CreateTables('sql.sql',$aParams));
if(!$bResult) {
foreach($aErrors as $sError) $this->aMessages[] = array('type'=>'error','text'=>$sError);
$this->Layout('steps/db.tpl');
return false;
}
} else {
/**
* Если указана конвертация старой базы данных
*/
list($bResult,$aErrors) = array_values($this->ConvertDatabase('convert.sql',$aParams));
if(!$bResult) {
foreach($aErrors as $sError) $this->aMessages[] = array('type'=>'error','text'=>$sError);
$this->Layout('steps/db.tpl');
return false;
if($this->GetSessionVar('INSTALL_DATABASE_DONE','')!=md5(serialize(array($aParams['server'],$aParams['name'])))){
if(!$aParams['convert']) {
list($bResult,$aErrors) = array_values($this->CreateTables('sql.sql',$aParams));
if(!$bResult) {
foreach($aErrors as $sError) $this->aMessages[] = array('type'=>'error','text'=>$sError);
$this->Layout('steps/db.tpl');
return false;
}
} else {
/**
* Если указана конвертация старой базы данных
*/
list($bResult,$aErrors) = array_values($this->ConvertDatabase('convert.sql',$aParams));
if(!$bResult) {
foreach($aErrors as $sError) $this->aMessages[] = array('type'=>'error','text'=>$sError);
$this->Layout('steps/db.tpl');
return false;
}
}
}
/**
* Сохраняем в сессии информацию о том, что преобразование базы данных уже было выполнено.
* При этом сохраняем хеш сервера и названия базы данных, для последующего сравнения.
*/
$this->SetSessionVar('INSTALL_DATABASE_DONE',md5(serialize(array($aParams['server'],$aParams['name']))));
/**
* Передаем управление на следующий шаг
*/
@ -658,7 +671,7 @@ class Install {
if(!$this->ValidateDBConnection($aParams)) {
$this->aMessages[] = array('type'=>'error','text'=>$this->Lang('error_db_connection_invalid'));
$this->Layout('steps/admin.tpl');
return false;
return false;
}
$this->SelectDatabase($aParams['name']);
@ -673,6 +686,11 @@ class Install {
$this->Layout('steps/admin.tpl');
return false;
}
/**
* Обновляем данные о пользовательском блоге
*/
$this->UpdateUserBlog("Blog by ".$this->GetRequest('install_admin_login'),$aParams['prefix']);
/**
* Передаем управление на следующий шаг
*/
@ -858,8 +876,18 @@ class Install {
* Текущий язык
*/
if($aParams['install_lang_current'] && strlen($aParams['install_lang_current'])>1){
if($this->SaveConfig('lang.current',$aParams['install_lang_current'],$sLocalConfigFile))
if($this->SaveConfig('lang.current',$aParams['install_lang_current'],$sLocalConfigFile)) {
$this->SetSessionVar('install_lang_current',$aParams['install_lang_current']);
/**
* Если выбран русский язык, то перезаписываем название блога
*/
if($aParams['install_lang_current']=='russian'){
$aDbParams = $this->GetSessionVar('INSTALL_DATABASE_PARAMS');
$oDb = $this->ValidateDBConnection($aDbParams);
if($oDb and $this->SelectDatabase($aDbParams['name'])) $this->UpdateUserBlog("Блог им. ".$this->GetSessionVar('install_admin_login'),$aDbParams['prefix']);
}
}
} else {
$bOk = false;
$this->aMessages[] = array('type'=>'error','text'=>$this->Lang('lang_current_invalid'));
@ -888,7 +916,7 @@ class Install {
$this->Assign('next_step_display','none');
$this->SetSessionVar(self::SESSSION_KEY_STEP_NAME,'Finish');
$this->Layout('steps/finish.tpl');
}
}
/**
* Проверяем возможность инсталяции
*
@ -1339,6 +1367,22 @@ class Install {
return mysql_query($sQuery);
}
/**
* Перезаписывает название блога в базе данных
*
* @param string $sBlogName
* @param string [$sPrefix = "prefix_"
* @return bool
*/
function UpdateUserBlog($sBlogName,$sPrefix="prefix_") {
$sQuery = "
UPDATE `{$sPrefix}blog`
SET
`blog_title` = '".mysql_real_escape_string($sBlogName)."'
WHERE `blog_id` = 1";
return mysql_query($sQuery);
}
/**
* Проверяет, использует ли mysql запрос, одну из указанных в массиве таблиц
*

View file

@ -1,4 +1,5 @@
___LANG_START_PARAGRAPH___
<input type="hidden" name="install_env_params" value="1" />
<h3>___LANG_PHP_PARAMS___</h3>
<table>
<tr>

View file

@ -1,165 +0,0 @@
## Конфигурационный файл Sphinx-а для индексации LiveStreet
#######################
#
# Описываем индексы
#
#######################
# Источник-родитель для всех остальных источников. Здесь указываются параметры доступа
# к базе данных сайта
source lsParentSource
{
type = mysql
sql_host = localhost
sql_user = user
sql_pass = pass
sql_db = social
sql_port = 3306
# Для ускорения работы прописываем путь до MySQL-го UNIX-сокета (чтобы
# операции с БД происходили не через TCP/IP стек сервера)
sql_sock = /var/run/mysqld/mysqld.sock
mysql_connect_flags = 32 # 32- включение сжатие при обмене данными с БД
# Включам нужную кодировку соединения и выключаем кеш запросов
sql_query_pre = SET NAMES utf8
sql_query_pre = SET SESSION query_cache_type=OFF
}
# Источник топиков
source topicsSource : lsParentSource
{
# запрос на получения данных топиков
sql_query = \
SELECT t_fast.topic_id, t_fast.topic_title, UNIX_TIMESTAMP(t_fast.topic_date_add) as topic_date_add, \
tc.topic_text, t_fast.topic_publish \
FROM prefix_topic as t_fast, prefix_topic_content AS tc \
WHERE t_fast.topic_id=tc.topic_id AND t_fast.topic_id>=$start AND t_fast.topic_id<=$end
# запрос для дробления получения топиков на неколько итераций
sql_query_range = SELECT MIN(topic_id),MAX(topic_id) FROM prefix_topic
# сколько получать объектов за итерацию
sql_range_step = 1000
# Указываем булевый атрибут критерия "топик опубликован". Для возможности указания этого критерия при поиске
sql_attr_uint = topic_publish
# Атрибут даты добавления, типа "время"
sql_attr_timestamp = topic_date_add
# мульти-аттрибут "теги топика"
sql_attr_multi = uint tag from query; SELECT topic_id, topic_tag_id FROM prefix_topic_tag
sql_ranged_throttle = 0
}
# Источник комментариев
source commentsSource : lsParentSource
{
sql_query = \
SELECT comment_id, comment_text, UNIX_TIMESTAMP(comment_date) as comment_date, comment_delete \
FROM prefix_topic_comment \
WHERE comment_id>=$start AND comment_id<=$end
sql_query_range = SELECT MIN(comment_id),MAX(comment_id) FROM prefix_topic_comment
sql_range_step = 5000
sql_attr_uint = comment_delete
sql_attr_timestamp = comment_date
}
#######################
#
# Описываем индексы
#
#######################
index topicsIndex
{
# Источник, который будет хранить данный индекса
source = topicsSource
path = /var/lib/data/topicIndex
# Тип хранения аттрибутов
docinfo = extern
mlock = 0
# Используемые морфологические движки
morphology = stem_enru
# Кодировака данных из источника
charset_type = utf-8
# Из данных источника HTML-код нужно вырезать
html_strip = 1
html_remove_elements = style, script, code
}
# Индекс комментариев
index commentsIndex
{
source = commentsSource
path = /var/lib/data/commentsIndex
docinfo = extern
mlock = 0
morphology = stem_enru
charset_type = utf-8
# Из данных источника HTML-код нужно вырезать
html_strip = 1
html_remove_elements = style, script, code
}
#######################
#
# Настройки индексатора
#
#######################
indexer
{
# Лимит памяти, который может использавать демон-индексатор
mem_limit = 32M
}
#######################
#
# Настройка демона-поисковика
#
#######################
searchd
{
# Адрес, на котором будет прослушиваться порт
address = 127.0.0.1
# Ну и собственно номер порта демона searchd
port = 3312
# Лог-файл демона
log = /var/log/sphinx/searchd.log
# Лог поисковых запросов. Если закомментировать,то логировать поисковые строки не будет
query_log = /var/log/sphinx/query.log
# Время в секундах, которое ждет демон при обмене данными с клиентом. По исчерпании происходит разрыв коннекта
read_timeout = 5
# Максимальное количество одновременно-обрабатываемых запросов. 0 означает дофига, а точнее без ограничения
max_children = 30
# Файл, в который сохраняется PID-процесса при запуске
pid_file = /var/log/sphinx/searchd.pid
}

View file

@ -1,43 +0,0 @@
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
set_time_limit(0);
set_include_path(get_include_path().PATH_SEPARATOR.dirname(dirname(__FILE__)));
chdir(dirname(dirname(__FILE__)));
require_once("./config/config.table.php");
$aConfig=include("./config/config.db.php");
$link=mysql_connect($aConfig['host'],$aConfig['user'],$aConfig['pass']);
mysql_select_db($aConfig['dbname'],$link);
mysql_query("set character_set_client='utf8'",$link);
mysql_query("set character_set_results='utf8'",$link);
mysql_query("set collation_connection='utf8_bin'",$link);
/**
* Выполняем SQL для конвертации структуры БД
*/
$fp = fopen("./update/update_0.2_to_0.3.sql", "r");
if (!$fp) {
die("Не найден SQL файл - update_0.2_to_0.3.sql");
}
$sSql = '';
while (!feof($fp)) {
$sSql.=fread($fp, 1024*4);
}
fclose($fp);
if ($sSql!='') {
$aSqlList=explode(';',$sSql);
foreach ($aSqlList as $s) {
if (trim($s)!='') {
if (!mysql_query($s,$link)) {
var_dump(mysql_error($link));
}
}
}
}
?>
Если никакие ошибки не повылазили, значит апдейт на новую версию прошел успешно. Поздравляем!

View file

@ -1,27 +0,0 @@
CREATE TABLE IF NOT EXISTS `prefix_reminder` (
`reminder_code` varchar(32) NOT NULL,
`user_id` int(11) unsigned NOT NULL,
`reminder_date_add` datetime NOT NULL,
`reminder_date_used` datetime default '0000-00-00 00:00:00',
`reminder_date_expire` datetime NOT NULL,
`reminde_is_used` tinyint(1) unsigned NOT NULL default '0',
PRIMARY KEY (`reminder_code`),
UNIQUE KEY `user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `prefix_reminder`
ADD CONSTRAINT `prefix_reminder_fk` FOREIGN KEY (`user_id`) REFERENCES `prefix_user` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `prefix_user` ADD `user_profile_foto` VARCHAR( 250 ) NULL AFTER `user_profile_avatar_type` ;
ALTER TABLE `prefix_topic_read` ADD `comment_id_last` INT( 11 ) NOT NULL DEFAULT '0' AFTER `comment_count_last` ;
ALTER TABLE `prefix_talk` ADD `talk_date_last` DATETIME NOT NULL AFTER `talk_date` ;
ALTER TABLE `prefix_topic` ADD `topic_publish_draft` TINYINT( 1 ) NOT NULL DEFAULT '1' AFTER `topic_publish` ;
ALTER TABLE `prefix_topic` ADD `topic_text_hash` VARCHAR( 32 ) NOT NULL ;
ALTER TABLE `prefix_invite` CHANGE `invite_date_used` `invite_date_used` DATETIME DEFAULT NULL ;
ALTER TABLE `prefix_blog` CHANGE `blog_type` `blog_type` ENUM( 'personal', 'open', 'invite', 'close' ) DEFAULT 'personal';