Вход Регистрация
Файл: library/XenForo/Install/Upgrade/1030010-130a.php
Строк: 306
<?php

class XenForo_Install_Upgrade_1030010 extends XenForo_Install_Upgrade_Abstract
{
    public function 
getVersionName()
    {
        return 
'1.3.0 Alpha';
    }

    public function 
step1()
    {
        
$tables XenForo_Install_Data_MySql::getTables();

        
$this->executeUpgradeQuery($tables['xf_image_proxy']);
        
$this->executeUpgradeQuery($tables['xf_link_proxy']);
        
$this->executeUpgradeQuery($tables['xf_smilie_category']);
        
$this->executeUpgradeQuery($tables['xf_bb_code']);
        
$this->executeUpgradeQuery($tables['xf_user_change_log']);
        
$this->executeUpgradeQuery($tables['xf_user_change_temp']);
        
$this->executeUpgradeQuery($tables['xf_spam_trigger_log']);

        
// the table storage is different - just replace it
        
$this->executeUpgradeQuery("DROP TABLE xf_registration_spam_cache");
        
$this->executeUpgradeQuery($tables['xf_registration_spam_cache']);

        
$this->executeUpgradeQuery("
            ALTER TABLE xf_user
                CHANGE user_state user_state ENUM('valid', 'email_confirm', 'email_confirm_edit', 'moderated', 'email_bounce') NOT NULL DEFAULT 'valid'
        "
);

        
$this->executeUpgradeQuery("
            ALTER TABLE xf_user_field ADD moderator_editable TINYINT UNSIGNED NOT NULL DEFAULT '0'
        "
);

        
$this->executeUpgradeQuery("
            ALTER TABLE xf_phrase CHANGE title title VARBINARY(100) NOT NULL
        "
);

        
$this->executeUpgradeQuery("
            ALTER TABLE xf_session_activity
                DROP INDEX view_date,
                ADD INDEX view_date (view_date) USING BTREE
        "
);

        
// smilie table enhancements
        
$this->executeUpgradeQuery("
            ALTER TABLE xf_smilie
              ADD smilie_category_id INT UNSIGNED NOT NULL DEFAULT 0,
              ADD display_order INT UNSIGNED NOT NULL DEFAULT 1,
              ADD display_in_editor TINYINT UNSIGNED NOT NULL DEFAULT 1,
              ADD INDEX display_order (display_order)
        "
);
        
$this->executeUpgradeQuery("UPDATE xf_smilie SET display_order = smilie_id");

        
$this->applyGlobalPermission('profilePost''comment''profilePost''post'false);
        
$this->applyGlobalPermission('conversation''receive''conversation''start'false);
        
$this->executeUpgradeQuery("
            INSERT IGNORE INTO xf_permission_entry
                (user_group_id, user_id, permission_group_id, permission_id, permission_value, permission_value_int)
            VALUES
                (2, 0, 'conversation', 'receive', 'allow', 0)
        "
);

        
$this->executeUpgradeQuery("
            INSERT IGNORE INTO xf_content_type_field
                (content_type, field_name, field_value)
            VALUES
                ('user', 'report_handler_class', 'XenForo_ReportHandler_User')
        "
);

        return 
true;
    }

    public function 
step2()
    {
        
$this->executeUpgradeQuery("
            ALTER TABLE xf_session_activity
                CHANGE unique_key unique_key_old INT UNSIGNED NOT NULL,
                ADD unique_key VARBINARY(16) NOT NULL,
                CHANGE ip ip_old INT UNSIGNED NOT NULL DEFAULT 0,
                ADD ip VARBINARY(16) NOT NULL DEFAULT ''
        "
);
        
$this->executeUpgradeQuery("
            UPDATE IGNORE xf_session_activity SET
                unique_key = IF(user_id, user_id, UNHEX(LPAD(HEX(ip_old), 8, '0'))),
                ip = UNHEX(LPAD(HEX(ip_old), 8, '0'))
        "
);
        
$this->executeUpgradeQuery("
            ALTER IGNORE TABLE xf_session_activity
                DROP PRIMARY KEY,
                ADD PRIMARY KEY (user_id, unique_key),
                DROP unique_key_old,
                DROP ip_old
        "
);
    }

