KillController.php 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <?php
  2. declare(strict_types=1);
  3. namespace PhpMyAdmin\Controllers\Server\Status\Processes;
  4. use PhpMyAdmin\Controllers\Server\Status\AbstractController;
  5. use PhpMyAdmin\DatabaseInterface;
  6. use PhpMyAdmin\Http\ServerRequest;
  7. use PhpMyAdmin\Message;
  8. use PhpMyAdmin\ResponseRenderer;
  9. use PhpMyAdmin\Server\Status\Data;
  10. use PhpMyAdmin\Template;
  11. use function __;
  12. final class KillController extends AbstractController
  13. {
  14. /** @var DatabaseInterface */
  15. private $dbi;
  16. public function __construct(ResponseRenderer $response, Template $template, Data $data, DatabaseInterface $dbi)
  17. {
  18. parent::__construct($response, $template, $data);
  19. $this->dbi = $dbi;
  20. }
  21. /**
  22. * @param array $params Request parameters
  23. */
  24. public function __invoke(ServerRequest $request, array $params): void
  25. {
  26. if (! $this->response->isAjax()) {
  27. return;
  28. }
  29. $kill = (int) $params['id'];
  30. $query = $this->dbi->getKillQuery($kill);
  31. if ($this->dbi->tryQuery($query)) {
  32. $message = Message::success(
  33. __('Thread %s was successfully killed.')
  34. );
  35. $this->response->setRequestStatus(true);
  36. } else {
  37. $message = Message::error(
  38. __(
  39. 'phpMyAdmin was unable to kill thread %s. It probably has already been closed.'
  40. )
  41. );
  42. $this->response->setRequestStatus(false);
  43. }
  44. $message->addParam($kill);
  45. $this->response->addJSON(['message' => $message]);
  46. }
  47. }