diff --git a/db_create.php b/db_create.php index 72138b3b44..c30a618cd8 100644 --- a/db_create.php +++ b/db_create.php @@ -10,7 +10,7 @@ */ require_once 'libraries/common.inc.php'; -require_once 'libraries/mysql_charsets.lib.php'; +require_once 'libraries/mysql_charsets.inc.php'; if (! PMA_DRIZZLE) { include_once 'libraries/replication.inc.php'; } diff --git a/db_operations.php b/db_operations.php index f893f6cbd2..6561764ca3 100644 --- a/db_operations.php +++ b/db_operations.php @@ -16,7 +16,7 @@ * requirements */ require_once 'libraries/common.inc.php'; -require_once 'libraries/mysql_charsets.lib.php'; +require_once 'libraries/mysql_charsets.inc.php'; /** * functions implementation for this script diff --git a/db_routines.php b/db_routines.php index 690da852fb..a58d4c0a21 100644 --- a/db_routines.php +++ b/db_routines.php @@ -11,7 +11,7 @@ */ require_once 'libraries/common.inc.php'; require_once 'libraries/Util.class.php'; -require_once 'libraries/mysql_charsets.lib.php'; +require_once 'libraries/mysql_charsets.inc.php'; /** * Include all other files diff --git a/db_structure.php b/db_structure.php index 5bbc0e6f2a..9d3b5a6b1a 100644 --- a/db_structure.php +++ b/db_structure.php @@ -74,7 +74,7 @@ if (empty($_POST['is_info'])) { require_once 'libraries/bookmark.lib.php'; -require_once 'libraries/mysql_charsets.lib.php'; +require_once 'libraries/mysql_charsets.inc.php'; $db_collation = PMA_getDbCollation($db); $titles = PMA_Util::buildActionTitles(); diff --git a/libraries/DatabaseInterface.class.php b/libraries/DatabaseInterface.class.php index 5dfe93344a..4d32d45666 100644 --- a/libraries/DatabaseInterface.class.php +++ b/libraries/DatabaseInterface.class.php @@ -905,7 +905,7 @@ class PMA_DatabaseInterface $databases[$database_name]['SCHEMA_NAME'] = $database_name; if ($force_stats) { - include_once './libraries/mysql_charsets.lib.php'; + include_once './libraries/mysql_charsets.inc.php'; $databases[$database_name]['DEFAULT_COLLATION_NAME'] = PMA_getDbCollation($database_name); diff --git a/libraries/display_create_database.lib.php b/libraries/display_create_database.lib.php index 81120a2ef0..b814490e1e 100644 --- a/libraries/display_create_database.lib.php +++ b/libraries/display_create_database.lib.php @@ -27,7 +27,7 @@ if ($is_create_db_priv) { 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_collations_flat + = $mysql_charsets_available = $mysql_collations_available = array(); + + $sql = PMA_DRIZZLE + ? 'SELECT * FROM data_dictionary.COLLATIONS' + : 'SELECT * FROM information_schema.COLLATIONS'; + $res = $GLOBALS['dbi']->query($sql); + while ($row = $GLOBALS['dbi']->fetchAssoc($res)) { + if (! is_array($mysql_collations[$row['CHARACTER_SET_NAME']])) { + $mysql_collations[$row['CHARACTER_SET_NAME']] + = array($row['COLLATION_NAME']); + } else { + $mysql_collations[$row['CHARACTER_SET_NAME']][] = $row['COLLATION_NAME']; + } + $mysql_collations_flat[] = $row['COLLATION_NAME']; + if ($row['IS_DEFAULT'] == 'Yes' || $row['IS_DEFAULT'] == '1') { + $mysql_default_collations[$row['CHARACTER_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[$row['CHARACTER_SET_NAME']] + = !empty($mysql_charsets_available[$row['CHARACTER_SET_NAME']]) + || !empty($mysql_collations_available[$row['COLLATION_NAME']]); + } + $GLOBALS['dbi']->freeResult($res); + unset($res, $row); + + if (PMA_DRIZZLE + && isset($mysql_collations['utf8_general_ci']) + && isset($mysql_collations['utf8']) + ) { + $mysql_collations['utf8'] = $mysql_collations['utf8_general_ci']; + $mysql_default_collations['utf8'] + = $mysql_default_collations['utf8_general_ci']; + $mysql_charsets_available['utf8'] + = $mysql_charsets_available['utf8_general_ci']; + unset( + $mysql_collations['utf8_general_ci'], + $mysql_default_collations['utf8_general_ci'], + $mysql_charsets_available['utf8_general_ci'] + ); + } + + sort($mysql_collations_flat, SORT_STRING); + foreach ($mysql_collations as $key => $value) { + sort($mysql_collations[$key], SORT_STRING); + reset($mysql_collations[$key]); + } + unset($key, $value); + + PMA_Util::cacheSet('mysql_charsets', $GLOBALS['mysql_charsets'], true); + PMA_Util::cacheSet('mysql_charsets_descriptions', $GLOBALS['mysql_charsets_descriptions'], true); + PMA_Util::cacheSet('mysql_charsets_available', $GLOBALS['mysql_charsets_available'], true); + PMA_Util::cacheSet('mysql_collations', $GLOBALS['mysql_collations'], true); + PMA_Util::cacheSet('mysql_default_collations', $GLOBALS['mysql_default_collations'], true); + PMA_Util::cacheSet('mysql_collations_flat', $GLOBALS['mysql_collations_flat'], true); + PMA_Util::cacheSet('mysql_collations_available', $GLOBALS['mysql_collations_available'], true); +} else { + $GLOBALS['mysql_charsets'] = PMA_Util::cacheGet('mysql_charsets', true); + $GLOBALS['mysql_charsets_descriptions'] = PMA_Util::cacheGet('mysql_charsets_descriptions', true); + $GLOBALS['mysql_charsets_available'] = PMA_Util::cacheGet('mysql_charsets_available', true); + $GLOBALS['mysql_collations'] = PMA_Util::cacheGet('mysql_collations', true); + $GLOBALS['mysql_default_collations'] = PMA_Util::cacheGet('mysql_default_collations', true); + $GLOBALS['mysql_collations_flat'] = PMA_Util::cacheGet('mysql_collations_flat', true); + $GLOBALS['mysql_collations_available'] = PMA_Util::cacheGet('mysql_collations_available', true); +} + +define('PMA_CSDROPDOWN_COLLATION', 0); +define('PMA_CSDROPDOWN_CHARSET', 1); + +/** + * shared functions for mysql charsets + */ +require_once './libraries/mysql_charsets.lib.php'; + +?> diff --git a/libraries/mysql_charsets.lib.php b/libraries/mysql_charsets.lib.php index d2b1998ff3..c94b7cbd9a 100644 --- a/libraries/mysql_charsets.lib.php +++ b/libraries/mysql_charsets.lib.php @@ -1,6 +1,8 @@ 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_collations_flat - = $mysql_charsets_available = $mysql_collations_available = array(); - - $sql = PMA_DRIZZLE - ? 'SELECT * FROM data_dictionary.COLLATIONS' - : 'SELECT * FROM information_schema.COLLATIONS'; - $res = $GLOBALS['dbi']->query($sql); - while ($row = $GLOBALS['dbi']->fetchAssoc($res)) { - if (! is_array($mysql_collations[$row['CHARACTER_SET_NAME']])) { - $mysql_collations[$row['CHARACTER_SET_NAME']] - = array($row['COLLATION_NAME']); - } else { - $mysql_collations[$row['CHARACTER_SET_NAME']][] = $row['COLLATION_NAME']; - } - $mysql_collations_flat[] = $row['COLLATION_NAME']; - if ($row['IS_DEFAULT'] == 'Yes' || $row['IS_DEFAULT'] == '1') { - $mysql_default_collations[$row['CHARACTER_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[$row['CHARACTER_SET_NAME']] - = !empty($mysql_charsets_available[$row['CHARACTER_SET_NAME']]) - || !empty($mysql_collations_available[$row['COLLATION_NAME']]); - } - $GLOBALS['dbi']->freeResult($res); - unset($res, $row); - - if (PMA_DRIZZLE - && isset($mysql_collations['utf8_general_ci']) - && isset($mysql_collations['utf8']) - ) { - $mysql_collations['utf8'] = $mysql_collations['utf8_general_ci']; - $mysql_default_collations['utf8'] - = $mysql_default_collations['utf8_general_ci']; - $mysql_charsets_available['utf8'] - = $mysql_charsets_available['utf8_general_ci']; - unset( - $mysql_collations['utf8_general_ci'], - $mysql_default_collations['utf8_general_ci'], - $mysql_charsets_available['utf8_general_ci'] - ); - } - - sort($mysql_collations_flat, SORT_STRING); - foreach ($mysql_collations as $key => $value) { - sort($mysql_collations[$key], SORT_STRING); - reset($mysql_collations[$key]); - } - unset($key, $value); - - PMA_Util::cacheSet('mysql_charsets', $GLOBALS['mysql_charsets'], true); - PMA_Util::cacheSet('mysql_charsets_descriptions', $GLOBALS['mysql_charsets_descriptions'], true); - PMA_Util::cacheSet('mysql_charsets_available', $GLOBALS['mysql_charsets_available'], true); - PMA_Util::cacheSet('mysql_collations', $GLOBALS['mysql_collations'], true); - PMA_Util::cacheSet('mysql_default_collations', $GLOBALS['mysql_default_collations'], true); - PMA_Util::cacheSet('mysql_collations_flat', $GLOBALS['mysql_collations_flat'], true); - PMA_Util::cacheSet('mysql_collations_available', $GLOBALS['mysql_collations_available'], true); -} else { - $GLOBALS['mysql_charsets'] = PMA_Util::cacheGet('mysql_charsets', true); - $GLOBALS['mysql_charsets_descriptions'] = PMA_Util::cacheGet('mysql_charsets_descriptions', true); - $GLOBALS['mysql_charsets_available'] = PMA_Util::cacheGet('mysql_charsets_available', true); - $GLOBALS['mysql_collations'] = PMA_Util::cacheGet('mysql_collations', true); - $GLOBALS['mysql_default_collations'] = PMA_Util::cacheGet('mysql_default_collations', true); - $GLOBALS['mysql_collations_flat'] = PMA_Util::cacheGet('mysql_collations_flat', true); - $GLOBALS['mysql_collations_available'] = PMA_Util::cacheGet('mysql_collations_available', true); -} - -define('PMA_CSDROPDOWN_COLLATION', 0); -define('PMA_CSDROPDOWN_CHARSET', 1); - function PMA_generateCharsetDropdownBox($type = PMA_CSDROPDOWN_COLLATION, $name = null, $id = null, $default = null, $label = true, $indent = 0, $submitOnChange = false, $displayUnavailable = false diff --git a/libraries/server_collations.lib.php b/libraries/server_collations.lib.php new file mode 100644 index 0000000000..55b1058e70 --- /dev/null +++ b/libraries/server_collations.lib.php @@ -0,0 +1,119 @@ +' . "\n" + . '' . "\n" + . '' . "\n" + . ' ' . "\n" + . '' . "\n"; + + $i = 0; + $table_row_count = count($mysql_charsets) + count($mysql_collations); + + foreach ($mysql_charsets as $current_charset) { + if ($i >= $table_row_count / 2) { + $i = 0; + $html .= '
' . __('Collation') . '' . __('Description') . '
' . "\n" + . '' . "\n" + . '' . "\n" + . ' ' . "\n" + . '' . "\n"; + } + $i++; + $html .= '' . "\n" + . '' . "\n"; + + $html .= PMA_getHtmlForCollationCurrentCharset( + $current_charset, + $mysql_collations, + $i, + $mysql_default_collations, + $mysql_collations_available + ); + } + unset($table_row_count); + $html .= '
' . __('Collation') . '' . __('Description') . '
' . "\n" + . ' ' . htmlspecialchars($current_charset) . "\n" + . (empty($mysql_charsets_descriptions[$current_charset]) + ? '' + : ' (' . htmlspecialchars( + $mysql_charsets_descriptions[$current_charset] + ) . ')' . "\n") + . '
' . "\n" + . '' . "\n"; + + return $html; +} + + +/** + * Returns the html for Collations of Current Charset. + * + * @param String $current_charset Current Charset + * + * @param Array $mysql_collations Collations list + * + * @param Array $mysql_default_collations Default Collations list + * + * @param Array $mysql_collations_available Available Collations list + * + * @param int $i Display Index + * + * @return string + */ +function PMA_getHtmlForCollationCurrentCharset($current_charset, $mysql_collations, &$i, + $mysql_default_collations, $mysql_collations_available) +{ + $odd_row = true; + $html = ''; + foreach ($mysql_collations[$current_charset] as $current_collation) { + $i++; + $html .= '' . "\n" + . ' ' . htmlspecialchars($current_collation) . '' . "\n" + . ' ' . PMA_getCollationDescr($current_collation) . '' . "\n" + . '' . "\n"; + $odd_row = !$odd_row; + } + return $html; +} + +?> diff --git a/libraries/server_common.lib.php b/libraries/server_common.lib.php index 1b99c3c623..b686c65ef3 100644 --- a/libraries/server_common.lib.php +++ b/libraries/server_common.lib.php @@ -26,6 +26,9 @@ function PMA_getSubPageHeader($type) $res['binlog']['icon'] = 's_tbl.png'; $res['binlog']['text'] = __('Binary log'); + $res['collations']['icon'] = 's_asci.png'; + $res['collations']['text'] = __('Character Sets and Collations'); + $html = '

' . "\n" . PMA_Util::getImage($res[$type]['icon']) . ' ' . $res[$type]['text'] . "\n" diff --git a/libraries/sqlparser.lib.php b/libraries/sqlparser.lib.php index 6321856015..759367fcd2 100644 --- a/libraries/sqlparser.lib.php +++ b/libraries/sqlparser.lib.php @@ -44,7 +44,7 @@ require_once './libraries/sqlparser.data.php'; * Charset information */ if (!defined('TESTSUITE')) { - include_once './libraries/mysql_charsets.lib.php'; + include_once './libraries/mysql_charsets.inc.php'; } if (! isset($mysql_charsets)) { $mysql_charsets = array(); diff --git a/libraries/tbl_columns_definition_form.inc.php b/libraries/tbl_columns_definition_form.inc.php index bc158e43a0..24ef8da59d 100644 --- a/libraries/tbl_columns_definition_form.inc.php +++ b/libraries/tbl_columns_definition_form.inc.php @@ -19,7 +19,7 @@ PMA_Util::checkParameters(array('db', 'table', 'action', 'num_fields')); // Get available character sets and storage engines -require_once './libraries/mysql_charsets.lib.php'; +require_once './libraries/mysql_charsets.inc.php'; require_once './libraries/StorageEngine.class.php'; /** diff --git a/server_collations.php b/server_collations.php index 0e1164789a..fb9159bc81 100644 --- a/server_collations.php +++ b/server_collations.php @@ -13,75 +13,27 @@ require_once 'libraries/common.inc.php'; /** * Does the common work */ -require 'libraries/server_common.inc.php'; +require_once 'libraries/server_common.inc.php'; -$response = PMA_Response::getInstance(); - -/** - * Displays the sub-page heading - */ -$html = '

' . "\n" - . ' ' . PMA_Util::getImage('s_asci.png') - . '' . __('Character Sets and Collations') . "\n" - . '

' . "\n"; +require_once 'libraries/server_collations.lib.php'; /** * Includes the required charset library */ -require_once 'libraries/mysql_charsets.lib.php'; +require_once 'libraries/mysql_charsets.inc.php'; +$response = PMA_Response::getInstance(); -/** - * Outputs the result - */ -$html .= '
' . "\n" - . '' . "\n" - . '' . "\n" - . ' ' . "\n" - . '' . "\n"; +$response->addHTML(PMA_getSubPageHeader('collations')); +$response->addHTML(PMA_getHtmlForCharsets( + $mysql_charsets, + $mysql_collations, + $mysql_charsets_descriptions, + $mysql_default_collations, + $mysql_collations_available + ) + ); -$i = 0; -$table_row_count = count($mysql_charsets) + count($mysql_collations); - -foreach ($mysql_charsets as $current_charset) { - if ($i >= $table_row_count / 2) { - $i = 0; - $html .= '
' . __('Collation') . '' . __('Description') . '
' . "\n" - . '' . "\n" - . '' . "\n" - . ' ' . "\n" - . '' . "\n"; - } - $i++; - $html .= '' . "\n" - . '' . "\n"; - $odd_row = true; - foreach ($mysql_collations[$current_charset] as $current_collation) { - $i++; - $html .= '' . "\n" - . ' ' . "\n" - . ' ' . "\n" - . '' . "\n"; - $odd_row = !$odd_row; - } -} -unset($table_row_count); -$html .= '
' . __('Collation') . '' . __('Description') . '
' . "\n" - . ' ' . htmlspecialchars($current_charset) . "\n" - . (empty($mysql_charsets_descriptions[$current_charset]) - ? '' - : ' (' . htmlspecialchars( - $mysql_charsets_descriptions[$current_charset] - ) . ')' . "\n") - . '
' . htmlspecialchars($current_collation) . '' . PMA_getCollationDescr($current_collation) . '
' . "\n" - . '
' . "\n"; - -$response->addHTML($html); +exit; ?> diff --git a/tbl_operations.php b/tbl_operations.php index 0aa403af62..07d5f62c82 100644 --- a/tbl_operations.php +++ b/tbl_operations.php @@ -33,7 +33,7 @@ $cfgRelation = PMA_getRelationsParam(); /** * Gets available MySQL charsets and storage engines */ -require_once 'libraries/mysql_charsets.lib.php'; +require_once 'libraries/mysql_charsets.inc.php'; require_once 'libraries/StorageEngine.class.php'; /** diff --git a/tbl_row_action.php b/tbl_row_action.php index d55e5e0b03..b9ccaa4a3c 100644 --- a/tbl_row_action.php +++ b/tbl_row_action.php @@ -10,7 +10,7 @@ * */ require_once 'libraries/common.inc.php'; -require_once 'libraries/mysql_charsets.lib.php'; +require_once 'libraries/mysql_charsets.inc.php'; /** * No rows were selected => show again the query and tell that user. diff --git a/tbl_select.php b/tbl_select.php index c2dea7d3f1..b8148b47da 100644 --- a/tbl_select.php +++ b/tbl_select.php @@ -13,7 +13,7 @@ * Gets some core libraries */ require_once 'libraries/common.inc.php'; -require_once 'libraries/mysql_charsets.lib.php'; +require_once 'libraries/mysql_charsets.inc.php'; require_once 'libraries/TableSearch.class.php'; $response = PMA_Response::getInstance(); diff --git a/tbl_structure.php b/tbl_structure.php index 8e2bc61cfa..1434d4dd35 100644 --- a/tbl_structure.php +++ b/tbl_structure.php @@ -11,7 +11,7 @@ * */ require_once 'libraries/common.inc.php'; -require_once 'libraries/mysql_charsets.lib.php'; +require_once 'libraries/mysql_charsets.inc.php'; /** * Function implementations for this script diff --git a/tbl_zoom_select.php b/tbl_zoom_select.php index ea26e0937e..52a99f2198 100644 --- a/tbl_zoom_select.php +++ b/tbl_zoom_select.php @@ -12,7 +12,7 @@ * Gets some core libraries */ require_once './libraries/common.inc.php'; -require_once './libraries/mysql_charsets.lib.php'; +require_once './libraries/mysql_charsets.inc.php'; require_once './libraries/TableSearch.class.php'; require_once './libraries/tbl_info.inc.php'; diff --git a/test/libraries/PMA_build_html_for_db_test.php b/test/libraries/PMA_build_html_for_db_test.php index 0e22034a66..da3d68d3aa 100644 --- a/test/libraries/PMA_build_html_for_db_test.php +++ b/test/libraries/PMA_build_html_for_db_test.php @@ -19,7 +19,7 @@ require_once 'libraries/Theme.class.php'; require_once 'libraries/database_interface.inc.php'; require_once 'libraries/Tracker.class.php'; require_once 'libraries/Types.class.php'; -require_once 'libraries/mysql_charsets.lib.php'; +require_once 'libraries/mysql_charsets.inc.php'; class PMA_BuildHtmlForDb_Test extends PHPUnit_Framework_TestCase { diff --git a/test/libraries/PMA_operations_test.php b/test/libraries/PMA_operations_test.php index 7322ecf1b6..5a7bfa8832 100644 --- a/test/libraries/PMA_operations_test.php +++ b/test/libraries/PMA_operations_test.php @@ -19,7 +19,7 @@ require_once 'libraries/Util.class.php'; require_once 'libraries/Theme.class.php'; require_once 'libraries/database_interface.inc.php'; require_once 'libraries/Tracker.class.php'; -require_once 'libraries/mysql_charsets.lib.php'; +require_once 'libraries/mysql_charsets.inc.php'; /** * tests for operations diff --git a/test/libraries/rte/PMA_RTN_getEditorForm_test.php b/test/libraries/rte/PMA_RTN_getEditorForm_test.php index 567ccd5b4c..0297ef68ea 100644 --- a/test/libraries/rte/PMA_RTN_getEditorForm_test.php +++ b/test/libraries/rte/PMA_RTN_getEditorForm_test.php @@ -13,7 +13,7 @@ require_once './libraries/Types.class.php'; require_once 'libraries/Theme.class.php'; require_once 'libraries/database_interface.inc.php'; require_once 'libraries/Tracker.class.php'; -require_once 'libraries/mysql_charsets.lib.php'; +require_once 'libraries/mysql_charsets.inc.php'; /* * Include to test. */