2 /* vim: set expandtab sw=4 ts=4 sts=4: */
4 * phpMyAdmin designer general code
6 * @package PhpMyAdmin-Designer
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
);
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(
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(
72 $tables_pk_or_unique_keys
77 $response->addHTML($html);
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'];
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(
101 $response->setRequestStatus(true);
102 } elseif ($_POST['operation'] == 'addNewRelation') {
103 list($success, $message) = $designerCommon->addNewRelation(
114 $response->setRequestStatus($success);
115 $response->addJSON('message', $message);
116 } elseif ($_POST['operation'] == 'removeRelation') {
117 list($success, $message) = $designerCommon->removeRelation(
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);
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();
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'];
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');
183 $db_is_system_schema,
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.
192 $databaseDesigner->getHtmlForMain(
197 $script_display_field,
199 isset($_GET['query']),
205 $tables_pk_or_unique_keys
209 $response->addHTML('<div id="PMA_disable_floating_menubar"></div>');