Files
2025-12-19 00:26:08 -08:00

391 lines
11 KiB
PHP

<?php
/**
* Invision Power Board
* Invision Installer Framework
*/
class application_installer extends class_installer
{
var $versions = array();
var $db_contents = array();
var $dir_contents = array();
var $error = array();
var $current_version = '';
var $last_poss_id = '';
/**
* application_installer::set_requirements
*
* Sets the requirements for this app
*
*/
function pre_process()
{
if ( isset( $this->ipsclass->input['p'] ) && $this->ipsclass->input['p'] != 'overview' )
{
$this->ipsclass->member = $this->get_member();
if ( ! $this->ipsclass->member['id'] )
{
$this->template->page_current = 'login';
$this->template->message = "You do not have access to this tool.";
}
if ( $this->ipsclass->return_md5_check() != $this->saved_data['securekey'] )
{
$this->template->page_current = 'login';
$this->template->message = "You do not have access to this tool.";
}
if ( ! $this->ipsclass->member['g_access_cp'] )
{
$this->template->page_current = 'login';
$this->template->message = "You must be an admin to access this upgrade script.";
}
if( $this->ipsclass->DB->field_exists( 'converge_id', 'members_converge' ) )
{
if( !isset($this->saved_data['vid']) OR !($this->saved_data['vid'] < 10003) )
{
$this->ipsclass->converge->converge_load_member( $this->ipsclass->member['email'] );
}
}
}
}
/*-------------------------------------------------------------------------*/
// Get the current version and the next version to upgrade to..
/*-------------------------------------------------------------------------*/
function get_version_latest()
{
$this->current_version = '';
$this->current_upgrade = '';
$this->db_contents = $this->get_db_structure();
$this->dir_contents = $this->get_dir_structure();
//--------------------------------
// Get latest ID...
//--------------------------------
//$dir_versions = array_reverse($this->dir_contents);
//$this->last_poss_id = array_shift( $dir_versions );
//--------------------------------
// Get datafile
//--------------------------------
if ( file_exists( ROOT_PATH.'resources/version_history.php' ) )
{
require_once( ROOT_PATH.'resources/version_history.php' );
$this->versions = $import_versions;
}
//------------------------------------------
// Copy & pop DB array and get next
// upgrade script
//------------------------------------------
$tmp = $this->db_contents;
$this->current_version = array_pop( $tmp );
if ( ! $this->current_version )
{
if ( $this->saved_data['vid'] )
{
$this->current_version = intval($this->saved_data['vid']);
}
else if ( $this->ipsclass->DB->field_exists( 'sub_id', 'subscriptions' ) )
{
$this->current_version = '10003';
}
else if ( $this->ipsclass->DB->field_exists( 'perm_id', 'forum_perms' ) )
{
$this->current_version = '10002';
}
else
{
$this->current_version = '10001';
}
}
//------------------------------------------
// Get the next upgrade script
//------------------------------------------
ksort( $this->versions );
foreach( $this->versions as $i => $a )
{
if ( $this->current_version == '00000' )
{
if ( $i > $this->current_upgrade )
{
$this->current_upgrade = $i;
$this->modules_to_run[0] = $this->versions[ $i ];
}
}
elseif ( $i > $this->current_version )
{
if ( ! $this->current_upgrade )
{
$this->current_upgrade = $i;
}
$this->modules_to_run[] = $this->versions[ $i ];
}
$this->last_poss_id = $i;
}
}
/*-------------------------------------------------------------------------*/
// GET INFO FROM THE DERTABASTIC
/*-------------------------------------------------------------------------*/
function get_db_structure()
{
$vers = array();
if ( $this->ipsclass->DB->field_exists ( "upgrade_id", "upgrade_history" ) )
{
$this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'upgrade_history', 'order' => 'upgrade_version_id ASC' ) );
$this->ipsclass->DB->simple_exec();
while( $r = $this->ipsclass->DB->fetch_row() )
{
$vers[ $r['upgrade_version_id'] ] = $r['upgrade_version_id'];
}
}
return $vers;
}
/*-------------------------------------------------------------------------*/
// Get dir structure..
/*-------------------------------------------------------------------------*/
function get_dir_structure()
{
$return = array();
//------------------------------------------
// Get the folder names
//------------------------------------------
$dh = opendir( INS_ROOT_PATH.'installfiles' );
while ( false !== ( $file = readdir( $dh ) ) )
{
if ( is_dir( INS_ROOT_PATH.'installfiles/'.$file ) )
{
if ( $file != "." && $file != ".." )
{
if ( strstr( $file, 'upg_' ) )
{
$tmp = str_replace( "upg_", "", $file );
$return[ $tmp ] = $tmp;
}
}
}
}
closedir( $dh );
sort($return);
return $return;
}
/**
* application_installer::cache_and_cleanup
*
* Final install step, allows for any remaining app specific functions
*
*/
function cache_and_cleanup()
{
//-------------------------------------------------------------
// BBCODE
//-------------------------------------------------------------
$output[] = "Rebuilding bbcode cache...";
$this->ipsclass->cache['bbcode'] = array();
$this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'custom_bbcode' ) );
$bbcode = $this->ipsclass->DB->simple_exec();
while ( $r = $this->ipsclass->DB->fetch_row($bbcode) )
{
$this->ipsclass->cache['bbcode'][] = $r;
}
$this->ipsclass->update_cache( array( 'name' => 'bbcode', 'array' => 1, 'deletefirst' => 1 ) );
//-------------------------------------------------------------
// Forum cache
//-------------------------------------------------------------
$output[] = "Rebuilding forum cache...";
$this->ipsclass->update_forum_cache();
//-------------------------------------------------------------
// Group Cache
//-------------------------------------------------------------
$output[] = "Rebuilding group cache...";
$this->ipsclass->cache['group_cache'] = array();
$this->ipsclass->DB->simple_construct( array( 'select' => "*",
'from' => 'groups'
) );
$this->ipsclass->DB->simple_exec();
while ( $i = $this->ipsclass->DB->fetch_row() )
{
$this->ipsclass->cache['group_cache'][ $i['g_id'] ] = $i;
}
$this->ipsclass->update_cache( array( 'name' => 'group_cache', 'array' => 1, 'deletefirst' => 1 ) );
//-------------------------------------------------------------
// Systemvars
//-------------------------------------------------------------
$output[] = "Rebuilding system cache...";
$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 ) );
//-----------------------------------------
// Moderators
//-----------------------------------------
$output[] = "Rebuilding moderator cache...";
$this->ipsclass->cache['moderators'] = array();
require_once( ROOT_PATH.'sources/action_admin/moderator.php' );
$mod = new ad_moderator();
$mod->ipsclass =& $this->ipsclass;
$mod->rebuild_moderator_cache();
//-----------------------------------------
// Cal events / Birthdays
//-----------------------------------------
$output[] = "Rebuilding calendar events/birthdays cache...";
require_once( ROOT_PATH . 'sources/action_admin/calendars.php' );
$calendars = new ad_calendars();
$calendars->ipsclass =& $this->ipsclass;
$calendars->calendar_rebuildcache( 0 );
$calendars->calendars_rebuildcache( 0 );
//-------------------------------------------------------------
// Ranks
//-------------------------------------------------------------
$output[] = "Rebuilding ranks cache...";
$this->ipsclass->cache['ranks'] = array();
$this->ipsclass->DB->simple_construct( array( 'select' => 'id, title, pips, posts',
'from' => 'titles',
'order' => "posts DESC",
) );
$this->ipsclass->DB->simple_exec();
while ($i = $this->ipsclass->DB->fetch_row())
{
$this->ipsclass->cache['ranks'][ $i['id'] ] = array(
'TITLE' => $i['title'],
'PIPS' => $i['pips'],
'POSTS' => $i['posts'],
);
}
$this->ipsclass->update_cache( array( 'name' => 'ranks', 'array' => 1, 'deletefirst' => 1 ) );
//-------------------------------------------------------------
// SETTINGS
//-------------------------------------------------------------
$output[] = "Rebuilding settings cache...";
require_once( ROOT_PATH . 'sources/action_admin/settings.php' );
$settings = new ad_settings();
$settings->ipsclass =& $this->ipsclass;
$settings->setting_rebuildcache();
//-------------------------------------------------------------
// EMOTICONS
//-------------------------------------------------------------
$output[] = "Rebuilding emoticons cache...";
require_once( ROOT_PATH . 'sources/action_admin/emoticons.php' );
$emoticons = new ad_emoticons();
$emoticons->ipsclass =& $this->ipsclass;
$emoticons->emoticon_rebuildcache();
//-------------------------------------------------------------
// LANGUAGES
//-------------------------------------------------------------
$output[] = "Rebuilding languages cache...";
$this->ipsclass->cache['languages'] = array();
$this->ipsclass->DB->simple_construct( array( 'select' => 'ldir,lname', 'from' => 'languages' ) );
$this->ipsclass->DB->simple_exec();
while ( $r = $this->ipsclass->DB->fetch_row() )
{
$this->ipsclass->cache['languages'][] = $r;
}
$this->ipsclass->update_cache( array( 'name' => 'languages', 'array' => 1, 'deletefirst' => 1 ) );
//-------------------------------------------------------------
// ATTACHMENT TYPES
//-------------------------------------------------------------
$output[] = "Rebuilding attachment types cache...";
$this->ipsclass->cache['attachtypes'] = array();
$this->ipsclass->DB->simple_construct( array( 'select' => 'atype_extension,atype_mimetype,atype_post,atype_photo,atype_img', 'from' => 'attachments_type', 'where' => "atype_photo=1 OR atype_post=1" ) );
$this->ipsclass->DB->simple_exec();
while ( $r = $this->ipsclass->DB->fetch_row() )
{
$this->ipsclass->cache['attachtypes'][ $r['atype_extension'] ] = $r;
}
$this->ipsclass->update_cache( array( 'name' => 'attachtypes', 'array' => 1, 'deletefirst' => 1 ) );
return $output;
}
}
?>