db_qbe.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. <?php
  2. /* vim: set expandtab sw=4 ts=4 sts=4: */
  3. /**
  4. * query by example the whole database
  5. *
  6. * @package PhpMyAdmin
  7. */
  8. use PhpMyAdmin\Database\Qbe;
  9. use PhpMyAdmin\Message;
  10. use PhpMyAdmin\Relation;
  11. use PhpMyAdmin\Response;
  12. use PhpMyAdmin\SavedSearches;
  13. use PhpMyAdmin\Sql;
  14. use PhpMyAdmin\Url;
  15. use PhpMyAdmin\Util;
  16. /**
  17. * requirements
  18. */
  19. require_once 'libraries/common.inc.php';
  20. $response = Response::getInstance();
  21. // Gets the relation settings
  22. $relation = new Relation();
  23. $cfgRelation = $relation->getRelationsParam();
  24. $savedSearchList = array();
  25. $savedSearch = null;
  26. $currentSearchId = null;
  27. if ($cfgRelation['savedsearcheswork']) {
  28. $header = $response->getHeader();
  29. $scripts = $header->getScripts();
  30. $scripts->addFile('db_qbe.js');
  31. //Get saved search list.
  32. $savedSearch = new SavedSearches($GLOBALS);
  33. $savedSearch->setUsername($GLOBALS['cfg']['Server']['user'])
  34. ->setDbname($_REQUEST['db']);
  35. if (!empty($_REQUEST['searchId'])) {
  36. $savedSearch->setId($_REQUEST['searchId']);
  37. }
  38. //Action field is sent.
  39. if (isset($_REQUEST['action'])) {
  40. $savedSearch->setSearchName($_REQUEST['searchName']);
  41. if ('create' === $_REQUEST['action']) {
  42. $saveResult = $savedSearch->setId(null)
  43. ->setCriterias($_REQUEST)
  44. ->save();
  45. } elseif ('update' === $_REQUEST['action']) {
  46. $saveResult = $savedSearch->setCriterias($_REQUEST)
  47. ->save();
  48. } elseif ('delete' === $_REQUEST['action']) {
  49. $deleteResult = $savedSearch->delete();
  50. //After deletion, reset search.
  51. $savedSearch = new SavedSearches($GLOBALS);
  52. $savedSearch->setUsername($GLOBALS['cfg']['Server']['user'])
  53. ->setDbname($_REQUEST['db']);
  54. $_REQUEST = array();
  55. } elseif ('load' === $_REQUEST['action']) {
  56. if (empty($_REQUEST['searchId'])) {
  57. //when not loading a search, reset the object.
  58. $savedSearch = new SavedSearches($GLOBALS);
  59. $savedSearch->setUsername($GLOBALS['cfg']['Server']['user'])
  60. ->setDbname($_REQUEST['db']);
  61. $_REQUEST = array();
  62. } else {
  63. $loadResult = $savedSearch->load();
  64. }
  65. }
  66. //Else, it's an "update query"
  67. }
  68. $savedSearchList = $savedSearch->getList();
  69. $currentSearchId = $savedSearch->getId();
  70. }
  71. /**
  72. * A query has been submitted -> (maybe) execute it
  73. */
  74. $message_to_display = false;
  75. if (isset($_REQUEST['submit_sql']) && ! empty($sql_query)) {
  76. if (! preg_match('@^SELECT@i', $sql_query)) {
  77. $message_to_display = true;
  78. } else {
  79. $goto = 'db_sql.php';
  80. $sql = new Sql();
  81. $sql->executeQueryAndSendQueryResponse(
  82. null, // analyzed_sql_results
  83. false, // is_gotofile
  84. $_REQUEST['db'], // db
  85. null, // table
  86. false, // find_real_end
  87. null, // sql_query_for_bookmark
  88. null, // extra_data
  89. null, // message_to_show
  90. null, // message
  91. null, // sql_data
  92. $goto, // goto
  93. $pmaThemeImage, // pmaThemeImage
  94. null, // disp_query
  95. null, // disp_message
  96. null, // query_type
  97. $sql_query, // sql_query
  98. null, // selectedTables
  99. null // complete_query
  100. );
  101. }
  102. }
  103. $sub_part = '_qbe';
  104. require 'libraries/db_common.inc.php';
  105. $url_query .= '&amp;goto=db_qbe.php';
  106. $url_params['goto'] = 'db_qbe.php';
  107. list(
  108. $tables,
  109. $num_tables,
  110. $total_num_tables,
  111. $sub_part,
  112. $is_show_stats,
  113. $db_is_system_schema,
  114. $tooltip_truename,
  115. $tooltip_aliasname,
  116. $pos
  117. ) = Util::getDbInfo($db, isset($sub_part) ? $sub_part : '');
  118. if ($message_to_display) {
  119. Message::error(
  120. __('You have to choose at least one column to display!')
  121. )
  122. ->display();
  123. }
  124. unset($message_to_display);
  125. // create new qbe search instance
  126. $db_qbe = new Qbe($GLOBALS['db'], $savedSearchList, $savedSearch);
  127. $url = 'db_designer.php' . Url::getCommon(
  128. array_merge(
  129. $url_params,
  130. array('query' => 1)
  131. )
  132. );
  133. $response->addHTML(
  134. Message::notice(
  135. sprintf(
  136. __('Switch to %svisual builder%s'),
  137. '<a href="' . $url . '">',
  138. '</a>'
  139. )
  140. )
  141. );
  142. /**
  143. * Displays the Query by example form
  144. */
  145. $response->addHTML($db_qbe->getSelectionForm());