Improve create-release script to handle QA branches higher than QA_4_8.
[phpmyadmin.git] / db_designer.php
blobebfaacb525dbdc5f3d6a76c5529ad0ecf5c0fd1c
1 <?php
2 /* vim: set expandtab sw=4 ts=4 sts=4: */
3 /**
4 * phpMyAdmin designer general code
6 * @package PhpMyAdmin-Designer
7 */
8 declare(strict_types=1);
10 use PhpMyAdmin\Database\Designer;
11 use PhpMyAdmin\Database\Designer\Common;
12 use PhpMyAdmin\DatabaseInterface;
13 use PhpMyAdmin\Di\Container;
14 use PhpMyAdmin\Response;
16 if (! defined('ROOT_PATH')) {
17 define('ROOT_PATH', __DIR__ . DIRECTORY_SEPARATOR);
20 global $db;
22 require_once ROOT_PATH . 'libraries/common.inc.php';
24 $container = Container::getDefaultContainer();
25 $container->set(Response::class, Response::getInstance());
27 /** @var Response $response */
28 $response = $container->get(Response::class);
30 /** @var DatabaseInterface $dbi */
31 $dbi = $container->get(DatabaseInterface::class);
33 /** @var Designer $databaseDesigner */
34 $databaseDesigner = $containerBuilder->get('designer');
36 /** @var Common $designerCommon */
37 $designerCommon = $containerBuilder->get('designer_common');
39 if (isset($_POST['dialog'])) {
40 if ($_POST['dialog'] == 'edit') {
41 $html = $databaseDesigner->getHtmlForEditOrDeletePages($db, 'editPage');
42 } elseif ($_POST['dialog'] == 'delete') {
43 $html = $databaseDesigner->getHtmlForEditOrDeletePages($db, 'deletePage');
44 } elseif ($_POST['dialog'] == 'save_as') {
45 $html = $databaseDesigner->getHtmlForPageSaveAs($db);
46 } elseif ($_POST['dialog'] == 'export') {
47 $html = $databaseDesigner->getHtmlForSchemaExport(
48 $db,
49 $_POST['selected_page']
51 } elseif ($_POST['dialog'] == 'add_table') {
52 $script_display_field = $designerCommon->getTablesInfo();
53 $required = $db . '.' . $GLOBALS['table'];
54 $tab_column = $designerCommon->getColumnsInfo();
55 $tables_all_keys = $designerCommon->getAllKeys();
56 $tables_pk_or_unique_keys = $designerCommon->getPkOrUniqueKeys();
58 $req_key = array_search($required, $GLOBALS['designer']['TABLE_NAME']);
60 $GLOBALS['designer']['TABLE_NAME'] = [$GLOBALS['designer']['TABLE_NAME'][$req_key]];
61 $GLOBALS['designer_url']['TABLE_NAME_SMALL'] = [$GLOBALS['designer_url']['TABLE_NAME_SMALL'][$req_key]];
62 $GLOBALS['designer']['TABLE_NAME_SMALL'] = [$GLOBALS['designer']['TABLE_NAME_SMALL'][$req_key]];
63 $GLOBALS['designer_out']['TABLE_NAME_SMALL'] = [$GLOBALS['designer_out']['TABLE_NAME_SMALL'][$req_key]];
64 $GLOBALS['designer']['TABLE_TYPE'] = [$GLOBALS['designer_url']['TABLE_TYPE'][$req_key]];
65 $GLOBALS['designer_out']['OWNER'] = [$GLOBALS['designer_out']['OWNER'][$req_key]];
67 $html = $databaseDesigner->getDatabaseTables(
68 [],
69 -1,
70 $tab_column,
71 $tables_all_keys,
72 $tables_pk_or_unique_keys
76 if (! empty($html)) {
77 $response->addHTML($html);
79 return;
82 if (isset($_POST['operation'])) {
83 if ($_POST['operation'] == 'deletePage') {
84 $success = $designerCommon->deletePage($_POST['selected_page']);
85 $response->setRequestStatus($success);
86 } elseif ($_POST['operation'] == 'savePage') {
87 if ($_POST['save_page'] == 'same') {
88 $page = $_POST['selected_page'];
89 } else { // new
90 $page = $designerCommon->createNewPage($_POST['selected_value'], $db);
91 $response->addJSON('id', $page);
93 $success = $designerCommon->saveTablePositions($page);
94 $response->setRequestStatus($success);
95 } elseif ($_POST['operation'] == 'setDisplayField') {
96 $designerCommon->saveDisplayField(
97 $_POST['db'],
98 $_POST['table'],
99 $_POST['field']
101 $response->setRequestStatus(true);
102 } elseif ($_POST['operation'] == 'addNewRelation') {
103 list($success, $message) = $designerCommon->addNewRelation(
104 $_POST['db'],
105 $_POST['T1'],
106 $_POST['F1'],
107 $_POST['T2'],
108 $_POST['F2'],
109 $_POST['on_delete'],
110 $_POST['on_update'],
111 $_POST['DB1'],
112 $_POST['DB2']
114 $response->setRequestStatus($success);
115 $response->addJSON('message', $message);
116 } elseif ($_POST['operation'] == 'removeRelation') {
117 list($success, $message) = $designerCommon->removeRelation(
118 $_POST['T1'],
119 $_POST['F1'],
120 $_POST['T2'],
121 $_POST['F2']
123 $response->setRequestStatus($success);
124 $response->addJSON('message', $message);
125 } elseif ($_POST['operation'] == 'save_setting_value') {
126 $success = $designerCommon->saveSetting($_POST['index'], $_POST['value']);
127 $response->setRequestStatus($success);
130 return;
133 require ROOT_PATH . 'libraries/db_common.inc.php';
135 $script_display_field = $designerCommon->getTablesInfo();
136 $tab_column = $designerCommon->getColumnsInfo();
137 $script_tables = $designerCommon->getScriptTabs();
138 $tables_pk_or_unique_keys = $designerCommon->getPkOrUniqueKeys();
139 $tables_all_keys = $designerCommon->getAllKeys();
140 $classes_side_menu = $databaseDesigner->returnClassNamesFromMenuButtons();
142 $display_page = -1;
143 $selected_page = null;
145 if (isset($_GET['query'])) {
146 $display_page = $designerCommon->getDefaultPage($_GET['db']);
147 } elseif (! empty($_GET['page'])) {
148 $display_page = $_GET['page'];
149 } else {
150 $display_page = $designerCommon->getLoadingPage($_GET['db']);
152 if ($display_page != -1) {
153 $selected_page = $designerCommon->getPageName($display_page);
155 $tab_pos = $designerCommon->getTablePositions($display_page);
156 $script_contr = $designerCommon->getScriptContr();
158 $params = ['lang' => $GLOBALS['lang']];
159 if (isset($_GET['db'])) {
160 $params['db'] = $_GET['db'];
163 $response = Response::getInstance();
164 $response->getFooter()->setMinimal();
165 $header = $response->getHeader();
166 $header->setBodyId('designer_body');
168 $scripts = $header->getScripts();
169 $scripts->addFile('vendor/jquery/jquery.fullscreen.js');
170 $scripts->addFile('designer/database.js');
171 $scripts->addFile('designer/objects.js');
172 $scripts->addFile('designer/page.js');
173 $scripts->addFile('designer/history.js');
174 $scripts->addFile('designer/move.js');
175 $scripts->addFile('designer/init.js');
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 ) = PhpMyAdmin\Util::getDbInfo($db, isset($sub_part) ? $sub_part : '');
189 // Embed some data into HTML, later it will be read
190 // by designer/init.js and converted to JS variables.
191 $response->addHTML(
192 $databaseDesigner->getHtmlForMain(
193 $db,
194 $_GET['db'],
195 $script_tables,
196 $script_contr,
197 $script_display_field,
198 $display_page,
199 isset($_GET['query']),
200 $selected_page,
201 $classes_side_menu,
202 $tab_pos,
203 $tab_column,
204 $tables_all_keys,
205 $tables_pk_or_unique_keys
209 $response->addHTML('<div id="PMA_disable_floating_menubar"></div>');