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:
parent
07e37311ea
commit
7c0c4908e4
|
@ -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 запрос, одну из указанных в массиве таблиц
|
||||
*
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
___LANG_START_PARAGRAPH___
|
||||
<input type="hidden" name="install_env_params" value="1" />
|
||||
<h3>___LANG_PHP_PARAMS___</h3>
|
||||
<table>
|
||||
<tr>
|
||||
|
|
|
@ -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
|
||||
}
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
Если никакие ошибки не повылазили, значит апдейт на новую версию прошел успешно. Поздравляем!
|
|
@ -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';
|
Loading…
Reference in a new issue