Files
IPB/upload/upgrade/upg_21012/version_upgrade.php
T
2025-12-19 00:21:15 -08:00

272 lines
12 KiB
PHP

<?php
/*
+--------------------------------------------------------------------------
| Invision Power Board 2.1.7
| =============================================
| by Matthew Mecham
| (c) 2001 - 2005 Invision Power Services, Inc.
| http://www.invisionpower.com
| =============================================
| Web: http://www.invisionboard.com
| http://www.ibresource.ru/products/invisionpowerboard/
| Time: Tuesday 18th of July 2006 05:56:00 PM
| Release: 52f408a29988b02f45b5e6f4ba5af0ae
| Licence Info: http://www.invisionboard.com/?license
| http://www.ibresource.ru/license
+---------------------------------------------------------------------------
| INVISION POWER BOARD IS NOT FREE / OPEN SOURCE!
+---------------------------------------------------------------------------
| INVISION POWER BOARD НЕ ЯВЛЯЕТСЯ БЕСПЛАТНЫМ ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ!
| Права на ПО принадлежат Invision Power Services
+---------------------------------------------------------------------------
|
| > IPB UPGRADE MODULE:: IPB 2.1.4 -> 2.1.5
| > Script written by Matt Mecham
| > Date started: 23rd April 2004
| > "So what, pop is dead - it's no great loss.
So many facelifts, it's face flew off"
+--------------------------------------------------------------------------
*/
if ( ! defined( 'IN_IPB' ) )
{
print "<h1>Некорректный адрес</h1>Вы не имеете доступа к этому файлу напрямую. Если вы недавно обновляли форум, вы должны обновить все соответствующие файлы.";
exit();
}
class version_upgrade
{
var $this_version = '21012';
var $upgrade_from = '21011';
var $first_step = 'обновит вашу базу данных для вставки новых полей и таблиц.';
var $md5_check = '';
var $base_url = '';
var $mod_to_run = '';
/*-------------------------------------------------------------------------*/
// CONSTRUCTOR
/*-------------------------------------------------------------------------*/
function version_upgrade()
{
}
function version_process()
{
$this->md5_check = $this->ipsclass->return_md5_check();
$this->base_url = "index.php?act=work&loginkey={$this->ipsclass->input['loginkey']}&securekey={$this->ipsclass->input['securekey']}&mid={$this->ipsclass->input['mid']}";
if ( is_array( $this->ipsclass->modules_to_run ) and count( $this->ipsclass->modules_to_run ) )
{
$tmp = array_shift( $this->ipsclass->modules_to_run );
$this->mod_to_run = implode( ', ', $this->ipsclass->modules_to_run );
}
if ( ! $this->mod_to_run )
{
$this->mod_to_run = 'None';
}
}
/*-------------------------------------------------------------------------*/
// Auto run..
/*-------------------------------------------------------------------------*/
function auto_run()
{
//--------------------------------
// What are we doing?
//--------------------------------
switch( $this->ipsclass->input['workact'] )
{
case 'sql':
$this->upgrade_sql();
break;
case 'skinrevert':
$this->revert_skin_changes();
break;
default:
$this->upgrade_intro();
break;
}
}
/*-------------------------------------------------------------------------*/
// SQL
/*-------------------------------------------------------------------------*/
function upgrade_sql()
{
$cnt = 0;
$SQL = array();
if ( file_exists( THIS_PATH.'upg_'.$this->ipsclass->current_upgrade.'/'.strtolower($this->ipsclass->vars['sql_driver']).'_updates.php' ) )
{
require_once( THIS_PATH.'upg_'.$this->ipsclass->current_upgrade.'/'.strtolower($this->ipsclass->vars['sql_driver']).'_updates.php' );
foreach( $SQL as $q )
{
$this->ipsclass->DB->query( $q );
$cnt++;
}
}
//--------------------------------
// Next page...
//--------------------------------
$this->ipsclass->core->redirect( "{$this->base_url}&workact=skinrevert", "$cnt запросов выполнено...." );
}
/*-------------------------------------------------------------------------*/
// Revert Skin Changes
/*-------------------------------------------------------------------------*/
function revert_skin_changes()
{
if(! $this->ipsclass->input['do_update'] )
{
$id = intval($this->ipsclass->input['skinid']) ? intval($this->ipsclass->input['skinid']) : 1;
$default = $this->ipsclass->DB->simple_exec_query( array( 'select' => '*', 'from' => 'skin_sets', 'where' => "set_skin_set_id>{$id}" ) );
if( !$default['set_skin_set_id'] )
{
if( $id > 2 )
{
$this->ipsclass->core->redirect( "index.php?act=done&loginkey={$this->ipsclass->input['loginkey']}&securekey={$this->ipsclass->input['securekey']}&mid={$this->ipsclass->input['mid']}",
"Для проверки больше стилей нет...." );
}
else
{
$this->ipsclass->template->content .= "<div class='warnbox'><strong>Стили не найдены</strong><br />
Этот этап позволяет вам удалить внесенные вами изменения в стилях, для того, чтобы внести их вам вручную на обновленном форуме заново, и, чтобы процесс обновления обновил стили как положено.
Скрипт не смог найти ни одного стиляы. Вам потребуется после обновления зайти в админцентр и обратить стили вручную, чтобы скрипт внес изменения в шаблоны форума корректно..</div>
<br /><br />
<div align='center'><span style='font-weight:bold;font-size:14px'>&raquo; <a href='index.php?act=done&loginkey={$this->ipsclass->input['loginkey']}&securekey={$this->ipsclass->input['securekey']}&mid={$this->ipsclass->input['mid']}'>Далее ...</a></span></div>";
}
}
if( count( $default ) )
{
$this->ipsclass->template->content .= "
<div class='tableborder'>
<div class='maintitle'>Вы желаете возвратить стиль в стандартный вид (убрав все ваши изменения в нем)?</div>
<div class='tdrow1' style='padding:6px'>Во время обновлений часто бывают изменения в шаблонах IPB главного стиля, от которого ваши стили унаследованы. Если шаблоны вашего стиля не были изменены, они просто унаследуют изменения от шаблонов главного стиля. Для &laquo;IPB Стандартный стиль&raquo; это случится автоматически.<br /><br />
Другие стили, которые были импортированы вами, могут иметь свой собственный набор шаблонов, они могут, возможно, быть обновлены вручную. Если ваши шаблоны стиля не обновлены как положено, могут возникнуть проблемы... Например, вы можете увидеть javascript ошибки, или вы не сможете увидеть какие-то блоки, потому что они не будут найдены в ваших шаблонах...
<br /><br />
Шаблоны вашего Главного стиля будут обновлены автоматически в течение процесса обновления, однако, чтобы работало все нормально на стандартном стиле, любые изменения обязаны быть удалены. Если вы хотите сделать это вручную, вы можете пропустить этот этап, затем после обновления зайти в админцентр для удаления изменений...
Вам будет необходимо зайти в редактирование &laquo;IPB 2.1 Стандартный стиль&raquo; и выбрать &laquo;Обратить все изменения......&raquo; для измененных шаблонов. Также, система обновления может сделать это за вас.<br /><br />
Из-за различных возможностей HTML для нестандартных стилей, система обновления не сможет изменить эти стили для вас. После того, как обновление будет завершено, мы рекомендуем вам запустить утилиту &laquo;Генерировать отчет сравнения стилей...&raquo; в админцентре для определения изменений, внесенных в ваш стиль.
<br /><br /><b>Вы желаете удалить внесенные в стиль изменения для &laquo;{$default['set_name']}&raquo;?</b><br />(<i>Если это не стандартный стиль, мы рекомендуем вам пропустить данный этап и обновить ваши шаблоны вручную</i>)
<div align='left'><blockquote><span style='font-weight:bold;font-size:14px'>&raquo; <a href='{$this->base_url}&workact=skinrevert&do_update=1&man={$default['set_skin_set_id']}&do=all'>Да, удалить все изменения во ВСЕХ стилях ...</a><br />
<span style='font-weight:bold;font-size:14px'>&raquo; <a href='{$this->base_url}&workact=skinrevert&do_update=1&man={$default['set_skin_set_id']}'>Да, удалить все изменения в этом стиле ...</a><br />
&raquo; <a href='index.php?act=done&loginkey={$this->ipsclass->input['loginkey']}&securekey={$this->ipsclass->input['securekey']}&mid={$this->ipsclass->input['mid']}'>Нет, я хочу пропустить этот этап ...</a></span></blockquote></div>
";
}
else
{
$this->ipsclass->template->content .= "<div class='warnbox'><strong>Стили не найдены</strong><br />
Этот этап позволяет вам удалить внесенные вами изменения в стилях, для того, чтобы внести их вам вручную на обновленном форуме заново.</div>
<br /><br />
<div align='center'><span style='font-weight:bold;font-size:14px'>&raquo; <a href='index.php?act=done&loginkey={$this->ipsclass->input['loginkey']}&securekey={$this->ipsclass->input['securekey']}&mid={$this->ipsclass->input['mid']}'>Далее ...</a></span></div>";
}
$this->ipsclass->template->output();
}
else
{
$man = intval( $this->ipsclass->input['man'] );
$cnt = 0;
$default = $this->ipsclass->DB->simple_exec_query( array( 'select' => '*', 'from' => 'skin_sets', 'where' => "set_skin_set_id=".$man ) );
$this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'skin_templates', 'where' => "set_id=".$man ) );
$outer = $this->ipsclass->DB->simple_exec();
if( $this->ipsclass->DB->get_num_rows($outer) )
{
while( $r = $this->ipsclass->DB->fetch_row($outer) )
{
if( $r['set_id'] == 1 )
{
continue;
}
else
{
$this->ipsclass->DB->simple_exec_query( array( 'delete' => 'skin_templates', 'where' => 'suid='.$r['suid'] ) );
$cnt++;
}
}
}
$next = $this->ipsclass->DB->simple_exec_query( array( 'select' => '*', 'from' => 'skin_sets', 'where' => "set_skin_set_id>".$man, 'orderby' => 'set_skin_set_id ASC', 'limit' => array(0,1) ) );
if( $next['set_skin_set_id'] )
{
if( $this->ipsclass->input['do'] == 'all' )
{
$this->ipsclass->core->redirect( "index.php?act=work&workact=skinrevert&do_update=1&do=all&man={$next['set_skin_set_id']}&loginkey={$this->ipsclass->input['loginkey']}&securekey={$this->ipsclass->input['securekey']}&mid={$this->ipsclass->input['mid']}",
"$cnt шаблонов из стиля '{$default['set_name']}' было возвращено в стандартный вид, переходим к следующему стилю...." );
}
else
{
$this->ipsclass->core->redirect( "index.php?act=work&workact=skinrevert&skinid={$man}&loginkey={$this->ipsclass->input['loginkey']}&securekey={$this->ipsclass->input['securekey']}&mid={$this->ipsclass->input['mid']}",
"$cnt шаблонов из стиля '{$default['set_name']}' было возвращено в стандартный вид...." );
}
}
else
{
$this->ipsclass->core->redirect( "index.php?act=done&loginkey={$this->ipsclass->input['loginkey']}&securekey={$this->ipsclass->input['securekey']}&mid={$this->ipsclass->input['mid']}",
"$cnt шаблонов из стиля '{$default['set_name']}' было возвращено в стандартный вид...." );
} }
}
/*-------------------------------------------------------------------------*/
// INTRO
/*-------------------------------------------------------------------------*/
function upgrade_intro()
{
$this->ipsclass->template->content .= "
<div class='tableborder'>
<div class='maintitle'>Добро пожаловать в систему обновления IPB</div>
<div class='tdrow1' style='padding:6px'>Этот модуль обновит ваш форум с <b>{$this->ipsclass->versions[$this->upgrade_from]}</b> до <b>{$this->ipsclass->versions[$this->this_version]}</b>
<br /><br />Этот первый этап {$this->first_step}
<br />
";
if ( ! is_writeable( CACHE_PATH . 'cache/skin_cache' ) )
{
$this->ipsclass->template->content .= "<div class='warnbox'><strong>ВНИМАНИЕ: Папка cache/skin_cache недоступна для записи</strong><br />
Пожалуйста, проверьте CHMOD для этой папки. Если вы проигнорируете это предупреждение, то файлы стилей
могут некорректно установиться.</div>";
}
else
{
$this->ipsclass->template->content .= "<div align='center'><span style='font-weight:bold;font-size:14px'>&raquo; <a href='{$this->base_url}&workact=sql'>Далее ...</a></span></div>
</div>
</div>
<br />
<div align='center'>После этого модуля будет запущено: {$this->mod_to_run}</div>";
}
$this->ipsclass->template->output();
}
}
?>