SqlAutoCompleteController.php 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. <?php
  2. declare(strict_types=1);
  3. namespace PhpMyAdmin\Controllers\Database;
  4. use PhpMyAdmin\DatabaseInterface;
  5. use PhpMyAdmin\Response;
  6. use PhpMyAdmin\Template;
  7. use function json_encode;
  8. /**
  9. * Table/Column autocomplete in SQL editors.
  10. */
  11. class SqlAutoCompleteController 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. global $cfg, $db, $sql_autocomplete;
  28. $sql_autocomplete = true;
  29. if ($cfg['EnableAutocompleteForTablesAndColumns']) {
  30. $db = $_POST['db'] ?? $db;
  31. $sql_autocomplete = [];
  32. if ($db) {
  33. $tableNames = $this->dbi->getTables($db);
  34. foreach ($tableNames as $tableName) {
  35. $sql_autocomplete[$tableName] = $this->dbi->getColumns(
  36. $db,
  37. $tableName
  38. );
  39. }
  40. }
  41. }
  42. $this->response->addJSON(['tables' => json_encode($sql_autocomplete)]);
  43. }
  44. }