    public function 
step3()
    {
        
$this->executeUpgradeQuery("
            ALTER TABLE xf_admin_log
                CHANGE ip_address ip_address_old INT UNSIGNED NOT NULL DEFAULT 0,
                ADD ip_address VARBINARY(16) NOT NULL DEFAULT ''
        "
);
        
$this->executeUpgradeQuery("
            UPDATE xf_admin_log SET ip_address = UNHEX(LPAD(HEX(ip_address_old), 8, '0'))
        "
);
        
$this->executeUpgradeQuery("
            ALTER TABLE xf_admin_log DROP ip_address_old
        "
);
    }

    public function 
step4()
    {
        
$this->executeUpgradeQuery("
            ALTER TABLE xf_moderator_log
                CHANGE ip_address ip_address_old INT UNSIGNED NOT NULL DEFAULT 0,
                ADD ip_address VARBINARY(16) NOT NULL DEFAULT ''
        "
);
        
$this->executeUpgradeQuery("
            UPDATE xf_moderator_log SET ip_address = UNHEX(LPAD(HEX(ip_address_old), 8, '0'))
        "
);
        
$this->executeUpgradeQuery("
            ALTER TABLE xf_moderator_log DROP ip_address_old
        "
);
    }

    public function 
step5()
    {
        
$this->executeUpgradeQuery("
            ALTER TABLE xf_error_log
                CHANGE ip_address ip_address_old INT UNSIGNED NOT NULL DEFAULT 0,
                ADD ip_address VARBINARY(16) NOT NULL DEFAULT ''
        "
);
        
$this->executeUpgradeQuery("
            UPDATE xf_error_log SET ip_address = UNHEX(LPAD(HEX(ip_address_old), 8, '0'))
        "
);
        
$this->executeUpgradeQuery("
            ALTER TABLE xf_error_log DROP ip_address_old
        "
);
    }

    public function 
step6()
    {
        
$this->executeUpgradeQuery("
            ALTER TABLE xf_login_attempt
                CHANGE ip_address ip_address_old INT UNSIGNED NOT NULL,
                ADD ip_address VARBINARY(16) NOT NULL
        "
);
        
$this->executeUpgradeQuery("
            UPDATE xf_login_attempt SET ip_address = UNHEX(LPAD(HEX(ip_address_old), 8, '0'))
        "
);
        
$this->executeUpgradeQuery("
            ALTER TABLE xf_login_attempt
                DROP ip_address_old,
                ADD attempt_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
                DROP KEY login_check,
                ADD KEY login_check (login, ip_address, attempt_date)
        "
);
    }

    public function 
step7()
    {
        
$this->executeUpgradeQuery("
            ALTER TABLE xf_ip_match
                CHANGE ip ip VARCHAR(43) NOT NULL,
                ADD first_byte BINARY(1) NOT NULL,
                CHANGE start_range start_range_old INT UNSIGNED NOT NULL,
                ADD start_range VARBINARY(16) NOT NULL,
                CHANGE end_range end_range_old INT UNSIGNED NOT NULL,
                ADD end_range VARBINARY(16) NOT NULL
        "
);
        
$this->executeUpgradeQuery("
            UPDATE xf_ip_match SET
                first_byte = UNHEX(LPAD(HEX(first_octet), 2, '0')),
                start_range = UNHEX(LPAD(HEX(start_range_old), 8, '0')),
                end_range = UNHEX(LPAD(HEX(end_range_old), 8, '0'))
        "
);
        
$this->executeUpgradeQuery("
            ALTER TABLE xf_ip_match
                DROP first_octet,
                DROP start_range_old,
                DROP end_range_old,
                DROP KEY start_range,
                ADD KEY start_range (start_range)
        "
);

        try
        {
            
XenForo_Model::create('XenForo_Model_Banning')->rebuildBannedIpCache();
            
XenForo_Model::create('XenForo_Model_Banning')->rebuildDiscouragedIpCache();
        }
        catch (
Exception $e) {}
    }

    public function 
step8()
    {
        
$this->executeUpgradeQuery("
            ALTER TABLE xf_ip
                CHANGE ip ip_old INT UNSIGNED NOT NULL,
                ADD ip VARBINARY(16) NOT NULL
        "
);
    }

    public function 
step9()
    {
        
$this->executeUpgradeQuery("
            UPDATE xf_ip SET ip = UNHEX(LPAD(HEX(ip_old), 8, '0'))
        "
);
    }

