/
RebuildController.php
64 lines (52 loc) · 1.99 KB
/
RebuildController.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?php
declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Table\Partition;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Html\Generator;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Identifiers\DatabaseName;
use PhpMyAdmin\Identifiers\InvalidIdentifier;
use PhpMyAdmin\Identifiers\TableName;
use PhpMyAdmin\Message;
use PhpMyAdmin\MessageType;
use PhpMyAdmin\Partitioning\Maintenance;
use PhpMyAdmin\ResponseRenderer;
use Webmozart\Assert\Assert;
use Webmozart\Assert\InvalidArgumentException;
use function __;
final class RebuildController implements InvocableController
{
public function __construct(private readonly ResponseRenderer $response, private readonly Maintenance $model)
{
}
public function __invoke(ServerRequest $request): Response|null
{
$partitionName = $request->getParsedBodyParam('partition_name');
try {
Assert::stringNotEmpty($partitionName, __('The partition name must be a non-empty string.'));
$database = DatabaseName::from($request->getParam('db'));
$table = TableName::from($request->getParam('table'));
} catch (InvalidIdentifier | InvalidArgumentException $exception) {
$message = Message::error($exception->getMessage());
$this->response->addHTML($message->getDisplay());
return null;
}
[$result, $query] = $this->model->rebuild($database, $table, $partitionName);
if ($result) {
$message = Generator::getMessage(
__('Your SQL query has been executed successfully.'),
$query,
MessageType::Success,
);
} else {
$message = Generator::getMessage(
__('Error'),
$query,
MessageType::Error,
);
}
$this->response->render('table/partition/rebuild', ['partition_name' => $partitionName, 'message' => $message]);
return null;
}
}