Вход Регистрация
Файл: admin/applications/core/setup/versions/upg_33000/version_upgrade.php
Строк: 232
<?php
/**
 *
 * @class    version_upgrade
 * @brief    3.2.0 Alpha 1 Upgrade Logic
 *
 */
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();
        
        
//--------------------------------
        // What are we doing?
        //--------------------------------

        
switch( $this->request['workact'] )
        {
            case 
'sql':
            case 
'sql1':
            default:
                
$this->upgradeSql(1);
                break;
            case 
'sql2':
                
$this->upgradeSql(2);
                break;
            case 
'logs':
                
$this->convertLogs();
                break;
            case 
'frules':
                
$this->fixForumRules();
            break;
            case 
'ban':
                
$this->banUpdate();
            break;
            case 
'posts':
                
$this->updatePostsTable();
            break;
            case 
'groups':
                
$this->fixGroups();
            break;
        }
        
        
/* Workact is set in the function, so if it has not been set, then we're done. The last function should unset it. */
        
if ( $this->request['workact'] )
        {
            return 
false;
        }
        else
        {
            return 
true;
        }
    }
    
    
/**
     * Run SQL files
     * 
     * @param    int
     * @return    @e void
     */
    
public function upgradeSql$id=)
    {
        
$cnt        0;
        
$file        '_updates_'.$id.'.php';
        
$output        "";
        
$path        IPSLib::getAppDir'core' ) . '/setup/versions/upg_33000/' strtolower$this->registry->dbFunctions()->getDriverType() ) . $file;
        
$prefix        $this->registry->dbFunctions()->getPrefix();
        
$sourceFile    '';
        
$options    IPSSetUp::getSavedData('custom_options');
        
        if ( 
is_file$path ) )
        {
            
$SQL        = array();
            
            require( 
$path );/*noLibHook*/
            
            /* Set DB driver to return any errors */
            
$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') OR ( $id == AND $postTable ) )
                {
                    
$query trim$query );
                    
                    
/* Ensure the last character is a semi-colon */
                    
if ( substr$query, -) != ';' )
                    {
                        
$query .= ';';
                    }
                    
                    
$output .= $query "nn";
                }
                else
                {            
                    
$this->DB->query$query );
                    
                    if ( 
$this->DB->error )
                    {
                        
$this->registry->output->addError"<br />" $query "<br />" $this->DB->error );
                    }
                    else
                    {
                        
$cnt++;
                    }
                }
            }
        
            
$this->registry->output->addMessage("{$cnt} запросов выполнено... ");
        }
        
        
/* Next Page */
        
if ( $id )
        {
            
$nextid $id 1;
            
$this->request['workact'] = 'sql' $nextid;    
        }
        else
        {
            
$this->request['workact'] = 'logs';    
        }
        
        if ( 
$output )
        {
            
/* Create source file */
            
if ( $this->registry->dbFunctions()->getDriverType() == 'mysql' )
            {
                
$sourceFile IPSSetUp::createSqlSourceFile$output'33000'$id );
            }
            
            
$this->_output $this->registry->output->template()->upgrade_manual_queries$output$sourceFile );
        }
    }    
    
    
/**
     * Execute selected method
     *
     * @param    object        Registry object
     * @return    @e void
     */
    
public function convertLogs() 
    {
        
/* Init */
        
$pergo        100;
        
$start        intval$this->request['st'] );
                        
        
/* Get them */
        
$total ipsRegistry::DB()->buildAndFetch( array( 'select' => 'count(*) as count''from' => 'warn_logs''where' => "wlog_type<>'pos'" ) );
        
ipsRegistry::DB()->build( array(
            
'select'    => '*',
            
'from'        => 'warn_logs',
            
'where'        => "wlog_type<>'pos'",
            
'order'        => 'wlog_id ASC',
            
'limit'        => array( $start$pergo )
            ) );
        
$e ipsRegistry::DB()->execute();
        
        
/* Are you leeeeeeeeaving? */
        
if ( !ipsRegistry::DB()->getTotalRows$e ) )
        {
            
// We probably should delete the old warn_logs table here, but I'm not going to in case any bugs come up with this converter
            
$this->request['workact'] = 'frules';
            return 
true;
        }
        
        
