Вход Регистрация
Файл: admin/applications/core/setup/versions/upg_22005/version_upgrade.php
Строк: 142
<?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
+---------------------------------------------------------------------------
*/

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
     */
    
private $_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();
        
        
/* Set DB driver to return any errors */
        
$this->DB->return_die 1;
        
        
//--------------------------------
        // 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 
'forums':
                
$this->update_forums();
                break;
            case 
'finish':
                
$this->finish_up();
                break;
            case 
'skin':
                
$this->add_skin();
                break;
            case 
'update_template_bits':
                
$this->update_template_bits();
                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_22005/' strtolower$this->registry->dbFunctions()->getDriverType() ) . $file;
        
$prefix  $this->registry->dbFunctions()->getPrefix();
        
        if ( 
is_file$path ) )
        {
            require_once( 
$path );/*noLibHook*/
        
            
$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 );
                
                if( 
$this->settings['mysql_tbl_type'] )
                {
                    if( 
preg_match"/^create table(.+?)/i"$query ) )
                    {
                        
$query preg_replace"/^(.+?));$/is""\1) ENGINE={$this->settings['mysql_tbl_type']};"$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
                {            
                    
$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'] = 'forums';    
        }
        
        if ( 
IPSSetUp::getSavedData('man') AND $output )
        {
            
/* Create source file */
            
if ( $this->registry->dbFunctions()->getDriverType() == 'mysql' )
            {
                
$sourceFile IPSSetUp::createSqlSourceFile$output'22005'$id );
            }
            
            
$this->_output $this->registry->output->template()->upgrade_manual_queries$output$sourceFile );
        }
    }    
    
    
    
/*-------------------------------------------------------------------------*/
    // Update forums
    /*-------------------------------------------------------------------------*/
    
    
function update_forums()
    {
        
//-----------------------------------------
        // Update latest news...
        //-----------------------------------------
    
        
$this->DB->update"forums""newest_title=last_title, newest_id=last_id"'last_title IS NOT NULL AND last_id IS NOT NULL'falsetrue );
        
$this->DB->execute();
        
        
//-----------------------------------------
        // INIT
        //-----------------------------------------
        
        
$ignore_me = array( 'redirect_url''redirect_loc''rules_text''permission_custom_error''notify_modq_emails' );
        
        if ( !empty(
$this->settings['forum_cache_minimum']) )
        {
            
$ignore_me[] = 'description';
            
$ignore_me[] = 'rules_title';
        }
        
        
$this->caches['forum_cache'] = array();
            
        
$this->DB->build( array( 'select' => '*',
                                                      
'from'   => 'forums',
                                                      
'order'  => 'parent_id, position'
                                               
)      );
        
$o $this->DB->execute();
        
        while( 
$f $this->DB->fetch$o ) )
        {
            
$fr = array();
            
            
$perms unserialize(stripslashes($f['permission_array']));
            
            
//-----------------------------------------
            // Stuff we don't need...
            //-----------------------------------------
            
            
if ( $f['parent_id'] == -)
            {
                
$fr['id']                    = $f['id'];
                
$fr['sub_can_post']         = $f['sub_can_post'];
                
$fr['name']                 = $f['name'];
                
$fr['parent_id']            = $f['parent_id'];
                
$fr['show_perms']            = $perms['show_perms'];
                
$fr['skin_id']                = $f['skin_id'];
                
$fr['permission_showtopic'] = $f['permission_showtopic'];
            }
            else
            {
                foreach( 
$f as $k => $v )
                {
                    if ( 
in_array$k$ignore_me ) )
                    {
                        continue;
                    }
                    else
                    {
                        if ( 
$v != "" )
                        {
                            
$fr$k ] = $v;
                        }
                    }
                }
                
                
$fr['read_perms']       = isset($perms['read_perms'])         ? $perms['read_perms']         : '';
                
$fr['reply_perms']      = isset($perms['reply_perms'])         ? $perms['reply_perms']     : '';
                
