/
CopyTableWithPrefixController.php
54 lines (42 loc) · 1.5 KB
/
CopyTableWithPrefixController.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
<?php
declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Database\Structure;
use PhpMyAdmin\Controllers\Database\StructureController;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Message;
use PhpMyAdmin\Table\Table;
use function mb_strlen;
use function mb_substr;
final class CopyTableWithPrefixController implements InvocableController
{
public function __construct(private readonly StructureController $structureController)
{
}
public function __invoke(ServerRequest $request): Response|null
{
/** @var string[] $selected */
$selected = $request->getParsedBodyParam('selected', []);
$fromPrefix = $request->getParsedBodyParam('from_prefix');
$toPrefix = $request->getParsedBodyParam('to_prefix');
$dropIfExists = $request->getParsedBodyParam('drop_if_exists') === 'true';
foreach ($selected as $selectedValue) {
$newTableName = $toPrefix . mb_substr($selectedValue, mb_strlen((string) $fromPrefix));
Table::moveCopy(
Current::$database,
$selectedValue,
Current::$database,
$newTableName,
'data',
false,
'one_table',
$dropIfExists,
);
}
$GLOBALS['message'] = Message::success();
($this->structureController)($request);
return null;
}
}