Вход Регистрация
Файл: admin/applications/core/setup/versions/upg_21003/version_upgrade.php
Строк: 233
<?php

/*
+--------------------------------------------------------------------------
|   IP.Board v3.3.3
|   ========================================
|   by Matthew Mecham
|   (c) 2001 - 2004 Invision Power Services
|   http://www.invisionpower.com
|   ========================================
|   Web: http://www.invisionboard.com
|   Email: matt@invisionpower.com
|   Licence Info: http://www.invisionboard.com/?license
+---------------------------------------------------------------------------
|
|   > IPB UPGRADE MODULE:: IPB 2.0.2 -> IPB 2.0.3
|   > 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>Incorrect access</h1>You cannot access this file directly. If you have recently upgraded, make sure you upgraded all the relevant files.";
    exit();
}

class 
version_upgrade
{
    
/**
     * Custom HTML to show
     *
     * @var        string
     */
    
protected $_output '';
    
    
/**
     * fetchs output
     * 
     * @return    string
     */
    
public function fetchOutput()
    {
        return 
$this->_output;
    }
        
    
/**
     * Execute selected method
     *
     * @param    object        Registry object
     * @return    @e void
     */
    
public function doExecuteipsRegistry $registry 
    {
        
/* Make object */
        
$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();
        
        
//--------------------------------
        // What are we doing?
        //--------------------------------

        
switch( $this->request['workact'] )
        {
            case 
'sql':
                
$this->upgrade_sql(1);
                break;
            case 
'sql1':
                
$this->upgrade_sql(1);
                break;
            case 
'sql2':
                
$this->upgrade_sql(2);
                break;
            case 
'sql3':
                
$this->upgrade_sql(3);
                break;
            case 
'sql4':
                
$this->upgrade_sql(4);
                break;
            case 
'polls':
                
$this->convert_polls();
                break;
            case 
'calevents':
                
$this->convert_calevents();
                break;
            case 
'skin':
                
$this->add_skin();
                break;                
            
            default:
                
$this->upgrade_sql(1);
                break;
        }
        
        if ( 
$this->request['workact'] )
        {
            return 
false;
        }
        else
        {
            return 
true;
        }
    }
    
    
    
/*-------------------------------------------------------------------------*/
    // SQL: 0
    /*-------------------------------------------------------------------------*/
    
    
function upgrade_sql$id=)
    {
        
$man     0// Manual upgrade ? intval( $this->request['man'] );
        
$cnt     0;
        
$SQL     = array();
        
$file    '_updates_'.$id.'.php';
        
$output  "";
        
$path    IPSLib::getAppDir'core' ) . '/setup/versions/upg_21003/' strtolower$this->registry->dbFunctions()->getDriverType() ) . $file;
        
$prefix  $this->registry->dbFunctions()->getPrefix();
    
        if ( 
is_file$path ) )
        {
            require( 
$path );/*noLibHook*/
        
            
$this->error   = array();
            
$this->sqlcount         0;
            
$output                    "";
            
            
$this->DB->return_die 1;
            
            foreach( 
$SQL as $query )
            {
                
$this->DB->allow_sub_select     1;
                
$this->DB->error                '';
                
                
$query str_replace"<%time%>"time(), $query );
                            
                
/* Need to tack on a prefix? */
                
if ( $prefix )
                {
                    
$query IPSSetUp::addPrefixToQuery$query$prefix );
                }
                
                if ( 
IPSSetUp::getSavedData('man') )
                {
                    
$output .= preg_replace"/s{1,}/"" "$query ) . "nn";
                }
                else
                {
                    if( ! 
$query )
                    {
                        continue;
                    }
    
                    
$this->DB->query$query );

                    if ( 
$this->DB->error )
                    {
                        
$this->registry->output->addError$query."<br /><br />".$this->DB->error );
                    }
                    else
                    {
                        
$this->sqlcount++;
                    }
                }
            }
        
            
$this->registry->output->addMessage("{$this->sqlcount} запросов выполнено....");
        }
        
        
//--------------------------------
        // Next page...
        //--------------------------------
        
        
