2028 lines
59 KiB
PHP
2028 lines
59 KiB
PHP
<?php
|
|
/**
|
|
* <pre>
|
|
* Invision Power Services
|
|
* IP.Board v3.2.3
|
|
* Installer: EULA file
|
|
* Last Updated: $LastChangedDate: 2011-09-26 16:02:02 -0400 (Mon, 26 Sep 2011) $
|
|
* </pre>
|
|
*
|
|
* @author $Author: ips_terabyte $
|
|
* @copyright (c) 2001 - 2009 Invision Power Services, Inc.
|
|
* @license This is NULLED!
|
|
* @package IP.Board
|
|
* @link http://hatynka.in
|
|
* @version $Rev: 9551 $
|
|
*
|
|
*/
|
|
|
|
|
|
class install_install extends ipsCommand
|
|
{
|
|
/**
|
|
* Step count
|
|
*
|
|
* @access private
|
|
* @var int
|
|
*/
|
|
private $_stepCount = 0;
|
|
|
|
/**
|
|
* Total number of steps
|
|
*
|
|
* @access private
|
|
* @var int
|
|
*/
|
|
private $_totalSteps = 13;
|
|
|
|
/**
|
|
* Skin keys
|
|
* Now we could do some fancy method that grabs the keys from an XML file or whatever
|
|
* But as they are unlikely to change with any frequency, this should suffice.
|
|
*
|
|
* @access private
|
|
* @var array
|
|
*/
|
|
private $_skinKeys = array( 1 => 'default', 'xmlskin', 'lofi' );
|
|
private $_skinIDs = array( 1, 2, 3 );
|
|
|
|
/**
|
|
* Execute selected method
|
|
* SQL > APPLICATIONS -> MODULES -> SETTINGS > TEMPLATES > TASKS > LANGUAGES > PUBLIC LANGUAGES > BBCODE > ACP HELP OTHER [ Email Templates ] > Build Caches
|
|
*
|
|
* @access public
|
|
* @param object Registry object
|
|
* @return @e void
|
|
*/
|
|
public function doExecute( ipsRegistry $registry )
|
|
{
|
|
//-----------------------------------------
|
|
// Any "extra" configs required for this driver?
|
|
//-----------------------------------------
|
|
|
|
foreach( IPSSetUp::getSavedDataAsArray() as $k => $v )
|
|
{
|
|
if ( preg_match( "#^__sql__#", $k ) )
|
|
{
|
|
$k = str_replace( "__sql__", "", $k );
|
|
|
|
IPSSetUp::setSavedData( $k, $v );
|
|
}
|
|
}
|
|
|
|
/* Switch */
|
|
switch( $this->request['do'] )
|
|
{
|
|
case 'sql':
|
|
$this->_stepCount = 1;
|
|
$this->install_sql();
|
|
break;
|
|
|
|
case 'sql_steps':
|
|
$this->_stepCount = 2;
|
|
$this->install_sql_steps();
|
|
break;
|
|
|
|
case 'applications':
|
|
$this->_stepCount = 3;
|
|
$this->install_applications();
|
|
break;
|
|
|
|
case 'modules':
|
|
$this->_stepCount = 4;
|
|
$this->install_modules();
|
|
break;
|
|
|
|
case 'settings':
|
|
$this->_stepCount = 5;
|
|
$this->install_settings();
|
|
break;
|
|
|
|
case 'templates':
|
|
$this->_stepCount = 6;
|
|
$this->install_templates();
|
|
break;
|
|
|
|
case 'tasks':
|
|
$this->_stepCount = 7;
|
|
$this->install_tasks();
|
|
break;
|
|
|
|
case 'languages':
|
|
$this->_stepCount = 8;
|
|
$this->install_languages();
|
|
break;
|
|
|
|
case 'clientlanguages':
|
|
$this->_stepCount = 9;
|
|
$this->install_client_languages();
|
|
break;
|
|
|
|
case 'bbcode':
|
|
$this->_stepCount = 10;
|
|
$this->install_bbcode();
|
|
break;
|
|
|
|
case 'acphelp':
|
|
$this->_stepCount = 11;
|
|
$this->install_acphelp();
|
|
break;
|
|
|
|
case 'other':
|
|
$this->_stepCount = 12;
|
|
$this->install_other();
|
|
break;
|
|
|
|
case 'caches':
|
|
$this->_stepCount = 13;
|
|
$this->install_caches();
|
|
break;
|
|
|
|
default:
|
|
/* Output */
|
|
$this->registry->output->setTitle( "Установка" );
|
|
$this->registry->output->setNextAction( 'install&do=sql' );
|
|
$this->registry->output->setHideButton( TRUE );
|
|
$this->registry->output->addContent( $this->registry->output->template()->page_install() );
|
|
$this->registry->output->sendOutput();
|
|
break;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Installs SQL schematic
|
|
*
|
|
* @return void
|
|
*/
|
|
public function install_sql()
|
|
{
|
|
//-----------------------------------------
|
|
// INIT
|
|
//-----------------------------------------
|
|
|
|
$previous = $_REQUEST['previous'];
|
|
$skip = $_REQUEST['_skip'];
|
|
|
|
//-----------------------------------------
|
|
// Write config
|
|
//-----------------------------------------
|
|
|
|
if ( ! $previous AND ! $skip )
|
|
{
|
|
/* Write Configuration Files */
|
|
$output[] = 'Запись файлов конфигурации<br />';
|
|
|
|
$test = IPSInstall::writeConfiguration();
|
|
|
|
//-----------------------------------
|
|
// Check that it wrote
|
|
//-----------------------------------
|
|
|
|
if ( ! is_file( IPSSetUp::getSavedData('install_dir') . '/conf_global.php' ) )
|
|
{
|
|
$this->registry->output->setTitle( "Установка: Ошибка" );
|
|
$this->registry->output->setNextAction( 'install&do=sql' );
|
|
$this->registry->output->setHideButton( TRUE );
|
|
$this->registry->output->addError( "Невозможна запись конфигурации в файл conf_global.php. Пожалуйста, убедитесь, что файл имеет полный доступ на чтение и запись." );
|
|
$this->registry->output->addContent( "" );
|
|
$this->registry->output->sendOutput();
|
|
|
|
exit();
|
|
}
|
|
else
|
|
{
|
|
$INFO = array();
|
|
|
|
require( IPSSetUp::getSavedData('install_dir') . '/conf_global.php' );/*noLibHook*/
|
|
|
|
if( ! $INFO['sql_driver'] )
|
|
{
|
|
$this->registry->output->setTitle( "Установка: Ошибка" );
|
|
$this->registry->output->setNextAction( 'install&do=sql' );
|
|
$this->registry->output->setHideButton( TRUE );
|
|
$this->registry->output->addError( "Невозможна запись конфигурации в файл conf_global.php. Пожалуйста, убедитесь, что файл имеет полный доступ на чтение и запись." );
|
|
$this->registry->output->addContent( "" );
|
|
$this->registry->output->sendOutput();
|
|
|
|
exit();
|
|
}
|
|
}
|
|
}
|
|
|
|
/* Set up DB driver */
|
|
$extra_install = $this->_setUpDBDriver( FALSE );
|
|
|
|
//-----------------------------------------
|
|
// Fetch next 'un
|
|
//-----------------------------------------
|
|
|
|
$next = IPSSetUp::fetchNextApplication( $previous, '', $this->settings['gb_char_set'] );
|
|
|
|
if ( $next['key'] )
|
|
{
|
|
//-----------------------------------------
|
|
// INIT
|
|
//-----------------------------------------
|
|
|
|
$_PATH = IPSLib::getAppDir( $next['key'] ) . '/setup/versions/install/sql/';
|
|
$_FILE = $_PATH . $next['key'] . '_' . strtolower( IPSSetUp::getSavedData('sql_driver') );
|
|
|
|
//-----------------------------------------
|
|
// Tables
|
|
//-----------------------------------------
|
|
|
|
if ( is_file( $_FILE . '_tables.php' ) )
|
|
{
|
|
$TABLE = array();
|
|
include( $_FILE . '_tables.php' );/*noLibHook*/
|
|
|
|
if ( is_array( $TABLE ) and count( $TABLE ) )
|
|
{
|
|
$output[] = $next['title'] . ": Создание таблиц";
|
|
|
|
foreach( $TABLE as $q )
|
|
{
|
|
preg_match("/CREATE TABLE (\S+)(\s)?\(/", $q, $match);
|
|
|
|
if ( $match[1] )
|
|
{
|
|
$this->DB->dropTable( str_replace( IPSSetUp::getSavedData('db_pre'), '', $match[1] ) );
|
|
}
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'process_query_create' ) )
|
|
{
|
|
$q = $extra_install->process_query_create( $q );
|
|
}
|
|
|
|
$this->DB->allow_sub_select = 1;
|
|
$this->DB->error = '';
|
|
|
|
$this->DB->query( $q );
|
|
|
|
if ( $this->DB->error )
|
|
{
|
|
$this->registry->output->addError( nl2br( $q ) . "<br /><br />".$this->DB->error );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//---------------------------------------------
|
|
// Create the fulltext index...
|
|
//---------------------------------------------
|
|
|
|
if ( $this->DB->checkFulltextSupport() )
|
|
{
|
|
if ( is_file( $_FILE . '_fulltext.php' ) )
|
|
{
|
|
$INDEX = array();
|
|
include( $_FILE . '_fulltext.php' );/*noLibHook*/
|
|
|
|
$output[] = $next['title'] . ": Создание индексов";
|
|
|
|
if( is_array($INDEX) AND count($INDEX) )
|
|
{
|
|
$output[] = $next['title'] . ": Создание индексов";
|
|
|
|
foreach( $INDEX as $q )
|
|
{
|
|
//---------------------------------------------
|
|
// Pass to handler
|
|
//---------------------------------------------
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'process_query_index' ) )
|
|
{
|
|
$q = $extra_install->process_query_index( $q );
|
|
}
|
|
|
|
//---------------------------------------------
|
|
// Pass query
|
|
//---------------------------------------------
|
|
|
|
$this->DB->allow_sub_select = 1;
|
|
$this->DB->error = '';
|
|
|
|
$this->DB->query($q);
|
|
|
|
if ( $this->DB->error )
|
|
{
|
|
$this->registry->output->addError( nl2br( $q ) . "<br /><br />".$this->DB->error );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// INSERTS
|
|
//-----------------------------------------
|
|
|
|
if ( is_file( $_FILE . '_inserts.php' ) )
|
|
{
|
|
$INSERT = array();
|
|
include( $_FILE . '_inserts.php' );/*noLibHook*/
|
|
|
|
if ( is_array($INSERT) && count($INSERT) )
|
|
{
|
|
$output[] = $next['title'] . ": Наполнение таблиц";
|
|
|
|
foreach( $INSERT as $q )
|
|
{
|
|
$q = str_replace( "<%time%>", time(), $q );
|
|
$q = str_replace( '<%admin_name%>' , IPSSetUp::getSavedData('admin_user'), $q );
|
|
$q = str_replace( '<%admin_seoname%>', IPSText::makeSeoTitle( IPSSetUp::getSavedData('admin_user') ), $q );
|
|
|
|
//---------------------------------------------
|
|
// Pass to handler
|
|
//---------------------------------------------
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'process_query_insert' ) )
|
|
{
|
|
$q = $extra_install->process_query_insert( $q );
|
|
}
|
|
|
|
$this->DB->allow_sub_select = 1;
|
|
$this->DB->error = '';
|
|
|
|
$this->DB->query( $q );
|
|
|
|
if ( $this->DB->error )
|
|
{
|
|
$this->registry->output->addError( nl2br( $q ) . "<br /><br />".$this->DB->error );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Sort out groups
|
|
// This has to be here so the applications
|
|
// can populate group settings appropriately
|
|
//-----------------------------------------
|
|
|
|
if ( $next['key'] == 'core' )
|
|
{
|
|
|
|
$output[] = "Добавление информации о группах...";
|
|
$xml = new classXML( IPSSetUp::charSet );
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'before_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->before_inserts_run( 'groups' );
|
|
}
|
|
|
|
$xml->load( IPS_ROOT_PATH . 'setup/xml/groups.xml' );
|
|
|
|
foreach( $xml->fetchElements( 'row' ) as $xmlelement )
|
|
{
|
|
$data = $xml->fetchElementsFromRecord( $xmlelement );
|
|
|
|
$this->DB->insert( 'groups', $data );
|
|
}
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'after_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->after_inserts_run( 'groups' );
|
|
}
|
|
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Done.. so get some more!
|
|
//-----------------------------------------
|
|
|
|
$output = ( is_array( $output ) AND count( $output ) ) ? $output : array( 0 => $next['title'] . ": Наполнение таблиц завершено" );
|
|
|
|
$this->_finishStep( $output, "Установка: SQL", 'install&do=sql&previous=' . $next['key'] );
|
|
}
|
|
else
|
|
{
|
|
//-----------------------------------------
|
|
// NO MORE TO INSTALL
|
|
//-----------------------------------------
|
|
|
|
$output[] = "Действия SQL завершены";
|
|
|
|
IPSInstall::createAdminAccount();
|
|
|
|
//-----------------------------------------
|
|
// Next...
|
|
//-----------------------------------------
|
|
|
|
$output = ( is_array( $output ) AND count( $output ) ) ? $output : array( 0 => $next['title'] . ": Наполнение таблиц завершено" );
|
|
|
|
$this->_finishStep( $output, "Установка: SQL", 'install&do=sql_steps' );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Installs extra sql statements
|
|
*
|
|
* @return void
|
|
*/
|
|
public function install_sql_steps()
|
|
{
|
|
//-----------------------------------------
|
|
// INIT
|
|
//-----------------------------------------
|
|
|
|
$output = array();
|
|
$errors = array();
|
|
$id = intval( $this->request['id'] );
|
|
$sql_files = array();
|
|
$previous = $_REQUEST['previous'];
|
|
$skip = $_REQUEST['_skip'];
|
|
$next = IPSSetUp::fetchNextApplication( $previous, '', $this->settings['gb_char_set'] );
|
|
|
|
//-----------------------------------------
|
|
// Got one to run?
|
|
//-----------------------------------------
|
|
|
|
if( $next['key'] )
|
|
{
|
|
$path = IPSLib::getAppDir( $next['key'] ) . '/setup/versions/install';
|
|
$id = ( $id < 1 ) ? 1 : $id;
|
|
|
|
if ( is_file( $path . '/sql/' .$next['key'] . '_' . strtolower( IPSSetUp::getSavedData('sql_driver') ) . '_sql_' . $id .'.php' ) )
|
|
{
|
|
/* Set up DB driver */
|
|
$extra_install = $this->_setUpDBDriver( FALSE );
|
|
|
|
/* Increment ID */
|
|
$new_id = $id + 1;
|
|
$count = 0;
|
|
|
|
/* Get the SQL File */
|
|
$SQL = array();
|
|
require_once( $path . '/sql/' . $next['key'] . '_' . strtolower( IPSSetUp::getSavedData('sql_driver') ) . '_sql_' . $id .'.php' );
|
|
|
|
if ( is_array( $SQL ) && count( $SQL ) )
|
|
{
|
|
/* Loop through the queries */
|
|
foreach( $SQL as $query )
|
|
{
|
|
/* Setup */
|
|
$this->DB->allow_sub_select = 1;
|
|
$this->DB->error = '';
|
|
|
|
$query = str_replace( "<%time%>", time(), $query );
|
|
|
|
/* Process the query */
|
|
if ( $extra_install AND method_exists( $extra_install, 'process_query_insert' ) )
|
|
{
|
|
$query = $extra_install->process_query_insert( $query );
|
|
}
|
|
|
|
/* Run the query */
|
|
$this->DB->query( $query );
|
|
|
|
if ( $this->DB->error )
|
|
{
|
|
$this->registry->output->addError( $query."<br /><br />".$this->DB->error );
|
|
}
|
|
else
|
|
{
|
|
$count++;
|
|
}
|
|
}
|
|
|
|
$output[] = "$count запросов выполнено";
|
|
}
|
|
else
|
|
{
|
|
$output[] = "Нет SQL запросов на данном шаге...";
|
|
}
|
|
|
|
$previous = $_REQUEST['previous'];
|
|
}
|
|
else
|
|
{
|
|
$previous = $next['key'];
|
|
}
|
|
|
|
$output = ( is_array( $output ) AND count( $output ) ) ? $output : array( 0 => $next['title'] . ": SQL запросы выполнены" );
|
|
|
|
$this->_finishStep( $output, "Установка: SQL", 'install&do=sql_steps&previous=' . $previous . '&id=' . $new_id );
|
|
}
|
|
else
|
|
{
|
|
$output[] = "Все SQL запросы выполнены";
|
|
|
|
$this->_finishStep( $output, "Установка: SQL", 'install&do=applications' );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Install Applications
|
|
*
|
|
* @return void
|
|
*/
|
|
public function install_applications()
|
|
{
|
|
//-----------------------------------------
|
|
// INIT
|
|
//-----------------------------------------
|
|
|
|
$previous = $_REQUEST['previous'];
|
|
$num = intval( $_REQUEST['num'] ) + 1;
|
|
|
|
//-----------------------------------------
|
|
// Fetch next 'un
|
|
//-----------------------------------------
|
|
|
|
$next = IPSSetUp::fetchNextApplication( $previous, '', $this->settings['gb_char_set'] );
|
|
|
|
/* Set up DB driver */
|
|
$extra_install = $this->_setUpDBDriver( FALSE );
|
|
|
|
//-----------------------------------------
|
|
// Install APP Data
|
|
//-----------------------------------------
|
|
|
|
if ( $next['key'] )
|
|
{
|
|
$output[] = $next['title'] . ": Добавление данных приложений";
|
|
$_PATH = IPSLib::getAppDir( $next['key'] ) . '/xml/';
|
|
$_protected = ( in_array( $next['key'], array( 'core', 'forums', 'members' ) ) ) ? 1 : 0;
|
|
$version = '1.0.0';
|
|
$long_version = '10000';
|
|
$_versions = array();
|
|
|
|
if ( is_file( $_PATH . 'versions.xml' ) )
|
|
{
|
|
require_once( IPS_KERNEL_PATH . 'classXML.php' );/*noLibHook*/
|
|
$xml = new classXML( IPSSetUp::charSet );
|
|
|
|
$xml->load( $_PATH . 'versions.xml' );
|
|
|
|
foreach( $xml->fetchElements( 'version' ) as $xmlelement )
|
|
{
|
|
$data = $xml->fetchElementsFromRecord( $xmlelement );
|
|
|
|
$_versions[ $data['long'] ] = $data;
|
|
}
|
|
|
|
krsort( $_versions );
|
|
|
|
$_this_version = current( $_versions );
|
|
$version = $_this_version['human'];
|
|
$long_version = $_this_version['long'];
|
|
}
|
|
|
|
if ( is_file( $_PATH . 'information.xml' ) )
|
|
{
|
|
//-----------------------------------------
|
|
// Adjust the table?
|
|
//-----------------------------------------
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'before_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->before_inserts_run( 'applications' );
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Continue
|
|
//-----------------------------------------
|
|
|
|
$appData = IPSSetUp::fetchXmlAppInformation( $next['key'], $this->settings['gb_char_set'] );
|
|
|
|
//-----------------------------------------
|
|
// Insert...
|
|
//-----------------------------------------
|
|
|
|
$this->DB->insert( 'core_applications', array( 'app_title' => $appData['name'],
|
|
'app_public_title' => ( $appData['public_name'] ) ? $appData['public_name'] : '', // Allow blank in case it's an admin-only app
|
|
'app_description' => $appData['description'],
|
|
'app_author' => $appData['author'],
|
|
'app_hide_tab' => intval($appData['hide_tab']),
|
|
'app_version' => $version,
|
|
'app_long_version' => $long_version,
|
|
'app_directory' => $next['key'],
|
|
'app_added' => time(),
|
|
'app_position' => $num,
|
|
'app_protected' => $_protected,
|
|
'app_location' => IPSLib::extractAppLocationKey( $next['key'] ),
|
|
'app_enabled' => $appData['disabledatinstall'] ? 0 : 1,
|
|
'app_website' => $appData['website'],
|
|
'app_update_check' => $appData['update_check'],
|
|
'app_global_caches' => $appData['global_caches'],
|
|
) );
|
|
|
|
$this->DB->insert( 'upgrade_history', array('upgrade_version_id' => $long_version,
|
|
'upgrade_version_human' => $version,
|
|
'upgrade_date' => 0,
|
|
'upgrade_mid' => 0,
|
|
'upgrade_notes' => '',
|
|
'upgrade_app' => $next['key']
|
|
) );
|
|
|
|
//-----------------------------------------
|
|
// Adjust the table?
|
|
//-----------------------------------------
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'after_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->after_inserts_run( 'applications' );
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Done.. so get some more!
|
|
//-----------------------------------------
|
|
|
|
$this->_finishStep( $output, "Установка: Приложения", 'install&do=applications&previous=' . $next['key'] . '&num=' . $num );
|
|
}
|
|
else
|
|
{
|
|
//-----------------------------------------
|
|
// Next...
|
|
//-----------------------------------------
|
|
|
|
$output[] = "Приложения установлены";
|
|
|
|
$this->_finishStep( $output, "Установка: Приложения", 'install&do=modules' );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Install Modules
|
|
*
|
|
* @return @e void
|
|
*/
|
|
public function install_modules()
|
|
{
|
|
//-----------------------------------------
|
|
// INIT
|
|
//-----------------------------------------
|
|
|
|
$previous = $_REQUEST['previous'];
|
|
|
|
//-----------------------------------------
|
|
// Fetch next 'un
|
|
//-----------------------------------------
|
|
|
|
$next = IPSSetUp::fetchNextApplication( $previous, '', $this->settings['gb_char_set'] );
|
|
|
|
/* Set up DB driver */
|
|
$extra_install = $this->_setUpDBDriver( FALSE );
|
|
|
|
//-----------------------------------------
|
|
// Install SYSTEM Templates
|
|
//-----------------------------------------
|
|
|
|
$fields = array( 'sys_module_title' , 'sys_module_application', 'sys_module_key' , 'sys_module_description', 'sys_module_version',
|
|
'sys_module_protected', 'sys_module_visible' , 'sys_module_position', 'sys_module_admin' );
|
|
|
|
if ( $next['key'] )
|
|
{
|
|
$output[] = $next['title'] . ": Добавление модулей";
|
|
$modules = IPSSetUp::fetchXmlAppModules( $next['key'], $this->settings['gb_char_set'] );
|
|
|
|
if( is_array($modules) AND count($modules) )
|
|
{
|
|
if ( $extra_install AND method_exists( $extra_install, 'before_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->before_inserts_run( 'modules' );
|
|
}
|
|
|
|
foreach( $modules as $module )
|
|
{
|
|
foreach( $module as $k => $v )
|
|
{
|
|
if ( ! in_array( $k, $fields ) )
|
|
{
|
|
unset( $module[ $k ] );
|
|
}
|
|
}
|
|
|
|
$this->DB->insert( 'core_sys_module', $module );
|
|
}
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'after_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->after_inserts_run( 'modules' );
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Done.. so get some more!
|
|
//-----------------------------------------
|
|
|
|
$this->_finishStep( $output, "Установка: Модули", 'install&do=modules&previous=' . $next['key'] );
|
|
}
|
|
else
|
|
{
|
|
//-----------------------------------------
|
|
// Next...
|
|
//-----------------------------------------
|
|
|
|
$output[] = "Все модули добавлены";
|
|
|
|
$this->_finishStep( $output, "Установка: Модули", 'install&do=settings' );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Installs Settings schematic
|
|
*
|
|
* @return void
|
|
*/
|
|
public function install_settings()
|
|
{
|
|
//-----------------------------------------
|
|
// INIT
|
|
//-----------------------------------------
|
|
|
|
$previous = $_REQUEST['previous'];
|
|
|
|
//-----------------------------------------
|
|
// Fetch next 'un
|
|
//-----------------------------------------
|
|
|
|
$next = IPSSetUp::fetchNextApplication( $previous, '{app}_settings.xml', $this->settings['gb_char_set'] );
|
|
|
|
/* Set up DB driver */
|
|
$extra_install = $this->_setUpDBDriver( FALSE );
|
|
|
|
//-----------------------------------------
|
|
// Install settings
|
|
//-----------------------------------------
|
|
|
|
if ( $next['key'] )
|
|
{
|
|
$output[] = $next['title'] . ": Добавление настроек";
|
|
$_PATH = IPSLib::getAppDir( $next['key'] ) . '/xml/';
|
|
$knownSettings = array();
|
|
|
|
if ( is_file( $_PATH . $next['key'] . '_settings.xml' ) )
|
|
{
|
|
//-----------------------------------------
|
|
// Adjust the table?
|
|
//-----------------------------------------
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'before_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->before_inserts_run( 'settings' );
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Continue
|
|
//-----------------------------------------
|
|
|
|
require_once( IPS_ROOT_PATH . 'applications/core/modules_admin/settings/settings.php' );/*noLibHook*/
|
|
$settings = new admin_core_settings_settings();
|
|
$settings->makeRegistryShortcuts( $this->registry );
|
|
|
|
$this->request['app_dir'] = $next['key'];
|
|
|
|
//-----------------------------------------
|
|
// Known settings
|
|
//-----------------------------------------
|
|
|
|
if ( substr( IPSSetUp::getSavedData('install_url'), -1 ) == '/' )
|
|
{
|
|
IPSSetUp::setSavedData('install_url', substr( IPSSetUp::getSavedData('install_url'), 0, -1 ) );
|
|
}
|
|
|
|
if ( substr( IPSSetUp::getSavedData('install_dir'), -1 ) == '/' )
|
|
{
|
|
IPSSetUp::setSavedData('install_dir', substr( IPSSetUp::getSavedData('install_dir'), 0, -1 ) );
|
|
}
|
|
|
|
/* Fetch known settings */
|
|
if ( is_file( IPSLib::getAppDir( $next['key'] ) . '/setup/versions/install/knownSettings.php' ) )
|
|
{
|
|
require( IPSLib::getAppDir( $next['key'] ) . '/setup/versions/install/knownSettings.php' );/*noLibHook*/
|
|
}
|
|
|
|
$this->request['app_dir'] = $next['key'];
|
|
$settings->importAllSettings( 1, 1, $knownSettings );
|
|
|
|
//-----------------------------------------
|
|
// Adjust the table?
|
|
//-----------------------------------------
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'after_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->after_inserts_run( 'settings' );
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Done.. so get some more!
|
|
//-----------------------------------------
|
|
|
|
$this->_finishStep( $output, "Установка: Настройки", 'install&do=settings&previous=' . $next['key'] );
|
|
}
|
|
else
|
|
{
|
|
//-----------------------------------------
|
|
// Next...
|
|
//-----------------------------------------
|
|
|
|
$output[] = "Настройки добавлены";
|
|
|
|
$this->_finishStep( $output, "Установка: Настройки", 'install&do=templates' );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Install templates
|
|
*
|
|
* @return void
|
|
*/
|
|
public function install_templates()
|
|
{
|
|
//-----------------------------------------
|
|
// INIT
|
|
//-----------------------------------------
|
|
|
|
$previous = $_REQUEST['previous'];
|
|
|
|
//-----------------------------------------
|
|
// Fetch next 'un
|
|
//-----------------------------------------
|
|
|
|
$next = IPSSetUp::fetchNextApplication( $previous, '', $this->settings['gb_char_set'] );
|
|
|
|
/* Set up DB driver */
|
|
$extra_install = $this->_setUpDBDriver( FALSE );
|
|
|
|
/* Got any skin sets? */
|
|
$count = $this->DB->buildAndFetch( array( 'select' => 'count(*) as count',
|
|
'from' => 'skin_collections' ) );
|
|
|
|
if ( ! $count['count'] )
|
|
{
|
|
//-----------------------------------------
|
|
// Next...
|
|
//-----------------------------------------
|
|
|
|
$output[] = "Добавление шаблонов стилей";
|
|
|
|
require_once( IPS_KERNEL_PATH . 'classXML.php' );/*noLibHook*/
|
|
$xml = new classXML( IPSSetUp::charSet );
|
|
|
|
//-----------------------------------------
|
|
// Adjust the table?
|
|
//-----------------------------------------
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'before_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->before_inserts_run( 'skinset' );
|
|
}
|
|
|
|
/* Skin Set Data */
|
|
$xml->load( IPS_ROOT_PATH . 'setup/xml/skins/setsData.xml' );
|
|
|
|
foreach( $xml->fetchElements( 'set' ) as $xmlelement )
|
|
{
|
|
$data = $xml->fetchElementsFromRecord( $xmlelement );
|
|
|
|
/* Ensure we have an order */
|
|
$data['set_order'] = intval( $data['set_order'] );
|
|
|
|
$this->DB->insert( 'skin_collections', $data );
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Adjust the table?
|
|
//-----------------------------------------
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'after_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->after_inserts_run( 'skinset' );
|
|
}
|
|
}
|
|
|
|
/* Load skin classes */
|
|
require_once( IPS_ROOT_PATH . 'sources/classes/skins/skinFunctions.php' );/*noLibHook*/
|
|
require_once( IPS_ROOT_PATH . 'sources/classes/skins/skinCaching.php' );/*noLibHook*/
|
|
require_once( IPS_ROOT_PATH . 'sources/classes/skins/skinImportExport.php' );/*noLibHook*/
|
|
|
|
$skinFunctions = new skinImportExport( $this->registry );
|
|
|
|
/* Grab skin data */
|
|
$this->DB->build( array( 'select' => '*',
|
|
'from' => 'skin_collections' ) );
|
|
|
|
$this->DB->execute();
|
|
|
|
while( $row = $this->DB->fetch() )
|
|
{
|
|
/* Bit of jiggery pokery... */
|
|
if ( $row['set_key'] == 'default' )
|
|
{
|
|
$row['set_key'] = 'root';
|
|
$row['set_id'] = 0;
|
|
}
|
|
|
|
$skinSets[ $row['set_key'] ] = $row;
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// InstallTemplates
|
|
//-----------------------------------------
|
|
|
|
if ( $next['key'] )
|
|
{
|
|
foreach( $skinSets as $skinKey => $skinData )
|
|
{
|
|
$_PATH = IPSLib::getAppDir( $next['key'] ) . '/xml/';
|
|
|
|
$output[] = $next['title'] . ": Добавлены шаблоны {$skinData['set_name']}";
|
|
|
|
if ( is_file( $_PATH . $next['key'] . '_' . $skinKey . '_templates.xml' ) )
|
|
{
|
|
//-----------------------------------------
|
|
// Adjust the table?
|
|
//-----------------------------------------
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'before_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->before_inserts_run( 'templates' );
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Install
|
|
//-----------------------------------------
|
|
|
|
$return = $skinFunctions->importTemplateAppXML( $next['key'], $skinKey, $skinData['set_id'], TRUE );
|
|
|
|
$output[] = $next['title'] . ": " . intval( $return['insertCount'] ) . " шаблонов добавлено";
|
|
|
|
//-----------------------------------------
|
|
// Adjust the table?
|
|
//-----------------------------------------
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'after_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->after_inserts_run( 'templates' );
|
|
}
|
|
}
|
|
|
|
if ( is_file( $_PATH . $next['key'] . '_' . $skinKey . '_css.xml' ) )
|
|
{
|
|
//-----------------------------------------
|
|
// Adjust the table?
|
|
//-----------------------------------------
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'before_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->before_inserts_run( 'css' );
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Install
|
|
//-----------------------------------------
|
|
|
|
$return = $skinFunctions->importCSSAppXML( $next['key'], $skinKey, $skinData['set_id'] );
|
|
|
|
$output[] = $next['title'] . ": " . intval( $return['insertCount'] ) . " CSS файлов {$skinData['set_name']} добавлено";
|
|
|
|
//-----------------------------------------
|
|
// Adjust the table?
|
|
//-----------------------------------------
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'after_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->after_inserts_run( 'css' );
|
|
}
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Done.. so get some more!
|
|
//-----------------------------------------
|
|
|
|
$this->_finishStep( $output, "Установка: Шаблоны", 'install&do=templates&previous=' . $next['key'] );
|
|
}
|
|
else
|
|
{
|
|
//-----------------------------------------
|
|
// Recache templates
|
|
//-----------------------------------------
|
|
|
|
$output[] = "Добавление макросов";
|
|
|
|
foreach( $skinSets as $skinKey => $skinData )
|
|
{
|
|
/* Replacements */
|
|
$skinFunctions->importReplacementsXMLArchive( file_get_contents( IPS_ROOT_PATH . 'setup/xml/skins/replacements_' . $skinKey . '.xml' ), $skinKey );
|
|
}
|
|
|
|
$skinFunctions->rebuildSkinSetsCache();
|
|
|
|
$output[] = "Шаблоны установлены";
|
|
|
|
$this->_finishStep( $output, "Установка: Шаблоны", 'install&do=tasks' );
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Install Tasks
|
|
*
|
|
* @return void
|
|
*/
|
|
public function install_tasks()
|
|
{
|
|
//-----------------------------------------
|
|
// INIT
|
|
//-----------------------------------------
|
|
|
|
$previous = $_REQUEST['previous'];
|
|
|
|
//-----------------------------------------
|
|
// Fetch next 'un
|
|
//-----------------------------------------
|
|
|
|
$next = IPSSetUp::fetchNextApplication( $previous, '{app}_tasks.xml', $this->settings['gb_char_set'] );
|
|
|
|
/* Set up DB driver */
|
|
$extra_install = $this->_setUpDBDriver( FALSE );
|
|
|
|
//-----------------------------------------
|
|
// Insert tasks
|
|
//-----------------------------------------
|
|
|
|
if ( $next['key'] )
|
|
{
|
|
$output[] = $next['title'] . ": Добавление задач";
|
|
$_PATH = IPSLib::getAppDir( $next['key'] ) . '/xml/';
|
|
|
|
if ( is_file( $_PATH . $next['key'] . '_tasks.xml' ) )
|
|
{
|
|
//-----------------------------------------
|
|
// Adjust the table?
|
|
//-----------------------------------------
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'before_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->before_inserts_run( 'tasks' );
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Continue
|
|
//-----------------------------------------
|
|
|
|
require_once( IPS_ROOT_PATH . 'applications/core/modules_admin/system/taskmanager.php' );/*noLibHook*/
|
|
$tasks = new admin_core_system_taskmanager();
|
|
$tasks->makeRegistryShortcuts( $this->registry );
|
|
|
|
$tasks->tasksImportFromXML( $_PATH . $next['key'] . '_tasks.xml', 1 );
|
|
|
|
//-----------------------------------------
|
|
// Adjust the table?
|
|
//-----------------------------------------
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'after_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->after_inserts_run( 'tasks' );
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Done.. so get some more!
|
|
//-----------------------------------------
|
|
|
|
$this->_finishStep( $output, "Установка: Задачи", 'install&do=tasks&previous=' . $next['key'] );
|
|
}
|
|
else
|
|
{
|
|
//-----------------------------------------
|
|
// Next...
|
|
//-----------------------------------------
|
|
|
|
$output[] = "Задачи добавлены";
|
|
|
|
$this->_finishStep( $output, "Установка: Задачи", 'install&do=languages' );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Install Languages
|
|
*
|
|
* @return void
|
|
*/
|
|
public function install_languages()
|
|
{
|
|
//-----------------------------------------
|
|
// INIT
|
|
//-----------------------------------------
|
|
|
|
$previous = $_REQUEST['previous'];
|
|
|
|
//-----------------------------------------
|
|
// Fetch next 'un
|
|
//-----------------------------------------
|
|
|
|
$next = IPSSetUp::fetchNextApplication( $previous, '', $this->settings['gb_char_set'] );
|
|
|
|
/* Set up DB driver */
|
|
$extra_install = $this->_setUpDBDriver( FALSE );
|
|
|
|
//-----------------------------------------
|
|
// Install Languages
|
|
//-----------------------------------------
|
|
|
|
if ( $next['key'] )
|
|
{
|
|
$output[] = $next['title'] . ": Добавление языков админцентра";
|
|
$_PATH = IPSLib::getAppDir( $next['key'] ) . '/xml/';
|
|
|
|
//-----------------------------------------
|
|
// Get the language stuff
|
|
//-----------------------------------------
|
|
|
|
require_once( IPS_ROOT_PATH . 'applications/core/modules_admin/languages/manage_languages.php' );/*noLibHook*/
|
|
$lang = new admin_core_languages_manage_languages();
|
|
$lang->makeRegistryShortcuts( $this->registry );
|
|
|
|
/* Loop through the xml directory and look for lang packs */
|
|
try
|
|
{
|
|
foreach( new DirectoryIterator( $_PATH ) as $f )
|
|
{
|
|
if( preg_match( "#admin_(.+?)_language_pack.xml#", $f->getFileName() ) )
|
|
{
|
|
//-----------------------------------------
|
|
// Adjust the table?
|
|
//-----------------------------------------
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'before_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->before_inserts_run( 'languages' );
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Import and cache
|
|
//-----------------------------------------
|
|
|
|
$this->request['file_location'] = $_PATH . $f->getFileName();
|
|
$lang->imprtFromXML( true, true, true, $next['key'], false, 1 );
|
|
|
|
//-----------------------------------------
|
|
// Adjust the table?
|
|
//-----------------------------------------
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'after_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->after_inserts_run( 'languages' );
|
|
}
|
|
}
|
|
}
|
|
} catch ( Exception $e ) {}
|
|
|
|
//-----------------------------------------
|
|
// Done.. so get some more!
|
|
//-----------------------------------------
|
|
|
|
$this->_finishStep( $output, "Установка: Языки админцентра", 'install&do=languages&previous=' . $next['key'] );
|
|
}
|
|
else
|
|
{
|
|
//-----------------------------------------
|
|
// Next...
|
|
//-----------------------------------------
|
|
|
|
$output[] = "Языки админцентра установлены";
|
|
|
|
$this->_finishStep( $output, "Установка: Языки админцентра", 'install&do=clientlanguages' );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Install Public Languages
|
|
*
|
|
* @return void
|
|
*/
|
|
public function install_client_languages()
|
|
{
|
|
//-----------------------------------------
|
|
// INIT
|
|
//-----------------------------------------
|
|
|
|
$previous = $_REQUEST['previous'];
|
|
|
|
//-----------------------------------------
|
|
// Fetch next 'un
|
|
//-----------------------------------------
|
|
|
|
$next = IPSSetUp::fetchNextApplication( $previous, '', $this->settings['gb_char_set'] );
|
|
|
|
/* Set up DB driver */
|
|
$extra_install = $this->_setUpDBDriver( FALSE );
|
|
|
|
//-----------------------------------------
|
|
// Install Languages
|
|
//-----------------------------------------
|
|
|
|
if ( $next['key'] )
|
|
{
|
|
$output[] = $next['title'] . ": Добавление языков";
|
|
$_PATH = IPSLib::getAppDir( $next['key'] ) . '/xml/';
|
|
|
|
//-----------------------------------------
|
|
// Get the language stuff
|
|
//-----------------------------------------
|
|
|
|
require_once( IPS_ROOT_PATH . 'applications/core/modules_admin/languages/manage_languages.php' );/*noLibHook*/
|
|
$lang = new admin_core_languages_manage_languages();
|
|
$lang->makeRegistryShortcuts( $this->registry );
|
|
|
|
/* Loop through the xml directory and look for lang packs */
|
|
try
|
|
{
|
|
foreach( new DirectoryIterator( $_PATH ) as $f )
|
|
{
|
|
if( preg_match( "#public_(.+?)_language_pack.xml#", $f->getFileName() ) )
|
|
{
|
|
//-----------------------------------------
|
|
// Adjust the table?
|
|
//-----------------------------------------
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'before_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->before_inserts_run( 'languages' );
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Import and cache
|
|
//-----------------------------------------
|
|
|
|
$this->request['file_location'] = $_PATH . $f->getFileName();
|
|
$lang->imprtFromXML( true, true, true, $next['key'], false, 1 );
|
|
|
|
//-----------------------------------------
|
|
// Adjust the table?
|
|
//-----------------------------------------
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'after_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->after_inserts_run( 'languages' );
|
|
}
|
|
}
|
|
}
|
|
} catch ( Exception $e ) {}
|
|
|
|
//-----------------------------------------
|
|
// Done.. so get some more!
|
|
//-----------------------------------------
|
|
|
|
$this->_finishStep( $output, "Установка: Языки", 'install&do=clientlanguages&previous=' . $next['key'] );
|
|
}
|
|
else
|
|
{
|
|
//-----------------------------------------
|
|
// Next...
|
|
//-----------------------------------------
|
|
|
|
$output[] = "Добавление языков завершено";
|
|
|
|
$this->_finishStep( $output, "Установка: Языки", 'install&do=bbcode' );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Install BBCode
|
|
*
|
|
* @return void
|
|
*/
|
|
public function install_bbcode()
|
|
{
|
|
//-----------------------------------------
|
|
// INIT
|
|
//-----------------------------------------
|
|
|
|
$previous = $_REQUEST['previous'];
|
|
|
|
//-----------------------------------------
|
|
// Fetch next 'un
|
|
//-----------------------------------------
|
|
|
|
$next = IPSSetUp::fetchNextApplication( $previous, '{app}_bbcode.xml', $this->settings['gb_char_set'] );
|
|
|
|
/* Set up DB driver */
|
|
$extra_install = $this->_setUpDBDriver( FALSE );
|
|
|
|
//-----------------------------------------
|
|
// Install Languages
|
|
//-----------------------------------------
|
|
|
|
if ( $next['key'] )
|
|
{
|
|
$output[] = $next['title'] . ": Добавление BB-кодов";
|
|
$_PATH = IPSLib::getAppDir( $next['key'] ) . '/xml/';
|
|
|
|
if ( is_file( $_PATH . $next['key'] . '_bbcode.xml' ) )
|
|
{
|
|
//-----------------------------------------
|
|
// Adjust the table?
|
|
//-----------------------------------------
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'before_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->before_inserts_run( 'bbcode' );
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Continue
|
|
//-----------------------------------------
|
|
|
|
require_once( IPS_ROOT_PATH . 'applications/core/modules_admin/posts/bbcode.php' );/*noLibHook*/
|
|
$bbcode = new admin_core_posts_bbcode();
|
|
$bbcode->makeRegistryShortcuts( $this->registry );
|
|
|
|
$_contents = file_get_contents( $_PATH . $next['key'] . '_bbcode.xml' );
|
|
|
|
if( $_contents )
|
|
{
|
|
$bbcode->bbcodeImportDo( $_contents );
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Adjust the table?
|
|
//-----------------------------------------
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'after_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->after_inserts_run( 'bbcode' );
|
|
}
|
|
}
|
|
|
|
$output[] = $next['title'] . ": Добавление медиа тегов";
|
|
$_PATH = IPSLib::getAppDir( $next['key'] ) . '/xml/';
|
|
|
|
if ( is_file( $_PATH . $next['key'] . '_mediatag.xml' ) )
|
|
{
|
|
//-----------------------------------------
|
|
// Adjust the table?
|
|
//-----------------------------------------
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'before_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->before_inserts_run( 'media' );
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Continue
|
|
//-----------------------------------------
|
|
|
|
require_once( IPS_ROOT_PATH . 'applications/core/modules_admin/posts/media.php' );/*noLibHook*/
|
|
$bbcode = new admin_core_posts_media();
|
|
$bbcode->makeRegistryShortcuts( $this->registry );
|
|
|
|
$bbcode->doMediaImport( file_get_contents( $_PATH . $next['key'] . '_mediatag.xml' ) );
|
|
|
|
//-----------------------------------------
|
|
// Adjust the table?
|
|
//-----------------------------------------
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'after_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->after_inserts_run( 'media' );
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Done.. so get some more!
|
|
//-----------------------------------------
|
|
|
|
$this->_finishStep( $output, "Установка: BB-коды", 'install&do=bbcode&previous=' . $next['key'] );
|
|
}
|
|
else
|
|
{
|
|
//-----------------------------------------
|
|
// Next...
|
|
//-----------------------------------------
|
|
|
|
$output[] = "Все BB-коды установлены";
|
|
|
|
$this->_finishStep( $output, "Установка: BB-коды", 'install&do=acphelp' );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Install ACP Help
|
|
*
|
|
* @return void
|
|
*/
|
|
public function install_acphelp()
|
|
{
|
|
//-----------------------------------------
|
|
// INIT
|
|
//-----------------------------------------
|
|
|
|
$previous = $_REQUEST['previous'];
|
|
|
|
//-----------------------------------------
|
|
// Fetch next 'un
|
|
//-----------------------------------------
|
|
|
|
$next = IPSSetUp::fetchNextApplication( $previous, '{app}_help.xml', $this->settings['gb_char_set'] );
|
|
|
|
/* Set up DB driver */
|
|
$extra_install = $this->_setUpDBDriver( FALSE );
|
|
|
|
require_once( IPS_KERNEL_PATH . 'classXML.php' );/*noLibHook*/
|
|
$xml = new classXML( IPSSetUp::charSet );
|
|
|
|
//-----------------------------------------
|
|
// Install Languages
|
|
//-----------------------------------------
|
|
|
|
if ( $next['key'] )
|
|
{
|
|
$output[] = $next['title'] . ": Добавление разделов помощи";
|
|
$_PATH = IPSLib::getAppDir( $next['key'] ) . '/xml/';
|
|
|
|
if ( is_file( $_PATH . $next['key'] . '_help.xml' ) )
|
|
{
|
|
//-----------------------------------------
|
|
// Adjust the table?
|
|
//-----------------------------------------
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'before_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->before_inserts_run( 'faq' );
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Do it..
|
|
//-----------------------------------------
|
|
|
|
require_once( IPS_ROOT_PATH . 'applications/core/modules_admin/tools/help.php' );/*noLibHook*/
|
|
$help = new admin_core_tools_help();
|
|
$help->makeRegistryShortcuts( $this->registry );
|
|
|
|
$done = $help->helpFilesXMLImport_app( $next['key'] );
|
|
|
|
$output[] = $next['title'] . ": Добавлено " . $done['added'] . " файлов помощи";
|
|
|
|
//-----------------------------------------
|
|
// Adjust the table?
|
|
//-----------------------------------------
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'after_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->after_inserts_run( 'faq' );
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Done.. so get some more!
|
|
//-----------------------------------------
|
|
|
|
$this->_finishStep( $output, "Установка: Система помощи", 'install&do=acphelp&previous=' . $next['key'] );
|
|
}
|
|
else
|
|
{
|
|
//-----------------------------------------
|
|
// Next...
|
|
//-----------------------------------------
|
|
|
|
$output[] = "Все файлы помощи добавлены";
|
|
|
|
$this->_finishStep( $output, "Установка: Система помощи", 'install&do=other' );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Install Other stuff
|
|
*
|
|
* @return void
|
|
*/
|
|
public function install_other()
|
|
{
|
|
//-----------------------------------------
|
|
// INIT
|
|
//-----------------------------------------
|
|
|
|
$previous = $_REQUEST['previous'];
|
|
|
|
//-----------------------------------------
|
|
// HOOKS: Fetch next 'un
|
|
//-----------------------------------------
|
|
|
|
$next = IPSSetUp::fetchNextApplication( $previous, 'hooks.xml', $this->settings['gb_char_set'] );
|
|
|
|
/* Set up DB driver */
|
|
$extra_install = $this->_setUpDBDriver( FALSE );
|
|
|
|
//-----------------------------------------
|
|
// Insert tasks
|
|
//-----------------------------------------
|
|
|
|
if ( $next['key'] )
|
|
{
|
|
$output[] = $next['title'] . ": Добавление модификаций";
|
|
$_PATH = IPSLib::getAppDir( $next['key'] ) . '/xml/';
|
|
|
|
if ( is_file( $_PATH . 'hooks.xml' ) )
|
|
{
|
|
//-----------------------------------------
|
|
// Adjust the table?
|
|
//-----------------------------------------
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'before_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->before_inserts_run( 'hooks' );
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Continue
|
|
//-----------------------------------------
|
|
|
|
require_once( IPS_ROOT_PATH . 'applications/core/modules_admin/applications/hooks.php' );/*noLibHook*/
|
|
$hooks = new admin_core_applications_hooks();
|
|
$hooks->makeRegistryShortcuts( $this->registry );
|
|
|
|
$result = $hooks->installAppHooks( $next['key'] );
|
|
|
|
$output[] = "Модификации " . $next['title'] . ": " . $result['inserted'] . " добавлено";
|
|
|
|
//-----------------------------------------
|
|
// Adjust the table?
|
|
//-----------------------------------------
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'after_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->after_inserts_run( 'hooks' );
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Done.. so get some more!
|
|
//-----------------------------------------
|
|
|
|
$this->_finishStep( $output, "Установка: Модификации", 'install&do=other&previous=' . $next['key'] );
|
|
}
|
|
else
|
|
{
|
|
require_once( IPS_KERNEL_PATH . 'classXML.php' );/*noLibHook*/
|
|
|
|
//-----------------------------------------
|
|
// ****** LOG IN MODULES
|
|
//-----------------------------------------
|
|
|
|
$output[] = "Добавление модулей авторизации";
|
|
$xml = new classXML( IPSSetUp::charSet );
|
|
|
|
//-----------------------------------------
|
|
// Adjust the table?
|
|
//-----------------------------------------
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'before_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->before_inserts_run( 'login' );
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Continue
|
|
//-----------------------------------------
|
|
|
|
$xml->load( IPS_ROOT_PATH . 'setup/xml/loginauth.xml' );
|
|
|
|
foreach( $xml->fetchElements( 'login_methods' ) as $xmlelement )
|
|
{
|
|
$data = $xml->fetchElementsFromRecord( $xmlelement );
|
|
|
|
unset( $data['login_id'] );
|
|
unset( $data['login_date'] );
|
|
|
|
$this->DB->insert( 'login_methods', $data );
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Adjust the table?
|
|
//-----------------------------------------
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'after_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->after_inserts_run( 'login' );
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// ****** USER AGENTS
|
|
//-----------------------------------------
|
|
|
|
$output[] = "Добавление user-agent`ов по-умолчанию";
|
|
$xml = new classXML( IPSSetUp::charSet );
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'before_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->before_inserts_run( 'useragents' );
|
|
}
|
|
|
|
require_once( IPS_ROOT_PATH . 'sources/classes/useragents/userAgentFunctions.php' );/*noLibHook*/
|
|
$userAgentFunctions = new userAgentFunctions( $this->registry );
|
|
|
|
$userAgentFunctions->rebuildMasterUserAgents();
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'after_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->after_inserts_run( 'useragents' );
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// ****** ATTACHMENTS
|
|
//-----------------------------------------
|
|
|
|
$output[] = "Добавление типов прикрепляемых файлов";
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'before_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->before_inserts_run( 'attachments' );
|
|
}
|
|
|
|
$xml = new classXML( IPSSetUp::charSet );
|
|
|
|
$xml->load( IPS_ROOT_PATH . 'setup/xml/attachments.xml' );
|
|
|
|
foreach( $xml->fetchElements( 'attachtype' ) as $xmlelement )
|
|
{
|
|
$data = $xml->fetchElementsFromRecord( $xmlelement );
|
|
|
|
unset( $data['atype_id'] );
|
|
|
|
$this->DB->insert( 'attachments_type', $data );
|
|
}
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'after_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->after_inserts_run( 'attachments' );
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Build Calendar RSS
|
|
//-----------------------------------------
|
|
|
|
if( IPSLib::appIsInstalled('calendar') )
|
|
{
|
|
require_once( IPSLib::getAppDir('calendar') . '/modules_admin/calendar/calendars.php' );/*noLibHook*/
|
|
$cal = new admin_calendar_calendar_calendars();
|
|
$cal->makeRegistryShortcuts( $this->registry );
|
|
|
|
$output[] = "Обновление RSS календаря";
|
|
$cal->calendarRSSCache();
|
|
}
|
|
|
|
/* If this is windows, change the locale for the language pack */
|
|
if( strpos( strtolower( PHP_OS ), 'win' ) === 0 )
|
|
{
|
|
$this->DB->update( 'core_sys_lang', array( 'lang_short' => 'Russian_Russia.65001' ), 'lang_id=1' );
|
|
}
|
|
else
|
|
{
|
|
$this->DB->update( 'core_sys_lang', array( 'lang_short' => 'ru_RU.UTF-8' ), 'lang_id=1' );
|
|
}
|
|
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Next...
|
|
//-----------------------------------------
|
|
|
|
$this->_finishStep( $output, "Установка: Другие данные", 'install&do=caches' );
|
|
}
|
|
|
|
/**
|
|
* Install Caches
|
|
*
|
|
* @return void
|
|
*/
|
|
public function install_caches()
|
|
{
|
|
//-----------------------------------------
|
|
// INIT
|
|
//-----------------------------------------
|
|
|
|
$this->settings['base_url'] = IPSSetUp::getSavedData('install_url');
|
|
|
|
$previous = $_REQUEST['previous'];
|
|
|
|
//-----------------------------------------
|
|
// Fetch next 'un
|
|
//-----------------------------------------
|
|
|
|
$next = IPSSetUp::fetchNextApplication( $previous, '', $this->settings['gb_char_set'] );
|
|
|
|
/* Set up DB driver */
|
|
$extra_install = $this->_setUpDBDriver( FALSE );
|
|
|
|
//-----------------------------------------
|
|
// Install SYSTEM Templates on first cycle
|
|
//-----------------------------------------
|
|
|
|
if( !$previous )
|
|
{
|
|
//-----------------------------------------
|
|
// Global caches...
|
|
//-----------------------------------------
|
|
|
|
# Grab cache master file
|
|
require_once( IPS_ROOT_PATH . 'extensions/coreVariables.php' );/*noLibHook*/
|
|
|
|
/* Add handle */
|
|
$_tmp = new coreVariables();
|
|
$_cache = $_tmp->fetchCaches();
|
|
$CACHE = $_cache['caches'];
|
|
|
|
//-----------------------------------------
|
|
// Adjust the table?
|
|
//-----------------------------------------
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'before_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->before_inserts_run( 'caches' );
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Continue
|
|
//-----------------------------------------
|
|
|
|
if ( is_array( $CACHE ) )
|
|
{
|
|
foreach( $CACHE as $cs_key => $cs_data )
|
|
{
|
|
$output[] = "Обновление {$cs_key}...";
|
|
|
|
ipsRegistry::cache()->rebuildCache( $cs_key, 'global' );
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------
|
|
// Systemvars
|
|
//-------------------------------------------------------------
|
|
|
|
$output[] = "Обновление кеша системных переменных";
|
|
|
|
$cache = array( 'mail_queue' => 0,
|
|
'task_next_run' => time() + 3600 );
|
|
|
|
ipsRegistry::cache()->setCache( 'systemvars', $cache, array( 'array' => 1 ) );
|
|
|
|
//-------------------------------------------------------------
|
|
// License Key
|
|
//-------------------------------------------------------------
|
|
|
|
if( ipsRegistry::$settings['ipb_reg_number'] )
|
|
{
|
|
$output[] = "Обновление информации о ключе лицензии...";
|
|
|
|
require_once( IPS_KERNEL_PATH . 'classFileManagement.php' );/*noLibHook*/
|
|
$this->classFileManagement = new classFileManagement();
|
|
|
|
/* Query the api */
|
|
$response = $this->classFileManagement->getFileContents( "http://myipb.in/license.php?lk=" . ipsRegistry::$settings['ipb_reg_number'] . "&url=" . ipsRegistry::$settings['board_url'] . "&flush=1" );
|
|
|
|
/* Get License Data */
|
|
$licenseData = json_decode( $response, true );
|
|
|
|
/* Copyright Removal? */
|
|
if ( $licenseData['cr'] )
|
|
{
|
|
IPSLib::updateSettings( array( 'ipb_copy_number' => $licenseData['cr'], 'ips_cp_purchase' => 1 ) );
|
|
}
|
|
elseif ( $this->settings['ips_cp_purchase'] )
|
|
{
|
|
IPSLib::updateSettings( array( 'ips_cp_purchase' => 0 ) );
|
|
}
|
|
|
|
/* Save to cache */
|
|
$licenseData['_cached_date'] = time();
|
|
$licenseData['key']['_expires'] = $licenseData['key']['_expires'] ? $licenseData['key']['_expires'] : 9999999999;
|
|
$licenseData['key']['expires'] = $licenseData['key']['expires'] ? $licenseData['key']['expires'] : 9999999999;
|
|
|
|
ipsRegistry::cache()->setCache( 'licenseData', $licenseData, array( 'array' => 1 ) );
|
|
}
|
|
|
|
//-------------------------------------------------------------
|
|
// Stats
|
|
//-------------------------------------------------------------
|
|
|
|
$output[] = "Обновление кеша статистики";
|
|
|
|
$cache = array( 'total_replies' => 0,
|
|
'total_topics' => 1,
|
|
'mem_count' => 1,
|
|
'last_mem_name' => IPSSetUp::getSavedData('admin_user'),
|
|
'last_mem_id' => 1 );
|
|
|
|
|
|
ipsRegistry::cache()->setCache( 'stats', $cache, array( 'array' => 1 ) );
|
|
|
|
//-----------------------------------------
|
|
// Adjust the table?
|
|
//-----------------------------------------
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'after_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->after_inserts_run( 'caches' );
|
|
}
|
|
|
|
$output[] = "Все кеши обновлены";
|
|
|
|
//-----------------------------------------
|
|
// Recache skins: Moved here so they are
|
|
// build after hooks are added
|
|
//-----------------------------------------
|
|
|
|
/* Load skin classes */
|
|
require_once( IPS_ROOT_PATH . 'sources/classes/skins/skinFunctions.php' );/*noLibHook*/
|
|
require_once( IPS_ROOT_PATH . 'sources/classes/skins/skinCaching.php' );/*noLibHook*/
|
|
require_once( IPS_ROOT_PATH . 'sources/classes/skins/skinImportExport.php' );/*noLibHook*/
|
|
|
|
$skinFunctions = new skinImportExport( $this->registry );
|
|
|
|
/* Grab skin data */
|
|
$this->DB->build( array( 'select' => '*',
|
|
'from' => 'skin_collections' ) );
|
|
|
|
$this->DB->execute();
|
|
|
|
while( $row = $this->DB->fetch() )
|
|
{
|
|
/* Bit of jiggery pokery... */
|
|
if ( $row['set_key'] == 'default' )
|
|
{
|
|
$row['set_key'] = 'root';
|
|
$row['set_id'] = 0;
|
|
}
|
|
|
|
$skinSets[ $row['set_key'] ] = $row;
|
|
}
|
|
|
|
foreach( $skinSets as $skinKey => $skinData )
|
|
{
|
|
/* Bit of jiggery pokery... */
|
|
if ( $skinData['set_key'] == 'root' )
|
|
{
|
|
$skinData['set_key'] = 'default';
|
|
$skinData['set_id'] = 1;
|
|
$skinKey = 'default';
|
|
}
|
|
|
|
$skinFunctions->rebuildPHPTemplates( $skinData['set_id'] );
|
|
|
|
if ( $skinFunctions->fetchErrorMessages() !== FALSE )
|
|
{
|
|
$this->registry->output->addWarning( implode( "<br />", $skinFunctions->fetchErrorMessages() ) );
|
|
}
|
|
|
|
$skinFunctions->rebuildCSS( $skinData['set_id'] );
|
|
|
|
if ( $skinFunctions->fetchErrorMessages() !== FALSE )
|
|
{
|
|
$this->registry->output->addWarning( implode( "<br />", $skinFunctions->fetchErrorMessages() ) );
|
|
}
|
|
|
|
$skinFunctions->rebuildReplacementsCache( $skinData['set_id'] );
|
|
|
|
if ( $skinFunctions->fetchErrorMessages() !== FALSE )
|
|
{
|
|
$this->registry->output->addWarning( implode( "<br />", $skinFunctions->fetchErrorMessages() ) );
|
|
}
|
|
}
|
|
|
|
$skinFunctions->rebuildSkinSetsCache();
|
|
|
|
$output[] = "Кеш стиля обновлен";
|
|
|
|
/* Rebuild FURL & GLOBAL caches */
|
|
try
|
|
{
|
|
IPSLib::cacheFurlTemplates();
|
|
IPSLib::cacheGlobalCaches();
|
|
}
|
|
catch( Exception $error )
|
|
{
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Now install other caches
|
|
//-----------------------------------------
|
|
|
|
if ( $next['key'] )
|
|
{
|
|
$_PATH = IPSLib::getAppDir( $next['key'] ) . '/extensions/';
|
|
|
|
if ( is_file( $_PATH . 'coreVariables.php' ) )
|
|
{
|
|
//-----------------------------------------
|
|
// Adjust the table?
|
|
//-----------------------------------------
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'before_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->before_inserts_run( 'caches' );
|
|
}
|
|
|
|
# Grab cache master file
|
|
require_once( $_PATH . 'coreVariables.php' );/*noLibHook*/
|
|
|
|
if ( is_array( $CACHE ) )
|
|
{
|
|
foreach( $CACHE as $cs_key => $cs_data )
|
|
{
|
|
$output[] = $next['title'] . ": Обновление {$cs_key}...";
|
|
|
|
ipsRegistry::cache()->rebuildCache( $cs_key, $next['key'] );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$output[] = $next['title'] . ": Нет кешей для обновления...";
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Adjust the table?
|
|
//-----------------------------------------
|
|
|
|
if ( $extra_install AND method_exists( $extra_install, 'after_inserts_run' ) )
|
|
{
|
|
$q = $extra_install->after_inserts_run( 'caches' );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$output[] = $next['title'] . ": Нет кешей для обновления...";
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Done.. so get some more!
|
|
//-----------------------------------------
|
|
|
|
$this->_finishStep( $output, "Установка: кеш", 'install&do=caches&previous=' . $next['key'] );
|
|
}
|
|
else
|
|
{
|
|
$this->_finishStep( $output, "Установка: кеш", 'done' );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Set up DB driver
|
|
*
|
|
* @access private
|
|
* @param bool Whether the DB driver returns with an error or not
|
|
* @return @e void
|
|
*/
|
|
private function _setUpDBDriver( $returnDie=TRUE )
|
|
{
|
|
$extra_install = '';
|
|
|
|
//--------------------------------------------------
|
|
// Any "extra" configs required for this driver?
|
|
//--------------------------------------------------
|
|
|
|
if ( is_file( IPS_ROOT_PATH .'setup/sql/' . strtolower( IPSSetUp::getSavedData('sql_driver') ) . '_install.php' ) )
|
|
{
|
|
require_once( IPS_ROOT_PATH .'setup/sql/' . strtolower( IPSSetUp::getSavedData('sql_driver') ) . '_install.php' );/*noLibHook*/
|
|
|
|
$extra_install = new install_extra( $this->registry );
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Set DB Handle
|
|
//-----------------------------------------
|
|
|
|
$this->registry->loadConfGlobal();
|
|
$this->registry->setDBHandle();
|
|
$this->DB = $this->registry->DB();
|
|
|
|
/* Return error? */
|
|
if ( $returnDie === TRUE )
|
|
{
|
|
$this->DB->return_die = 1;
|
|
}
|
|
|
|
return $extra_install;
|
|
}
|
|
|
|
/**
|
|
* Finish Step
|
|
* Configures the output engine
|
|
*
|
|
* @access private
|
|
* @param string output
|
|
* @param string title
|
|
* @param string next step
|
|
* @return @e void
|
|
*/
|
|
private function _finishStep( $output, $title, $nextStep )
|
|
{
|
|
if ( $this->_stepCount )
|
|
{
|
|
$this->registry->output->setInstallStep( $this->_stepCount, $this->_totalSteps );
|
|
}
|
|
|
|
$this->registry->output->setTitle( $title );
|
|
$this->registry->output->setNextAction( $nextStep );
|
|
$this->registry->output->setHideButton( TRUE );
|
|
$this->registry->output->addContent( $this->registry->output->template()->page_refresh( $output ) );
|
|
$this->registry->output->sendOutput();
|
|
}
|
|
} |