$fr['start_perms']      = isset($perms['start_perms'])         ? $perms['start_perms']     : '';
                
$fr['upload_perms']     = isset($perms['upload_perms'])     ? $perms['upload_perms']     : '';
                
$fr['download_perms']     = $perms['upload_perms'];
                
$fr['show_perms']       = isset($perms['show_perms'])         ? $perms['show_perms']         : '';
                
                unset(
$fr['permission_array']);
            }
            
            
$this->caches['forum_cache'][ $fr['id'] ] = $fr;
            
            
$perm_array addslashes(serialize(array(
                                                       
'start_perms'    => $fr['start_perms'],
                                                       
'reply_perms'    => $fr['reply_perms'],
                                                       
'read_perms'     => $fr['read_perms'],
                                                       
'upload_perms'   => $fr['upload_perms'],
                                                       
'download_perms' => $fr['download_perms'],
                                                       
'show_perms'     => $fr['show_perms']
                                     )          )     );
                                     
            
//-----------------------------------------
            // Add to save array
            //-----------------------------------------
            
            
$this->DB->update'forums', array( 'permission_array' => $perm_array ), 'id='.$fr['id'] );
            
        }
        
        
$this->cache->setCache'forum_cache'$this->caches['forum_cache'], array( 'array' => ) );
        
        
$this->registry->output->addMessage("Права доступа обновлены, переходим к конвертации HTML логики в шаблонах...");
        
$this->request['workact']     = 'update_template_bits';
    }
    
    
/*-------------------------------------------------------------------------*/
    // Update template bits
    /*-------------------------------------------------------------------------*/
    
    
function update_template_bits()
    {
        
$this->registry->output->addMessage("Шаблоны пропущены, завершаем обновление...");
        
$this->request['workact']     = 'finish';    
        return 
FALSE;                        
    }

    
/*-------------------------------------------------------------------------*/
    // Update forums
    /*-------------------------------------------------------------------------*/
    
    
function finish_up()
    {
        
//-----------------------------------------
        // Has gallery?
        //-----------------------------------------
        
        
$this->DB->return_die 1;
        
$this->DB->error         '';
        
        
$table 'members';
        
        if ( ! 
$this->DB->checkForField'has_gallery'$table ) )
        {
            
$this->DB->addField'members''has_gallery''INT(1)''0' );
            
            if ( 
$this->DB->error )
            {
                
$this->registry->output->addError"ALTER TABLE {$this->DB->obj['sql_tbl_prefix']}members ADD has_gallery INT(1) default 0<br /><br />".$this->DB->error );
            }
        }
        
        if( 
$this->settings['conv_configured'] != OR $this->settings['conv_chosen'] == "" )
        {
            if( 
$this->DB->checkForField"legacy_password""members" ) )
            {
                
$this->DB->dropField'members''legacy_password' );
                
                if ( 
$this->DB->error )
                {
                    
$this->registry->output->addError"ALTER TABLE {$this->DB->obj['sql_tbl_prefix']}members DROP legacy_password<br /><br />".$this->DB->error );
                }
            }
        }
        
        
$test $this->DB->buildAndFetch( array( 'select'     => 'count(*) as numrows',
                                                                    
'from'    => 'cache_store',
                                                                    
'where'    => "cs_key='calendars'"
                                                        
)        );

        if ( ! 
$test['numrows'] )
        {
            
$this->DB->insert'cache_store', array( 'cs_key' => 'calendars' ) );
        }
        
        
$this->registry->output->addMessage("Очистка завершена,  переходим к созданию нового IPB 2.2.0 стиля...");
        
$this->request['workact']     = 'skin';
    }
    
    
/*-------------------------------------------------------------------------*/
    // Add new skin
    /*-------------------------------------------------------------------------*/
    
    
function add_skin()
    {
        
$this->registry->output->addMessage("Добавление стиля 2.2.0 пропущено...");
        unset(
$this->request['workact']);
        
        return 
TRUE;    
    }
    
}
Онлайн: 1
Реклама