The branch, master has been updated via 81d61125ccaf15fc27d22c3393cd43029e24afb8 (commit) from da339cd5ffa85e51cb6942d80f88b5790e01734b (commit)
- Log ----------------------------------------------------------------- commit 81d61125ccaf15fc27d22c3393cd43029e24afb8 Author: Marc Delisle marc@infomarc.info Date: Mon Oct 11 09:34:51 2010 -0400
bug #3072495 Creating new database on Databases tab messed layout
-----------------------------------------------------------------------
Summary of changes: db_create.php | 57 +++++------ js/functions.js | 13 ++- libraries/build_html_for_db.lib.php | 158 +++++++++++++++++++++++++++++ libraries/display_create_database.lib.php | 4 + libraries/replication.inc.php | 21 ++++ server_databases.php | 122 +--------------------- 6 files changed, 226 insertions(+), 149 deletions(-) create mode 100644 libraries/build_html_for_db.lib.php
diff --git a/db_create.php b/db_create.php index 64a8acb..3609bf6 100644 --- a/db_create.php +++ b/db_create.php @@ -13,6 +13,8 @@ $GLOBALS['js_include'][] = 'functions.js'; $GLOBALS['js_include'][] = 'jquery/jquery-ui-1.8.custom.js';
require_once './libraries/mysql_charsets.lib.php'; +require './libraries/replication.inc.php'; +require './libraries/build_html_for_db.lib.php';
PMA_checkParameters(array('new_db'));
@@ -30,6 +32,7 @@ if (!empty($db_collation)) { if (in_array($db_charset, $mysql_charsets) && in_array($db_collation, $mysql_collations[$db_charset])) { $sql_query .= ' DEFAULT' . PMA_generateCharsetQueryPart($db_collation); } + $db_collation_for_ajax = $db_collation; unset($db_charset, $db_collation); } $sql_query .= ';'; @@ -78,6 +81,8 @@ if (! $result) { $db_url_params['db'] = $new_db;
$is_superuser = PMA_isSuperuser(); + $column_order = PMA_getColumnOrder(); + $url_query = PMA_generate_common_url($new_db);
/** * String that will contain the output HTML @@ -85,41 +90,33 @@ if (! $result) { */ $new_db_string = '<tr>';
- /** - * Is user allowed to drop the database? - */ - if ($is_superuser || $cfg['AllowUserDropDatabase']) { - $new_db_string .= '<td class="tool">'; - $new_db_string .= '<input type="checkbox" title="'. $new_db .'" value="' . $new_db . '" name="selected_dbs[]" />'; - $new_db_string .='</td>'; + if (empty($db_collation_for_ajax)) { + $db_collation_for_ajax = PMA_getServerCollation(); }
- /** - * Link to the database's page - */ - $new_db_string .= '<td class="name">'; - $new_db_string .= '<a target="_parent" title="Jump to database" href="index.php' . PMA_generate_common_url($db_url_params) . '">'; - $new_db_string .= $new_db . '</a>'; - $new_db_string .= '</td>'; - - /** - * If the user has privileges, let him check privileges for the DB - */ - if($is_superuser) { - - $db_url_params['checkprivs'] = $new_db; - - $new_db_string .= '<td class="tool">'; - $new_db_string .= '<a title="Check privileges for database" href="server_privileges.php' . PMA_generate_common_url($db_url_params) . '">'; - $new_db_string .= ($cfg['PropertiesIconic'] - ? '<img class="icon" src="' . $pmaThemeImage . 's_rights.png" width="16" height="16" alt=" ' . __('Check Privileges') . '" /> ' - : __('Check Privileges')) . '</a>'; - $new_db_string .= '</td>'; + // $dbstats comes from the create table dialog + if (! empty($dbstats)) { + $current = array( + 'SCHEMA_NAME' => $new_db, + 'DEFAULT_COLLATION_NAME' => $db_collation_for_ajax, + 'SCHEMA_TABLES' => '0', + 'SCHEMA_TABLE_ROWS' => '0', + 'SCHEMA_DATA_LENGTH' => '0', + 'SCHEMA_MAX_DATA_LENGTH' => '0', + 'SCHEMA_INDEX_LENGTH' => '0', + 'SCHEMA_LENGTH' => '0', + 'SCHEMA_DATA_FREE' => '0' + ); + } else { + $current = array( + 'SCHEMA_NAME' => $new_db + ); }
- $new_db_string .= '</tr>'; + list($column_order, $generated_html) = PMA_buildHtmlForDb($current, $is_superuser, (isset($checkall) ? $checkall : ''), $url_query, $column_order, $replication_types, $replication_info); + $new_db_string .= $generated_html;
- /** @todo Statistics for newly created DB! */ + $new_db_string .= '</tr>';
$extra_data['new_db_string'] = $new_db_string;
diff --git a/js/functions.js b/js/functions.js index 24f6c12..2fe8530 100644 --- a/js/functions.js +++ b/js/functions.js @@ -2299,10 +2299,15 @@ $(document).ready(function() { $('#create_database_form').live('submit', function(event) { event.preventDefault();
+ $form = $(this); + PMA_ajaxShowMessage(PMA_messages['strProcessingRequest']); - $(this).append('<input type="hidden" name="ajax_request" value="true" />');
- $.post($(this).attr('action'), $(this).serialize(), function(data) { + if (! $form.find('input:hidden').is('#ajax_request_hidden')) { + $form.append('<input type="hidden" id="ajax_request_hidden" name="ajax_request" value="true" />'); + } + + $.post($form.attr('action'), $form.serialize(), function(data) { if(data.success == true) { PMA_ajaxShowMessage(data.message);
@@ -2314,6 +2319,10 @@ $(document).ready(function() { .find('#db_summary_row') .appendTo('#tabledatabases tbody') .removeClass('odd even'); + + var $databases_count_object = $('#databases_count'); + var databases_count = parseInt($databases_count_object.text()); + $databases_count_object.text(++databases_count); } else { PMA_ajaxShowMessage(data.error); diff --git a/libraries/build_html_for_db.lib.php b/libraries/build_html_for_db.lib.php new file mode 100644 index 0000000..6f4357c --- /dev/null +++ b/libraries/build_html_for_db.lib.php @@ -0,0 +1,158 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * + * @package phpMyAdmin + */ +if (! defined('PHPMYADMIN')) { + exit; +} + +/** + * Prepares the $column_order array + * + * @return array + */ +function PMA_getColumnOrder() { + + $column_order['DEFAULT_COLLATION_NAME'] = array( + 'disp_name' => __('Collation'), + 'description_function' => 'PMA_getCollationDescr', + 'format' => 'string', + 'footer' => PMA_getServerCollation(), + ); + $column_order['SCHEMA_TABLES'] = array( + 'disp_name' => __('Tables'), + 'format' => 'number', + 'footer' => 0, + ); + $column_order['SCHEMA_TABLE_ROWS'] = array( + 'disp_name' => __('Rows'), + 'format' => 'number', + 'footer' => 0, + ); + $column_order['SCHEMA_DATA_LENGTH'] = array( + 'disp_name' => __('Data'), + 'format' => 'byte', + 'footer' => 0, + ); + $column_order['SCHEMA_INDEX_LENGTH'] = array( + 'disp_name' => __('Indexes'), + 'format' => 'byte', + 'footer' => 0, + ); + $column_order['SCHEMA_LENGTH'] = array( + 'disp_name' => __('Total'), + 'format' => 'byte', + 'footer' => 0, + ); + $column_order['SCHEMA_DATA_FREE'] = array( + 'disp_name' => __('Overhead'), + 'format' => 'byte', + 'footer' => 0, + ); + + return $column_order; +} + +/* + * Builds the HTML td elements for one database to display in the list + * of databases from server_databases.php (which can be modified by + * db_create.php) + * + * @param array $current + * @param boolean $is_superuser + * @param string $checkall + * @param string $url_query + * @param array $column_order + * @param array $replication_types + * @param array $replication_info + * + * @return array $column_order, $out + */ +function PMA_buildHtmlForDb($current, $is_superuser, $checkall, $url_query, $column_order, $replication_types, $replication_info) { + + $out = ''; + if ($is_superuser || $GLOBALS['cfg']['AllowUserDropDatabase']) { + $out .= '<td class="tool">'; + $out .= '<input type="checkbox" name="selected_dbs[]" title="' . htmlspecialchars($current['SCHEMA_NAME']) . '" value="' . htmlspecialchars($current['SCHEMA_NAME']) . '" '; + + if ($current['SCHEMA_NAME'] != 'mysql' + && $current['SCHEMA_NAME'] != 'information_schema') { + $out .= (empty($checkall) ? '' : 'checked="checked" ') . '/>'; + } else { + $out .= ' disabled="disabled" />'; + } + $out .= '</td>'; + } + $out .= '<td class="name">' + . ' <a onclick="' + . 'if (window.parent.openDb && window.parent.openDb(\'' . PMA_jsFormat($current['SCHEMA_NAME'], false) . '\')) return false;' + . '" href="index.php?' . $url_query . '&db=' + . urlencode($current['SCHEMA_NAME']) . '" title="' + . sprintf(__('Jump to database'), htmlspecialchars($current['SCHEMA_NAME'])) + . '" target="_parent">' + . ' ' . htmlspecialchars($current['SCHEMA_NAME']) + . '</a>' + . '</td>'; + + foreach ($column_order as $stat_name => $stat) { + if (array_key_exists($stat_name, $current)) { + if (is_numeric($stat['footer'])) { + $column_order[$stat_name]['footer'] += $current[$stat_name]; + } + if ($stat['format'] === 'byte') { + list($value, $unit) = PMA_formatByteDown($current[$stat_name], 3, 1); + } elseif ($stat['format'] === 'number') { + $value = PMA_formatNumber($current[$stat_name], 0); + } else { + $value = htmlentities($current[$stat_name], 0); + } + $out .= '<td class="value">'; + if (isset($stat['description_function'])) { + $out .= '<dfn title="' . $stat['description_function']($current[$stat_name]) . '">'; + } + $out .= $value; + if (isset($stat['description_function'])) { + $out .= '</dfn>'; + } + $out .= '</td>'; + if ($stat['format'] === 'byte') { + $out .= '<td class="unit">' . $unit . '</td>'; + } + } + } + foreach ($replication_types as $type) { + if ($replication_info[$type]['status']) { + $out .= '<td class="tool" style="text-align: center;">'; + + if (strlen(array_search($current["SCHEMA_NAME"], $replication_info[$type]['Ignore_DB'])) > 0) { + $out .= PMA_getIcon('s_cancel.png', __('Not replicated')); + } else { + $key = array_search($current["SCHEMA_NAME"], $replication_info[$type]['Do_DB']); + + if (strlen($key) > 0 || ($replication_info[$type]['Do_DB'][0] == "" && count($replication_info[$type]['Do_DB']) == 1)) { + // if ($key != null) did not work for index "0" + $out .= PMA_getIcon('s_success.png', __('Replicated')); + } + } + + $out .= '</td>'; + } + } + + if ($is_superuser) { + $out .= '<td class="tool">' + . '<a onclick="' + . 'if (window.parent.setDb) window.parent.setDb(\'' . PMA_jsFormat($current['SCHEMA_NAME']) . '\');' + . '" href="./server_privileges.php?' . $url_query + . '&checkprivs=' . urlencode($current['SCHEMA_NAME']) + . '" title="' . sprintf(__('Check privileges for database "%s".'), htmlspecialchars($current['SCHEMA_NAME'])) + . '">' + . ' ' + . PMA_getIcon('s_rights.png', __('Check Privileges')) + . '</a></td>'; + } + return array($column_order, $out); +} +?> diff --git a/libraries/display_create_database.lib.php b/libraries/display_create_database.lib.php index e6caec5..17ebfae 100644 --- a/libraries/display_create_database.lib.php +++ b/libraries/display_create_database.lib.php @@ -25,6 +25,10 @@ if ($is_create_db_priv) { <?php require_once './libraries/mysql_charsets.lib.php'; echo PMA_generateCharsetDropdownBox(PMA_CSDROPDOWN_COLLATION, 'db_collation', null, null, TRUE, 5); + + if (! empty($dbstats)) { + echo '<input type="hidden" name="dbstats" value="1" />'; + } ?> <input type="submit" value="<?php echo __('Create'); ?>" id="buttonGo" /> </form> diff --git a/libraries/replication.inc.php b/libraries/replication.inc.php index 3669a4e..45fd07d 100644 --- a/libraries/replication.inc.php +++ b/libraries/replication.inc.php @@ -90,25 +90,46 @@ $slave_variables_oks = array( );
// check which replication is available and set $server_{master/slave}_status and assign values + +// replication info is more easily passed to functions +/* + * @todo use $replication_info everywhere instead of the generated variable names + */ +$replication_info = array(); + foreach ($replication_types as $type) { if (count(${"server_{$type}_replication"}) > 0) { ${"server_{$type}_status"} = true; + $replication_info[$type]['status'] = true; } else { ${"server_{$type}_status"} = false; + $replication_info[$type]['status'] = false; } if (${"server_{$type}_status"}) { if ($type == "master") { ${"server_{$type}_Do_DB"} = explode(",", $server_master_replication[0]["Binlog_Do_DB"]); + $replication_info[$type]['Do_DB'] = ${"server_{$type}_Do_DB"}; + ${"server_{$type}_Ignore_DB"} = explode(",", $server_master_replication[0]["Binlog_Ignore_DB"]); + $replication_info[$type]['Ignore_DB'] = ${"server_{$type}_Ignore_DB"}; } elseif ($type == "slave") { ${"server_{$type}_Do_DB"} = explode(",", $server_slave_replication[0]["Replicate_Do_DB"]); + $replication_info[$type]['Do_DB'] = ${"server_{$type}_Do_DB"}; + ${"server_{$type}_Ignore_DB"} = explode(",", $server_slave_replication[0]["Replicate_Ignore_DB"]); + $replication_info[$type]['Ignore_DB'] = ${"server_{$type}_Ignore_DB"};
${"server_{$type}_Do_Table"} = explode(",", $server_slave_replication[0]["Replicate_Do_Table"]); + $replication_info[$type]['Do_Table'] = ${"server_{$type}_Do_Table"}; + ${"server_{$type}_Ignore_Table"} = explode(",", $server_slave_replication[0]["Replicate_Ignore_Table"]); + $replication_info[$type]['Ignore_Table'] = ${"server_{$type}_Ignore_Table"};
${"server_{$type}_Wild_Do_Table"} = explode(",", $server_slave_replication[0]["Replicate_Wild_Do_Table"]); + $replication_info[$type]['Wild_Do_Table'] = ${"server_{$type}_Wild_Do_Table"}; + ${"server_{$type}_Wild_Ignore_Table"} = explode(",", $server_slave_replication[0]["Replicate_Wild_Ignore_Table"]); + $replication_info[$type]['Wild_Ignore_Table'] = ${"server_{$type}_Wild_Ignore_Table"}; } } } diff --git a/server_databases.php b/server_databases.php index 8ce1f8e..a0b5705 100644 --- a/server_databases.php +++ b/server_databases.php @@ -12,6 +12,7 @@ require_once './libraries/common.inc.php';
require './libraries/server_common.inc.php'; require './libraries/replication.inc.php'; +require './libraries/build_html_for_db.lib.php';
/** * avoids 'undefined index' errors @@ -118,42 +119,7 @@ if ($databases_count > 0) { reset($databases); $first_database = current($databases); // table col order - $column_order['DEFAULT_COLLATION_NAME'] = array( - 'disp_name' => __('Collation'), - 'description_function' => 'PMA_getCollationDescr', - 'format' => 'string', - 'footer' => PMA_getServerCollation(), - ); - $column_order['SCHEMA_TABLES'] = array( - 'disp_name' => __('Tables'), - 'format' => 'number', - 'footer' => 0, - ); - $column_order['SCHEMA_TABLE_ROWS'] = array( - 'disp_name' => __('Rows'), - 'format' => 'number', - 'footer' => 0, - ); - $column_order['SCHEMA_DATA_LENGTH'] = array( - 'disp_name' => __('Data'), - 'format' => 'byte', - 'footer' => 0, - ); - $column_order['SCHEMA_INDEX_LENGTH'] = array( - 'disp_name' => __('Indexes'), - 'format' => 'byte', - 'footer' => 0, - ); - $column_order['SCHEMA_LENGTH'] = array( - 'disp_name' => __('Total'), - 'format' => 'byte', - 'footer' => 0, - ); - $column_order['SCHEMA_DATA_FREE'] = array( - 'disp_name' => __('Overhead'), - 'format' => 'byte', - 'footer' => 0, - ); + $column_order = PMA_getColumnOrder();
$_url_params = array( 'pos' => $pos, @@ -223,88 +189,10 @@ if ($databases_count > 0) { echo '<tr class="' . ($odd_row ? 'odd' : 'even') . '">' . "\n"; $odd_row = ! $odd_row;
- if ($is_superuser || $cfg['AllowUserDropDatabase']) { - echo ' <td class="tool">' . "\n"; - if ($current['SCHEMA_NAME'] != 'mysql' - && $current['SCHEMA_NAME'] != 'information_schema') { - echo ' <input type="checkbox" name="selected_dbs[]" title="' . htmlspecialchars($current['SCHEMA_NAME']) . '" value="' . htmlspecialchars($current['SCHEMA_NAME']) . '" ' . (empty($checkall) ? '' : 'checked="checked" ') . '/>' . "\n"; - } else { - echo ' <input type="checkbox" name="selected_dbs[]" title="' . htmlspecialchars($current['SCHEMA_NAME']) . '" value="' . htmlspecialchars($current['SCHEMA_NAME']) . '" disabled="disabled"/>' . "\n"; - } - echo ' </td>' . "\n"; - } - echo ' <td class="name">' . "\n" - . ' <a onclick="' - . 'if (window.parent.openDb && window.parent.openDb(\'' . PMA_jsFormat($current['SCHEMA_NAME'], false) . '\')) return false;' - . '" href="index.php?' . $url_query . '&db=' - . urlencode($current['SCHEMA_NAME']) . '" title="' - . sprintf(__('Jump to database'), htmlspecialchars($current['SCHEMA_NAME'])) - . '" target="_parent">' . "\n" - . ' ' . htmlspecialchars($current['SCHEMA_NAME']) . "\n" - . ' </a>' . "\n" - . ' </td>' . "\n"; - - foreach ($column_order as $stat_name => $stat) { - if (array_key_exists($stat_name, $current)) { - if (is_numeric($stat['footer'])) { - $column_order[$stat_name]['footer'] += $current[$stat_name]; - } - if ($stat['format'] === 'byte') { - list($value, $unit) = PMA_formatByteDown($current[$stat_name], 3, 1); - } elseif ($stat['format'] === 'number') { - $value = PMA_formatNumber($current[$stat_name], 0); - } else { - $value = htmlentities($current[$stat_name], 0); - } - echo ' <td class="value">'; - if (isset($stat['description_function'])) { - echo '<dfn title="' . $stat['description_function']($current[$stat_name]) . '">'; - } - echo $value; - if (isset($stat['description_function'])) { - echo '</dfn>'; - } - echo '</td>' . "\n"; - if ($stat['format'] === 'byte') { - echo ' <td class="unit">' . $unit . '</td>' . "\n"; - } - } - } - foreach ($replication_types as $type) { - if (${"server_{$type}_status"}) { - echo '<td class="tool" style="text-align: center;">' . "\n"; - - if (strlen(array_search($current["SCHEMA_NAME"], ${"server_{$type}_Ignore_DB"}))>0) { - echo '<img class="icon" src="' . $pmaThemeImage . 's_cancel.png" width="16" height="16" alt="' . __('Not replicated') . '" />' . "\n"; - } else { - $key = array_search($current["SCHEMA_NAME"], ${"server_{$type}_Do_DB"}); - - if (strlen($key) > 0 || (${"server_{$type}_Do_DB"}[0] == "" && count(${"server_{$type}_Do_DB"}) == 1)) { - // if ($key != null) did not work for index "0" - echo '<img class="icon" src="' . $pmaThemeImage . 's_success.png" width="16" height="16" alt="' . __('Replicated') . '" />' . "\n"; - } else { - echo ''; - } - } - - echo '</td>'; - } - } + list($column_order, $generated_html) = PMA_buildHtmlForDb($current, $is_superuser, (isset($checkall) ? $checkall : ''), $url_query, $column_order, $replication_types, $replication_info); + + echo $generated_html;
- if ($is_superuser) { - echo ' <td class="tool">' . "\n" - . ' <a onclick="' - . 'if (window.parent.setDb) window.parent.setDb(\'' . PMA_jsFormat($current['SCHEMA_NAME']) . '\');' - . '" href="./server_privileges.php?' . $url_query - . '&checkprivs=' . urlencode($current['SCHEMA_NAME']) - . '" title="' . sprintf(__('Check privileges for database "%s".'), htmlspecialchars($current['SCHEMA_NAME'])) - . '">'. "\n" - . ' ' - . ($cfg['PropertiesIconic'] - ? '<img class="icon" src="' . $pmaThemeImage . 's_rights.png" width="16" height="16" alt=" ' . __('Check Privileges') . '" /> ' - : __('Check Privileges')) . "\n" - . ' </a></td>' . "\n"; - } echo '</tr>' . "\n"; } // end foreach ($databases as $key => $current) unset($current, $odd_row); @@ -313,7 +201,7 @@ if ($databases_count > 0) { if ($is_superuser || $cfg['AllowUserDropDatabase']) { echo ' <th></th>' . "\n"; } - echo ' <th>' . __('Total') . ': ' . $databases_count . '</th>' . "\n"; + echo ' <th>' . __('Total') . ': <span id="databases_count">' . $databases_count . '</span></th>' . "\n"; foreach ($column_order as $stat_name => $stat) { if (array_key_exists($stat_name, $first_database)) { if ($stat['format'] === 'byte') {
hooks/post-receive