Вход Регистрация
Файл: 331_archive_update_php.php
Строк: 130
<?php

/*
+---------------------------------------------------------------------------
|   IP.Board v3.3.3
|   ========================================
|   by Matthew Mecham
|   (c) 2008 Invision Power Services
|   http://www.invisionpower.com
|   ========================================
+---------------------------------------------------------------------------
|   Invision Power Board IS NOT FREE SOFTWARE!
+---------------------------------------------------------------------------
|   http://www.invisionpower.com/
|   > $Id: 10039 2011-12-20 19:49:28Z mmecham $
|   > $Revision: 10039 $
|   > $Date: 2011-12-20 14:49:28 -0500 (Tue, 20 Dec 2011) $
+---------------------------------------------------------------------------
*/
@set_time_limit3600 );

/**
* Main public executable wrapper.
*
* Set-up and load module to run
*
* @package    IP.Board
* @author   Matt Mecham
* @version    3.0
*/

if ( is_file'./initdata.php' ) )
{
    require_once( 
'./initdata.php' );/*noLibHook*/
}
elseif ( 
is_file'../initdata.php' ) )
{
    require_once( 
'../initdata.php' );/*noLibHook*/
}
else
{
    require_once( 
'initdata.php' );/*noLibHook*/
}

require_once( 
IPS_ROOT_PATH 'sources/base/ipsRegistry.php' );/*noLibHook*/

$reg ipsRegistry::instance();
$reg->init();

$moo = new moo$reg );

class 
moo
{
    private 
$processed 0;
    private 
$parser;
    private 
$oldparser;
    private 
$start     0;
    private 
$end       0;
    
    const 
TOPICS_PER_GO 100;
    
    function 
__constructipsRegistry $registry )
    {
        
$this->registry   =  $registry;
        
$this->DB         =  $this->registry->DB();
        
$this->settings   =& $this->registry->fetchSettings();
        
$this->request    =& $this->registry->fetchRequest();
        
$this->cache      =  $this->registry->cache();
        
$this->caches     =& $this->registry->cache()->fetchCaches();
        
$this->memberData = array();

        
/* Do we have a remote DB? */
        
if ( $this->settings['archive_remote_sql_database'] && $this->settings['archive_remote_sql_user'] )
        {
            if ( ! 
is_object$this->registry->dbFunctions()->getDB('remoteArchive') ) )
            {
                
$this->registry->dbFunctions()->setDB'mysql''remoteArchive', array(  'sql_database'            => $this->settings['archive_remote_sql_database'],
                                                                                         
'sql_user'                => $this->settings['archive_remote_sql_user'],
                                                                                         
'sql_pass'                => $this->settings['archive_remote_sql_pass'],
                                                                                         
'sql_host'                => $this->settings['archive_remote_sql_host'],
                                                                                         
'sql_charset'            => $this->settings['archive_remote_sql_charset'],
                                                                                         
'sql_tbl_prefix'       => $this->settings['sql_tbl_prefix'],
                                                                                         
'catchConnectionError' => true ) );
                
                
                
$this->remoteDB $this->registry->dbFunctions()->getDB('remoteArchive');
                
                
/* Check for connection issue */
                
if ( $this->remoteDB->error )
                {
                    
$this->connectError $this->remoteDB->error;
                    
$this->remoteDB     null;
                    
                    
$this->registry->dbFunctions()->unsetDB('remoteArchive');
                }
            }
            else
            {
                
$this->remoteDB $this->registry->dbFunctions()->getDB('remoteArchive');
                
                
/* Check for connection issue */
                
if ( $this->remoteDB->error )
                {
                    
$this->connectError $this->remoteDB->error;
                    
$this->remoteDB     null;
                    
                    
$this->registry->dbFunctions()->unsetDB('remoteArchive');
                }
            }
        }
        else
        {
            
$this->remoteDB $this->DB;
        }
        
        switch( 
$this->request['do'] )
        {
            case 
'process':
                
$this->process();
            break;
            default:
                
$this->splash();
            break;
        }
    }
    
    function 
show$content$url='' )
    {
        if ( 
$url )
        {
            
$firstBit 'http://' $_SERVER['SERVER_NAME'] . $_SERVER['PHP_SELF'];
            
$refresh "<meta http-equiv='refresh' content='0; url={$firstBit}?{$url}'>";
        }
        
        if ( 
is_array$content ) )
        {
            
$content implode"<br />"$content );
        }
        
        
$html = <<<EOF
        <html>
            <head>
                <title>Archive Update</title>
                
$refresh
            </head>
            <body>
                
$content
            </body>
        </html>            
EOF;

        print 
$html; exit();
    }
    
    
/**
     * SPLASH
     */
    
function splash()
    {
        
$txt '';
        
        if ( ! 
$this->remoteDB->checkForField'archive_forum_id''forums_archive_posts' ) ) 
        {
            
$PRE trim(ipsRegistry::dbFunctions()->getPrefix());
            
            
$this->remoteDB->query('ALTER TABLE ' $PRE 'forums_archive_posts ADD archive_forum_id INT(10) NOT NULL DEFAULT 0;');
            
            
$txt "Adding archive_forum_id field to your database - Done<br />";
        }
        
        
$html = <<<EOF
        <strong>Archive Update for IP.Board 3.3.1</strong>
        <br />
{$txt}
        <a href="?do=process">Continue</a>
EOF;
    
        
$this->show$html );
    }
    
    
/**
     * Process
     */
    
function process()
    {
        
$id         intval$this->request['id'] );
        
$lastId     0;
        
$done          intval$this->request['done'] );
        
$cycleDone  0;
        
$content    = array();
        
        
        
/* skipping? */
        
$total $this->remoteDB->buildAndFetch( array( 'select' => 'count(*) as count',
                                                          
'from'   => 'forums_archive_posts' ) );
        
        
/* Fetch batch */
        
$this->remoteDB->build( array( 'select' => '*',
                                       
'from'   => 'forums_archive_posts',
                                       
'where'  => 'archive_topic_id > ' $id,
                                       
'limit'  => array( 0self::TOPICS_PER_GO ),
                                       
'order'  => 'archive_topic_id ASC' )  );
    
                                
        
$o $this->remoteDB->execute();
        
        while( 
$row $this->remoteDB->fetch$o ) )
        {
            
$cycleDone++;
            
$lastId $row['archive_topic_id'];
            
            
$content[] = "Updating topics " . ( $done $cycleDone ) . " (archive_topic_id: " $row['archive_topic_id'] . ") of " $total['count'];
            
            
/* Fetch the forum ID */
            
$topic $this->DB->buildAndFetch( array( 'select' => 'forum_id',
                                                       
'from'   => 'topics',
                                                      
'where'  => 'tid=' intval$row['archive_topic_id'] ) ) );
                                                      
            if ( 
$topic['forum_id'] )
            {
                
$this->remoteDB->update'forums_archive_posts', array( 'archive_forum_id' => $topic['forum_id'] ), 'archive_topic_id=' $row['archive_topic_id'] );
            }
        }
        
        
/* More? */
        
if ( $cycleDone )
        {
            
/* Reset */
            
$done += $cycleDone;
            
            
$this->show$content"do=process&id=" $lastId "&done=" $done );
        }
        else
        {
            
$this->show"Process complete" );
            return;
        }
    }
}

?>
Онлайн: 2
Реклама