db_designer.php 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. <?php
  2. /* vim: set expandtab sw=4 ts=4 sts=4: */
  3. /**
  4. * phpMyAdmin designer general code
  5. *
  6. * @package PhpMyAdmin-Designer
  7. */
  8. use PhpMyAdmin\Database\Designer;
  9. use PhpMyAdmin\Database\Designer\Common;
  10. use PhpMyAdmin\Response;
  11. require_once 'libraries/common.inc.php';
  12. $response = Response::getInstance();
  13. $databaseDesigner = new Designer();
  14. $designerCommon = new Common();
  15. if (isset($_REQUEST['dialog'])) {
  16. if ($_GET['dialog'] == 'edit') {
  17. $html = $databaseDesigner->getHtmlForEditOrDeletePages($GLOBALS['db'], 'editPage');
  18. } elseif ($_GET['dialog'] == 'delete') {
  19. $html = $databaseDesigner->getHtmlForEditOrDeletePages($GLOBALS['db'], 'deletePage');
  20. } elseif ($_GET['dialog'] == 'save_as') {
  21. $html = $databaseDesigner->getHtmlForPageSaveAs($GLOBALS['db']);
  22. } elseif ($_GET['dialog'] == 'export') {
  23. $html = $databaseDesigner->getHtmlForSchemaExport(
  24. $GLOBALS['db'], $_GET['selected_page']
  25. );
  26. } elseif ($_POST['dialog'] == 'add_table') {
  27. $script_display_field = $designerCommon->getTablesInfo();
  28. $required = $GLOBALS['db'] . '.' . $GLOBALS['table'];
  29. $tab_column = $designerCommon->getColumnsInfo();
  30. $tables_all_keys = $designerCommon->getAllKeys();
  31. $tables_pk_or_unique_keys = $designerCommon->getPkOrUniqueKeys();
  32. $req_key = array_search($required, $GLOBALS['designer']['TABLE_NAME']);
  33. $GLOBALS['designer']['TABLE_NAME'] = array($GLOBALS['designer']['TABLE_NAME'][$req_key]);
  34. $GLOBALS['designer_url']['TABLE_NAME_SMALL'] = array($GLOBALS['designer_url']['TABLE_NAME_SMALL'][$req_key]);
  35. $GLOBALS['designer']['TABLE_NAME_SMALL'] = array($GLOBALS['designer']['TABLE_NAME_SMALL'][$req_key]);
  36. $GLOBALS['designer_out']['TABLE_NAME_SMALL'] = array($GLOBALS['designer_out']['TABLE_NAME_SMALL'][$req_key]);
  37. $GLOBALS['designer']['TABLE_TYPE'] = array($GLOBALS['designer_url']['TABLE_TYPE'][$req_key]);
  38. $GLOBALS['designer_out']['OWNER'] = array($GLOBALS['designer_out']['OWNER'][$req_key]);
  39. $html = $databaseDesigner->getDatabaseTables(
  40. array(), -1, $tab_column,
  41. $tables_all_keys, $tables_pk_or_unique_keys
  42. );
  43. }
  44. if (! empty($html)) {
  45. $response->addHTML($html);
  46. }
  47. return;
  48. }
  49. if (isset($_POST['operation'])) {
  50. if ($_POST['operation'] == 'deletePage') {
  51. $success = $designerCommon->deletePage($_POST['selected_page']);
  52. $response->setRequestStatus($success);
  53. } elseif ($_POST['operation'] == 'savePage') {
  54. if ($_POST['save_page'] == 'same') {
  55. $page = $_POST['selected_page'];
  56. } else { // new
  57. $page = $designerCommon->createNewPage($_POST['selected_value'], $GLOBALS['db']);
  58. $response->addJSON('id', $page);
  59. }
  60. $success = $designerCommon->saveTablePositions($page);
  61. $response->setRequestStatus($success);
  62. } elseif ($_POST['operation'] == 'setDisplayField') {
  63. $designerCommon->saveDisplayField(
  64. $_POST['db'], $_POST['table'], $_POST['field']
  65. );
  66. $response->setRequestStatus(true);
  67. } elseif ($_POST['operation'] == 'addNewRelation') {
  68. list($success, $message) = $designerCommon->addNewRelation(
  69. $_POST['db'],
  70. $_POST['T1'],
  71. $_POST['F1'],
  72. $_POST['T2'],
  73. $_POST['F2'],
  74. $_POST['on_delete'],
  75. $_POST['on_update'],
  76. $_POST['DB1'],
  77. $_POST['DB2']
  78. );
  79. $response->setRequestStatus($success);
  80. $response->addJSON('message', $message);
  81. } elseif ($_POST['operation'] == 'removeRelation') {
  82. list($success, $message) = $designerCommon->removeRelation(
  83. $_POST['T1'],
  84. $_POST['F1'],
  85. $_POST['T2'],
  86. $_POST['F2']
  87. );
  88. $response->setRequestStatus($success);
  89. $response->addJSON('message', $message);
  90. } elseif ($_POST['operation'] == 'save_setting_value') {
  91. $success = $designerCommon->saveSetting($_POST['index'], $_POST['value']);
  92. $response->setRequestStatus($success);
  93. }
  94. return;
  95. }
  96. require 'libraries/db_common.inc.php';
  97. $script_display_field = $designerCommon->getTablesInfo();
  98. $tab_column = $designerCommon->getColumnsInfo();
  99. $script_tables = $designerCommon->getScriptTabs();
  100. $tables_pk_or_unique_keys = $designerCommon->getPkOrUniqueKeys();
  101. $tables_all_keys = $designerCommon->getAllKeys();
  102. $classes_side_menu = $databaseDesigner->returnClassNamesFromMenuButtons();
  103. $display_page = -1;
  104. $selected_page = null;
  105. if (isset($_GET['query'])) {
  106. $display_page = $designerCommon->getDefaultPage($_GET['db']);
  107. } else {
  108. if (! empty($_GET['page'])) {
  109. $display_page = $_GET['page'];
  110. } else {
  111. $display_page = $designerCommon->getLoadingPage($_GET['db']);
  112. }
  113. }
  114. if ($display_page != -1) {
  115. $selected_page = $designerCommon->getPageName($display_page);
  116. }
  117. $tab_pos = $designerCommon->getTablePositions($display_page);
  118. $script_contr = $designerCommon->getScriptContr();
  119. $params = array('lang' => $GLOBALS['lang']);
  120. if (isset($_GET['db'])) {
  121. $params['db'] = $_GET['db'];
  122. }
  123. $response = Response::getInstance();
  124. $response->getFooter()->setMinimal();
  125. $header = $response->getHeader();
  126. $header->setBodyId('designer_body');
  127. $scripts = $header->getScripts();
  128. $scripts->addFile('vendor/jquery/jquery.fullscreen.js');
  129. $scripts->addFile('designer/database.js');
  130. $scripts->addFile('designer/objects.js');
  131. $scripts->addFile('designer/page.js');
  132. $scripts->addFile('designer/history.js');
  133. $scripts->addFile('designer/move.js');
  134. $scripts->addFile('designer/init.js');
  135. list(
  136. $tables,
  137. $num_tables,
  138. $total_num_tables,
  139. $sub_part,
  140. $is_show_stats,
  141. $db_is_system_schema,
  142. $tooltip_truename,
  143. $tooltip_aliasname,
  144. $pos
  145. ) = PhpMyAdmin\Util::getDbInfo($db, isset($sub_part) ? $sub_part : '');
  146. // Embed some data into HTML, later it will be read
  147. // by designer/init.js and converted to JS variables.
  148. $response->addHTML(
  149. $databaseDesigner->getHtmlForJsFields(
  150. $script_tables, $script_contr, $script_display_field, $display_page
  151. )
  152. );
  153. $response->addHTML(
  154. $databaseDesigner->getPageMenu(
  155. isset($_GET['query']),
  156. $selected_page,
  157. $classes_side_menu
  158. )
  159. );
  160. $response->addHTML('<div id="canvas_outer">');
  161. $response->addHTML(
  162. '<form action="" id="container-form" method="post" name="form1">'
  163. );
  164. $response->addHTML($databaseDesigner->getHtmlCanvas());
  165. $response->addHTML($databaseDesigner->getHtmlTableList($tab_pos, $display_page));
  166. $response->addHTML(
  167. $databaseDesigner->getDatabaseTables(
  168. $tab_pos, $display_page, $tab_column,
  169. $tables_all_keys, $tables_pk_or_unique_keys
  170. )
  171. );
  172. $response->addHTML('</form>');
  173. $response->addHTML('</div>'); // end canvas_outer
  174. $response->addHTML('<div id="designer_hint"></div>');
  175. $response->addHTML($databaseDesigner->getNewRelationPanel());
  176. $response->addHTML($databaseDesigner->getDeleteRelationPanel());
  177. if (isset($_GET['query'])) {
  178. $response->addHTML($databaseDesigner->getOptionsPanel());
  179. $response->addHTML($databaseDesigner->getRenameToPanel());
  180. $response->addHTML($databaseDesigner->getHavingQueryPanel());
  181. $response->addHTML($databaseDesigner->getAggregateQueryPanel());
  182. $response->addHTML($databaseDesigner->getWhereQueryPanel());
  183. $response->addHTML($databaseDesigner->getQueryDetails($_GET['db']));
  184. }
  185. $response->addHTML('<div id="PMA_disable_floating_menubar"></div>');