/* Nope, let's do some converting! */
        
while ( $row ipsRegistry::DB()->fetch$e ) )
        {
            
//-----------------------------------------
            // Get the PM / EMail we sent to the member
            // This will  now be our "note for member"
            //-----------------------------------------
        
            
preg_match"#<content>(.+?)</content>#is"$row['wlog_contact_content'], $content );
            
$noteForMember $content[1];
            
            
//-----------------------------------------
            // Work out what punishment we gave
            //-----------------------------------------
            
            
$noteForMods    '';
            
$mq                0;
            
$mqUnit            '';
            
$rpa            0;
            
$rpaUnit        '';
            
$suspend        0;
            
$suspendUnit    '';
                    
            
$unserialized unserialize$row['wlog_notes'] );
            
            
/* Old style */
            
if ( $unserialized == FALSE )
            {
                
preg_match"#<content>(.+?)</content>#is"$row['wlog_notes'], $content );
                
$noteForMods $content[1];
                
                foreach ( array( 
'mod' => 'mq''post' => 'rpa''susp' => 'suspend' ) as $k => $v )
                {
                    
$data = array();
                    
preg_match"#<{$k}>(.+?)</{$k}>#is"$row['wlog_notes'], $data );
                    if ( 
$data[1] )
                    {
                        
$data explode','$data[1] );
                                                
                        if ( 
$data[2] == || $data[0] > 999999 )
                        {
                            $
$v = -1;
                        }
                        else
                        {
                            $
$v $data[0];
                            
$unitVar "{$v}Unit";
                            $
$unitVar $data[1];
                        }
                    }
                }
                
            }
            
            
/* New style */
            
else
            {
                
$noteForMods    $unserialized['content'];
                
                foreach ( array( 
'mod' => 'mq''post' => 'rpa''susp' => 'suspend' ) as $k => $v )
                {
                    if ( 
$unserialized$k '_indef' ] == || $unserialized$k ] > 999999 )
                    {
                        $
$v = -1;
                    }
                    else
                    {
                        $
$v $unserialized$k ];
                        
$unitVar "{$v}Unit";
                        $
$unitVar $unserialized$k '_unit' ];
                    }
                }
            }
            
            
//-----------------------------------------
            // Save
            //-----------------------------------------
        
            
ipsRegistry::DB()->insert'members_warn_logs', array(
                
'wl_member'            => $row['wlog_mid'],
                
'wl_moderator'        => $row['wlog_addedby'],
                
'wl_date'            => $row['wlog_date'],
                
'wl_reason'            => 0,
                
'wl_points'            => ( $row['wlog_type'] == 'neg' ) ? 0,
                
'wl_note_member'    => $noteForMember,
                
'wl_note_mods'        => $noteForMods,
                
'wl_mq'                => intval$mq ),
                
'wl_mq_unit'        => $mqUnit,
                
'wl_rpa'            => intval$rpa ),
                
'wl_rpa_unit'        => $rpaUnit,
                
'wl_suspend'        => intval$suspend ),
                
'wl_suspend_unit'    => $suspendUnit,
                
'wl_ban_group'        => 0,
                
'wl_expire'            => 0,
                
'wl_expire_unit'    => '',
                
'wl_acknowledged'    => 1,
                
'wl_content_app'    => '',
                
'wl_content_id1'    => '',
                
'wl_content_id2'    => ''
                
) );
        }
        
        
/* Next! */
        
$percent round( ( 100 $total['count'] ) * $start );
        
$this->request['st'] = $start $pergo;
        
$this->registry->output->addMessage"Обновление записей... ( {$percent}% готово )" );
        
        
$this->request['workact'] = 'logs';
    }
    
    
/**
     * Execute selected method
     *
     * @param    object        Registry object
     * @return    @e void
     */
    
public function fixForumRules() 
    {
        
$this->DB->build( array( 'select' => '*',
                                 
'from'   => 'forums',
                                 
'where'  => "rules_text LIKE '%&%'" ) );
                                 
        
$o $this->DB->execute();
        
        while( 
$row $this->DB->fetch$o ) )
        {
            
$this->DB->update'forums', array( 'rules_text' => IPSText::UNhtmlspecialchars$row['rules_text'] ) ), 'id=' $row['id'] );
        }
        
        
