ViewOperationsController.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <?php
  2. declare(strict_types=1);
  3. namespace PhpMyAdmin\Controllers;
  4. use PhpMyAdmin\DatabaseInterface;
  5. use PhpMyAdmin\DbTableExists;
  6. use PhpMyAdmin\Html\Generator;
  7. use PhpMyAdmin\Message;
  8. use PhpMyAdmin\Operations;
  9. use PhpMyAdmin\Response;
  10. use PhpMyAdmin\Template;
  11. use PhpMyAdmin\Url;
  12. use PhpMyAdmin\Util;
  13. /**
  14. * View manipulations
  15. */
  16. class ViewOperationsController extends AbstractController
  17. {
  18. /** @var Operations */
  19. private $operations;
  20. /** @var DatabaseInterface */
  21. private $dbi;
  22. /**
  23. * @param Response $response
  24. * @param DatabaseInterface $dbi
  25. */
  26. public function __construct($response, Template $template, Operations $operations, $dbi)
  27. {
  28. parent::__construct($response, $template);
  29. $this->operations = $operations;
  30. $this->dbi = $dbi;
  31. }
  32. public function index(): void
  33. {
  34. global $sql_query, $url_params, $reload, $result, $warning_messages;
  35. global $db, $table, $cfg, $err_url;
  36. $tableObject = $this->dbi->getTable($db, $table);
  37. $this->addScriptFiles(['table/operations.js']);
  38. Util::checkParameters(['db', 'table']);
  39. $url_params = ['db' => $db, 'table' => $table];
  40. $err_url = Util::getScriptNameForOption($cfg['DefaultTabTable'], 'table');
  41. $err_url .= Url::getCommon($url_params, '&');
  42. DbTableExists::check();
  43. $url_params['goto'] = $url_params['back'] = Url::getFromRoute('/view/operations');
  44. $message = new Message();
  45. $type = 'success';
  46. if (isset($_POST['submitoptions'])) {
  47. if (isset($_POST['new_name'])) {
  48. if ($tableObject->rename($_POST['new_name'])) {
  49. $message->addText($tableObject->getLastMessage());
  50. $result = true;
  51. $table = $tableObject->getName();
  52. /* Force reread after rename */
  53. $tableObject->getStatusInfo(null, true);
  54. $reload = true;
  55. } else {
  56. $message->addText($tableObject->getLastError());
  57. $result = false;
  58. }
  59. }
  60. $warning_messages = $this->operations->getWarningMessagesArray();
  61. }
  62. if (isset($result)) {
  63. // set to success by default, because result set could be empty
  64. // (for example, a table rename)
  65. if (empty($message->getString())) {
  66. if ($result) {
  67. $message->addText(
  68. __('Your SQL query has been executed successfully.')
  69. );
  70. } else {
  71. $message->addText(__('Error'));
  72. }
  73. // $result should exist, regardless of $_message
  74. $type = $result ? 'success' : 'error';
  75. }
  76. if (! empty($warning_messages)) {
  77. $message->addMessagesString($warning_messages);
  78. $message->isError(true);
  79. }
  80. $this->response->addHTML(Generator::getMessage(
  81. $message,
  82. $sql_query,
  83. $type
  84. ));
  85. }
  86. $this->render('table/operations/view', [
  87. 'db' => $db,
  88. 'table' => $table,
  89. 'url_params' => $url_params,
  90. ]);
  91. }
  92. }