$this->request['st'] = 0;
        
        if ( 
$id != )
        {
            
$nextid $id 1;
            
$this->request['workact'] = 'sql'.$nextid;    
        }
        else
        {
            
$this->request['workact'] = 'polls';    
        }
        
        if ( 
IPSSetUp::getSavedData('man') AND $output )
        {
            
/* Create source file */
            
if ( $this->registry->dbFunctions()->getDriverType() == 'mysql' )
            {
                
$sourceFile IPSSetUp::createSqlSourceFile$output'21003'$id );
            }
            
            
$this->_output $this->registry->output->template()->upgrade_manual_queries$output$sourceFile );
        }    
    }    
    
    
    
/*-------------------------------------------------------------------------*/
    // POLLS
    /*-------------------------------------------------------------------------*/
    
    
function convert_polls()
    {
        
$start     intval($this->request['st']) > intval($this->request['st']) : 0;
        
$lend      50;
        
$end       $start $lend;
        
$max       intval(IPSSetUp::getSavedData('max'));
        
$converted intval(IPSSetUp::getSavedData('conv'));
        
        
//-----------------------------------------
        // First off.. grab number of polls to convert
        //-----------------------------------------
        
        
if ( ! $max )
        {
            
$total $this->DB->buildAndFetch( array( 'select' => 'COUNT(*) as max',
                                                                       
'from'   => 'topics',
                                                                       
'where'  => "poll_state IN ('open', 'close', 'closed')" ) );
                                                                       
            
$max   $total['max'];
        }
        
        
//-----------------------------------------
        // In steps...
        //-----------------------------------------
        
        
$this->DB->build( array( 'select' => '*',
                                                      
'from'   => 'topics',
                                                      
'where'  => "poll_state IN ('open', 'close', 'closed' )",
                                                      
'limit'  => array( 0$lend ) ) );
        
$o $this->DB->execute();
    
        
//-----------------------------------------
        // Do it...
        //-----------------------------------------
        
        
if ( $this->DB->getTotalRows($o) )
        {
            
//-----------------------------------------
            // Got some to convert!
            //-----------------------------------------
            
            
while ( $r $this->DB->fetch($o) )
            {
                
$converted++;
                
                
//-----------------------------------------
                // All done?
                //-----------------------------------------
                
                
if ( $converted >= $max )
                {
                    
$done 1;
                }                
                
                
$new_poll  = array( => array() );
                
                
$poll_data $this->DB->buildAndFetch( array( 'select' => '*',
                                                                               
'from'   => 'polls',
                                                                               
'where'  => "tid=".$r['tid']
                                                                      )      );
                if ( ! 
$poll_data['pid'] )
                {
                    continue;
                }
                
                if ( ! 
$poll_data['poll_question'] )
                {
                    
$poll_data['poll_question'] = $r['title'];
                }
                
                
//-----------------------------------------
                // Kick start new poll
                //-----------------------------------------
                
                
$new_poll[1]['question'] = $poll_data['poll_question'];
        
                
//-----------------------------------------
                // Get OLD polls
                //-----------------------------------------
                
                
$poll_answers unserializestripslashes$poll_data['choices'] ) );
            
                
reset($poll_answers);
                
                foreach ( 
$poll_answers as $entry )
                {
                    
$id     $entry[0];
                    
$choice $entry[1];
                    
$votes  $entry[2];
                    
                    
$total_votes += $votes;
                    
                    if ( 
strlen($choice) < )
                    {
                        continue;
                    }
                    
                    
$new_poll]['choice'][ $id ] = $choice;
                    
$new_poll]['votes'][ $id  ] = $votes;
                }
                
                
//-----------------------------------------
                // Got something?
                //-----------------------------------------
                
                
if ( count$new_poll[1]['choice'] ) )
                {
                    
$this->DB->update'polls' , array( 'choices'    => serialize$new_poll ) ), 'tid='.$r['tid'] );
                    
