Skip to content

Commit

Permalink
Move charsets obtaining to the Charsets class
Browse files Browse the repository at this point in the history
Signed-off-by: Michal Čihař <michal@cihar.com>
  • Loading branch information
nijel committed Apr 11, 2016
1 parent cd4008b commit cfc2f1c
Show file tree
Hide file tree
Showing 4 changed files with 126 additions and 101 deletions.
7 changes: 4 additions & 3 deletions index.php
Expand Up @@ -312,9 +312,10 @@
echo ' <li id="li_select_mysql_charset">';
echo ' ' , __('Server charset:') , ' '
. ' <span lang="en" dir="ltr">';
echo ' ' , $mysql_charsets_descriptions[Charsets::$mysql_charset_map['utf-8']];
echo ' (' , Charsets::$mysql_charset_map['utf-8'] , ')'
. ' </span>'
$unicode = Charsets::$mysql_charset_map['utf-8'];
$charsets = Charsets::getMySQLCharsetsDescriptions();
echo ' ' , $charsets[$unicode], ' ('. $unicode, ')';
echo ' </span>'
. ' </li>'
. ' </ul>'
. ' </div>';
Expand Down
116 changes: 116 additions & 0 deletions libraries/Charsets.php
Expand Up @@ -7,6 +7,8 @@
*/
namespace PMA\libraries;

use PMA\libraries\Util;

/**
* Class used to manage MySQL charsets
*
Expand Down Expand Up @@ -45,4 +47,118 @@ class Charsets
'windows-1256' => 'cp1256',
'windows-1257' => 'cp1257',
);

/**
* Loads charset data from the MySQL server.
*
* @return void
*/
public static function loadCharsets()
{
/* Cache already exists */
if (Util::cacheExists('mysql_charsets')) {
return;
}

$sql = 'SELECT * FROM information_schema.CHARACTER_SETS';
$res = $GLOBALS['dbi']->query($sql);

$mysql_charsets = array();
while ($row = $GLOBALS['dbi']->fetchAssoc($res)) {
$mysql_charsets[] = $row['CHARACTER_SET_NAME'];
// never used
//$mysql_charsets_maxlen[$row['Charset']] = $row['Maxlen'];
$mysql_charsets_descriptions[$row['CHARACTER_SET_NAME']]
= $row['DESCRIPTION'];
}
$GLOBALS['dbi']->freeResult($res);

sort($mysql_charsets, SORT_STRING);

$mysql_collations = array_flip($mysql_charsets);
$mysql_default_collations = $mysql_charsets_available = $mysql_collations_available = array();

$sql = 'SELECT * FROM information_schema.COLLATIONS';
$res = $GLOBALS['dbi']->query($sql);
while ($row = $GLOBALS['dbi']->fetchAssoc($res)) {
$char_set_name = $row['CHARACTER_SET_NAME'];
if (! is_array($mysql_collations[$char_set_name])) {
$mysql_collations[$char_set_name] = array($row['COLLATION_NAME']);
} else {
$mysql_collations[$char_set_name][] = $row['COLLATION_NAME'];
}
if ($row['IS_DEFAULT'] == 'Yes' || $row['IS_DEFAULT'] == '1') {
$mysql_default_collations[$char_set_name]
= $row['COLLATION_NAME'];
}
//$mysql_collations_available[$row['Collation']]
// = ! isset($row['Compiled']) || $row['Compiled'] == 'Yes';
$mysql_collations_available[$row['COLLATION_NAME']] = true;
$mysql_charsets_available[$char_set_name]
= !empty($mysql_charsets_available[$char_set_name])
|| !empty($mysql_collations_available[$row['COLLATION_NAME']]);
}
$GLOBALS['dbi']->freeResult($res);
unset($res, $row);

foreach ($mysql_collations as $key => $value) {
sort($mysql_collations[$key], SORT_STRING);
}
unset($key, $value);

Util::cacheSet(
'mysql_charsets', $mysql_charsets
);
Util::cacheSet(
'mysql_charsets_descriptions', $mysql_charsets_descriptions
);
Util::cacheSet(
'mysql_charsets_available', $mysql_charsets_available
);
Util::cacheSet(
'mysql_collations', $mysql_collations
);
Util::cacheSet(
'mysql_default_collations', $mysql_default_collations
);
Util::cacheSet(
'mysql_collations_available', $mysql_collations_available
);
}

public static function getMySQLCharsets()
{
self::loadCharsets();
return Util::cacheGet('mysql_charsets');
}

public static function getMySQLCharsetsDescriptions()
{
self::loadCharsets();
return Util::cacheGet('mysql_charsets_descriptions');
}

public static function getMySQLCharsetsAvailable()
{
self::loadCharsets();
return Util::cacheGet('mysql_charsets_available');
}

public static function getMySQLCollations()
{
self::loadCharsets();
return Util::cacheGet('mysql_collations');
}

public static function getMySQLCollationsDefault()
{
self::loadCharsets();
return Util::cacheGet('mysql_default_collations');
}

public static function getMySQLCollationsAvailable()
{
self::loadCharsets();
return Util::cacheGet('mysql_collations_available');
}
}
11 changes: 6 additions & 5 deletions libraries/controllers/server/ServerCollationsController.php
Expand Up @@ -10,6 +10,7 @@
namespace PMA\libraries\controllers\server;