    public function 
step10()
    {
        
$this->executeUpgradeQuery("
            ALTER TABLE xf_ip
                DROP ip_old,
                DROP KEY ip_log_date,
                ADD KEY ip_log_date (ip, log_date)
        "
);
    }

    public function 
step11()
    {
        
$this->executeUpgradeQuery("
            ALTER TABLE `xf_warning_action`
                CHANGE `action` `action` VARBINARY( 25 ) NOT NULL ,
                CHANGE `ban_length_type` `action_length_type` VARBINARY( 25 ) NOT NULL ,
                CHANGE `ban_length` `action_length` SMALLINT( 5 ) UNSIGNED NOT NULL
        "
);
        
$this->executeUpgradeQuery("
            ALTER TABLE  `xf_warning_action_trigger` CHANGE  `action`  `action` VARBINARY( 25 ) NOT NULL
        "
);
    }

    public function 
step12()
    {
        
$this->executeUpgradeQuery("
            UPDATE xf_warning_action_trigger
            SET action = 'ban'
            WHERE action = 'ban_points'
        "
);
        
$this->executeUpgradeQuery("
            INSERT IGNORE INTO xf_user_change_temp
                (user_id, change_key, action_type, action_modifier, new_value, old_value, create_date, expiry_date)
            SELECT user_id, CONCAT('warning_action_', warning_action_id, '_discourage'),
                'field', 'is_discouraged', '1', '0', action_date, NULL
            FROM xf_warning_action_trigger
            WHERE action = 'discourage'
        "
);
        
$this->executeUpgradeQuery("
            INSERT IGNORE INTO xf_user_change_temp
                (user_id, change_key, action_type, action_modifier, new_value, old_value, create_date, expiry_date)
            SELECT user_id, CONCAT('warning_action_', warning_action_id, '_groups'),
                'groups', CONCAT('warning_action_', warning_action_id), '', '', action_date, NULL
            FROM xf_warning_action_trigger
            WHERE action = 'groups'
        "
);

        
$this->executeUpgradeQuery("
            UPDATE xf_warning_action
            SET action_length_type = 'points', action_length = 0
            WHERE action IN ('ban_points', 'discourage', 'groups')
        "
);
        
$this->executeUpgradeQuery("
            UPDATE xf_warning_action
            SET action = 'ban'
            WHERE action IN ('ban_length', 'ban_points')
        "
);
    }

    public function 
step13()
    {
        
$this->executeUpgradeQuery("
            ALTER TABLE xf_user_profile
                DROP facebook_auth_id,
                ADD external_auth MEDIUMBLOB NOT NULL
        "
);
    }

