2 /* vim: set expandtab sw=4 ts=4 sts=4: */
4 * Helper for multi submit forms
8 declare(strict_types
=1);
10 use PhpMyAdmin\CentralColumns
;
11 use PhpMyAdmin\Message
;
12 use PhpMyAdmin\MultSubmits
;
13 use PhpMyAdmin\Response
;
15 use PhpMyAdmin\Template
;
18 if (! defined('PHPMYADMIN')) {
32 'selected_recent_table',
40 foreach ($request_params as $one_request_param) {
41 if (isset($_POST[$one_request_param])) {
42 $GLOBALS[$one_request_param] = $_POST[$one_request_param];
45 $response = Response
::getInstance();
47 global $db, $table, $clause_is_unique, $from_prefix, $goto,
48 $mult_btn, $original_sql_query, $query_type, $reload,
49 $selected, $selected_fld, $selected_recent_table, $sql_query,
50 $submit_mult, $table_type, $to_prefix, $url_query, $pmaThemeImage;
52 $multSubmits = new MultSubmits();
53 $template = new Template();
56 * Prepares the work and runs some other scripts if required
58 if (! empty($submit_mult)
59 && $submit_mult != __('With selected:')
60 && (! empty($_POST['selected_dbs'])
61 ||
! empty($_POST['selected_tbl'])
62 ||
! empty($selected_fld)
63 ||
! empty($_POST['rows_to_delete']))
65 define('PMA_SUBMIT_MULT', 1);
66 if (! empty($_POST['selected_dbs'])) {
67 // coming from server database view - do something with
69 $selected = $_POST['selected_dbs'];
70 $query_type = 'drop_db';
71 } elseif (! empty($_POST['selected_tbl'])) {
72 // coming from database structure view - do something with
74 $selected = $_POST['selected_tbl'];
75 $centralColumns = new CentralColumns($GLOBALS['dbi']);
76 switch ($submit_mult) {
77 case 'add_prefix_tbl':
78 case 'replace_prefix_tbl':
79 case 'copy_tbl_change_prefix':
90 $query_type = $submit_mult;
92 $mult_btn = __('Yes');
96 include ROOT_PATH
. 'db_export.php';
99 $views = $GLOBALS['dbi']->getVirtualTables($db);
100 list($full_query, $reload, $full_query_views)
101 = $multSubmits->getQueryFromSelected(
107 $_url_params = $multSubmits->getUrlParams(
115 isset($original_sql_query) ?
$original_sql_query : null,
116 isset($original_url_query) ?
$original_url_query : null
118 $response->disable();
120 $multSubmits->getHtmlForCopyMultipleTables($action, $_url_params)
124 $show_create = $template->render('database/structure/show_create', [
125 'db' => $GLOBALS['db'],
126 'db_objects' => $selected,
127 'dbi' => $GLOBALS['dbi'],
129 // Send response to client.
130 $response->addJSON('message', $show_create);
132 case 'sync_unique_columns_central_list':
133 $centralColsError = $centralColumns->syncUniqueColumns(
137 case 'delete_unique_columns_central_list':
138 $centralColsError = $centralColumns->deleteColumnsFromList(
143 case 'make_consistent_with_central_list':
144 $centralColsError = $centralColumns->makeConsistentWithList(
150 } elseif (! (isset($selected_fld) && ! empty($selected_fld))) {
151 // coming from browsing - do something with selected rows
152 $what = 'row_delete';
153 $selected = $_REQUEST['rows_to_delete'];
163 $views = $GLOBALS['dbi']->getVirtualTables($db);
166 * Displays the confirmation form if required
168 if (! empty($submit_mult) && ! empty($what)) {
171 if (strlen($table) > 0) {
172 include ROOT_PATH
. 'libraries/tbl_common.inc.php';
173 $url_query .= '&goto=tbl_sql.php&back=tbl_sql.php';
174 } elseif (strlen($db) > 0) {
175 include ROOT_PATH
. 'libraries/db_common.inc.php';
183 $db_is_system_schema,
187 ) = Util
::getDbInfo($db, isset($sub_part) ?
$sub_part : '');
189 include_once ROOT_PATH
. 'libraries/server_common.inc.php';
193 list($full_query, $reload, $full_query_views)
194 = $multSubmits->getQueryFromSelected(
201 // Displays the confirmation form
202 $_url_params = $multSubmits->getUrlParams(
210 isset($original_sql_query) ?
$original_sql_query : null,
211 isset($original_url_query) ?
$original_url_query : null
215 if ($what == 'replace_prefix_tbl' ||
$what == 'copy_tbl_change_prefix') {
216 $response->disable();
218 $multSubmits->getHtmlForReplacePrefixTable($action, $_url_params)
220 } elseif ($what == 'add_prefix_tbl') {
221 $response->disable();
222 $response->addHTML($multSubmits->getHtmlForAddPrefixTable($action, $_url_params));
225 $multSubmits->getHtmlForOtherActions($what, $action, $_url_params, $full_query)
229 } elseif (! empty($mult_btn) && $mult_btn == __('Yes')) {
231 * Executes the query - dropping rows, columns/fields, tables or dbs
233 if ($query_type == 'primary_fld') {
234 // Gets table primary key
235 $GLOBALS['dbi']->selectDb($db);
236 $result = $GLOBALS['dbi']->query(
237 'SHOW KEYS FROM ' . Util
::backquote($table) . ';'
240 while ($row = $GLOBALS['dbi']->fetchAssoc($result)) {
241 // Backups the list of primary keys
242 if ($row['Key_name'] == 'PRIMARY') {
243 $primary .= $row['Column_name'] . ', ';
246 $GLOBALS['dbi']->freeResult($result);
249 if ($query_type == 'drop_tbl'
250 ||
$query_type == 'empty_tbl'
251 ||
$query_type == 'row_delete'
253 $default_fk_check_value = Util
::handleDisableFKCheckInit();
257 $result, $rebuild_database_list, $reload_ret,
258 $run_parts, $execute_query_later, $sql_query, $sql_query_views
259 ) = $multSubmits->buildOrExecuteQuery(
265 isset($primary) ?
$primary : null,
266 isset($from_prefix) ?
$from_prefix : null,
267 isset($to_prefix) ?
$to_prefix : null
269 //update the existed variable
270 if (isset($reload_ret)) {
271 $reload = $reload_ret;
274 if ($query_type == 'drop_tbl') {
275 if (! empty($sql_query)) {
277 } elseif (! empty($sql_query_views)) {
278 $sql_query = $sql_query_views . ';';
279 unset($sql_query_views);
283 // Unset cache values for tables count, issue #14205
284 if ($query_type === 'drop_tbl' && isset($_SESSION['tmpval'])) {
285 if (isset($_SESSION['tmpval']['table_limit_offset'])) {
286 unset($_SESSION['tmpval']['table_limit_offset']);
289 if (isset($_SESSION['tmpval']['table_limit_offset_db'])) {
290 unset($_SESSION['tmpval']['table_limit_offset_db']);
294 if ($execute_query_later) {
296 $sql->executeQueryAndSendQueryResponse(
297 null, // analyzed_sql_results
298 false, // is_gotofile
301 null, // find_real_end
302 null, // sql_query_for_bookmark
304 null, // message_to_show
308 $pmaThemeImage, // pmaThemeImage
310 null, // disp_message
311 $query_type, // query_type
312 $sql_query, // sql_query
313 $selected, // selectedTables
314 null // complete_query
316 } elseif (! $run_parts) {
317 $GLOBALS['dbi']->selectDb($db);
318 $result = $GLOBALS['dbi']->tryQuery($sql_query);
319 if ($result && ! empty($sql_query_views)) {
320 $sql_query .= ' ' . $sql_query_views . ';';
321 $result = $GLOBALS['dbi']->tryQuery($sql_query_views);
322 unset($sql_query_views);
326 $message = Message
::error($GLOBALS['dbi']->getError());
329 if ($query_type == 'drop_tbl'
330 ||
$query_type == 'empty_tbl'
331 ||
$query_type == 'row_delete'
333 Util
::handleDisableFKCheckCleanup($default_fk_check_value);
335 if ($rebuild_database_list) {
336 // avoid a problem with the database list navigator
337 // when dropping a db from server_databases
338 $GLOBALS['dblist']->databases
->build();
340 } elseif (isset($submit_mult)
341 && ($submit_mult == 'sync_unique_columns_central_list'
342 ||
$submit_mult == 'delete_unique_columns_central_list'
343 ||
$submit_mult == 'add_to_central_columns'
344 ||
$submit_mult == 'remove_from_central_columns'
345 ||
$submit_mult == 'make_consistent_with_central_list')
347 if (isset($centralColsError) && $centralColsError !== true) {
348 $message = $centralColsError;
350 $message = Message
::success(__('Success!'));
353 $message = Message
::success(__('No change'));