DropFormController.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. declare(strict_types=1);
  3. namespace PhpMyAdmin\Controllers\Database\Structure;
  4. use PhpMyAdmin\Controllers\Database\AbstractController;
  5. use PhpMyAdmin\DatabaseInterface;
  6. use PhpMyAdmin\ResponseRenderer;
  7. use PhpMyAdmin\Template;
  8. use PhpMyAdmin\Util;
  9. use PhpMyAdmin\Utils\ForeignKey;
  10. use function __;
  11. use function htmlspecialchars;
  12. use function in_array;
  13. final class DropFormController extends AbstractController
  14. {
  15. /** @var DatabaseInterface */
  16. private $dbi;
  17. public function __construct(ResponseRenderer $response, Template $template, string $db, DatabaseInterface $dbi)
  18. {
  19. parent::__construct($response, $template, $db);
  20. $this->dbi = $dbi;
  21. }
  22. public function __invoke(): void
  23. {
  24. global $db;
  25. $selected = $_POST['selected_tbl'] ?? [];
  26. if (empty($selected)) {
  27. $this->response->setRequestStatus(false);
  28. $this->response->addJSON('message', __('No table selected.'));
  29. return;
  30. }
  31. $views = $this->dbi->getVirtualTables($db);
  32. $fullQueryViews = '';
  33. $fullQuery = '';
  34. foreach ($selected as $selectedValue) {
  35. $current = $selectedValue;
  36. if (! empty($views) && in_array($current, $views)) {
  37. $fullQueryViews .= (empty($fullQueryViews) ? 'DROP VIEW ' : ', ')
  38. . Util::backquote(htmlspecialchars($current));
  39. } else {
  40. $fullQuery .= (empty($fullQuery) ? 'DROP TABLE ' : ', ')
  41. . Util::backquote(htmlspecialchars($current));
  42. }
  43. }
  44. if (! empty($fullQuery)) {
  45. $fullQuery .= ';<br>' . "\n";
  46. }
  47. if (! empty($fullQueryViews)) {
  48. $fullQuery .= $fullQueryViews . ';<br>' . "\n";
  49. }
  50. $urlParams = ['db' => $db];
  51. foreach ($selected as $selectedValue) {
  52. $urlParams['selected'][] = $selectedValue;
  53. }
  54. foreach ($views as $current) {
  55. $urlParams['views'][] = $current;
  56. }
  57. $this->render('database/structure/drop_form', [
  58. 'url_params' => $urlParams,
  59. 'full_query' => $fullQuery,
  60. 'is_foreign_key_check' => ForeignKey::isCheckEnabled(),
  61. ]);
  62. }
  63. }