$this->registry->output->addMessage"Правила форумов обновлены" );
        
        
$this->request['workact'] = 'groups';
    }
    
    
/**
     * Execute selected method
     *
     * @param    object        Registry object
     * @return    @e void
     */
    
public function fixGroups() 
    {
        
$this->DB->build( array( 'select' => '*',
                                 
'from'   => 'groups' ) );
                                 
        
$o $this->DB->execute();
        
        while( 
$row $this->DB->fetch$o ) )
        {
            
$row['gbw_view_last_info']    = 1;
            
$row['gbw_view_online_lists'] = 1;
            
$row['gbw_hide_leaders_page'] = 0;
            
            
$g_bitoptions IPSBWOPtions::freeze$row'groups''global' );
            
            
$this->DB->update'groups', array( 'g_bitoptions' => $g_bitoptions ), 'g_id=' $row['g_id'] );
        }
        
        
$this->registry->output->addMessage"Groups updated" );
        
        
$this->request['workact'] = 'posts';
    }
    
    
/**
     * Fix posts table
     * 
     * @param    int
     * @return    @e void
     */
    
public function updatePostsTable()
    {
        
$doManual    $options['core'][33000]['manualPostsTableQuery'];
        
$prefix        $this->registry->dbFunctions()->getPrefix();
        
$output     '';
        
        if ( 
$doManual && ! $this->DB->checkForField'post_field_int''posts' ) )
        {
            foreach( array( 
'ALTER TABLE posts ADD post_field_int INT(10) DEFAULT 0',
                            
'ALTER TABLE posts ADD post_field_t1 TEXT NULL DEFAULT NULL',
                            
'ALTER TABLE posts ADD post_field_t2 TEXT NULL DEFAULT NULL' ) as $query )
            {
                
$query trim$query );
                
                
/* Need to tack on a prefix? */
                
if ( $prefix )
                {
                    
$query IPSSetUp::addPrefixToQuery$query$prefix );
                }
                            
                
/* Ensure the last character is a semi-colon */
                
if ( substr$query, -) != ';' )
                {
                    
$query .= ';';
                }
                
                
$output .= $query "nn";
            }
        }
        else
        {
            if ( ! 
$this->DB->checkForField'post_field_int''posts' ) )
            {
                
$this->DB->addField'posts''post_field_int''INT(10)''0' );
            }
            
            if ( !
$this->DB->checkForField'post_field_t1''posts' ) )
            {
                
$this->DB->addField'posts''post_field_t1''TEXT' );
            }
            
            if ( !
$this->DB->checkForField'post_field_t2''posts' ) )
            {
                
$this->DB->addField'posts''post_field_t2''TEXT' );
            }
        }
        
        if ( 
$output )
        {
            
/* Create source file */
            
if ( $this->registry->dbFunctions()->getDriverType() == 'mysql' )
            {
                
$sourceFile IPSSetUp::createSqlSourceFile$output'33000''posts' );
            }
            
            
$this->_output $this->registry->output->template()->upgrade_manual_queries$output$sourceFile );
        }
        
        
$this->registry->output->addMessage"Таблица сообщений обновлена" );
        
$this->request['workact'] = 'ban';
    }
    
    
/**
     * Execute selected method
     *
     * @param    object        Registry object
     * @return    @e void
     */
    
public function banUpdate() 
    {
        
$options    IPSSetUp::getSavedData('custom_options');
        
$flagBanned    $options['core'][33000]['flagBanned'];
        
        if ( 
$flagBanned )
        {
            if ( ! empty( 
ipsRegistry::$settings['banned_group'] ) )
            {
                
$this->DB->update'members', array( 'member_banned' => ), "member_group_id=" intvalipsRegistry::$settings['banned_group'] ) );
            }
        }
            
        
$this->registry->output->addMessage"Заблокированные пользователи перенесены" );
        
        
$this->request['workact'] = '';
    }
    
    
}
Онлайн: 1
Реклама