391 lines
11 KiB
PHP
391 lines
11 KiB
PHP
<?php
|
|
/**
|
|
* Invision Power Board
|
|
* Invision Installer Framework
|
|
*/
|
|
|
|
class application_installer extends class_installer
|
|
{
|
|
/**
|
|
* application_installer::set_requirements
|
|
*
|
|
* Sets the requirements for this app
|
|
*
|
|
*/
|
|
function set_requirements()
|
|
{
|
|
//-----------------------------------------
|
|
// INIT
|
|
//-----------------------------------------
|
|
|
|
$wfiles = array();
|
|
$wdirs = array( 0 => INS_ROOT_PATH . 'installfiles' );
|
|
|
|
//-----------------------------------------
|
|
// Basics
|
|
//-----------------------------------------
|
|
|
|
$this->version_php_min = '4.3.0';
|
|
$this->version_mysql_min = '4.0.0';
|
|
|
|
//-----------------------------------------
|
|
// Grab XML file and check
|
|
//-----------------------------------------
|
|
|
|
if ( file_exists( INS_ROOT_PATH . 'installfiles/writeablefiles.xml' ) )
|
|
{
|
|
$config = implode( '', file( INS_ROOT_PATH . 'installfiles/writeablefiles.xml' ) );
|
|
$xml = new class_xml();
|
|
|
|
$config = $xml->xml_parse_document( $config );
|
|
|
|
//-----------------------------------------
|
|
// Loop through and sort out settings...
|
|
//-----------------------------------------
|
|
|
|
foreach( $xml->xml_array['installdata']['file'] as $id => $entry )
|
|
{
|
|
if ( preg_match( "#\.\w{3,}$#si", $entry['path']['VALUE'] ) )
|
|
{
|
|
$wfiles[] = INS_DOC_ROOT_PATH . $entry['path']['VALUE'];
|
|
}
|
|
else
|
|
{
|
|
$wdirs[] = INS_DOC_ROOT_PATH . $entry['path']['VALUE'];
|
|
}
|
|
}
|
|
}
|
|
|
|
$this->set_writeable( $wdirs, $wfiles );
|
|
}
|
|
|
|
/**
|
|
* application_installer::write_configuration
|
|
*
|
|
* Writes the configuration files for this app
|
|
*
|
|
*/
|
|
function write_configuration()
|
|
{
|
|
//-----------------------------------------
|
|
// Safe mode?
|
|
//-----------------------------------------
|
|
|
|
$safe_mode = 0;
|
|
|
|
if ( @get_cfg_var('safe_mode') )
|
|
{
|
|
$safe_mode = @get_cfg_var('safe_mode');
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Set info array
|
|
//-----------------------------------------
|
|
|
|
$INFO = array(
|
|
'sql_driver' => $this->saved_data['sql_driver'],
|
|
'sql_host' => $this->saved_data['db_host'],
|
|
'sql_database' => $this->saved_data['db_name'],
|
|
'sql_user' => $this->saved_data['db_user'],
|
|
'sql_pass' => $this->saved_data['db_pass'],
|
|
'sql_tbl_prefix' => $this->saved_data['db_pre'],
|
|
'sql_debug' => 1,
|
|
|
|
'board_start' => time(),
|
|
'installed' => 1,
|
|
|
|
'php_ext' => 'php',
|
|
'safe_mode' => $safe_mode,
|
|
|
|
'board_url' => $this->saved_data['install_url'],
|
|
|
|
'banned_group' => '5',
|
|
'admin_group' => '4',
|
|
'guest_group' => '2',
|
|
'member_group' => '3',
|
|
'auth_group' => '1',
|
|
);
|
|
|
|
//-----------------------------------
|
|
// Any "extra" configs required for this driver?
|
|
//-----------------------------------
|
|
|
|
foreach( $this->saved_data as $k => $v )
|
|
{
|
|
if ( preg_match( "#^__sql__#", $k ) )
|
|
{
|
|
$k = str_replace( "__sql__", "", $k );
|
|
|
|
$INFO[ $k ] = $v;
|
|
}
|
|
}
|
|
|
|
//-----------------------------------
|
|
// Write to disk
|
|
//-----------------------------------
|
|
|
|
$core_conf = "<"."?php\n";
|
|
|
|
foreach( $INFO as $k => $v )
|
|
{
|
|
$core_conf .= '$INFO['."'".$k."'".']'."\t\t\t=\t'".$v."';\n";
|
|
}
|
|
|
|
$core_conf .= "\n".'?'.'>';
|
|
|
|
/* Write Configuration Files */
|
|
$output[] = 'Ñîõðàíåíèå êîíôèãóðàöèîííûõ ôàéëîâ...<br />';
|
|
|
|
$this->write_file( $this->saved_data['install_dir'] . '/conf_global.php' , $core_conf );
|
|
}
|
|
|
|
|
|
/**
|
|
* application_installer::create_admin_account
|
|
*
|
|
* Creates the local app admin entry
|
|
*
|
|
*/
|
|
function create_admin_account()
|
|
{
|
|
/* Create Converge Entry */
|
|
$converge_id = $this->create_admin_converge();
|
|
|
|
//-----------------------------------
|
|
// Members...
|
|
//-----------------------------------
|
|
|
|
$member_record = array( 'id' => $converge_id,
|
|
'name' => $this->saved_data['admin_user'],
|
|
'members_l_display_name' => strtolower( $this->saved_data['admin_user'] ),
|
|
'members_l_username' => strtolower( $this->saved_data['admin_user'] ),
|
|
'members_display_name' => $this->saved_data['admin_user'],
|
|
'mgroup' => 4,
|
|
'email' => $this->saved_data['admin_email'],
|
|
'joined' => time(),
|
|
'ip_address' => $this->ipsclass->my_getenv('REMOTE_ADDR'),
|
|
'posts' => 1,
|
|
'title' => 'Àäìèíèñòðàòîð',
|
|
'last_visit' => time(),
|
|
'last_activity' => time(),
|
|
'member_login_key' => md5( uniqid( microtime) ),
|
|
);
|
|
|
|
$this->ipsclass->DB->do_insert( 'members', $member_record );
|
|
|
|
//-----------------------------------
|
|
// Member Extra...
|
|
//-----------------------------------
|
|
|
|
$member_extra_record = array ( 'id' => 1,
|
|
'signature' => '',
|
|
'vdirs' => '',
|
|
);
|
|
|
|
$this->ipsclass->DB->do_insert( 'member_extra', $member_extra_record );
|
|
}
|
|
|
|
/**
|
|
* application_installer::cache_and_cleanup
|
|
*
|
|
* Final install step, allows for any remaining app specific functions
|
|
*
|
|
*/
|
|
function cache_and_cleanup()
|
|
{
|
|
//-----------------------------------
|
|
// Get ACP library
|
|
//-----------------------------------
|
|
|
|
if( !defined("CACHE_PATH") )
|
|
{
|
|
define( 'CACHE_PATH', INS_ROOT_PATH."../" );
|
|
}
|
|
|
|
$output[] = "Ñîçäàíèå êåøà øàáëîíîâ...";
|
|
|
|
require_once( INS_DOC_ROOT_PATH.'sources/lib/admin_cache_functions.php' );
|
|
$acp = new admin_cache_functions();
|
|
$acp->ipsclass =& $this->ipsclass;
|
|
$acp->_rebuild_all_caches( array(2) );
|
|
unset( $acp );
|
|
|
|
//-------------------------------------------------------------
|
|
// Forum cache
|
|
//-------------------------------------------------------------
|
|
|
|
$output[] = "Ñîçäàíèå êåøà ôîðóìîâ...";
|
|
|
|
$ignore_me = array( 'redirect_url', 'redirect_loc', 'rules_text', 'permission_custom_error', 'notify_modq_emails' );
|
|
|
|
if ( $this->ipsclass->vars['forum_cache_minimum'] )
|
|
{
|
|
$ignore_me[] = 'description';
|
|
$ignore_me[] = 'rules_title';
|
|
}
|
|
|
|
$this->ipsclass->cache['forum_cache'] = array();
|
|
|
|
$this->ipsclass->DB->simple_construct( array( 'select' => '*',
|
|
'from' => 'forums',
|
|
'order' => 'parent_id, position'
|
|
) );
|
|
$this->ipsclass->DB->simple_exec();
|
|
|
|
while( $f = $this->ipsclass->DB->fetch_row() )
|
|
{
|
|
$fr = array();
|
|
|
|
$perms = unserialize(stripslashes($f['permission_array']));
|
|
|
|
//-----------------------------------------
|
|
// Stuff we don't need...
|
|
//-----------------------------------------
|
|
|
|
foreach( $f as $k => $v )
|
|
{
|
|
if ( in_array( $k, $ignore_me ) )
|
|
{
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
if ( $v != "" )
|
|
{
|
|
$fr[ $k ] = $v;
|
|
}
|
|
}
|
|
}
|
|
|
|
$fr['read_perms'] = $perms['read_perms'];
|
|
$fr['reply_perms'] = $perms['reply_perms'];
|
|
$fr['start_perms'] = $perms['start_perms'];
|
|
$fr['upload_perms'] = $perms['upload_perms'];
|
|
$fr['show_perms'] = $perms['show_perms'];
|
|
|
|
unset($fr['permission_array']);
|
|
|
|
$this->ipsclass->cache['forum_cache'][ $fr['id'] ] = $fr;
|
|
}
|
|
|
|
$this->ipsclass->update_cache( array( 'name' => 'forum_cache', 'array' => 1, 'deletefirst' => 1, 'donow' => 1 ) );
|
|
|
|
//-------------------------------------------------------------
|
|
// Group Cache
|
|
//-------------------------------------------------------------
|
|
|
|
$output[] = "Ñîçäàíèå êåøà ãðóïï...";
|
|
|
|
require_once( INS_DOC_ROOT_PATH.'sources/action_admin/groups.php' );
|
|
$lib = new ad_groups();
|
|
$lib->ipsclass =& $this->ipsclass;
|
|
$lib->rebuild_group_cache();
|
|
unset( $lib );
|
|
|
|
//-------------------------------------------------------------
|
|
// Systemvars
|
|
//-------------------------------------------------------------
|
|
|
|
$output[] = "Ñîçäàíèå êåøà ñèñòåìíûõ ïåðåìåííûõ...";
|
|
|
|
$this->ipsclass->cache['systemvars'] = array();
|
|
|
|
$result = $this->ipsclass->DB->simple_exec_query( array( 'select' => 'count(*) as cnt', 'from' => 'mail_queue' ) );
|
|
|
|
$this->ipsclass->cache['systemvars']['mail_queue'] = intval( $result['cnt'] );
|
|
$this->ipsclass->cache['systemvars']['task_next_run'] = time() + 3600;
|
|
|
|
$this->ipsclass->update_cache( array( 'name' => 'systemvars', 'array' => 1, 'deletefirst' => 1 ) );
|
|
|
|
//-------------------------------------------------------------
|
|
// Stats
|
|
//-------------------------------------------------------------
|
|
|
|
$output[] = "Ñîçäàíèå êåøà ñòàòèñòèêè...";
|
|
|
|
$this->ipsclass->cache['stats'] = array();
|
|
|
|
$this->ipsclass->cache['stats']['total_replies'] = 0;
|
|
$this->ipsclass->cache['stats']['total_topics'] = 1;
|
|
$this->ipsclass->cache['stats']['mem_count'] = 1;
|
|
|
|
$r = $this->ipsclass->DB->simple_exec_query( array( 'select' => 'id, name',
|
|
'from' => 'members',
|
|
'order' => 'id DESC',
|
|
'limit' => '0,1'
|
|
) );
|
|
|
|
$this->ipsclass->cache['stats']['last_mem_name'] = $r['name'];
|
|
$this->ipsclass->cache['stats']['last_mem_id'] = $r['id'];
|
|
|
|
$this->ipsclass->update_cache( array( 'name' => 'stats', 'array' => 1, 'deletefirst' => 1 ) );
|
|
|
|
//-------------------------------------------------------------
|
|
// Ranks
|
|
//-------------------------------------------------------------
|
|
|
|
$output[] = "Ñîçäàíèå êåøà çâàíèé ïîëüçîâàòåëåé...";
|
|
|
|
require_once( INS_DOC_ROOT_PATH.'sources/action_admin/member.php' );
|
|
$lib = new ad_member();
|
|
$lib->ipsclass =& $this->ipsclass;
|
|
$lib->titles_recache();
|
|
unset( $lib );
|
|
|
|
//-------------------------------------------------------------
|
|
// SETTINGS
|
|
//-------------------------------------------------------------
|
|
|
|
$output[] = "Ñîçäàíèå êåøà íàñòðîåê ôîðóìà...";
|
|
|
|
require_once( INS_DOC_ROOT_PATH.'sources/action_admin/settings.php' );
|
|
$lib = new ad_settings();
|
|
$lib->ipsclass =& $this->ipsclass;
|
|
$lib->setting_rebuildcache();
|
|
unset( $lib );
|
|
|
|
//-------------------------------------------------------------
|
|
// EMOTICONS
|
|
//-------------------------------------------------------------
|
|
|
|
$output[] = "Ñîçäàíèå êåøà ñìàéëèêîâ...";
|
|
|
|
require_once( INS_DOC_ROOT_PATH.'sources/action_admin/emoticons.php' );
|
|
$lib = new ad_emoticons();
|
|
$lib->ipsclass =& $this->ipsclass;
|
|
$lib->emoticon_rebuildcache();
|
|
unset( $lib );
|
|
|
|
//-------------------------------------------------------------
|
|
// LANGUAGES
|
|
//-------------------------------------------------------------
|
|
|
|
$output[] = "Ñîçäàíèå ÿçûêîâîãî êåøà...";
|
|
|
|
require_once( INS_DOC_ROOT_PATH.'sources/action_admin/languages.php' );
|
|
$lib = new ad_languages();
|
|
$lib->ipsclass =& $this->ipsclass;
|
|
$lib->rebuild_cache();
|
|
unset( $lib );
|
|
|
|
//-------------------------------------------------------------
|
|
// ATTACHMENT TYPES
|
|
//-------------------------------------------------------------
|
|
|
|
$output[] = "Ñîçäàíèå êåøà òèïîâ ôàéëîâ...";
|
|
|
|
require_once( INS_DOC_ROOT_PATH.'sources/action_admin/attachments.php' );
|
|
$lib = new ad_attachments();
|
|
$lib->ipsclass =& $this->ipsclass;
|
|
$lib->attach_type_rebuildcache();
|
|
unset( $lib );
|
|
|
|
$output[] = "Êåø-ñèñòåìà èíèöèàëèçèðîâàíà, íàæìèòå 'Äàëüøå' äëÿ ïðîäîëæåíèÿ...";
|
|
|
|
$this->saved_data['admin_url'] = $this->saved_data['install_url'] . '/index.php';
|
|
|
|
return $output;
|
|
}
|
|
}
|
|
|
|
?>
|