$this->DB->update'topics', array( 'poll_state' => ), 'tid='.$r['tid'] );
                }
            }
        }
        else
        {
            
$done 1;
        }
        
        
        if ( ! 
$done )
        {
            
$this->registry->output->addMessage("Опрос: $start по $end сконвертированы....");
            
$this->request['workact']     = 'polls';    
            
$this->request['st']         = $end;
            
IPSSetUp::setSavedData('max'$max);
            
IPSSetUp::setSavedData('conv'$converted);
            return 
FALSE;            
        }
        else
        {
            
$this->registry->output->addMessage("Опросы сконвертированы, переходим к событиям календаря...");
            
$this->request['workact']     = 'calevents';    
            
$this->request['st']         = '0';    
            return 
FALSE;                        
        }
    }
    
    
    
/*-------------------------------------------------------------------------*/
    // CALENDAR EVENTS
    /*-------------------------------------------------------------------------*/
    
    
function convert_calevents()
    {
        
$start     intval($this->request['st']) > intval($this->request['st']) : 0;
        
$lend      50;
        
$end       $start $lend;
    
        
//-----------------------------------------
        // In steps...
        //-----------------------------------------
        
        
$this->DB->build( array( 'select' => '*',
                                                      
'from'   => 'calendar_events',
                                                      
'limit'  => array( $start$lend ) ) );
        
$o $this->DB->execute();
    
        
//-----------------------------------------
        // Do it...
        //-----------------------------------------
        
        
if ( $this->DB->getTotalRows($o) )
        {
            
//-----------------------------------------
            // Got some to convert!
            //-----------------------------------------
            
            
while ( $r $this->DB->fetch($o) )
            {
                
$recur_remap = array( 'w' => 1,
                                      
'm' => 2,
                                      
'y' => );
                
                
$begin_date        IPSTime::date_getgmdate$r['unix_stamp']     );
                
$end_date          IPSTime::date_getgmdate$r['end_unix_stamp'] );
                
                if ( ! 
$begin_date OR ! $end_date )
                {
                    continue;
                }
                
                
$day               $begin_date['mday'];
                
$month             $begin_date['mon'];
                
$year              $begin_date['year'];
                
                
$end_day           $end_date['mday'];
                
$end_month         $end_date['mon'];
                
$end_year          $end_date['year'];
        
                
$_final_unix_from  gmmktime(000$month$day$year );
                
                
//-----------------------------------------
                // Recur or ranged...
                //-----------------------------------------
                
                
if ( $r['event_repeat'] OR $r['event_ranged'] )
                {
                    
$_final_unix_to gmmktime(115959$end_month$end_day$end_year);
                }
                else
                {
                    
$_final_unix_to 0;
                }
                
                
$new_event = array( 'event_calendar_id' => 1,
                                    
'event_member_id'   => $r['userid'],
                                    
'event_content'     => $r['event_text'],
                                    
'event_title'       => $r['title'],
                                    
'event_smilies'     => $r['show_emoticons'],
                                    
'event_perms'       => $r['read_perms'],
                                    
'event_private'     => $r['priv_event'],
                                    
'event_approved'    => 1,
                                    
'event_unixstamp'   => $r['unix_stamp'],
                                    
'event_recurring'   => ( $r['event_repeat'] && $recur_remap$r['repeat_unit'] ] ) ? $recur_remap$r['repeat_unit'] ] : 0,
                                    
'event_tz'          => 0,
                                    
'event_unix_from'   => $_final_unix_from,
                                    
'event_unix_to'     => $_final_unix_to );
                
                
//-----------------------------------------
                // INSERT
                //-----------------------------------------
                
                
$this->DB->insert'cal_events'$new_event );
            }
            
            
$this->registry->output->addMessage("События календаря: $start по $end сконвертированы....");
            
$this->request['workact']     = 'calevents';    
            
$this->request['st']         = $end;
            return 
FALSE;        
        }
        else
        {
            
$this->registry->output->addMessage("События календаря сконвертированы,  переходим к созданию стиля IPB 2.1...");
            
$this->request['workact']     = 'skin';    
            return 
FALSE;        
        }
    }
        
        
    
    
/*-------------------------------------------------------------------------*/
    // CALENDAR EVENTS
    /*-------------------------------------------------------------------------*/
    
    
function add_skin()
    {
        
$this->registry->output->addMessage("Пропускаем создание стиля 2.1...");
        unset(
$this->request['workact']);
        return 
TRUE;
    }
}
Онлайн: 1
Реклама