You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.7 KiB
64 lines
1.7 KiB
<?php |
|
|
|
declare(strict_types=1); |
|
|
|
namespace PhpMyAdmin\Controllers\Database\Structure; |
|
|
|
use PhpMyAdmin\Controllers\Database\AbstractController; |
|
use PhpMyAdmin\Core; |
|
use PhpMyAdmin\DatabaseInterface; |
|
use PhpMyAdmin\ResponseRenderer; |
|
use PhpMyAdmin\Template; |
|
|
|
use function __; |
|
|
|
final class ShowCreateController extends AbstractController |
|
{ |
|
/** @var DatabaseInterface */ |
|
private $dbi; |
|
|
|
public function __construct(ResponseRenderer $response, Template $template, string $db, DatabaseInterface $dbi) |
|
{ |
|
parent::__construct($response, $template, $db); |
|
$this->dbi = $dbi; |
|
} |
|
|
|
public function __invoke(): void |
|
{ |
|
$selected = $_POST['selected_tbl'] ?? []; |
|
|
|
if (empty($selected)) { |
|
$this->response->setRequestStatus(false); |
|
$this->response->addJSON('message', __('No table selected.')); |
|
|
|
return; |
|
} |
|
|
|
$tables = $this->getShowCreateTables($selected); |
|
|
|
$showCreate = $this->template->render('database/structure/show_create', ['tables' => $tables]); |
|
|
|
$this->response->addJSON('message', $showCreate); |
|
} |
|
|
|
/** |
|
* @param string[] $selected Selected tables. |
|
* |
|
* @return array<string, array<int, array<string, string>>> |
|
*/ |
|
private function getShowCreateTables(array $selected): array |
|
{ |
|
$tables = ['tables' => [], 'views' => []]; |
|
|
|
foreach ($selected as $table) { |
|
$object = $this->dbi->getTable($this->db, $table); |
|
|
|
$tables[$object->isView() ? 'views' : 'tables'][] = [ |
|
'name' => Core::mimeDefaultFunction($table), |
|
'show_create' => Core::mimeDefaultFunction($object->showCreate()), |
|
]; |
|
} |
|
|
|
return $tables; |
|
} |
|
}
|
|
|