Version 4.5.0
This commit is contained in:
1 parent
1a0c7fd3c2
commit
f79dcf067a
3791 files changed
+248032
-76372
No files matched your search
@@ -117,7 +117,7 @@ class Archive extends \IPSUtf8\Convert
|
||||
\IPSUtf8\Session::i()->current_pkey = 'archive_id';
|
||||
\IPSUtf8\Session::i()->save();
|
||||
|
||||
if ( in_array( self::ARCHIVE_TABLE, array_keys( \IPSUtf8\Session::i()->completed_json ) ) )
|
||||
if ( \in_array( self::ARCHIVE_TABLE, array_keys( \IPSUtf8\Session::i()->completed_json ) ) )
|
||||
{
|
||||
return null;
|
||||
}
|
||||
@@ -191,7 +191,7 @@ class Archive extends \IPSUtf8\Convert
|
||||
/* Best check the tables, then */
|
||||
foreach( self::$tableDefinition['definition']['columns'] as $name => $column )
|
||||
{
|
||||
if ( $column['collation'] and ! in_array( $column['collation'], array( 'utf8_unicode_ci', 'utf8mb4_unicode_ci' ) ) )
|
||||
if ( $column['collation'] and ! \in_array( $column['collation'], array( 'utf8_unicode_ci', 'utf8mb4_unicode_ci' ) ) )
|
||||
{
|
||||
static::$nonUtf8Collations[] = self::$tableDefinition['name'];
|
||||
break;
|
||||
@@ -211,7 +211,7 @@ class Archive extends \IPSUtf8\Convert
|
||||
*/
|
||||
public static function getNumericColumns( $name )
|
||||
{
|
||||
if ( ! is_string( $name ) )
|
||||
if ( ! \is_string( $name ) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -220,7 +220,7 @@ class Archive extends \IPSUtf8\Convert
|
||||
|
||||
foreach( self::$tableDefinition['definition']['columns'] as $col => $val )
|
||||
{
|
||||
if ( in_array( mb_strtolower( $val['type'] ), static::$numericCols ) )
|
||||
if ( \in_array( mb_strtolower( $val['type'] ), static::$numericCols ) )
|
||||
{
|
||||
$return[] = $val['name'];
|
||||
}
|
||||
@@ -237,7 +237,7 @@ class Archive extends \IPSUtf8\Convert
|
||||
*/
|
||||
public static function getConvertableColumns( $name )
|
||||
{
|
||||
if ( ! is_string( $name ) )
|
||||
if ( ! \is_string( $name ) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -246,7 +246,7 @@ class Archive extends \IPSUtf8\Convert
|
||||
|
||||
foreach( self::$tableDefinition['definition']['columns'] as $col => $val )
|
||||
{
|
||||
if ( in_array( mb_strtolower( $val['type'] ), static::$convertCols ) )
|
||||
if ( \in_array( mb_strtolower( $val['type'] ), static::$convertCols ) )
|
||||
{
|
||||
$return[] = $val['name'];
|
||||
}
|
||||
|
||||
@@ -70,7 +70,7 @@ class Convert
|
||||
/**
|
||||
* @brief Create don't populate
|
||||
*/
|
||||
protected static $createOnly = array( 'content_cache_posts', 'content_cache_sigs', 'sessions', 'topic_views', 'search_keywords' );
|
||||
protected static $createOnly = array( 'content_cache_posts', 'content_cache_sigs', 'sessions', 'topic_views', 'search_keywords', 'core_share_links_log', 'spider_logs', 'inline_notifications' );
|
||||
|
||||
/**
|
||||
* @brief Problem Tables that can cause an error due to serialization while using "fast" mode
|
||||
@@ -92,7 +92,7 @@ class Convert
|
||||
if ( self::$instance === NULL )
|
||||
{
|
||||
static::$db = \IPSUtf8\Db::i();
|
||||
if ( defined( 'SOURCE_DB_CHARSET' ) AND SOURCE_DB_CHARSET !== NULL )
|
||||
if ( \defined( 'SOURCE_DB_CHARSET' ) AND SOURCE_DB_CHARSET !== NULL )
|
||||
{
|
||||
static::$db->set_charset( SOURCE_DB_CHARSET );
|
||||
}
|
||||
@@ -177,24 +177,24 @@ class Convert
|
||||
|
||||
/* Latin1 is actually cp1252, not ISO-8859-1 @link http://dev.mysql.com/doc/refman/5.0/en/charset-we-sets.html */
|
||||
/* But only if our document character set is ISO-8859-1 or UTF-8. Otherwise, we're using the slow method which needs to real charset despite what the table is set too */
|
||||
if ( $tableCharSet === 'latin1' AND in_array( mb_strtolower( $currentCharSet ), array( 'iso-8859-1', 'utf-8' ) ) )
|
||||
if ( $tableCharSet === 'latin1' AND \in_array( mb_strtolower( $currentCharSet ), array( 'iso-8859-1', 'utf-8' ) ) )
|
||||
{
|
||||
$currentCharSet = 'windows-1252';
|
||||
}
|
||||
|
||||
if ( defined( 'FORCE_CONVERT_CHARSET' ) AND FORCE_CONVERT_CHARSET !== NULL )
|
||||
if ( \defined( 'FORCE_CONVERT_CHARSET' ) AND FORCE_CONVERT_CHARSET !== NULL )
|
||||
{
|
||||
$currentCharSet = FORCE_CONVERT_CHARSET;
|
||||
}
|
||||
}
|
||||
|
||||
if ( !defined( 'SOURCE_DB_CHARSET' ) OR SOURCE_DB_CHARSET === NULL )
|
||||
if ( !\defined( 'SOURCE_DB_CHARSET' ) OR SOURCE_DB_CHARSET === NULL )
|
||||
{
|
||||
static::$db->set_charset( $tableCharSet );
|
||||
}
|
||||
|
||||
/* Create table only */
|
||||
if ( IPB_LOCK and in_array( $table['name'], static::$createOnly ) )
|
||||
if ( IPB_LOCK and \in_array( $table['name'], static::$createOnly ) )
|
||||
{
|
||||
static::log( 'No content conversion of ' . $table['name'] . ' required' );
|
||||
|
||||
@@ -213,7 +213,7 @@ class Convert
|
||||
|
||||
if ( $table === null )
|
||||
{
|
||||
if ( count( array_keys( \IPSUtf8\Session::i()->tables ) ) == count( array_keys( \IPSUtf8\Session::i()->completed_json ) ) )
|
||||
if ( \count( array_keys( \IPSUtf8\Session::i()->tables ) ) == \count( array_keys( \IPSUtf8\Session::i()->completed_json ) ) )
|
||||
{
|
||||
\IPSUtf8\Session::i()->status = 'completed';
|
||||
\IPSUtf8\Session::i()->save();
|
||||
@@ -224,7 +224,7 @@ class Convert
|
||||
}
|
||||
|
||||
/* Got any fields to convert? */
|
||||
if ( count( $convertCols ) === 0 )
|
||||
if ( \count( $convertCols ) === 0 )
|
||||
{
|
||||
/* No data to convert, lets repopulate the easy way! */
|
||||
$this->preInsert( $table );
|
||||
@@ -272,7 +272,7 @@ class Convert
|
||||
}
|
||||
|
||||
/* Latin1 or ISO-8559-1? */
|
||||
if ( ! in_array( $table['name'], static::$problemTables ) AND ( in_array( $tableCharSet, $this->getMysqlCharSets() ) ) and ( \IPSUtf8\Session::i()->current_charset == 'utf-8' or \IPSUtf8\Session::i()->current_charset == 'iso-8859-1' ) AND ( !isset( $sessionData['force_conversion'] ) OR $sessionData['force_conversion'] !== 1 ) )
|
||||
if ( ! \in_array( $table['name'], static::$problemTables ) AND ( \in_array( $tableCharSet, $this->getMysqlCharSets() ) ) and ( \IPSUtf8\Session::i()->current_charset == 'utf-8' or \IPSUtf8\Session::i()->current_charset == 'iso-8859-1' ) AND ( !isset( $sessionData['force_conversion'] ) OR $sessionData['force_conversion'] !== 1 ) )
|
||||
{
|
||||
/* Convert the fast way! */
|
||||
$count = static::$utf->select( 'COUNT(*)', $table['name'] )->first();
|
||||
@@ -295,7 +295,7 @@ class Convert
|
||||
|
||||
foreach( array_keys( $table['definition']['columns'] ) as $col )
|
||||
{
|
||||
if ( in_array( $col, $convertCols ) )
|
||||
if ( \in_array( $col, $convertCols ) )
|
||||
{
|
||||
/* Even if the current charset is set to UTF-8, if the Table Charset is latin1, we need to use this method */
|
||||
/* ... but only if the actual column isn't using utf8 */
|
||||
@@ -304,7 +304,7 @@ class Convert
|
||||
{
|
||||
$select[] = 'CAST( `' . $col . '` AS BINARY )';
|
||||
}
|
||||
else if ( FORCE_MULTI_CONVERT === FALSE AND ( \IPSUtf8\Session::i()->current_charset != 'utf-8' OR ( $tableCharSet != 'utf8' AND ! in_array( $columnCollation, array( 'utf8_unicode_ci', 'utf8mb4_unicode_ci' ) ) ) OR ( $tableCharSet == 'utf8' AND mb_substr( $columnCollation, 0, 5 ) == 'latin' ) ) )
|
||||
else if ( FORCE_MULTI_CONVERT === FALSE AND ( \IPSUtf8\Session::i()->current_charset != 'utf-8' OR ( $tableCharSet != 'utf8' AND ! \in_array( $columnCollation, array( 'utf8_unicode_ci', 'utf8mb4_unicode_ci' ) ) ) OR ( $tableCharSet == 'utf8' AND mb_substr( $columnCollation, 0, 5 ) == 'latin' ) ) )
|
||||
{
|
||||
if ( \IPSUtf8\Session::i()->current_charset == 'iso-8859-1' AND mb_substr( $columnCollation, 0, 5 ) == 'latin' )
|
||||
{
|
||||
@@ -336,12 +336,12 @@ class Convert
|
||||
}
|
||||
|
||||
$source_charset = 'latin1';
|
||||
if ( defined( 'SOURCE_DB_CHARSET' ) AND SOURCE_DB_CHARSET !== NULL )
|
||||
if ( \defined( 'SOURCE_DB_CHARSET' ) AND SOURCE_DB_CHARSET !== NULL )
|
||||
{
|
||||
$source_charset = SOURCE_DB_CHARSET;
|
||||
}
|
||||
|
||||
if ( defined( 'MULTI_NO_CMP' ) AND MULTI_NO_CMP === TRUE )
|
||||
if ( \defined( 'MULTI_NO_CMP' ) AND MULTI_NO_CMP === TRUE )
|
||||
{
|
||||
$select[] = "CONVERT(CONVERT(CONVERT(`{$col}` USING {$source_charset}) USING BINARY) USING {$using})";
|
||||
}
|
||||
@@ -385,7 +385,7 @@ class Convert
|
||||
$rows = static::$db->select(
|
||||
'*',
|
||||
$table['name'],
|
||||
array( \IPSUtf8\Session::i()->current_pkey . ' > ?', intval( $start ) ),
|
||||
array( \IPSUtf8\Session::i()->current_pkey . ' > ?', \intval( $start ) ),
|
||||
\IPSUtf8\Session::i()->current_pkey . ' ASC',
|
||||
( $limit ? array( 0, ( $limit - $convertCount ) ) : null )
|
||||
);
|
||||
@@ -404,14 +404,14 @@ class Convert
|
||||
);
|
||||
}
|
||||
|
||||
if ( !defined( 'FORCE_CONVERT_METHOD' ) OR FORCE_CONVERT_METHOD === NULL )
|
||||
if ( !\defined( 'FORCE_CONVERT_METHOD' ) OR FORCE_CONVERT_METHOD === NULL )
|
||||
{
|
||||
\IPSUtf8\Text\Charset::$method = 'internal';
|
||||
|
||||
/* Optimise for latin character sets */
|
||||
if ( function_exists( 'mb_convert_encoding' ) )
|
||||
if ( \function_exists( 'mb_convert_encoding' ) )
|
||||
{
|
||||
if ( in_array( strtolower( $currentCharSet ), array_map( 'strtolower', mb_list_encodings() ) ) )
|
||||
if ( \in_array( strtolower( $currentCharSet ), array_map( 'strtolower', mb_list_encodings() ) ) )
|
||||
{
|
||||
\IPSUtf8\Text\Charset::$method = 'mb';
|
||||
}
|
||||
@@ -419,7 +419,7 @@ class Convert
|
||||
}
|
||||
|
||||
$rowCount = 0;
|
||||
$gotRows = count( $rows );
|
||||
$gotRows = \count( $rows );
|
||||
$batch = array();
|
||||
$batchBytes = 0;
|
||||
$max = ( $limit ) ?: 250;
|
||||
@@ -464,7 +464,7 @@ class Convert
|
||||
{
|
||||
if ( isset( $row[ $col ] ) AND ! empty( $row[ $col ] ) )
|
||||
{
|
||||
$currentCharSet = ( defined( 'FORCE_CONVERT_CHARSET' ) AND FORCE_CONVERT_CHARSET != NULL ) ? FORCE_CONVERT_CHARSET : $currentCharSet;
|
||||
$currentCharSet = ( \defined( 'FORCE_CONVERT_CHARSET' ) AND FORCE_CONVERT_CHARSET != NULL ) ? FORCE_CONVERT_CHARSET : $currentCharSet;
|
||||
if ( static::isSerialized( $row[ $col ] ) AND \IPSUtf8\Text\Charset::i()->needsConverting( $row[ $col ], $currentCharSet, 'UTF-8' ) )
|
||||
{
|
||||
/* Store a copy in case it doesn't work */
|
||||
@@ -484,7 +484,7 @@ class Convert
|
||||
/* Something went wrong... maybe we can figure it out */
|
||||
$work = unserialize( $original );
|
||||
array_walk_recursive( $work, function ( &$input, $key ) use ( $currentCharSet, $tableCharSet ) {
|
||||
if ( function_exists( 'mb_detect_encoding' ) )
|
||||
if ( \function_exists( 'mb_detect_encoding' ) )
|
||||
{
|
||||
$encoding = mb_detect_encoding( $input );
|
||||
$input = \IPSUtf8\Text\Charset::i()->convert( $input, $encoding, 'UTF-8' );
|
||||
@@ -515,7 +515,7 @@ class Convert
|
||||
{
|
||||
if ( isset( $row[ $col ] ) AND ! empty( $row[ $col ] ) )
|
||||
{
|
||||
if ( $row[ $col ] === null OR ! is_numeric( $row[ $col ] ) )
|
||||
if ( $row[ $col ] === null OR !\is_numeric( $row[ $col ] ) )
|
||||
{
|
||||
$row[ $col ] = 0;
|
||||
}
|
||||
@@ -526,7 +526,7 @@ class Convert
|
||||
$tmp = $row; // Use a copy so the reference in array_walk doesn't overwrite the row to be inserted
|
||||
|
||||
/* Make sure it's an associative array as topic_views only has 1 column so DB driver returns an indexed array only */
|
||||
if ( is_array( $tmp ) )
|
||||
if ( \is_array( $tmp ) )
|
||||
{
|
||||
array_walk_recursive( $tmp, function( &$input, $key )
|
||||
{
|
||||
@@ -540,23 +540,23 @@ class Convert
|
||||
$nextBatch = null;
|
||||
|
||||
/* Give us an error margin to account for MySQL syntax */
|
||||
if ( $batchBytes > ( $this->_data['max_allowed_packet'] - ( ( $this->_data['max_allowed_packet'] / 100 ) * ( count( $batch ) * 0.3 ) ) ) )
|
||||
if ( $batchBytes > ( $this->_data['max_allowed_packet'] - ( ( $this->_data['max_allowed_packet'] / 100 ) * ( \count( $batch ) * 0.3 ) ) ) )
|
||||
{
|
||||
/* Remove last row */
|
||||
$nextBatch = array_pop( $batch );
|
||||
|
||||
static::log( "Max packet hit with " . $batchBytes . 'b with ' . count( $batch ) . ' rows' );
|
||||
static::log( "Max packet hit with " . $batchBytes . 'b with ' . \count( $batch ) . ' rows' );
|
||||
}
|
||||
|
||||
/* If we have moved the only row from $batch to $nextbatch, then process that now */
|
||||
if ( count( $nextBatch ) and ! count( $batch ) )
|
||||
if ( \count( $nextBatch ) and ! \count( $batch ) )
|
||||
{
|
||||
$batch = $nextBatch;
|
||||
$nextBatch = array();
|
||||
}
|
||||
|
||||
/* Got a batch to write? */
|
||||
if ( $nextBatch !== null OR ( count( $batch ) === $max ) OR ( $gotRows === count( $batch ) ) )
|
||||
if ( $nextBatch !== null OR ( \count( $batch ) === $max ) OR ( $gotRows === \count( $batch ) ) )
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -573,8 +573,8 @@ class Convert
|
||||
$this->postInsert( $table );
|
||||
|
||||
/* Update counts */
|
||||
$sessionData['convertedCount'] += count( $batch );
|
||||
$convertCount += count( $batch );
|
||||
$sessionData['convertedCount'] += \count( $batch );
|
||||
$convertCount += \count( $batch );
|
||||
|
||||
if ( \IPSUtf8\Session::i()->current_pkey )
|
||||
{
|
||||
@@ -582,14 +582,14 @@ class Convert
|
||||
}
|
||||
else
|
||||
{
|
||||
\IPSUtf8\Session::i()->current_row += count( $batch );
|
||||
\IPSUtf8\Session::i()->current_row += \count( $batch );
|
||||
}
|
||||
|
||||
\IPSUtf8\Session::i()->status = 'processing';
|
||||
\IPSUtf8\Session::i()->json = $sessionData;
|
||||
\IPSUtf8\Session::i()->save();
|
||||
|
||||
static::log( count( $batch ) . " rows batch inserted using conversion method: " . \IPSUtf8\Text\Charset::$method . ', last insert ID ' . $insertId );
|
||||
static::log( \count( $batch ) . " rows batch inserted using conversion method: " . \IPSUtf8\Text\Charset::$method . ', last insert ID ' . $insertId );
|
||||
|
||||
$batch = ( $nextBatch !== null ) ? array( $nextBatch ) : array();
|
||||
$batchBytes = 0;
|
||||
@@ -790,9 +790,9 @@ class Convert
|
||||
foreach( explode( ";", $currentLocale ) as $locale )
|
||||
{
|
||||
$parts = explode( "=", $locale );
|
||||
if( in_array( $parts[0], array( 'LC_ALL', 'LC_COLLATE', 'LC_CTYPE', 'LC_MONETARY', 'LC_NUMERIC', 'LC_TIME' ) ) )
|
||||
if( \in_array( $parts[0], array( 'LC_ALL', 'LC_COLLATE', 'LC_CTYPE', 'LC_MONETARY', 'LC_NUMERIC', 'LC_TIME' ) ) )
|
||||
{
|
||||
setlocale( constant( $parts[0] ), $parts[1] );
|
||||
setlocale( \constant( $parts[0] ), $parts[1] );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -979,7 +979,7 @@ class Convert
|
||||
|
||||
foreach( \IPSUtf8\Session::i()->tables as $name => $data )
|
||||
{
|
||||
if ( in_array( $name, $this->getNonUtf8CollationTables() ) )
|
||||
if ( \in_array( $name, $this->getNonUtf8CollationTables() ) )
|
||||
{
|
||||
/* Skip if it's an _old table */
|
||||
if( mb_substr( $name, -4 ) == '_old' )
|
||||
@@ -990,72 +990,37 @@ class Convert
|
||||
$cols = static::getConvertableColumns( $data['name'] );
|
||||
$tableData = \IPSUtf8\Session::i()->tables[ $data['name'] ];
|
||||
|
||||
if ( count( $cols ) )
|
||||
if ( \count( $cols ) )
|
||||
{
|
||||
$dropIndexes = array();
|
||||
$addIndexes = array();
|
||||
$modify = array();
|
||||
$hasUnique = FALSE;
|
||||
|
||||
/* Changing collation can cause issues for duplicate entries in unique keys */
|
||||
if ( isset( $tableData['definition']['indexes'] ) )
|
||||
{
|
||||
foreach( $tableData['definition']['indexes'] as $key => $index )
|
||||
{
|
||||
if ( $index['type'] === 'unique' OR $index['type'] === 'primary' )
|
||||
{
|
||||
/* Make sure none of the columns in this index are auto_increment */
|
||||
foreach( $index['columns'] AS $k => $idxcol )
|
||||
{
|
||||
if ( $tableData['definition']['columns'][ $idxcol ]['auto_increment'] === TRUE )
|
||||
{
|
||||
continue 2;
|
||||
}
|
||||
}
|
||||
|
||||
if ( static::$db->checkForIndex( $name, $key ) )
|
||||
{
|
||||
$hasUnique = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* We don't need to drop any indexes - just create a copy of the table and insert ignore */
|
||||
if ( $hasUnique === TRUE )
|
||||
{
|
||||
/* Let's try an alter first - below may not be necessary */
|
||||
try
|
||||
{
|
||||
static::$utf->query( "ALTER TABLE `" . static::$db->prefix . $name . "` CONVERT TO CHARACTER SET " . $charset . " COLLATE " . $collation );
|
||||
static::$utf->query( "ALTER TABLE `" . static::$db->prefix . $name . "` DEFAULT CHARACTER SET " . $charset . " COLLATE " . $collation );
|
||||
}
|
||||
catch( \IPSUtf8\Db\Exception $e )
|
||||
{
|
||||
/* Did not work - try the long way */
|
||||
static::$utf->query( "RENAME TABLE `" . static::$db->prefix . $name . "` TO `" . static::$db->prefix . $name . "_temp`" );
|
||||
static::log( $name . " has Unique Index - temp table created from main." );
|
||||
/* Previously we used a raw create table query to create a copy, however this does not check index lengths. Leaving this for reference. */
|
||||
//static::$utf->query( "CREATE TABLE `" . static::$db->prefix . $name . "` LIKE `" . static::$db->prefix . $name . "_temp`" );
|
||||
static::$db->createTable( $this->checkTable( $tableData['definition'] ) );
|
||||
static::$utf->query( "ALTER TABLE `" . static::$db->prefix . $name . "` CONVERT TO CHARACTER SET " . $charset . " COLLATE " . $collation );
|
||||
static::$utf->query( "ALTER TABLE `" . static::$db->prefix . $name . "` DEFAULT CHARACTER SET " . $charset . " COLLATE " . $collation );
|
||||
static::log( $name . " created from temp table." );
|
||||
static::$utf->query( "REPLACE INTO `" . static::$db->prefix . $name . "` SELECT * FROM `" . static::$db->prefix . $name . "_temp`" );
|
||||
static::log( $name . " data copied to new table." );
|
||||
static::$utf->query( "DROP TABLE `" . static::$db->prefix . $name . "_temp`" );
|
||||
static::log( $name . "_temp dropped" );
|
||||
}
|
||||
}
|
||||
else
|
||||
/* Let's try an alter first - below may not be necessary */
|
||||
try
|
||||
{
|
||||
static::$utf->query( "ALTER TABLE `" . static::$db->prefix . $name . "` CONVERT TO CHARACTER SET " . $charset . " COLLATE " . $collation );
|
||||
static::$utf->query( "ALTER TABLE `" . static::$db->prefix . $name . "` DEFAULT CHARACTER SET " . $charset . " COLLATE " . $collation );
|
||||
}
|
||||
catch( \IPSUtf8\Db\Exception $e )
|
||||
{
|
||||
/* Did not work - try the long way */
|
||||
static::$utf->query( "RENAME TABLE `" . static::$db->prefix . $name . "` TO `" . static::$db->prefix . $name . "_temp`" );
|
||||
static::log( $name . " has Unique Index - temp table created from main." );
|
||||
/* Previously we used a raw create table query to create a copy, however this does not check index lengths. Leaving this for reference. */
|
||||
//static::$utf->query( "CREATE TABLE `" . static::$db->prefix . $name . "` LIKE `" . static::$db->prefix . $name . "_temp`" );
|
||||
static::$db->createTable( $this->checkTable( $tableData['definition'] ) );
|
||||
static::$utf->query( "ALTER TABLE `" . static::$db->prefix . $name . "` CONVERT TO CHARACTER SET " . $charset . " COLLATE " . $collation );
|
||||
static::$utf->query( "ALTER TABLE `" . static::$db->prefix . $name . "` DEFAULT CHARACTER SET " . $charset . " COLLATE " . $collation );
|
||||
static::log( $name . " created from temp table." );
|
||||
static::$utf->query( "REPLACE INTO `" . static::$db->prefix . $name . "` SELECT * FROM `" . static::$db->prefix . $name . "_temp`" );
|
||||
static::log( $name . " data copied to new table." );
|
||||
static::$utf->query( "DROP TABLE `" . static::$db->prefix . $name . "_temp`" );
|
||||
static::log( $name . "_temp dropped" );
|
||||
}
|
||||
|
||||
if ( count( $cols ) )
|
||||
if ( \count( $cols ) )
|
||||
{
|
||||
foreach( $cols as $col )
|
||||
{
|
||||
@@ -1063,14 +1028,14 @@ class Convert
|
||||
{
|
||||
$colData = $tableData['definition']['columns'][ $col ];
|
||||
|
||||
$modify[] = " MODIFY `" . $col . "` " . $colData['type'] . ( ( is_numeric( $colData['length'] ) AND $colData['length'] > 0 ) ? "(" . $colData['length'] . ")" : '' ) . " CHARACTER SET " . $charset . " COLLATE " . $collation;
|
||||
$modify[] = " MODIFY `" . $col . "` " . $colData['type'] . ( ( \is_numeric( $colData['length'] ) AND $colData['length'] > 0 ) ? "(" . $colData['length'] . ")" : '' ) . " CHARACTER SET " . $charset . " COLLATE " . $collation;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( count( $cols ) )
|
||||
if ( \count( $cols ) )
|
||||
{
|
||||
if ( count( $modify ) )
|
||||
if ( \count( $modify ) )
|
||||
{
|
||||
$query = "ALTER TABLE `" . static::$db->prefix . $name . "` " . implode( ',', $modify );
|
||||
|
||||
@@ -1078,7 +1043,7 @@ class Convert
|
||||
static::$utf->query( $query );
|
||||
}
|
||||
|
||||
if ( /*count( $modify ) and*/ count( $addIndexes ) )
|
||||
if ( /*count( $modify ) and*/ \count( $addIndexes ) )
|
||||
{
|
||||
$query = "ALTER TABLE `" . static::$db->prefix . $name . "` " . implode( ',', $addIndexes );
|
||||
|
||||
@@ -1212,13 +1177,13 @@ class Convert
|
||||
$nonUtf8Tables = array_keys( \IPSUtf8\Session::i()->tables );//$this->getNonUtf8Tables();
|
||||
|
||||
/* No table selected */
|
||||
if ( is_array( $nonUtf8Tables ) and count( $nonUtf8Tables ) )
|
||||
if ( \is_array( $nonUtf8Tables ) and \count( $nonUtf8Tables ) )
|
||||
{
|
||||
if ( is_array( \IPSUtf8\Session::i()->completed_json ) )
|
||||
if ( \is_array( \IPSUtf8\Session::i()->completed_json ) )
|
||||
{
|
||||
$diff = array_diff( $nonUtf8Tables, array_keys( \IPSUtf8\Session::i()->completed_json ) );
|
||||
|
||||
if ( count( $diff ) )
|
||||
if ( \count( $diff ) )
|
||||
{
|
||||
$table = \IPSUtf8\Session::i()->tables[ array_shift( $diff ) ];
|
||||
}
|
||||
@@ -1309,7 +1274,7 @@ class Convert
|
||||
{
|
||||
$thisLength = ( isset( $index['length'][ $i ] ) ) ? $index['length'][ $i ] : ( ( (int) $definition['columns'][ $column ]['length'] or empty( $definition['columns'][ $column ]['length'] ) ) ? $definition['columns'][ $column ]['length'] : 250 );
|
||||
|
||||
$isText = in_array( mb_strtolower( $definition['columns'][ $column ]['type'] ), array( 'mediumtext', 'text' ) );
|
||||
$isText = \in_array( mb_strtolower( $definition['columns'][ $column ]['type'] ), array( 'mediumtext', 'text' ) );
|
||||
|
||||
if ( $hasText === false and $isText === true )
|
||||
{
|
||||
@@ -1328,7 +1293,7 @@ class Convert
|
||||
{
|
||||
$thisLength = ( isset( $index['length'][ $i ] ) ) ? $index['length'][ $i ] : ( (int) $definition['columns'][ $column ]['length'] ? $definition['columns'][ $column ]['length'] : 250 );
|
||||
|
||||
if ( isset( $definition['columns'][ $column ] ) and ( ( ! empty( $thisLength ) or in_array( mb_strtolower( $definition['columns'][ $column ]['type'] ), array( 'mediumtext', 'text' ) ) ) ) )
|
||||
if ( isset( $definition['columns'][ $column ] ) and ( ( ! empty( $thisLength ) or \in_array( mb_strtolower( $definition['columns'][ $column ]['type'] ), array( 'mediumtext', 'text' ) ) ) ) )
|
||||
{
|
||||
/* Column name, column length, column type */
|
||||
$needsFixing[ $key ][ $i ] = array( $column, $thisLength, $definition['columns'][ $column ]['type'] );
|
||||
@@ -1340,7 +1305,7 @@ class Convert
|
||||
}
|
||||
}
|
||||
|
||||
if ( count( $needsFixing ) )
|
||||
if ( \count( $needsFixing ) )
|
||||
{
|
||||
foreach( $needsFixing as $key => $i )
|
||||
{
|
||||
@@ -1362,7 +1327,7 @@ class Convert
|
||||
/* Apply debt if we have any. We do not reduce integers */
|
||||
foreach( $i as $x => $vals )
|
||||
{
|
||||
if ( in_array( mb_strtoupper( $vals[2] ), array_keys( static::$numericCols ) ) )
|
||||
if ( \in_array( mb_strtoupper( $vals[2] ), array_keys( static::$numericCols ) ) )
|
||||
{
|
||||
$debt += $vals[1];
|
||||
}
|
||||
@@ -1382,7 +1347,7 @@ class Convert
|
||||
$vals[1] = 250;
|
||||
}
|
||||
|
||||
if ( in_array( mb_strtoupper( $vals[2] ), array_keys( static::$numericCols ) ) )
|
||||
if ( \in_array( mb_strtoupper( $vals[2] ), array_keys( static::$numericCols ) ) )
|
||||
{
|
||||
/* Preserve col len where possible but if the column length is greater than subpart allowed, NULL the length
|
||||
otherwise MySQL will complain as you cannot use subpart on non-string column. */
|
||||
@@ -1402,9 +1367,9 @@ class Convert
|
||||
|
||||
foreach( $i as $x => $vals )
|
||||
{
|
||||
if ( in_array( mb_strtolower( $vals[2] ), static::$convertCols ) AND $definition['columns'][ $definition['indexes'][ $key ]['columns'][ $x ] ]['length'] != $vals[1] )
|
||||
if ( \in_array( mb_strtolower( $vals[2] ), static::$convertCols ) AND $definition['columns'][ $definition['indexes'][ $key ]['columns'][ $x ] ]['length'] != $vals[1] )
|
||||
{
|
||||
$definition['indexes'][ $key ]['length'][ $x ] = intval( $vals[1] );
|
||||
$definition['indexes'][ $key ]['length'][ $x ] = \intval( $vals[1] );
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1503,7 +1468,7 @@ class Convert
|
||||
|
||||
foreach( $table['definition']['columns'] as $col => $val )
|
||||
{
|
||||
if ( in_array( mb_strtolower( $val['type'] ), array( 'mediumtext', 'text' ) ) )
|
||||
if ( \in_array( mb_strtolower( $val['type'] ), array( 'mediumtext', 'text' ) ) )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
@@ -1529,7 +1494,7 @@ class Convert
|
||||
{
|
||||
$total++;
|
||||
|
||||
if ( in_array( mb_strtolower( $val['type'] ), array( 'varchar' ) ) )
|
||||
if ( \in_array( mb_strtolower( $val['type'] ), array( 'varchar' ) ) )
|
||||
{
|
||||
$var++;
|
||||
}
|
||||
@@ -1580,7 +1545,7 @@ class Convert
|
||||
/* Best check the tables, then */
|
||||
$json = \IPSUtf8\Session::i()->json;
|
||||
|
||||
if ( count( $this->getNonUtf8Tables() ) )
|
||||
if ( \count( $this->getNonUtf8Tables() ) )
|
||||
{
|
||||
$yeahProbably = false;
|
||||
}
|
||||
@@ -1651,7 +1616,7 @@ class Convert
|
||||
|
||||
foreach( array_keys( \IPSUtf8\Session::i()->tables ) as $table )
|
||||
{
|
||||
static::$rowsToConvert += intval( \IPSUtf8\Session::i()->tables[ $table ]['count'] );
|
||||
static::$rowsToConvert += \intval( \IPSUtf8\Session::i()->tables[ $table ]['count'] );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1673,7 +1638,7 @@ class Convert
|
||||
foreach( \IPSUtf8\Session::i()->tables as $table => $definition )
|
||||
{
|
||||
/* If the table itself is not utf8_unicode_ci, don't bother check columns */
|
||||
if ( $definition['definition']['collation'] AND !in_array( $definition['definition']['collation'], array( 'utf8_unicode_ci', 'utf8mb4_unicode_ci' ) ) )
|
||||
if ( $definition['definition']['collation'] AND !\in_array( $definition['definition']['collation'], array( 'utf8_unicode_ci', 'utf8mb4_unicode_ci' ) ) )
|
||||
{
|
||||
static::$nonUtf8Collations[] = $table;
|
||||
continue;
|
||||
@@ -1681,7 +1646,7 @@ class Convert
|
||||
|
||||
foreach( $definition['definition']['columns'] as $name => $column )
|
||||
{
|
||||
if ( $column['collation'] and ! in_array( $column['collation'], array( 'utf8_unicode_ci', 'utf8mb4_unicode_ci' ) ) )
|
||||
if ( $column['collation'] and ! \in_array( $column['collation'], array( 'utf8_unicode_ci', 'utf8mb4_unicode_ci' ) ) )
|
||||
{
|
||||
static::$nonUtf8Collations[] = $table;
|
||||
break;
|
||||
@@ -1712,10 +1677,10 @@ class Convert
|
||||
|
||||
foreach( $json['charSets'] as $charSet => $tablesArray )
|
||||
{
|
||||
$data[] = count( $tablesArray ) . ' tables are ' . $charSet;
|
||||
$data[] = \count( $tablesArray ) . ' tables are ' . $charSet;
|
||||
}
|
||||
|
||||
$data[] = count( $this->getNonUtf8CollationTables() ) . " tables have incorrect collations";
|
||||
$data[] = \count( $this->getNonUtf8CollationTables() ) . " tables have incorrect collations";
|
||||
$data[] = "Can use 'dump' method: " . var_export( $this->canDump(), true );
|
||||
|
||||
return $data;
|
||||
@@ -1771,7 +1736,7 @@ class Convert
|
||||
*/
|
||||
public static function getNumericColumns( $name )
|
||||
{
|
||||
if ( ! is_string( $name ) )
|
||||
if ( ! \is_string( $name ) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -1781,7 +1746,7 @@ class Convert
|
||||
|
||||
foreach( $table['definition']['columns'] as $col => $val )
|
||||
{
|
||||
if ( in_array( mb_strtolower( $val['type'] ), static::$numericCols ) )
|
||||
if ( \in_array( mb_strtolower( $val['type'] ), static::$numericCols ) )
|
||||
{
|
||||
$return[] = $val['name'];
|
||||
}
|
||||
@@ -1798,7 +1763,7 @@ class Convert
|
||||
*/
|
||||
public static function getConvertableColumns( $name )
|
||||
{
|
||||
if ( ! is_string( $name ) )
|
||||
if ( ! \is_string( $name ) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -1808,7 +1773,7 @@ class Convert
|
||||
|
||||
foreach( $table['definition']['columns'] as $col => $val )
|
||||
{
|
||||
if ( in_array( mb_strtolower( $val['type'] ), static::$convertCols ) )
|
||||
if ( \in_array( mb_strtolower( $val['type'] ), static::$convertCols ) )
|
||||
{
|
||||
$return[] = $val['name'];
|
||||
}
|
||||
@@ -1840,7 +1805,7 @@ class Convert
|
||||
if (
|
||||
( $tablesOk ) AND
|
||||
( \IPSUtf8\Session::i()->current_charset == 'utf-8' or \IPSUtf8\Session::i()->current_charset == 'iso-8859-1' ) AND
|
||||
( ( is_callable( 'exec' ) AND false === stripos( ini_get( 'disable_functions' ), 'exec' ) ) )
|
||||
( ( \is_callable( 'exec' ) AND false === stripos( ini_get( 'disable_functions' ), 'exec' ) ) )
|
||||
)
|
||||
{
|
||||
try
|
||||
@@ -1852,7 +1817,7 @@ class Convert
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( ! array( $output ) or ! count( $output ) or ( ! stristr( implode( "\n", $output ), 'latin' ) ) )
|
||||
if ( ! array( $output ) or ! \count( $output ) or ( ! stristr( implode( "\n", $output ), 'latin' ) ) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -100,7 +100,7 @@ class Db extends \mysqli
|
||||
}
|
||||
|
||||
/* Connect */
|
||||
$classname = get_called_class();
|
||||
$classname = \get_called_class();
|
||||
self::$multitons[ $identifier ] = @new $classname(
|
||||
$connectionSettings['sql_host'],
|
||||
$connectionSettings['sql_user'],
|
||||
@@ -287,7 +287,7 @@ class Db extends \mysqli
|
||||
foreach ( $binds as $bindVal )
|
||||
{
|
||||
$i++;
|
||||
switch ( gettype( $bindVal ) )
|
||||
switch ( \gettype( $bindVal ) )
|
||||
{
|
||||
case 'boolean':
|
||||
case 'integer':
|
||||
@@ -356,7 +356,7 @@ class Db extends \mysqli
|
||||
/* Bind values */
|
||||
if( $bind->haveBinds() === TRUE )
|
||||
{
|
||||
call_user_func_array( array( $stmt, 'bind_param' ), $bind->get() );
|
||||
$stmt->bind_param( ...$bind->get() );
|
||||
}
|
||||
|
||||
/* Execute */
|
||||
@@ -372,7 +372,6 @@ class Db extends \mysqli
|
||||
}
|
||||
|
||||
const SELECT_DISTINCT = 1;
|
||||
const SELECT_SQL_CALC_FOUND_ROWS = 2;
|
||||
|
||||
/**
|
||||
* Build SELECT statement
|
||||
@@ -386,7 +385,6 @@ class Db extends \mysqli
|
||||
* @param array|string|NULL $having HAVING clause (same format as WHERE clause)
|
||||
* @param int $flags Bitwise flags
|
||||
* @li \IPSUtf8\Db::SELECT_DISTINCT Will use SELECT DISTINCT
|
||||
* @li \IPSUtf8\DB::SELECT_SQL_CALC_FOUND_ROWS Will add SQL_CALC_FOUND_ROWS
|
||||
* @return \IPSUtf8\Db\Select
|
||||
*
|
||||
*/
|
||||
@@ -400,13 +398,9 @@ class Db extends \mysqli
|
||||
{
|
||||
$query .= 'DISTINCT ';
|
||||
}
|
||||
if ( $flags & static::SELECT_SQL_CALC_FOUND_ROWS )
|
||||
{
|
||||
$query .= 'SQL_CALC_FOUND_ROWS ';
|
||||
}
|
||||
|
||||
/* Columns */
|
||||
if ( is_string( $columns ) )
|
||||
if ( \is_string( $columns ) )
|
||||
{
|
||||
$query .= $columns;
|
||||
}
|
||||
@@ -419,7 +413,7 @@ class Db extends \mysqli
|
||||
}
|
||||
|
||||
/* Tables */
|
||||
if ( is_array( $table ) )
|
||||
if ( \is_array( $table ) )
|
||||
{
|
||||
$query .= " FROM `{$this->prefix}{$table[0]}` AS `{$table[1]}`";
|
||||
}
|
||||
@@ -530,7 +524,7 @@ class Db extends \mysqli
|
||||
/* Is this just one row? */
|
||||
foreach ( $set as $k => $v )
|
||||
{
|
||||
if ( !is_array( $v ) )
|
||||
if ( !\is_array( $v ) )
|
||||
{
|
||||
$set = array( $set );
|
||||
}
|
||||
@@ -548,7 +542,7 @@ class Db extends \mysqli
|
||||
$columns = array_map( function( $val ){ return "`{$val}`"; }, array_keys( $row ) );
|
||||
}
|
||||
|
||||
if ( count( $set ) > 1 AND $bulkInsertNoPrep )
|
||||
if ( \count( $set ) > 1 AND $bulkInsertNoPrep )
|
||||
{
|
||||
if ( $tableDefinition === NULL )
|
||||
{
|
||||
@@ -559,7 +553,7 @@ class Db extends \mysqli
|
||||
{
|
||||
if ( isset( $tableDefinition['definition']['columns'][ $k ] ) )
|
||||
{
|
||||
$isInt = in_array( \mb_strtolower( $tableDefinition['definition']['columns'][ $k ]['type'] ), array( 'integer', 'int', 'smallint', 'tinyint', 'mediumint', 'bigint', 'decimal', 'numeric', 'float', 'double' ) );
|
||||
$isInt = \in_array( \mb_strtolower( $tableDefinition['definition']['columns'][ $k ]['type'] ), array( 'integer', 'int', 'smallint', 'tinyint', 'mediumint', 'bigint', 'decimal', 'numeric', 'float', 'double' ) );
|
||||
|
||||
if ( $isInt )
|
||||
{
|
||||
@@ -616,7 +610,7 @@ class Db extends \mysqli
|
||||
else
|
||||
{
|
||||
$binds = array_merge( $binds, array_values( $row ) );
|
||||
$values[] = '( ' . implode( ', ', array_fill( 0, count( $columns ), '?' ) ) . ' )';
|
||||
$values[] = '( ' . implode( ', ', array_fill( 0, \count( $columns ), '?' ) ) . ' )';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -631,7 +625,7 @@ class Db extends \mysqli
|
||||
}
|
||||
|
||||
/* Run */
|
||||
if ( count( $set ) > 1 AND $bulkInsertNoPrep )
|
||||
if ( \count( $set ) > 1 AND $bulkInsertNoPrep )
|
||||
{
|
||||
$stmt = $this->query( $query );
|
||||
return $this->insert_id;
|
||||
@@ -655,7 +649,7 @@ class Db extends \mysqli
|
||||
public function replace( $table, $set )
|
||||
{
|
||||
$columns = implode( ', ', array_map( function( $val ){ return "`{$val}`"; }, array_keys( $set ) ) );
|
||||
$query = "REPLACE INTO `{$this->prefix}{$table}` ( " . $columns . " ) VALUES ( " . implode( ', ', array_fill( 0, count( $set ), '?' ) ) . " )";
|
||||
$query = "REPLACE INTO `{$this->prefix}{$table}` ( " . $columns . " ) VALUES ( " . implode( ', ', array_fill( 0, \count( $set ), '?' ) ) . " )";
|
||||
|
||||
$stmt = $this->preparedQuery( $query, array_values( $set ) );
|
||||
return $stmt->affected_rows;
|
||||
@@ -678,13 +672,13 @@ class Db extends \mysqli
|
||||
$binds = array();
|
||||
|
||||
/* Work out table */
|
||||
$table = is_array( $table ) ? "`{$this->prefix}{$table[0]}` {$this->prefix}{$table[1]}" : "`{$this->prefix}{$table}`";
|
||||
$table = \is_array( $table ) ? "`{$this->prefix}{$table[0]}` {$this->prefix}{$table[1]}" : "`{$this->prefix}{$table}`";
|
||||
|
||||
/* Work out joins */
|
||||
foreach ( $joins as $join )
|
||||
{
|
||||
$type = ( isset( $join['type'] ) and in_array( strtoupper( $join['type'] ), array( 'LEFT', 'INNER', 'RIGHT' ) ) ) ? strtoupper( $join['type'] ) : 'LEFT';
|
||||
$_table = is_array( $join['from'] ) ? "`{$this->prefix}{$join['from'][0]}` {$this->prefix}{$join['from'][1]}" : $join['from'];
|
||||
$type = ( isset( $join['type'] ) and \in_array( strtoupper( $join['type'] ), array( 'LEFT', 'INNER', 'RIGHT' ) ) ) ? strtoupper( $join['type'] ) : 'LEFT';
|
||||
$_table = \is_array( $join['from'] ) ? "`{$this->prefix}{$join['from'][0]}` {$this->prefix}{$join['from'][1]}" : $join['from'];
|
||||
|
||||
$on = $this->compileWhereClause( $join['where'] );
|
||||
$binds = array_merge( $binds, $on['binds'] );
|
||||
@@ -694,7 +688,7 @@ class Db extends \mysqli
|
||||
$joins = empty( $joins ) ? '' : ( ' ' . implode( "\n", $joins ) );
|
||||
|
||||
/* Work out SET clause */
|
||||
if ( is_array( $set ) )
|
||||
if ( \is_array( $set ) )
|
||||
{
|
||||
$_set = array();
|
||||
foreach ( $set as $k => $v )
|
||||
@@ -782,13 +776,13 @@ class Db extends \mysqli
|
||||
{
|
||||
$return = array( 'clause' => '1=1', 'binds' => array() );
|
||||
|
||||
if( is_string( $data ) )
|
||||
if( \is_string( $data ) )
|
||||
{
|
||||
$return['clause'] = $data;
|
||||
}
|
||||
elseif ( is_array( $data ) and ! empty( $data ) )
|
||||
elseif ( \is_array( $data ) and ! empty( $data ) )
|
||||
{
|
||||
if ( is_string( $data[0] ) )
|
||||
if ( \is_string( $data[0] ) )
|
||||
{
|
||||
$data = array( $data );
|
||||
}
|
||||
@@ -796,7 +790,7 @@ class Db extends \mysqli
|
||||
$clauses = array();
|
||||
foreach ( $data as $bit )
|
||||
{
|
||||
if( !is_array( $bit ) )
|
||||
if( !\is_array( $bit ) )
|
||||
{
|
||||
$clauses[] = $bit;
|
||||
}
|
||||
@@ -822,14 +816,14 @@ class Db extends \mysqli
|
||||
protected function compileLimitClause( $data )
|
||||
{
|
||||
$limit = NULL;
|
||||
if( is_array( $data ) )
|
||||
if( \is_array( $data ) )
|
||||
{
|
||||
$offset = intval( $data[0] );
|
||||
$limit = intval( $data[1] );
|
||||
$offset = \intval( $data[0] );
|
||||
$limit = \intval( $data[1] );
|
||||
}
|
||||
else
|
||||
{
|
||||
$offset = intval( $data );
|
||||
$offset = \intval( $data );
|
||||
}
|
||||
|
||||
if( $limit !== NULL )
|
||||
@@ -875,18 +869,18 @@ class Db extends \mysqli
|
||||
|
||||
/* Some types specify length */
|
||||
if(
|
||||
in_array( $data['type'], array( 'VARCHAR', 'VARBINARY' ) )
|
||||
\in_array( $data['type'], array( 'VARCHAR', 'VARBINARY' ) )
|
||||
or
|
||||
(
|
||||
isset( $data['length'] ) and $data['length']
|
||||
and
|
||||
in_array( $data['type'], array( 'BIT', 'TINYINT', 'SMALLINT', 'MEDIUMINT', 'INT', 'INTEGER', 'BIGINT', 'REAL', 'DOUBLE', 'FLOAT', 'DECIMAL', 'NUMERIC', 'CHAR', 'BINARY' ) )
|
||||
\in_array( $data['type'], array( 'BIT', 'TINYINT', 'SMALLINT', 'MEDIUMINT', 'INT', 'INTEGER', 'BIGINT', 'REAL', 'DOUBLE', 'FLOAT', 'DECIMAL', 'NUMERIC', 'CHAR', 'BINARY' ) )
|
||||
)
|
||||
) {
|
||||
$definition .= "({$data['length']}";
|
||||
|
||||
/* And some of those specify decimals (which may or may not be optional) */
|
||||
if( in_array( $data['type'], array( 'REAL', 'DOUBLE', 'FLOAT' ) ) or ( in_array( $data['type'], array( 'DECIMAL', 'NUMERIC' ) ) and isset( $data['decimals'] ) ) )
|
||||
if( \in_array( $data['type'], array( 'REAL', 'DOUBLE', 'FLOAT' ) ) or ( \in_array( $data['type'], array( 'DECIMAL', 'NUMERIC' ) ) and isset( $data['decimals'] ) ) )
|
||||
{
|
||||
$definition .= ',' . $data['decimals'];
|
||||
}
|
||||
@@ -895,7 +889,7 @@ class Db extends \mysqli
|
||||
}
|
||||
|
||||
/* Numeric types can be UNSIGNED and ZEROFILL */
|
||||
if( in_array( $data['type'], array( 'TINYINT', 'SMALLINT', 'MEDIUMINT', 'INT', 'INTEGER', 'BIGINT', 'REAL', 'DOUBLE', 'FLOAT', 'DECIMAL', 'NUMERIC' ) ) )
|
||||
if( \in_array( $data['type'], array( 'TINYINT', 'SMALLINT', 'MEDIUMINT', 'INT', 'INTEGER', 'BIGINT', 'REAL', 'DOUBLE', 'FLOAT', 'DECIMAL', 'NUMERIC' ) ) )
|
||||
{
|
||||
if( isset( $data['unsigned'] ) and $data['unsigned'] === TRUE )
|
||||
{
|
||||
@@ -908,7 +902,7 @@ class Db extends \mysqli
|
||||
}
|
||||
|
||||
/* ENUM and SETs have values */
|
||||
if( in_array( $data['type'], array( 'ENUM', 'SET' ) ) )
|
||||
if( \in_array( $data['type'], array( 'ENUM', 'SET' ) ) )
|
||||
{
|
||||
$values = array();
|
||||
foreach ( $data['values'] as $v )
|
||||
@@ -920,13 +914,13 @@ class Db extends \mysqli
|
||||
}
|
||||
|
||||
/* Some types can be binary or not */
|
||||
if( isset( $data['binary'] ) and $data['binary'] === TRUE and in_array( $data['type'], array( 'CHAR', 'VARCHAR', 'TINYTEXT', 'TEXT', 'MEDIUMTEXT', 'LONGTEXT' ) ) )
|
||||
if( isset( $data['binary'] ) and $data['binary'] === TRUE and \in_array( $data['type'], array( 'CHAR', 'VARCHAR', 'TINYTEXT', 'TEXT', 'MEDIUMTEXT', 'LONGTEXT' ) ) )
|
||||
{
|
||||
$definition .= 'BINARY ';
|
||||
}
|
||||
|
||||
/* Text types specify a character set and collation */
|
||||
if( in_array( $data['type'], array( 'CHAR', 'VARCHAR', 'TINYTEXT', 'TEXT', 'MEDIUMTEXT', 'LONGTEXT', 'ENUM', 'SET' ) ) )
|
||||
if( \in_array( $data['type'], array( 'CHAR', 'VARCHAR', 'TINYTEXT', 'TEXT', 'MEDIUMTEXT', 'LONGTEXT', 'ENUM', 'SET' ) ) )
|
||||
{
|
||||
$definition .= "CHARACTER SET {$this->charset} COLLATE {$this->collation} ";
|
||||
}
|
||||
@@ -942,13 +936,13 @@ class Db extends \mysqli
|
||||
}
|
||||
|
||||
/* Default value */
|
||||
if( isset( $data['default'] ) and !in_array( $data['type'], array( 'TINYTEXT', 'TEXT', 'MEDIUMTEXT', 'LONGTEXT', 'BLOB', 'MEDIUMBLOB', 'BIGBLOB' ) ) )
|
||||
if( isset( $data['default'] ) and !\in_array( $data['type'], array( 'TINYTEXT', 'TEXT', 'MEDIUMTEXT', 'LONGTEXT', 'BLOB', 'MEDIUMBLOB', 'BIGBLOB' ) ) )
|
||||
{
|
||||
$defaultValue = in_array( $data['type'], array( 'TINYINT', 'SMALLINT', 'MEDIUMINT', 'INT', 'INTEGER', 'BIGINT', 'REAL', 'DOUBLE', 'FLOAT', 'DECIMAL', 'NUMERIC', 'BIT' ) ) ? floatval( $data['default'] ) : ( ! in_array( $data['default'], array( 'CURRENT_TIMESTAMP' ) ) ? '\'' . $this->escape_string( $data['default'] ) . '\'' : $data['default'] );
|
||||
$defaultValue = \in_array( $data['type'], array( 'TINYINT', 'SMALLINT', 'MEDIUMINT', 'INT', 'INTEGER', 'BIGINT', 'REAL', 'DOUBLE', 'FLOAT', 'DECIMAL', 'NUMERIC', 'BIT' ) ) ? \floatval( $data['default'] ) : ( ! \in_array( $data['default'], array( 'CURRENT_TIMESTAMP' ) ) ? '\'' . $this->escape_string( $data['default'] ) . '\'' : $data['default'] );
|
||||
|
||||
/* Strict Mode isn't nice */
|
||||
$toTest = trim( $defaultValue, "'" );
|
||||
if ( in_array( $data['type'], array( 'DATETIME' ) ) AND empty( $toTest ) ) # array here in case we need to expand later
|
||||
if ( \in_array( $data['type'], array( 'DATETIME' ) ) AND empty( $toTest ) ) # array here in case we need to expand later
|
||||
{
|
||||
$defaultValue = '\'0000-00-00 00:00:00\'';
|
||||
}
|
||||
@@ -1030,7 +1024,7 @@ class Db extends \mysqli
|
||||
$definition .= '(' . implode( ',', array_map( function ( $val, $len )
|
||||
{
|
||||
return ( ! empty( $len ) ) ? "`{$val}`({$len})" : "`{$val}`";
|
||||
}, $data['columns'], ( ( isset( $data['length'] ) AND is_array( $data['length'] ) ) ? $data['length'] : array_fill( 0, count( $data['columns'] ), null ) ) ) ) . ')';
|
||||
}, $data['columns'], ( ( isset( $data['length'] ) AND \is_array( $data['length'] ) ) ? $data['length'] : array_fill( 0, \count( $data['columns'] ), null ) ) ) ) . ')';
|
||||
|
||||
/* Return */
|
||||
return $definition;
|
||||
@@ -1199,7 +1193,7 @@ class Db extends \mysqli
|
||||
{
|
||||
return '`' . $prefix . $val . '`';
|
||||
},
|
||||
( is_array( $table ) ? $table : array( $table ) )
|
||||
( \is_array( $table ) ? $table : array( $table ) )
|
||||
) )
|
||||
);
|
||||
}
|
||||
@@ -1260,10 +1254,10 @@ class Db extends \mysqli
|
||||
else
|
||||
{
|
||||
$lengthInfo = explode( ',', $matches[2] );
|
||||
$columnDefinition['length'] = intval( $lengthInfo[0] );
|
||||
$columnDefinition['length'] = \intval( $lengthInfo[0] );
|
||||
if( isset( $lengthInfo[1] ) )
|
||||
{
|
||||
$columnDefinition['decimals'] = intval( $lengthInfo[1] );
|
||||
$columnDefinition['decimals'] = \intval( $lengthInfo[1] );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1276,10 +1270,10 @@ class Db extends \mysqli
|
||||
}
|
||||
|
||||
/* unsigned? */
|
||||
$columnDefinition['unsigned'] = in_array( 'unsigned', $typeInfo );
|
||||
$columnDefinition['unsigned'] = \in_array( 'unsigned', $typeInfo );
|
||||
|
||||
/* zerofill? */
|
||||
$columnDefinition['zerofill'] = in_array( 'zerofill', $typeInfo );
|
||||
$columnDefinition['zerofill'] = \in_array( 'zerofill', $typeInfo );
|
||||
|
||||
/* binary? */
|
||||
$columnDefinition['binary'] = ( $row['Collation'] === $this->binaryCollation );
|
||||
@@ -1313,7 +1307,7 @@ class Db extends \mysqli
|
||||
$query = $this->query( "SHOW INDEXES FROM `{$this->prefix}{$table}`" );
|
||||
while ( $row = $query->fetch_assoc() )
|
||||
{
|
||||
$length = ( isset( $row['Sub_part'] ) AND ! empty( $row['Sub_part'] ) ) ? intval( $row['Sub_part'] ) : null;
|
||||
$length = ( isset( $row['Sub_part'] ) AND ! empty( $row['Sub_part'] ) ) ? \intval( $row['Sub_part'] ) : null;
|
||||
|
||||
if( isset( $indexes[ $row['Key_name'] ] ) )
|
||||
{
|
||||
@@ -1499,11 +1493,11 @@ class Db extends \mysqli
|
||||
|
||||
foreach( $values as $i )
|
||||
{
|
||||
if ( $i and is_numeric( $i ) )
|
||||
if ( $i and \is_numeric( $i ) )
|
||||
{
|
||||
$where[] = "FIND_IN_SET(" . $i . "," . $column . ")";
|
||||
}
|
||||
else if ( $i and is_string( $i ) )
|
||||
else if ( $i and \is_string( $i ) )
|
||||
{
|
||||
$in[] = "'" . $this->real_escape_string( $i ) . "'";
|
||||
}
|
||||
@@ -1521,7 +1515,7 @@ class Db extends \mysqli
|
||||
$return[] = $column . ' IN(' . implode( ',', $in ) . ')';
|
||||
}
|
||||
|
||||
if ( count( $return ) )
|
||||
if ( \count( $return ) )
|
||||
{
|
||||
return '(' . implode( ' OR ', $return ) . ')';
|
||||
}
|
||||
|
||||
@@ -52,7 +52,7 @@ class Exception extends \RuntimeException
|
||||
public function shouldSendDiagnosticsReport()
|
||||
{
|
||||
/* Low-end server errors */
|
||||
if ( $this->getCode() < 1046 or in_array( $this->getCode(), array( 1129, 1130, 1194, 1195, 1203 ) ) )
|
||||
if ( $this->getCode() < 1046 or \in_array( $this->getCode(), array( 1129, 1130, 1194, 1195, 1203 ) ) )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -84,7 +84,7 @@ class Select implements \Iterator, \Countable
|
||||
break;
|
||||
}
|
||||
|
||||
if ( is_array( $table ) )
|
||||
if ( \is_array( $table ) )
|
||||
{
|
||||
$query .= " `{$this->db->prefix}{$table[0]}` AS `{$table[1]}`";
|
||||
}
|
||||
@@ -147,7 +147,7 @@ class Select implements \Iterator, \Countable
|
||||
$this->rewind();
|
||||
}
|
||||
|
||||
if ( !in_array( $column, $this->columns ) )
|
||||
if ( !\in_array( $column, $this->columns ) )
|
||||
{
|
||||
throw new \InvalidArgumentException;
|
||||
}
|
||||
@@ -170,7 +170,7 @@ class Select implements \Iterator, \Countable
|
||||
$this->rewind();
|
||||
}
|
||||
|
||||
if ( !in_array( $column, $this->columns ) )
|
||||
if ( !\in_array( $column, $this->columns ) )
|
||||
{
|
||||
throw new \InvalidArgumentException;
|
||||
}
|
||||
@@ -225,7 +225,7 @@ class Select implements \Iterator, \Countable
|
||||
$params[] = &$this->row[ $field->name ];
|
||||
}
|
||||
$this->columns = array_keys( $this->row );
|
||||
call_user_func_array( array( $this->stmt, 'bind_result' ), $params );
|
||||
$this->stmt->bind_result( ...$params );
|
||||
|
||||
/* Get the first result */
|
||||
$this->key = -1;
|
||||
@@ -243,7 +243,7 @@ class Select implements \Iterator, \Countable
|
||||
{
|
||||
return $this->row[ $this->valueField ];
|
||||
}
|
||||
elseif ( count( $this->row ) === 1 )
|
||||
elseif ( \count( $this->row ) === 1 )
|
||||
{
|
||||
foreach ( $this->row as $v )
|
||||
{
|
||||
@@ -305,24 +305,15 @@ class Select implements \Iterator, \Countable
|
||||
/**
|
||||
* [Countable] Get number of rows
|
||||
*
|
||||
* @param bool $allRows If TRUE, will get the number of rows ignoring the limit. In order for this to work, the query must have been ran with SQL_CALC_FOUND_ROWS
|
||||
* @return int
|
||||
*/
|
||||
public function count( $allRows = FALSE )
|
||||
public function count()
|
||||
{
|
||||
if ( !$this->stmt )
|
||||
{
|
||||
$this->rewind();
|
||||
}
|
||||
|
||||
if ( $allRows )
|
||||
{
|
||||
$result = $this->db->query( 'SELECT FOUND_ROWS() AS count;' )->fetch_assoc();
|
||||
return $result['count'];
|
||||
}
|
||||
else
|
||||
{
|
||||
return $this->stmt->num_rows;
|
||||
}
|
||||
return $this->stmt->num_rows;
|
||||
}
|
||||
}
|
||||
@@ -31,7 +31,7 @@ abstract class Controller
|
||||
|
||||
if ( $method !== NULL AND method_exists( $this, $method ) )
|
||||
{
|
||||
call_user_func( array( $this, $method ) );
|
||||
$this->$method();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -39,7 +39,7 @@ abstract class Dispatcher
|
||||
{
|
||||
if( self::$instance === NULL )
|
||||
{
|
||||
$classname = get_called_class();
|
||||
$classname = \get_called_class();
|
||||
if ( $classname === 'IPSUtf8\Dispatcher' )
|
||||
{
|
||||
self::$instance = new \IPSUtf8\Dispatcher\Browser;
|
||||
|
||||
@@ -18,7 +18,7 @@ class Template
|
||||
public static function wrapper( $title="IPS Converter", $content="", $isError=false )
|
||||
{
|
||||
$iniTime = @ini_get('max_execution_time');
|
||||
$execTime = ( is_numeric( $iniTime ) ) ? $iniTime : 30;
|
||||
$execTime = ( \is_numeric( $iniTime ) ) ? $iniTime : 30;
|
||||
$url = \IPSUtf8\Output\Browser::$url;
|
||||
$title = ( empty( $title ) ) ? 'IPS Converter' : $title;
|
||||
$active = array( 'convert' => '', 'tools' => '', 'archive' => '' );
|
||||
@@ -191,7 +191,7 @@ EOFHTML;
|
||||
<br>To override this and unlock the UTF8 converter, please create a file called "constants.php" and upload it to your /admin/convertutf8/ directory with the following contents:
|
||||
</p>
|
||||
<p><textarea class="form-control" style="height:90px;"><?php
|
||||
define( 'BYPASS_SAFETY_LOCK', true );
|
||||
\\define( 'BYPASS_SAFETY_LOCK', true );
|
||||
|
||||
</textarea>
|
||||
</p>
|
||||
@@ -212,7 +212,7 @@ EOFHTML;
|
||||
$canUseMb4 = ( version_compare( \IPSUtf8\Db::i()->server_info, '5.5.3', '>=' ) AND \IPSUtf8\Db::i('utf8')->set_charset('utf8mb4') !== FALSE );
|
||||
\IPSUtf8\Db::i('utf8')->set_charset( $origUtf8Charset );
|
||||
$badCollations = $convertClass::i()->getNonUtf8CollationTables();
|
||||
$badTablesCnt = count( $convertClass::i()->getNonUtf8Tables() );
|
||||
$badTablesCnt = \count( $convertClass::i()->getNonUtf8Tables() );
|
||||
$path = ROOT_PATH;
|
||||
$dbCharSetIsCorrect = TRUE;
|
||||
$isUtf8mb4 = ( $isUtf8 === TRUE AND \IPSUtf8\Convert::i()->database_charset == 'utf8mb4' );
|
||||
@@ -220,7 +220,7 @@ EOFHTML;
|
||||
if ( file_exists( ROOT_PATH . '/conf_global.php' ) )
|
||||
{
|
||||
require_once( ROOT_PATH . '/conf_global.php' );
|
||||
if ( !isset( $INFO['sql_charset'] ) OR ! in_array( $INFO['sql_charset'], array( 'utf8', 'utf8mb4' ) ) )
|
||||
if ( !isset( $INFO['sql_charset'] ) OR ! \in_array( $INFO['sql_charset'], array( 'utf8', 'utf8mb4' ) ) )
|
||||
{
|
||||
$dbCharSetIsCorrect = FALSE;
|
||||
}
|
||||
@@ -257,9 +257,9 @@ EOFHTML;
|
||||
}
|
||||
else if ( $isUtf8 === true )
|
||||
{
|
||||
if ( count( $badCollations ) )
|
||||
if ( \count( $badCollations ) )
|
||||
{
|
||||
$cnt = count( $badCollations );
|
||||
$cnt = \count( $badCollations );
|
||||
$html .= <<<EOFHTML
|
||||
<p class="text-info">
|
||||
The database is set to UTF-8, however {$cnt} table(s) have incorrect collations and need fixing.
|
||||
@@ -282,33 +282,21 @@ EOFHTML;
|
||||
}
|
||||
|
||||
if ( ! $isUtf8 and $canUseMb4 )
|
||||
{
|
||||
$buttonLabel = ( $isUtf8 ) ? "Convert anyway using 4-Byte UTF-8 (utf8mb4)" : "Start using 4-Byte UTF-8 (utf8mb4)";
|
||||
|
||||
{
|
||||
$text = ( $status === 'processing' ) ? "Continue Conversion" : "Begin Conversion";
|
||||
|
||||
$html .= <<<EOFHTML
|
||||
<p>
|
||||
<a data-status="Start" class="btn btn-lg btn-info" href="{url="?controller={$controller}&do=process&use_utf8mb4=1"}">{$buttonLabel}</a>
|
||||
<br />
|
||||
<div class='small'>
|
||||
<small>
|
||||
Some non-common symbols (such as historical scripts, music symbols and Emoji) require more space in the database to be stored. If you choose to convert using 4-Byte UTF-8, these characters will be able to be used, but the database will use more disk space.
|
||||
</small>
|
||||
</div>
|
||||
<a data-status="{$status}" class="btn btn-lg btn-info" href="{url="?controller={$controller}&do=process&use_utf8mb4=1"}">{$text}</a>
|
||||
</p>
|
||||
EOFHTML;
|
||||
}
|
||||
|
||||
if ( ! $isUtf8 )
|
||||
if ( ! $isUtf8 and !$canUseMb4 )
|
||||
{
|
||||
$label = 'Start using UTF-8 (utf8)';
|
||||
$label = 'Start using UTF-8 (utf8)';
|
||||
$selector = 'btn-success';
|
||||
$more = <<<EOFHTML
|
||||
<br />
|
||||
<div class='small'>
|
||||
<small>
|
||||
Choose this if you don't wish to store non-common symbols (such as historical scripts, music symbols and Emoji) and wish to use less disk space.
|
||||
</small>
|
||||
</div>
|
||||
<br>
|
||||
<div class='small'>
|
||||
<small>
|
||||
@@ -336,11 +324,11 @@ if ( $status === 'processing' )
|
||||
}
|
||||
else if ( ! $isUtf8 )
|
||||
{
|
||||
$label = "Convert as UTF-8 (utf8)";
|
||||
$label = "Begin Conversion";
|
||||
$selector = 'btn-info';
|
||||
}
|
||||
|
||||
if ( $label and $selector )
|
||||
if ( $label and $selector AND ! $isUtf8 and ! $canUseMb4 )
|
||||
{
|
||||
$html .= <<<EOFHTML
|
||||
<p>
|
||||
|
||||
@@ -35,7 +35,7 @@ abstract class Output
|
||||
{
|
||||
if( static::$instance === NULL )
|
||||
{
|
||||
$classname = get_called_class();
|
||||
$classname = \get_called_class();
|
||||
static::$instance = new $classname;
|
||||
}
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ class Singleton implements \Iterator
|
||||
{
|
||||
if( static::$instance === NULL )
|
||||
{
|
||||
$classname = get_called_class();
|
||||
$classname = \get_called_class();
|
||||
static::$instance = new $classname;
|
||||
}
|
||||
|
||||
|
||||
@@ -103,7 +103,7 @@ class Request extends \IPSUtf8\Patterns\Singleton
|
||||
{
|
||||
foreach( $data as $k => $v )
|
||||
{
|
||||
if ( is_array( $v ) )
|
||||
if ( \is_array( $v ) )
|
||||
{
|
||||
array_walk_recursive( $v, array( $this, 'clean' ) );
|
||||
}
|
||||
@@ -127,12 +127,6 @@ class Request extends \IPSUtf8\Patterns\Singleton
|
||||
{
|
||||
/* Remove NULL bytes and the RTL control byte */
|
||||
$v = str_replace( array( "\0", "\u202E" ), '', $v );
|
||||
|
||||
/* Undo magic quote madness */
|
||||
if ( get_magic_quotes_gpc() === 1 )
|
||||
{
|
||||
$v = stripslashes( $v );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -361,7 +361,7 @@ class Session
|
||||
$allTables = array();
|
||||
$data = array( 'version' => \IPSUtf8\Convert::VERSION_ID, 'tableCount' => 0, 'totalCount' => 0, 'convertedCount' => 0, 'charSets' => array() );
|
||||
|
||||
if ( defined( 'FORCE_CONVERT' ) AND FORCE_CONVERT === TRUE )
|
||||
if ( \defined( 'FORCE_CONVERT' ) AND FORCE_CONVERT === TRUE )
|
||||
{
|
||||
$data['force_conversion'] = 1;
|
||||
}
|
||||
@@ -406,7 +406,7 @@ class Session
|
||||
foreach( $tables as $table )
|
||||
{
|
||||
/* Get count */
|
||||
$row = \IPSUtf8\Db::i()->query( "SELECT COUNT(*) as count FROM `" . \IPSUtf8\Db::i()->prefix . "{$table}`" )->fetch_assoc();
|
||||
$row = \IPSUtf8\Db::i()->query( "SELECT count(*) as count FROM `" . \IPSUtf8\Db::i()->prefix . "{$table}`" )->fetch_assoc();
|
||||
$count = $row['count'];
|
||||
|
||||
$data['totalCount'] += $count;
|
||||
@@ -485,6 +485,9 @@ class Session
|
||||
'count' => $count,
|
||||
'charset' => $tblCharset
|
||||
);
|
||||
|
||||
/* Ping the UTF8 connection just in case this process takes a while, so that connection doesn't die on us */
|
||||
\IPSUtf8\Db::i('utf8')->ping();
|
||||
}
|
||||
|
||||
return array( 'tables' => $allTables, 'data' => $data );
|
||||
@@ -513,7 +516,7 @@ class Session
|
||||
|
||||
if( isset( $this->_data[ $key ] ) )
|
||||
{
|
||||
if ( mb_substr( $key, -5 ) == '_json' AND ! is_array( $this->_data[ $key ] ) )
|
||||
if ( mb_substr( $key, -5 ) == '_json' AND ! \is_array( $this->_data[ $key ] ) )
|
||||
{
|
||||
$this->_data[ $key ] = json_decode( $this->_data[ $key ], true );
|
||||
}
|
||||
@@ -606,19 +609,19 @@ class Session
|
||||
/* JSON encode if required */
|
||||
foreach ( array_merge( $this->_data, $this->changed ) as $k => $v )
|
||||
{
|
||||
$insert[ $k ] = ( mb_substr( $k, -5 ) == '_json' AND is_array( $v ) ) ? json_encode( $v, true ) : $v;
|
||||
$insert[ $k ] = ( mb_substr( $k, -5 ) == '_json' AND \is_array( $v ) ) ? json_encode( $v, true ) : $v;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach ( $this->_data as $k => $v )
|
||||
{
|
||||
$insert[ $k ] = ( mb_substr( $k, -5 ) == '_json' AND is_array( $v ) ) ? json_encode( $v, true ) : $v;
|
||||
$insert[ $k ] = ( mb_substr( $k, -5 ) == '_json' AND \is_array( $v ) ) ? json_encode( $v, true ) : $v;
|
||||
}
|
||||
}
|
||||
|
||||
/* Save */
|
||||
if ( count( $insert ) == count( static::$sessionTableColumns ) )
|
||||
if ( \count( $insert ) == \count( static::$sessionTableColumns ) )
|
||||
{
|
||||
\IPSUtf8\Db::i('utf8')->update( 'convert_session', $insert );
|
||||
}
|
||||
@@ -637,14 +640,14 @@ class Session
|
||||
*/
|
||||
public function arrayWalkRecursive( $array, $callback )
|
||||
{
|
||||
if ( ! is_array( $array ) )
|
||||
if ( ! \is_array( $array ) )
|
||||
{
|
||||
trigger_error( "\$array is not an array in \IPSUtf8\Session::arrayWalkRecursive()", E_USER_ERROR );
|
||||
}
|
||||
|
||||
foreach( $array AS $key => $value )
|
||||
{
|
||||
if ( is_array( $array[$key] ) )
|
||||
if ( \is_array( $array[$key] ) )
|
||||
{
|
||||
$array[$key] = static::arrayWalkRecursive( $array[$key], $callback );
|
||||
}
|
||||
|
||||
@@ -51,15 +51,15 @@ abstract class Charset
|
||||
/* Try and pick best available */
|
||||
if ( FORCE_CONVERT_METHOD === NULL )
|
||||
{
|
||||
if ( function_exists( 'mb_convert_encoding' ) )
|
||||
if ( \function_exists( 'mb_convert_encoding' ) )
|
||||
{
|
||||
self::$method = 'mb';
|
||||
}
|
||||
else if ( function_exists( 'iconv' ) )
|
||||
else if ( \function_exists( 'iconv' ) )
|
||||
{
|
||||
self::$method = 'iconv';
|
||||
}
|
||||
else if ( function_exists( 'recode_string' ) )
|
||||
else if ( \function_exists( 'recode_string' ) )
|
||||
{
|
||||
self::$method = 'recode';
|
||||
}
|
||||
@@ -103,7 +103,7 @@ abstract class Charset
|
||||
$to = strtolower($to);
|
||||
|
||||
/* Return bools, null, ints, etc. */
|
||||
if ( ! is_string( $string ) )
|
||||
if ( ! \is_string( $string ) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ class Iconv extends \IPSUtf8\Text\Charset
|
||||
return $string;
|
||||
}
|
||||
|
||||
if ( function_exists( 'iconv' ) )
|
||||
if ( \function_exists( 'iconv' ) )
|
||||
{
|
||||
$text = iconv( $from, $to.'//TRANSLIT', $string );
|
||||
}
|
||||
|
||||
@@ -79,7 +79,7 @@ class Internal extends \IPSUtf8\Text\Charset
|
||||
|
||||
$charsetTable = $charsetTables[ $from ];
|
||||
|
||||
if( !count($charsetTable) )
|
||||
if( !\count($charsetTable) )
|
||||
{
|
||||
static::$errors[] = "Character set table not found";
|
||||
return $original;
|
||||
@@ -92,7 +92,7 @@ class Internal extends \IPSUtf8\Text\Charset
|
||||
{
|
||||
$hexChar = "";
|
||||
$unicodeHexChar = "";
|
||||
$hexChar = strtoupper(dechex(ord($string[$i])));
|
||||
$hexChar = strtoupper(dechex(\ord($string[$i])));
|
||||
|
||||
// This is fix from Mario Klingemann, it prevents
|
||||
// droping chars below 16 because of missing leading 0 [zeros]
|
||||
@@ -106,17 +106,17 @@ class Internal extends \IPSUtf8\Text\Charset
|
||||
if ( ( $from == "gsm0338" ) && ( $hexChar == '1B' ) )
|
||||
{
|
||||
$i++;
|
||||
$hexChar .= strtoupper(dechex(ord($string[$i])));
|
||||
$hexChar .= strtoupper(dechex(\ord($string[$i])));
|
||||
}
|
||||
|
||||
if ( $to != "utf-8" )
|
||||
{
|
||||
if ( in_array( $hexChar, $charsetTable[$from] ) )
|
||||
if ( \in_array( $hexChar, $charsetTable[$from] ) )
|
||||
{
|
||||
$unicodeHexChar = array_search( $hexChar, $charsetTable[$from] );
|
||||
$unicodeHexChars = explode( "+",$unicodeHexChar );
|
||||
|
||||
for( $unicodeHexCharElement = 0; $unicodeHexCharElement < count($unicodeHexChars); $unicodeHexCharElement++ )
|
||||
for( $unicodeHexCharElement = 0; $unicodeHexCharElement < \count($unicodeHexChars); $unicodeHexCharElement++ )
|
||||
{
|
||||
if ( array_key_exists( $unicodeHexChars[$unicodeHexCharElement], $charsetTable[$to] ) )
|
||||
{
|
||||
@@ -126,7 +126,7 @@ class Internal extends \IPSUtf8\Text\Charset
|
||||
}
|
||||
else
|
||||
{
|
||||
$text .= chr(hexdec($charsetTable[$to][$unicodeHexChars[$unicodeHexCharElement]]));
|
||||
$text .= \chr(hexdec($charsetTable[$to][$unicodeHexChars[$unicodeHexCharElement]]));
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -144,7 +144,7 @@ class Internal extends \IPSUtf8\Text\Charset
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( in_array( $hexChar, $charsetTable[$from] ) )
|
||||
if ( \in_array( $hexChar, $charsetTable[$from] ) )
|
||||
{
|
||||
$unicodeHexChar = array_search( $hexChar, $charsetTable[$from] );
|
||||
$unicodeHexChars = explode( "+", $unicodeHexChar );
|
||||
@@ -158,7 +158,7 @@ class Internal extends \IPSUtf8\Text\Charset
|
||||
* In Mazowia we have 007A+0142, but sometimes it can look like this
|
||||
* 0x007A+0x0142+0x2034 (that string means nothing, it just shows the possibility...)
|
||||
*/
|
||||
for( $unicodeHexCharElement = 0; $unicodeHexCharElement < count($unicodeHexChars); $unicodeHexCharElement++)
|
||||
for( $unicodeHexCharElement = 0; $unicodeHexCharElement < \count($unicodeHexChars); $unicodeHexCharElement++)
|
||||
{
|
||||
if ( self::$entities == true )
|
||||
{
|
||||
@@ -189,7 +189,7 @@ class Internal extends \IPSUtf8\Text\Charset
|
||||
$unicodeHexChar = "";
|
||||
$charsetTable = self::_makeConversionTable( $to );
|
||||
|
||||
if( is_array($charsetTable[$to]) AND count($charsetTable[$to]) )
|
||||
if( \is_array($charsetTable[$to]) AND \count($charsetTable[$to]) )
|
||||
{
|
||||
foreach ( $charsetTable[$to] as $unicodeHexChar => $hexChar )
|
||||
{
|
||||
@@ -199,7 +199,7 @@ class Internal extends \IPSUtf8\Text\Charset
|
||||
}
|
||||
else
|
||||
{
|
||||
$entityOrChar = chr(hexdec($hexChar));
|
||||
$entityOrChar = \chr(hexdec($hexChar));
|
||||
}
|
||||
|
||||
$string = str_replace( self::_hexToUtf( $unicodeHexChar), $entityOrChar, $string );
|
||||
@@ -227,7 +227,7 @@ class Internal extends \IPSUtf8\Text\Charset
|
||||
for( $charPosition = 0; $charPosition < $stringLength; $charPosition++ )
|
||||
{
|
||||
$char = $unicodeString [$charPosition];
|
||||
$asciiChar = ord ($char);
|
||||
$asciiChar = \ord ($char);
|
||||
|
||||
if ($asciiChar < 128) //1 7 0bbbbbbb (127)
|
||||
{
|
||||
@@ -238,7 +238,7 @@ class Internal extends \IPSUtf8\Text\Charset
|
||||
$firstByte = ($asciiChar & 31);
|
||||
$charPosition++;
|
||||
$char = $unicodeString [$charPosition];
|
||||
$asciiChar = ord ($char);
|
||||
$asciiChar = \ord ($char);
|
||||
$secondByte = ($asciiChar & 63);
|
||||
$asciiChar = ($firstByte * 64) + $secondByte;
|
||||
|
||||
@@ -250,11 +250,11 @@ class Internal extends \IPSUtf8\Text\Charset
|
||||
$firstByte = ($asciiChar & 31);
|
||||
$charPosition++;
|
||||
$char = $unicodeString [$charPosition];
|
||||
$asciiChar = ord ($char);
|
||||
$asciiChar = \ord ($char);
|
||||
$secondByte = ($asciiChar & 63);
|
||||
$charPosition++;
|
||||
$char = $unicodeString [$charPosition];
|
||||
$asciiChar = ord ($char);
|
||||
$asciiChar = \ord ($char);
|
||||
$thirdByte = ($asciiChar & 63);
|
||||
$asciiChar = ((($firstByte * 64) + $secondByte) * 64) + $thirdByte;
|
||||
|
||||
@@ -266,15 +266,15 @@ class Internal extends \IPSUtf8\Text\Charset
|
||||
$firstByte = ($asciiChar & 31);
|
||||
$charPosition++;
|
||||
$char = $unicodeString [$charPosition];
|
||||
$asciiChar = ord ($char);
|
||||
$asciiChar = \ord ($char);
|
||||
$secondByte = ($asciiChar & 63);
|
||||
$charPosition++;
|
||||
$char = $unicodeString [$charPosition];
|
||||
$asciiChar = ord ($char);
|
||||
$asciiChar = \ord ($char);
|
||||
$thirdByte = ($asciiChar & 63);
|
||||
$charPosition++;
|
||||
$char = $unicodeString [$charPosition];
|
||||
$asciiChar = ord ($char);
|
||||
$asciiChar = \ord ($char);
|
||||
$fourthByte = ($asciiChar & 63);
|
||||
$asciiChar = ((((($firstByte * 64) + $secondByte) * 64) + $thirdByte) * 64) + $fourthByte;
|
||||
|
||||
@@ -302,19 +302,19 @@ class Internal extends \IPSUtf8\Text\Charset
|
||||
|
||||
if( $utfCharInDec < 128 )
|
||||
{
|
||||
$outputChar .= chr($utfCharInDec);
|
||||
$outputChar .= \chr($utfCharInDec);
|
||||
}
|
||||
else if( $utfCharInDec < 2048 )
|
||||
{
|
||||
$outputChar .= chr( ( $utfCharInDec>>6 ) + 192 ) . chr( ( $utfCharInDec&63 ) + 128 );
|
||||
$outputChar .= \chr( ( $utfCharInDec>>6 ) + 192 ) . \chr( ( $utfCharInDec&63 ) + 128 );
|
||||
}
|
||||
else if( $utfCharInDec < 65536 )
|
||||
{
|
||||
$outputChar .= chr( ( $utfCharInDec>>12 ) + 224 ) . chr( ( ( $utfCharInDec>>6 ) &63 ) + 128 ) . chr( ( $utfCharInDec&63 ) + 128 );
|
||||
$outputChar .= \chr( ( $utfCharInDec>>12 ) + 224 ) . \chr( ( ( $utfCharInDec>>6 ) &63 ) + 128 ) . \chr( ( $utfCharInDec&63 ) + 128 );
|
||||
}
|
||||
else if( $utfCharInDec < 2097152 )
|
||||
{
|
||||
$outputChar .= chr( $utfCharInDec>>18+240 ) . chr( ( ( $utfCharInDec>>12 ) &63 ) + 128 ) . chr( ( $utfCharInDec>>6 ) &63 + 128 ) . chr( $utfCharInDec&63 + 128 );
|
||||
$outputChar .= \chr( $utfCharInDec>>18+240 ) . \chr( ( ( $utfCharInDec>>12 ) &63 ) + 128 ) . \chr( ( $utfCharInDec>>6 ) &63 + 128 ) . \chr( $utfCharInDec&63 + 128 );
|
||||
}
|
||||
|
||||
return $outputChar;
|
||||
@@ -360,13 +360,13 @@ class Internal extends \IPSUtf8\Text\Charset
|
||||
{
|
||||
$convertTable = array();
|
||||
|
||||
for( $i = 0; $i < func_num_args(); $i++ )
|
||||
for( $i = 0, $j = \func_num_args(); $i < $j; $i++ )
|
||||
{
|
||||
/**
|
||||
* Because func_*** can't be used inside of another function call
|
||||
* we have to save it as a separate value.
|
||||
*/
|
||||
$fileName = func_get_arg($i);
|
||||
$fileName = \func_get_arg($i);
|
||||
|
||||
if ( !is_file( static::$charsetPath . $fileName ) )
|
||||
{
|
||||
@@ -406,7 +406,7 @@ class Internal extends \IPSUtf8\Text\Charset
|
||||
$arrayKey = strtoupper(str_replace(strtolower("0x"), "", $hexValue[1]));
|
||||
$arrayValue = strtoupper(str_replace(strtolower("0x"), "", $hexValue[0]));
|
||||
|
||||
$convertTable[ func_get_arg($i) ][ $arrayKey ] = $arrayValue;
|
||||
$convertTable[ \func_get_arg($i) ][ $arrayKey ] = $arrayValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,11 +30,11 @@ class Mb extends \IPSUtf8\Text\Charset
|
||||
return $string;
|
||||
}
|
||||
|
||||
if ( function_exists( 'mb_convert_encoding' ) )
|
||||
if ( \function_exists( 'mb_convert_encoding' ) )
|
||||
{
|
||||
$encodings = array_map( 'strtolower', mb_list_encodings() );
|
||||
|
||||
if( in_array( strtolower( $to ), $encodings ) AND in_array( strtolower( $from ), $encodings ) )
|
||||
if( \in_array( strtolower( $to ), $encodings ) AND \in_array( strtolower( $from ), $encodings ) )
|
||||
{
|
||||
$text = mb_convert_encoding( $string, $to, $from );
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ class Recode extends \IPSUtf8\Text\Charset
|
||||
return $string;
|
||||
}
|
||||
|
||||
if ( function_exists( 'recode_string' ) )
|
||||
if ( \function_exists( 'recode_string' ) )
|
||||
{
|
||||
$text = recode_string( $from . '..' . $to, $string );
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user