123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- <?php
- declare(strict_types=1);
- namespace PhpMyAdmin\Controllers\Database;
- use PhpMyAdmin\Charsets;
- use PhpMyAdmin\Charsets\Charset;
- use PhpMyAdmin\Config\PageSettings;
- use PhpMyAdmin\Core;
- use PhpMyAdmin\DatabaseInterface;
- use PhpMyAdmin\Encoding;
- use PhpMyAdmin\Import;
- use PhpMyAdmin\Import\Ajax;
- use PhpMyAdmin\Message;
- use PhpMyAdmin\Plugins;
- use PhpMyAdmin\Response;
- use PhpMyAdmin\Template;
- use PhpMyAdmin\Url;
- use PhpMyAdmin\Util;
- use function intval;
- final class ImportController extends AbstractController
- {
- /** @var DatabaseInterface */
- private $dbi;
- /**
- * @param Response $response
- * @param string $db Database name.
- * @param DatabaseInterface $dbi
- */
- public function __construct($response, Template $template, $db, $dbi)
- {
- parent::__construct($response, $template, $db);
- $this->dbi = $dbi;
- }
- public function index(): void
- {
- global $db, $max_upload_size, $table, $tables, $num_tables, $total_num_tables, $cfg;
- global $tooltip_truename, $tooltip_aliasname, $pos, $sub_part, $SESSION_KEY, $PMA_Theme, $err_url;
- $pageSettings = new PageSettings('Import');
- $pageSettingsErrorHtml = $pageSettings->getErrorHTML();
- $pageSettingsHtml = $pageSettings->getHTML();
- $this->addScriptFiles(['import.js']);
- Util::checkParameters(['db']);
- $err_url = Util::getScriptNameForOption($cfg['DefaultTabDatabase'], 'database');
- $err_url .= Url::getCommon(['db' => $db], '&');
- if (! $this->hasDatabase()) {
- return;
- }
- [
- $tables,
- $num_tables,
- $total_num_tables,
- $sub_part,,,
- $tooltip_truename,
- $tooltip_aliasname,
- $pos,
- ] = Util::getDbInfo($db, $sub_part ?? '');
- [$SESSION_KEY, $uploadId] = Ajax::uploadProgressSetup();
- $importList = Plugins::getImport('database');
- if (empty($importList)) {
- $this->response->addHTML(Message::error(__(
- 'Could not load import plugins, please check your installation!'
- ))->getDisplay());
- return;
- }
- $offset = null;
- if (Core::isValid($_REQUEST['offset'], 'numeric')) {
- $offset = intval($_REQUEST['offset']);
- }
- $timeoutPassed = $_REQUEST['timeout_passed'] ?? null;
- $localImportFile = $_REQUEST['local_import_file'] ?? null;
- $compressions = Import::getCompressions();
- $allCharsets = Charsets::getCharsets($this->dbi, $cfg['Server']['DisableIS']);
- $charsets = [];
- /** @var Charset $charset */
- foreach ($allCharsets as $charset) {
- $charsets[] = [
- 'name' => $charset->getName(),
- 'description' => $charset->getDescription(),
- ];
- }
- $idKey = $_SESSION[$SESSION_KEY]['handler']::getIdKey();
- $hiddenInputs = [
- $idKey => $uploadId,
- 'import_type' => 'database',
- 'db' => $db,
- ];
- $this->render('database/import/index', [
- 'page_settings_error_html' => $pageSettingsErrorHtml,
- 'page_settings_html' => $pageSettingsHtml,
- 'upload_id' => $uploadId,
- 'handler' => $_SESSION[$SESSION_KEY]['handler'],
- 'theme_image_path' => $PMA_Theme->getImgPath(),
- 'hidden_inputs' => $hiddenInputs,
- 'db' => $db,
- 'table' => $table,
- 'max_upload_size' => $max_upload_size,
- 'import_list' => $importList,
- 'local_import_file' => $localImportFile,
- 'is_upload' => $GLOBALS['is_upload'],
- 'upload_dir' => $cfg['UploadDir'] ?? null,
- 'timeout_passed_global' => $GLOBALS['timeout_passed'] ?? null,
- 'compressions' => $compressions,
- 'is_encoding_supported' => Encoding::isSupported(),
- 'encodings' => Encoding::listEncodings(),
- 'import_charset' => $cfg['Import']['charset'] ?? null,
- 'timeout_passed' => $timeoutPassed,
- 'offset' => $offset,
- 'can_convert_kanji' => Encoding::canConvertKanji(),
- 'charsets' => $charsets,
- 'is_foreign_key_check' => Util::isForeignKeyCheck(),
- 'user_upload_dir' => Util::userDir($cfg['UploadDir'] ?? ''),
- 'local_files' => Import::getLocalFiles($importList),
- ]);
- }
- }
|