From 677ea758ca9be2abfc7c445f56228d5b87196827 Mon Sep 17 00:00:00 2001 From: Madhura Jayaratne Date: Tue, 24 Nov 2015 20:12:33 +1100 Subject: [PATCH 1/3] Template display_create_database.lib.php Signed-off-by: Madhura Jayaratne --- .../server/ServerDatabasesController.php | 19 +++--- libraries/display_create_database.lib.php | 61 ------------------- templates/server/databases/create.phtml | 37 +++++++++++ 3 files changed, 46 insertions(+), 71 deletions(-) delete mode 100644 libraries/display_create_database.lib.php create mode 100644 templates/server/databases/create.phtml diff --git a/libraries/controllers/server/ServerDatabasesController.php b/libraries/controllers/server/ServerDatabasesController.php index bc1c1a9559..19b7cbafc3 100644 --- a/libraries/controllers/server/ServerDatabasesController.php +++ b/libraries/controllers/server/ServerDatabasesController.php @@ -53,6 +53,8 @@ class ServerDatabasesController extends Controller */ public function indexAction() { + require_once 'libraries/check_user_privileges.lib.php'; + if (isset($_REQUEST['drop_selected_dbs']) && ($GLOBALS['is_superuser'] || $GLOBALS['cfg']['AllowUserDropDatabase']) ) { @@ -83,10 +85,7 @@ class ServerDatabasesController extends Controller */ $html = ''; if ($GLOBALS['cfg']['ShowCreateDb']) { - $html .= '' . "\n"; + $html .= Template::get('server/databases/create')->render(); } /** @@ -194,7 +193,8 @@ class ServerDatabasesController extends Controller * * @return string */ - private function _getHtmlForDatabases($replication_types) { + private function _getHtmlForDatabases($replication_types) + { $html = '
'; reset($this->_databases); @@ -291,8 +291,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 +312,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"; 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..a4cef0f624 --- /dev/null +++ b/templates/server/databases/create.phtml @@ -0,0 +1,37 @@ +
    +
  • + +
    + +   + +
    + + + + + + + + + + + +
    + + + +   + +
    + + + 2, 'border' => 0, 'align' => 'middle')) . ' ' . __('No Privileges'); ?> + + +
  • +
\ No newline at end of file From 0a2b037706f8deb81d8ac432ea4c4c6520e6be05 Mon Sep 17 00:00:00 2001 From: Madhura Jayaratne Date: Tue, 24 Nov 2015 20:41:40 +1100 Subject: [PATCH 2/3] merge db_create.php into ServerDatabasesController Signed-off-by: Madhura Jayaratne --- db_create.php | 148 ------------------ js/server_databases.js | 6 - libraries/common.inc.php | 1 - .../server/ServerDatabasesController.php | 65 +++++++- templates/server/databases/create.phtml | 3 +- .../core/PMA_checkPageValidity_test.php | 1 - 6 files changed, 65 insertions(+), 159 deletions(-) delete mode 100644 db_create.php diff --git a/db_create.php b/db_create.php deleted file mode 100644 index 5e405693a9..0000000000 --- a/db_create.php +++ /dev/null @@ -1,148 +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 '' . $cfg['DefaultTabDatabase']; - } -} 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/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 19b7cbafc3..2c8af7b012 100644 --- a/libraries/controllers/server/ServerDatabasesController.php +++ b/libraries/controllers/server/ServerDatabasesController.php @@ -56,15 +56,25 @@ class ServerDatabasesController extends Controller 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(); @@ -113,6 +123,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 * diff --git a/templates/server/databases/create.phtml b/templates/server/databases/create.phtml index a4cef0f624..1fd91bc1ae 100644 --- a/templates/server/databases/create.phtml +++ b/templates/server/databases/create.phtml @@ -1,7 +1,7 @@
  • -
    +