Translated using Weblate (Romanian)
[phpmyadmin.git] / libraries / mult_submits.inc.php
blob0a28b34778bb3326ddd972b3f5a6810f7c04f49d
1 <?php
2 /* vim: set expandtab sw=4 ts=4 sts=4: */
3 /**
4 * Helper for multi submit forms
6 * @package PhpMyAdmin
7 */
8 declare(strict_types=1);
10 use PhpMyAdmin\CentralColumns;
11 use PhpMyAdmin\Message;
12 use PhpMyAdmin\MultSubmits;
13 use PhpMyAdmin\Response;
14 use PhpMyAdmin\Sql;
15 use PhpMyAdmin\Template;
16 use PhpMyAdmin\Util;
18 if (! defined('PHPMYADMIN')) {
19 exit;
22 $request_params = [
23 'clause_is_unique',
24 'from_prefix',
25 'goto',
26 'mult_btn',
27 'original_sql_query',
28 'query_type',
29 'reload',
30 'selected',
31 'selected_fld',
32 'selected_recent_table',
33 'sql_query',
34 'submit_mult',
35 'table_type',
36 'to_prefix',
37 'url_query',
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();
55 /**
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']))
64 ) {
65 define('PMA_SUBMIT_MULT', 1);
66 if (! empty($_POST['selected_dbs'])) {
67 // coming from server database view - do something with
68 // selected databases
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
73 // selected tables
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':
80 case 'drop_db':
81 case 'drop_tbl':
82 case 'empty_tbl':
83 $what = $submit_mult;
84 break;
85 case 'check_tbl':
86 case 'optimize_tbl':
87 case 'repair_tbl':
88 case 'analyze_tbl':
89 case 'checksum_tbl':
90 $query_type = $submit_mult;
91 unset($submit_mult);
92 $mult_btn = __('Yes');
93 break;
94 case 'export':
95 unset($submit_mult);
96 include ROOT_PATH . 'db_export.php';
97 exit;
98 case 'copy_tbl':
99 $views = $GLOBALS['dbi']->getVirtualTables($db);
100 list($full_query, $reload, $full_query_views)
101 = $multSubmits->getQueryFromSelected(
102 $submit_mult,
103 $table,
104 $selected,
105 $views
107 $_url_params = $multSubmits->getUrlParams(
108 $submit_mult,
109 $reload,
110 $action,
111 $db,
112 $table,
113 $selected,
114 $views,
115 isset($original_sql_query) ? $original_sql_query : null,
116 isset($original_url_query) ? $original_url_query : null
118 $response->disable();
119 $response->addHTML(
120 $multSubmits->getHtmlForCopyMultipleTables($action, $_url_params)
122 exit;
123 case 'show_create':
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);
131 exit;
132 case 'sync_unique_columns_central_list':
133 $centralColsError = $centralColumns->syncUniqueColumns(
134 $selected
136 break;
137 case 'delete_unique_columns_central_list':
138 $centralColsError = $centralColumns->deleteColumnsFromList(
139 $_POST['db'],
140 $selected
142 break;
143 case 'make_consistent_with_central_list':
144 $centralColsError = $centralColumns->makeConsistentWithList(
145 $GLOBALS['db'],
146 $selected
148 break;
149 } // end switch
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'];
157 if (empty($db)) {
158 $db = '';
160 if (empty($table)) {
161 $table = '';
163 $views = $GLOBALS['dbi']->getVirtualTables($db);
166 * Displays the confirmation form if required
168 if (! empty($submit_mult) && ! empty($what)) {
169 unset($message);
171 if (strlen($table) > 0) {
172 include ROOT_PATH . 'libraries/tbl_common.inc.php';
173 $url_query .= '&amp;goto=tbl_sql.php&amp;back=tbl_sql.php';
174 } elseif (strlen($db) > 0) {
175 include ROOT_PATH . 'libraries/db_common.inc.php';
177 list(
178 $tables,
179 $num_tables,
180 $total_num_tables,
181 $sub_part,
182 $is_show_stats,
183 $db_is_system_schema,
184 $tooltip_truename,
185 $tooltip_aliasname,
186 $pos
187 ) = Util::getDbInfo($db, isset($sub_part) ? $sub_part : '');
188 } else {
189 include_once ROOT_PATH . 'libraries/server_common.inc.php';
192 // Builds the query
193 list($full_query, $reload, $full_query_views)
194 = $multSubmits->getQueryFromSelected(
195 $what,
196 $table,
197 $selected,
198 $views
201 // Displays the confirmation form
202 $_url_params = $multSubmits->getUrlParams(
203 $what,
204 $reload,
205 $action,
206 $db,
207 $table,
208 $selected,
209 $views,
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();
217 $response->addHTML(
218 $multSubmits->getHtmlForReplacePrefixTable($action, $_url_params)
220 } elseif ($what == 'add_prefix_tbl') {
221 $response->disable();
222 $response->addHTML($multSubmits->getHtmlForAddPrefixTable($action, $_url_params));
223 } else {
224 $response->addHTML(
225 $multSubmits->getHtmlForOtherActions($what, $action, $_url_params, $full_query)
228 exit;
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) . ';'
239 $primary = '';
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'] . ', ';
245 } // end while
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();
256 list(
257 $result, $rebuild_database_list, $reload_ret,
258 $run_parts, $execute_query_later, $sql_query, $sql_query_views
259 ) = $multSubmits->buildOrExecuteQuery(
260 $query_type,
261 $selected,
262 $db,
263 $table,
264 $views,
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)) {
276 $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) {
295 $sql = new Sql();
296 $sql->executeQueryAndSendQueryResponse(
297 null, // analyzed_sql_results
298 false, // is_gotofile
299 $db, // db
300 $table, // table
301 null, // find_real_end
302 null, // sql_query_for_bookmark
303 null, // extra_data
304 null, // message_to_show
305 null, // message
306 null, // sql_data
307 $goto, // goto
308 $pmaThemeImage, // pmaThemeImage
309 null, // disp_query
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);
325 if (! $result) {
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;
349 } else {
350 $message = Message::success(__('Success!'));
352 } else {
353 $message = Message::success(__('No change'));