use PMA\libraries\controllers\Controller;
use PMA\libraries\Charsets;
use PMA\libraries\Template;

/**
Expand Down Expand Up @@ -38,11 +39,11 @@ public function indexAction()
$this->response->addHTML(PMA_getHtmlForSubPageHeader('collations'));
$this->response->addHTML(
$this->_getHtmlForCharsets(
$GLOBALS['mysql_charsets'],
$GLOBALS['mysql_collations'],
$GLOBALS['mysql_charsets_descriptions'],
$GLOBALS['mysql_default_collations'],
$GLOBALS['mysql_collations_available']
Charsets::getMySQLCharsets(),
Charsets::getMySQLCollations(),
Charsets::getMySQLCharsetsDescriptions(),
Charsets::getMySQLCollationsDefault(),
Charsets::getMySQLCollationsAvailable()
)
);
}
Expand Down
93 changes: 0 additions & 93 deletions libraries/mysql_charsets.inc.php
Expand Up @@ -9,99 +9,6 @@
exit;
}

/**
*
*/

if (! PMA\libraries\Util::cacheExists('mysql_charsets')) {
global $mysql_charsets, $mysql_charsets_descriptions,
$mysql_charsets_available, $mysql_collations, $mysql_collations_available,
$mysql_default_collations;
$sql = 'SELECT * FROM information_schema.CHARACTER_SETS';
$res = $GLOBALS['dbi']->query($sql);

$mysql_charsets = array();
while ($row = $GLOBALS['dbi']->fetchAssoc($res)) {
$mysql_charsets[] = $row['CHARACTER_SET_NAME'];
// never used
//$mysql_charsets_maxlen[$row['Charset']] = $row['Maxlen'];
$mysql_charsets_descriptions[$row['CHARACTER_SET_NAME']]
= $row['DESCRIPTION'];
}
$GLOBALS['dbi']->freeResult($res);

sort($mysql_charsets, SORT_STRING);

$mysql_collations = array_flip($mysql_charsets);
$mysql_default_collations = $mysql_charsets_available = $mysql_collations_available = array();

$sql = 'SELECT * FROM information_schema.COLLATIONS';
$res = $GLOBALS['dbi']->query($sql);
while ($row = $GLOBALS['dbi']->fetchAssoc($res)) {
$char_set_name = $row['CHARACTER_SET_NAME'];
if (! is_array($mysql_collations[$char_set_name])) {
$mysql_collations[$char_set_name] = array($row['COLLATION_NAME']);
} else {
$mysql_collations[$char_set_name][] = $row['COLLATION_NAME'];
}
if ($row['IS_DEFAULT'] == 'Yes' || $row['IS_DEFAULT'] == '1') {
$mysql_default_collations[$char_set_name]
= $row['COLLATION_NAME'];
}
//$mysql_collations_available[$row['Collation']]
// = ! isset($row['Compiled']) || $row['Compiled'] == 'Yes';
$mysql_collations_available[$row['COLLATION_NAME']] = true;
$mysql_charsets_available[$char_set_name]
= !empty($mysql_charsets_available[$char_set_name])
|| !empty($mysql_collations_available[$row['COLLATION_NAME']]);
}
$GLOBALS['dbi']->freeResult($res);
unset($res, $row);

foreach ($mysql_collations as $key => $value) {
sort($mysql_collations[$key], SORT_STRING);
}
unset($key, $value);

PMA\libraries\Util::cacheSet(
'mysql_charsets', $GLOBALS['mysql_charsets']
);
PMA\libraries\Util::cacheSet(
'mysql_charsets_descriptions', $GLOBALS['mysql_charsets_descriptions']
);
PMA\libraries\Util::cacheSet(
'mysql_charsets_available', $GLOBALS['mysql_charsets_available']
);
PMA\libraries\Util::cacheSet(
'mysql_collations', $GLOBALS['mysql_collations']
);
PMA\libraries\Util::cacheSet(
'mysql_default_collations', $GLOBALS['mysql_default_collations']
);
PMA\libraries\Util::cacheSet(
'mysql_collations_available', $GLOBALS['mysql_collations_available']
);
} else {
$GLOBALS['mysql_charsets'] = PMA\libraries\Util::cacheGet(
'mysql_charsets'
);
$GLOBALS['mysql_charsets_descriptions'] = PMA\libraries\Util::cacheGet(
'mysql_charsets_descriptions'
);
$GLOBALS['mysql_charsets_available'] = PMA\libraries\Util::cacheGet(
'mysql_charsets_available'
);
$GLOBALS['mysql_collations'] = PMA\libraries\Util::cacheGet(
'mysql_collations'
);
$GLOBALS['mysql_default_collations'] = PMA\libraries\Util::cacheGet(
'mysql_default_collations'
);
$GLOBALS['mysql_collations_available'] = PMA\libraries\Util::cacheGet(
'mysql_collations_available'
);
}

define('PMA_CSDROPDOWN_COLLATION', 0);
define('PMA_CSDROPDOWN_CHARSET', 1);

Expand Down

0 comments on commit cfc2f1c

Please sign in to comment.