diff --git a/db_create.php b/db_create.php deleted file mode 100644 index 15e49cbb45..0000000000 --- a/db_create.php +++ /dev/null @@ -1,150 +0,0 @@ -tryQuery($sql_query); - -if (! $result) { - $message = PMA\libraries\Message::rawError($GLOBALS['dbi']->getError()); - // avoid displaying the not-created db name in header or navi panel - $GLOBALS['db'] = ''; - $GLOBALS['table'] = ''; - - /** - * If in an Ajax request, just display the message with - * {@link PMA\libraries\Response} - */ - if ($GLOBALS['is_ajax_request'] == true) { - $response = PMA\libraries\Response::getInstance(); - $response->setRequestStatus(false); - $response->addJSON('message', $message); - } else { - include_once 'index.php'; - } -} else { - $message = PMA\libraries\Message::success(__('Database %1$s has been created.')); - $message->addParam($_POST['new_db']); - $GLOBALS['db'] = $_POST['new_db']; - - /** - * If in an Ajax request, build the output and send it - */ - if ($GLOBALS['is_ajax_request'] == true) { - //Construct the html for the new database, so that it can be appended to - // the list of databases on server_databases.php - - /** - * Build the array to be passed to {@link PMA_URL_getCommon} - * to generate the links - * - * @global array $GLOBALS['db_url_params'] - * @name $db_url_params - */ - $db_url_params['db'] = $_POST['new_db']; - - $is_superuser = $GLOBALS['dbi']->isSuperuser(); - $column_order = PMA_getColumnOrder(); - $url_query = PMA_URL_getCommon(array('db' => $_POST['new_db'])); - - /** - * String that will contain the output HTML - * @name $new_db_string - */ - $new_db_string = ''; - - if (empty($db_collation_for_ajax)) { - $db_collation_for_ajax = PMA_getServerCollation(); - } - - // $dbstats comes from the create table dialog - if (! empty($dbstats)) { - $current = array( - 'SCHEMA_NAME' => $_POST['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' => $_POST['new_db'], - 'DEFAULT_COLLATION_NAME' => $db_collation_for_ajax - ); - } - - foreach ($column_order as $stat_name => $stat) { - if (array_key_exists($stat_name, $current) && is_numeric($stat['footer'])) { - $column_order[$stat_name]['footer'] += $current[$stat_name]; - } - } - - $generated_html = PMA_buildHtmlForDb( - $current, $is_superuser, $url_query, - $column_order, $replication_types, $GLOBALS['replication_info'] - ); - $new_db_string .= $generated_html; - - $response = PMA\libraries\Response::getInstance(); - $response->addJSON('message', $message); - $response->addJSON('new_db_string', $new_db_string); - $response->addJSON( - 'sql_query', - PMA\libraries\Util::getMessage( - null, $sql_query, 'success' - ) - ); - $response->addJSON( - 'url_query', - PMA\libraries\Util::getScriptNameForOption( - $GLOBALS['cfg']['DefaultTabDatabase'], 'database' - ) - . $url_query . '&db=' - . urlencode($current['SCHEMA_NAME']) - ); - } else { - include_once '' . PMA\libraries\Util::getScriptNameForOption( - $GLOBALS['cfg']['DefaultTabDatabase'], 'database' - ); - } -} diff --git a/js/server_databases.js b/js/server_databases.js index 50506a5724..726334558d 100644 --- a/js/server_databases.js +++ b/js/server_databases.js @@ -112,12 +112,6 @@ AJAX.registerOnload('server_databases.js', function () { if (typeof data !== 'undefined' && data.success === true) { PMA_ajaxShowMessage(data.message); - //Append database's row to table - $("#tabledatabases") - .find('tbody') - .append(data.new_db_string) - .PMA_sort_table('.name'); - var $databases_count_object = $('#databases_count'); var databases_count = parseInt($databases_count_object.text(), 10) + 1; $databases_count_object.text(databases_count); diff --git a/libraries/build_html_for_db.lib.php b/libraries/build_html_for_db.lib.php deleted file mode 100644 index 8891b33837..0000000000 --- a/libraries/build_html_for_db.lib.php +++ /dev/null @@ -1,129 +0,0 @@ - __('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, - ); - // At this point we were preparing the display of Overhead using DATA_FREE - // but its content does not represent the real overhead in the case - // of InnoDB - - 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 current database - * @param boolean $is_superuser user status - * @param string $url_query url query - * @param array $column_order column order - * @param array $replication_types replication types - * @param array $replication_info replication info - * @param string $tr_class HTMl class for the row - * - * @return array $column_order, $out - */ -function PMA_buildHtmlForDb( - $current, $is_superuser, $url_query, $column_order, - $replication_types, $replication_info, $tr_class = '' -) { - $master_replication = $slave_replication = ''; - foreach ($replication_types as $type) { - if ($replication_info[$type]['status']) { - $out = ''; - $key = array_search( - $current["SCHEMA_NAME"], - $replication_info[$type]['Ignore_DB'] - ); - if (/*overload*/mb_strlen($key) > 0) { - $out = PMA\libraries\Util::getIcon( - 's_cancel.png', - __('Not replicated') - ); - } else { - $key = array_search( - $current["SCHEMA_NAME"], $replication_info[$type]['Do_DB'] - ); - - if (/*overload*/mb_strlen($key) > 0 - || (isset($replication_info[$type]['Do_DB'][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\libraries\Util::getIcon( - 's_success.png', - __('Replicated') - ); - } - } - - if ($type == 'master') { - $master_replication = $out; - } elseif ($type == 'slave') { - $slave_replication = $out; - } - } - } - - return PMA\libraries\Template::get('server/databases/table_row')->render( - array( - 'current' => $current, - 'tr_class' => $tr_class, - 'url_query' => $url_query, - 'column_order' => $column_order, - 'master_replication_status' => $GLOBALS['replication_info']['master']['status'], - 'master_replication' => $master_replication, - 'slave_replication_status' => $GLOBALS['replication_info']['slave']['status'], - 'slave_replication' => $slave_replication, - ) - ); -} diff --git a/libraries/common.inc.php b/libraries/common.inc.php index 7cec9d528e..aae6d65814 100644 --- a/libraries/common.inc.php +++ b/libraries/common.inc.php @@ -342,7 +342,6 @@ $goto_whitelist = array( //'browse_foreigners.php', //'changelog.php', //'chk_rel.php', - 'db_create.php', 'db_datadict.php', 'db_sql.php', 'db_events.php', diff --git a/libraries/controllers/server/ServerDatabasesController.php b/libraries/controllers/server/ServerDatabasesController.php index bc1c1a9559..a68e9a747d 100644 --- a/libraries/controllers/server/ServerDatabasesController.php +++ b/libraries/controllers/server/ServerDatabasesController.php @@ -53,16 +53,27 @@ class ServerDatabasesController extends Controller */ public function indexAction() { + require_once 'libraries/check_user_privileges.lib.php'; + if (isset($_REQUEST['drop_selected_dbs']) + && $GLOBALS['is_ajax_request'] && ($GLOBALS['is_superuser'] || $GLOBALS['cfg']['AllowUserDropDatabase']) ) { $this->dropDatabasesAction(); return; } - require_once 'libraries/server_common.inc.php'; require_once 'libraries/replication.inc.php'; - require_once 'libraries/build_html_for_db.lib.php'; + require_once 'libraries/mysql_charsets.inc.php'; + + if (! empty($_POST['new_db']) + && $GLOBALS['is_ajax_request'] + ) { + $this->createDatabaseAction(); + return; + } + + require_once 'libraries/server_common.inc.php'; $header = $this->response->getHeader(); $scripts = $header->getScripts(); @@ -83,10 +94,7 @@ class ServerDatabasesController extends Controller */ $html = ''; if ($GLOBALS['cfg']['ShowCreateDb']) { - $html .= '' . "\n"; + $html .= Template::get('server/databases/create')->render(); } /** @@ -114,6 +122,59 @@ class ServerDatabasesController extends Controller $this->response->addHTML($html); } + /** + * Handles creating a new database + * + * @return void + */ + public function createDatabaseAction() + { + /** + * Builds and executes the db creation sql query + */ + $sql_query = 'CREATE DATABASE ' . Util::backquote($_POST['new_db']); + if (! empty($_POST['db_collation'])) { + list($db_charset) = explode('_', $_POST['db_collation']); + if (in_array($db_charset, $GLOBALS['mysql_charsets']) + && in_array($_POST['db_collation'], $GLOBALS['mysql_collations'][$db_charset]) + ) { + $sql_query .= ' DEFAULT' + . PMA_generateCharsetQueryPart($_POST['db_collation']); + } + } + $sql_query .= ';'; + + $result = $GLOBALS['dbi']->tryQuery($sql_query); + + if (! $result) { + // avoid displaying the not-created db name in header or navi panel + $GLOBALS['db'] = ''; + + $message = Message::rawError($GLOBALS['dbi']->getError()); + $this->response->setRequestStatus(false); + $this->response->addJSON('message', $message); + } else { + $GLOBALS['db'] = $_POST['new_db']; + + $message = Message::success(__('Database %1$s has been created.')); + $message->addParam($_POST['new_db']); + $this->response->addJSON('message', $message); + $this->response->addJSON( + 'sql_query', Util::getMessage(null, $sql_query, 'success') + ); + + $url_query = PMA_URL_getCommon(array('db' => $_POST['new_db'])); + $this->response->addJSON( + 'url_query', + Util::getScriptNameForOption( + $GLOBALS['cfg']['DefaultTabDatabase'], 'database' + ) + . $url_query . '&db=' + . urlencode($_POST['new_db']) + ); + } + } + /** * Handles dropping multiple databases * @@ -194,13 +255,14 @@ class ServerDatabasesController extends Controller * * @return string */ - private function _getHtmlForDatabases($replication_types) { + private function _getHtmlForDatabases($replication_types) + { $html = '
'; reset($this->_databases); $first_database = current($this->_databases); // table col order - $column_order = PMA_getColumnOrder(); + $column_order = $this->_getColumnOrder(); $_url_params = array( 'pos' => $this->_pos, @@ -257,6 +319,52 @@ class ServerDatabasesController extends Controller return $html; } + /** + * Prepares the $column_order array + * + * @return array + */ + private function _getColumnOrder() + { + $column_order = array(); + $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, + ); + // At this point we were preparing the display of Overhead using DATA_FREE + // but its content does not represent the real overhead in the case + // of InnoDB + + return $column_order; + } + /** * Returns the html for Table footer buttons * @@ -291,8 +399,8 @@ class ServerDatabasesController extends Controller * * @return string */ - private function _getHtmlForTableFooter($column_order, $first_database) { - + private function _getHtmlForTableFooter($column_order, $first_database) + { return Template::get('server/databases/table_footer')->render( array( 'column_order' => $column_order, @@ -312,9 +420,8 @@ class ServerDatabasesController extends Controller * * @return string */ - private function _getHtmlForTableBody( - $column_order, $replication_types - ) { + private function _getHtmlForTableBody($column_order, $replication_types) + { $odd_row = true; $html = '' . "\n"; @@ -325,7 +432,7 @@ class ServerDatabasesController extends Controller } $odd_row = ! $odd_row; - $generated_html = PMA_buildHtmlForDb( + $generated_html = $this->_buildHtmlForDb( $current, $GLOBALS['is_superuser'], $GLOBALS['url_query'], @@ -341,6 +448,77 @@ class ServerDatabasesController extends Controller return $html; } + /** + * Builds the HTML for one database to display in the list + * of databases from server_databases.php + * + * @param array $current current database + * @param boolean $is_superuser user status + * @param string $url_query url query + * @param array $column_order column order + * @param array $replication_types replication types + * @param array $replication_info replication info + * @param string $tr_class HTMl class for the row + * + * @return array $column_order, $out + */ + function _buildHtmlForDb( + $current, $is_superuser, $url_query, $column_order, + $replication_types, $replication_info, $tr_class = '' + ) { + $master_replication = $slave_replication = ''; + foreach ($replication_types as $type) { + if ($replication_info[$type]['status']) { + $out = ''; + $key = array_search( + $current["SCHEMA_NAME"], + $replication_info[$type]['Ignore_DB'] + ); + if (/*overload*/mb_strlen($key) > 0) { + $out = Util::getIcon( + 's_cancel.png', + __('Not replicated') + ); + } else { + $key = array_search( + $current["SCHEMA_NAME"], $replication_info[$type]['Do_DB'] + ); + + if (/*overload*/mb_strlen($key) > 0 + || (isset($replication_info[$type]['Do_DB'][0]) + && $replication_info[$type]['Do_DB'][0] == "" + && count($replication_info[$type]['Do_DB']) == 1) + ) { + // if ($key != null) did not work for index "0" + $out = Util::getIcon( + 's_success.png', + __('Replicated') + ); + } + } + + if ($type == 'master') { + $master_replication = $out; + } elseif ($type == 'slave') { + $slave_replication = $out; + } + } + } + + return Template::get('server/databases/table_row')->render( + array( + 'current' => $current, + 'tr_class' => $tr_class, + 'url_query' => $url_query, + 'column_order' => $column_order, + 'master_replication_status' => $GLOBALS['replication_info']['master']['status'], + 'master_replication' => $master_replication, + 'slave_replication_status' => $GLOBALS['replication_info']['slave']['status'], + 'slave_replication' => $slave_replication, + ) + ); + } + /** * Returns the html for table header * diff --git a/libraries/display_create_database.lib.php b/libraries/display_create_database.lib.php deleted file mode 100644 index 5dfb1367d5..0000000000 --- a/libraries/display_create_database.lib.php +++ /dev/null @@ -1,61 +0,0 @@ -'; - $html .= ' ' - . PMA\libraries\Util::showMySQLDocu('CREATE_DATABASE'); - $html .= '
'; - $html .= PMA_URL_getHiddenInputs('', '', 5); - $html .= ''; - $html .= ''; - - include_once './libraries/mysql_charsets.inc.php'; - $html .= PMA_generateCharsetDropdownBox( - PMA_CSDROPDOWN_COLLATION, - 'db_collation', - null, - null, - true - ); - - if (! empty($dbstats)) { - $html .= ''; - } - - $html .= ''; - $html .= ''; -} else { - $html .= ''; - $html .= '' . __('Create database:') . ' ' - . PMA\libraries\Util::showMySQLDocu('CREATE_DATABASE') - . '
'; - - $html .= '' - . PMA\libraries\Util::getImage( - 's_error2.png', - '', - array('hspace' => 2, 'border' => 0, 'align' => 'middle') - ) - . '' . __('No Privileges') . ''; -} // end create db form or message diff --git a/templates/server/databases/create.phtml b/templates/server/databases/create.phtml new file mode 100644 index 0000000000..1fd91bc1ae --- /dev/null +++ b/templates/server/databases/create.phtml @@ -0,0 +1,36 @@ + \ No newline at end of file diff --git a/test/classes/controllers/ServerDatabasesControllerTest.php b/test/classes/controllers/ServerDatabasesControllerTest.php index 738a1ca4c8..74d6504e33 100644 --- a/test/classes/controllers/ServerDatabasesControllerTest.php +++ b/test/classes/controllers/ServerDatabasesControllerTest.php @@ -271,4 +271,60 @@ class ServerDatabasesControllerTest extends PHPUnit_Framework_TestCase $propertySortOrder->getValue($ctrl) ); } + + /** + * Tests for _getColumnOrder() + * + * @return void + */ + public function testGetColumnOrder() + { + $class = new ReflectionClass('\PMA\libraries\controllers\server\ServerDatabasesController'); + $method = $class->getMethod('_getColumnOrder'); + $method->setAccessible(true); + + $container = Container::getDefaultContainer(); + $container->factory('PMA\libraries\controllers\server\ServerDatabasesController'); + $container->alias( + 'ServerDatabasesController', 'PMA\libraries\controllers\server\ServerDatabasesController' + ); + $ctrl = $container->get('ServerDatabasesController'); + + $this->assertEquals( + array( + 'DEFAULT_COLLATION_NAME' => array( + 'disp_name' => __('Collation'), + 'description_function' => 'PMA_getCollationDescr', + 'format' => 'string', + 'footer' => 'utf8_general_ci' + ), + 'SCHEMA_TABLES' => array( + 'disp_name' => __('Tables'), + 'format' => 'number', + 'footer' => 0 + ), + 'SCHEMA_TABLE_ROWS' => array( + 'disp_name' => __('Rows'), + 'format' => 'number', + 'footer' => 0 + ), + 'SCHEMA_DATA_LENGTH' => array( + 'disp_name' => __('Data'), + 'format' => 'byte', + 'footer' => 0 + ), + 'SCHEMA_INDEX_LENGTH' => array( + 'disp_name' => __('Indexes'), + 'format' => 'byte', + 'footer' => 0 + ), + 'SCHEMA_LENGTH' => array( + 'disp_name' => __('Total'), + 'format' => 'byte', + 'footer' => 0 + ) + ), + $method->invoke($ctrl) + ); + } } diff --git a/test/libraries/PMA_build_html_for_db_test.php b/test/libraries/PMA_build_html_for_db_test.php deleted file mode 100644 index 0d76efa188..0000000000 --- a/test/libraries/PMA_build_html_for_db_test.php +++ /dev/null @@ -1,102 +0,0 @@ -getPath(); - $GLOBALS['pmaThemeImage'] = 'theme/'; - - $GLOBALS['cfg']['DefaultTabDatabase'] = 'structure'; - } - - /** - * Test for PMA_getColumnOrder - * - * @return void - */ - public function testGetColumnOrder() - { - $this->assertEquals( - array( - 'DEFAULT_COLLATION_NAME' => array( - 'disp_name' => __('Collation'), - 'description_function' => 'PMA_getCollationDescr', - 'format' => 'string', - 'footer' => 'utf8_general_ci' - ), - 'SCHEMA_TABLES' => array( - 'disp_name' => __('Tables'), - 'format' => 'number', - 'footer' => 0 - ), - 'SCHEMA_TABLE_ROWS' => array( - 'disp_name' => __('Rows'), - 'format' => 'number', - 'footer' => 0 - ), - 'SCHEMA_DATA_LENGTH' => array( - 'disp_name' => __('Data'), - 'format' => 'byte', - 'footer' => 0 - ), - 'SCHEMA_INDEX_LENGTH' => array( - 'disp_name' => __('Indexes'), - 'format' => 'byte', - 'footer' => 0 - ), - 'SCHEMA_LENGTH' => array( - 'disp_name' => __('Total'), - 'format' => 'byte', - 'footer' => 0 - ) - ), - PMA_getColumnOrder() - ); - } -} diff --git a/test/libraries/core/PMA_checkPageValidity_test.php b/test/libraries/core/PMA_checkPageValidity_test.php index 638bfc44ee..15a4317edf 100644 --- a/test/libraries/core/PMA_checkPageValidity_test.php +++ b/test/libraries/core/PMA_checkPageValidity_test.php @@ -19,7 +19,6 @@ require_once 'libraries/core.lib.php'; class PMA_CheckPageValidity_Test extends PHPUnit_Framework_TestCase { protected $goto_whitelist = array( - 'db_create.php', 'db_datadict.php', 'db_sql.php', 'db_export.php',