    public function 
step14($position, array $stepData)
    {
        
$perPage 250;
        
$db $this->_getDb();

        if (!isset(
$stepData['max']))
        {
            
$stepData['max'] = $db->fetchOne('SELECT MAX(user_id) FROM xf_user_external_auth');
        }

        
$userIds $db->fetchCol($db->limit(
            
'
                SELECT DISTINCT user_id
                FROM xf_user_external_auth AS user
                WHERE user_id > ?
                ORDER BY user_id
            '
$perPage
        
), $position);
        if (!
$userIds)
        {
            return 
true;
        }

        
$queryResults $db->query('
            SELECT *
            FROM xf_user_external_auth
            WHERE user_id IN (' 
$db->quote($userIds) . ')
            ORDER BY user_id, provider
        '
);
        
$authGrouped = array();
        while (
$result $queryResults->fetch())
        {
            
$authGrouped[$result['user_id']][$result['provider']] = $result['provider_key'];
        }

        
XenForo_Db::beginTransaction($db);

        foreach (
$authGrouped AS $userId => $cache)
        {
            
$db->query('
                UPDATE xf_user_profile SET
                    external_auth = ?
                WHERE user_id = ?
            '
, array(serialize($cache), $userId));
        }

        
XenForo_Db::commit($db);

        
$nextPosition end($userIds);

        return array(
            
$nextPosition,
            
"$nextPosition / $stepData[max]",
            
$stepData
        
);
    }

    public function 
step15()
    {
        
$db $this->_getDb();

        
$values $db->fetchOne("SELECT option_value FROM xf_option WHERE option_id = 'censorWords'");
        
$values = @unserialize($values);

        
$output = array();

        if (
$values && is_array($values))
        {
            
$oldFormat false;

            if (!empty(
$values['exact']))
            {
                
$oldFormat true;

                foreach (
$values['exact'] AS $word => $replace)
                {
                    
$cache XenForo_Option_CensorWords::buildCensorCacheValue(
                        
$wordis_int($replace) ? '' $replace
                    
);
                    if (
$cache)
                    {
                        
$output[] = $cache;
                    }
                }
            }
            if (!empty(
$values['any']))
            {
                
$oldFormat true;

                foreach (
$values['any'] AS $word => $replace)
                {
                    
$word '*' $word '*';
                    
$cache XenForo_Option_CensorWords::buildCensorCacheValue(
                        
$wordis_int($replace) ? '' $replace
                    
);
                    if (
$cache)
                    {
                        
$output[] = $cache;
                    }
                }
            }

            if (!
$oldFormat)
            {
                
// likely already converted
                
$output $values;
            }
        }

        
$db->query("
            UPDATE xf_option
            SET option_value = ?
            WHERE option_id = 'censorWords'
        "
, array(serialize($output)));
    }

    public function 
step16()
    {
        
$this->executeUpgradeQuery("
            ALTER TABLE xf_conversation_message
                ADD INDEX user_id (user_id),
                ADD INDEX message_date (message_date)
        "
);
    }

    public function 
step17()
    {
        
$this->executeUpgradeQuery("
            ALTER TABLE xf_conversation_recipient
                ADD INDEX user_id (user_id)
        "
);
    }

    public function 
step18()
    {
        
$this->executeUpgradeQuery("
            ALTER TABLE xf_thread
                ADD INDEX user_id (user_id),
                ADD INDEX post_date (post_date)
        "
);
    }

    public function 
step19()
    {
        
$this->executeUpgradeQuery("
            ALTER TABLE xf_post
                ADD INDEX post_date (post_date)
        "
);
    }

    public function 
step20()
    {
        
$this->executeUpgradeQuery("
            ALTER TABLE xf_attachment_data
                ADD INDEX upload_date (upload_date)
        "
);
    }

    public function 
step21()
    {
        
$this->executeUpgradeQuery("
            ALTER TABLE xf_liked_content
                ADD INDEX like_date (like_date)
        "
);
    }

    public function 
step22()
    {
        
$this->executeUpgradeQuery("
            ALTER TABLE xf_profile_post
                ADD INDEX post_date (post_date)
        "
);
    }

    public function 
step23()
    {
        
$this->executeUpgradeQuery("
            ALTER TABLE xf_profile_post_comment
                ADD INDEX user_id (user_id),
                ADD INDEX comment_date (comment_date)
        "
);
    }

    public function 
step24()
    {
        
$this->executeUpgradeQuery("
            ALTER TABLE xf_poll_vote
                ADD INDEX user_id (user_id)
        "
);
    }

    public function 
step25()
    {
        
$this->executeUpgradeQuery("
            ALTER TABLE xf_report_comment
                ADD INDEX user_id (user_id)
        "
);
    }

    public function 
step26()
    {
        
$this->executeUpgradeQuery("
            ALTER TABLE xf_notice_dismissed
                ADD INDEX user_id (user_id)
        "
);
    }

    public function 
step27()
    {
        
// note: metacafe and liveleak do not support HTTPS at this time
        
$this->executeUpgradeQuery("
            UPDATE xf_bb_code_media_site
            SET embed_html = REPLACE(embed_html, 'http:', 'https:')
            WHERE media_site_id IN ('facebook', 'vimeo', 'youtube', 'dailymotion')
        "
);

        
$oldRegex '#metacafe\\.com/watch/(?P' '<id>\\d+)/#siU';
        
$newRegex '#metacafe\\.com/watch/(?P' '<id>[a-z0-9-]+)(/|$)#siU';

        
$this->executeUpgradeQuery("
            UPDATE xf_bb_code_media_site
            SET match_urls = IF(match_urls = ?, ?, match_urls),
                embed_html = REPLACE(embed_html, '
{$id:digits}', '{$id}')
            WHERE media_site_id = 'metacafe'
        "
, array($oldRegex$newRegex));
    }
}
Онлайн: 2
Реклама