MultiTableQueryController.php 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. declare(strict_types=1);
  3. namespace PhpMyAdmin\Controllers\Database;
  4. use PhpMyAdmin\Database\MultiTableQuery;
  5. use PhpMyAdmin\DatabaseInterface;
  6. use PhpMyAdmin\Response;
  7. use PhpMyAdmin\Template;
  8. /**
  9. * Handles database multi-table querying
  10. */
  11. class MultiTableQueryController extends AbstractController
  12. {
  13. /** @var DatabaseInterface */
  14. private $dbi;
  15. /**
  16. * @param Response $response
  17. * @param string $db Database name.
  18. * @param DatabaseInterface $dbi
  19. */
  20. public function __construct($response, Template $template, $db, $dbi)
  21. {
  22. parent::__construct($response, $template, $db);
  23. $this->dbi = $dbi;
  24. }
  25. public function index(): void
  26. {
  27. $this->addScriptFiles([
  28. 'vendor/jquery/jquery.md5.js',
  29. 'database/multi_table_query.js',
  30. 'database/query_generator.js',
  31. ]);
  32. $queryInstance = new MultiTableQuery($this->dbi, $this->template, $this->db);
  33. $this->response->addHTML($queryInstance->getFormHtml());
  34. }
  35. public function displayResults(): void
  36. {
  37. global $PMA_Theme;
  38. $params = [
  39. 'sql_query' => $_POST['sql_query'],
  40. 'db' => $_POST['db'] ?? $_GET['db'] ?? null,
  41. ];
  42. $this->response->addHTML(MultiTableQuery::displayResults(
  43. $params['sql_query'],
  44. $params['db'],
  45. $PMA_Theme->getImgPath()
  46. ));
  47. }
  48. public function table(): void
  49. {
  50. $params = [
  51. 'tables' => $_GET['tables'],
  52. 'db' => $_GET['db'] ?? null,
  53. ];
  54. $constrains = $this->dbi->getForeignKeyConstrains(
  55. $params['db'],
  56. $params['tables']
  57. );
  58. $this->response->addJSON(['foreignKeyConstrains' => $constrains]);
  59. }
  60. }