Seditio Source
Root |
./othercms/ips_4.3.4/applications/core/setup/upg_40000/checks.php
<?php
/**
 * @brief        Upgrader: Pre-upgrade check
 * @author        <a href='https://www.invisioncommunity.com'>Invision Power Services, Inc.</a>
 * @copyright    (c) Invision Power Services, Inc.
 * @license        https://www.invisioncommunity.com/legal/standards/
 * @package        Invision Community
 * @since        27 Feb 2015
 */

/* Clear settings store in case we've already been here */
\IPS\Settings::i()->clearCache();

/* Do this the easy way first... */
if( isset( \IPS\Settings::i()->gb_char_set ) AND ! empty( \IPS\Settings::i()->gb_char_set ) AND mb_strtolower( \IPS\Settings::i()->gb_char_set ) !== 'utf-8' )
{
   
$output = \IPS\Theme::i()->getTemplate( 'global' )->convertUtf8();
    return;
}

/* Check for non-UTF8 database tables */
$convert    = FALSE;
$prefix = \IPS\Db::i()->prefix;
$tables    = \IPS\Db::i()->query( "SHOW TABLES LIKE '{$prefix}%';" );
while (
$table = $tables->fetch_assoc() )
{
   
$tableName    = array_pop( $table );

    if(
mb_strpos( $tableName, "orig_" ) === 0 )
    {
        continue;
    }
   
    if(
mb_strpos( $tableName, "x_utf_" ) === 0 )
    {
        continue;
    }

   
/* Skip if it's an _old or _utftemp table */
   
if( mb_substr( $tableName, -4 ) == '_old' )
    {
        continue;
    }

    if(
mb_substr( $tableName, -8 ) == '_utftemp' )
    {
        continue;
    }
   
   
/* Ticket 909929 - SHOW TABLES LIKE 'ibf_%' can match tables like ibf3_table_name */
   
if ( $prefix and mb_strpos( $tableName, $prefix ) === FALSE )
    {
        continue;
    }

   
$definition = \IPS\Db::i()->getTableDefinition( preg_replace( '/^' . $prefix . '/', '', $tableName ), FALSE, TRUE );

    if( isset(
$definition['collation'] ) AND !in_array( $definition['collation'], array( 'utf8_unicode_ci', 'utf8mb4_unicode_ci', 'utf8_bin', 'utf8mb4_bin' ) ) )
    {
       
$convert = TRUE;
        break;
    }

   
$columns    = \IPS\Db::i()->query( "SHOW FULL COLUMNS FROM `{$tableName}`;" );

    while (
$column = $columns->fetch_assoc() )
    {
        if (
$column['Collation'] and !in_array( $column['Collation'], array( 'utf8_unicode_ci', 'utf8mb4_unicode_ci', 'utf8_bin', 'utf8mb4_bin' ) ) )
        {
           
$convert = TRUE;
            break
2;
        }
    }
}

if (
$convert === TRUE )
{
   
$output = \IPS\Theme::i()->getTemplate( 'global' )->convertUtf8();
}