EmptyTableController.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. <?php
  2. declare(strict_types=1);
  3. namespace PhpMyAdmin\Controllers\Database\Structure;
  4. use PhpMyAdmin\ConfigStorage\Relation;
  5. use PhpMyAdmin\ConfigStorage\RelationCleanup;
  6. use PhpMyAdmin\Controllers\Database\AbstractController;
  7. use PhpMyAdmin\Controllers\Database\StructureController;
  8. use PhpMyAdmin\DatabaseInterface;
  9. use PhpMyAdmin\FlashMessages;
  10. use PhpMyAdmin\Message;
  11. use PhpMyAdmin\Operations;
  12. use PhpMyAdmin\ResponseRenderer;
  13. use PhpMyAdmin\Sql;
  14. use PhpMyAdmin\Table;
  15. use PhpMyAdmin\Template;
  16. use PhpMyAdmin\Transformations;
  17. use PhpMyAdmin\Util;
  18. use PhpMyAdmin\Utils\ForeignKey;
  19. use function __;
  20. use function count;
  21. use function is_string;
  22. final class EmptyTableController extends AbstractController
  23. {
  24. /** @var DatabaseInterface */
  25. private $dbi;
  26. /** @var Relation */
  27. private $relation;
  28. /** @var RelationCleanup */
  29. private $relationCleanup;
  30. /** @var Operations */
  31. private $operations;
  32. /** @var FlashMessages */
  33. private $flash;
  34. /** @var StructureController */
  35. private $structureController;
  36. public function __construct(
  37. ResponseRenderer $response,
  38. Template $template,
  39. string $db,
  40. DatabaseInterface $dbi,
  41. Relation $relation,
  42. RelationCleanup $relationCleanup,
  43. Operations $operations,
  44. FlashMessages $flash,
  45. StructureController $structureController
  46. ) {
  47. parent::__construct($response, $template, $db);
  48. $this->dbi = $dbi;
  49. $this->relation = $relation;
  50. $this->relationCleanup = $relationCleanup;
  51. $this->operations = $operations;
  52. $this->flash = $flash;
  53. $this->structureController = $structureController;
  54. }
  55. public function __invoke(): void
  56. {
  57. global $db, $table, $message, $sql_query;
  58. $multBtn = $_POST['mult_btn'] ?? '';
  59. $selected = $_POST['selected'] ?? [];
  60. if ($multBtn !== __('Yes')) {
  61. $this->flash->addMessage('success', __('No change'));
  62. $this->redirect('/database/structure', ['db' => $db]);
  63. return;
  64. }
  65. $defaultFkCheckValue = ForeignKey::handleDisableCheckInit();
  66. $sql_query = '';
  67. $selectedCount = count($selected);
  68. for ($i = 0; $i < $selectedCount; $i++) {
  69. if (! is_string($selected[$i]) || Table::get($selected[$i], $GLOBALS['db'], $this->dbi)->isView()) {
  70. continue;
  71. }
  72. $aQuery = 'TRUNCATE ';
  73. $aQuery .= Util::backquote($selected[$i]);
  74. $sql_query .= $aQuery . ';' . "\n";
  75. $this->dbi->selectDb($db);
  76. $this->dbi->query($aQuery);
  77. }
  78. if (! empty($_REQUEST['pos'])) {
  79. $sql = new Sql(
  80. $this->dbi,
  81. $this->relation,
  82. $this->relationCleanup,
  83. $this->operations,
  84. new Transformations(),
  85. $this->template
  86. );
  87. $_REQUEST['pos'] = $sql->calculatePosForLastPage($db, $table, $_REQUEST['pos']);
  88. }
  89. ForeignKey::handleDisableCheckCleanup($defaultFkCheckValue);
  90. $message = Message::success();
  91. if (empty($_POST['message'])) {
  92. $_POST['message'] = $message;
  93. }
  94. unset($_POST['mult_btn']);
  95. ($this->structureController)();
  96. }
  97. }