Remove Display\Import class

Signed-off-by: Maurício Meneghini Fauth <mauricio@fauth.dev>
This commit is contained in:
Maurício Meneghini Fauth 2020-08-20 00:21:26 -03:00
parent aa8c4a773c
commit fa67657b1a
10 changed files with 251 additions and 190 deletions

View File

@ -4,24 +4,29 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Database;
use PhpMyAdmin\Charsets;
use PhpMyAdmin\Charsets\Charset;
use PhpMyAdmin\Common;
use PhpMyAdmin\Config\PageSettings;
use PhpMyAdmin\Display\Import;
use PhpMyAdmin\Core;
use PhpMyAdmin\Display\ImportAjax;
use PhpMyAdmin\Encoding;
use PhpMyAdmin\Import;
use PhpMyAdmin\Message;
use PhpMyAdmin\Plugins;
use PhpMyAdmin\Util;
use function intval;
final class ImportController extends AbstractController
{
public function index(): void
{
global $db, $max_upload_size, $table, $tables, $num_tables, $total_num_tables, $is_show_stats;
global $db, $max_upload_size, $table, $tables, $num_tables, $total_num_tables, $is_show_stats, $cfg;
global $db_is_system_schema, $tooltip_truename, $tooltip_aliasname, $pos, $sub_part, $SESSION_KEY;
$pageSettings = new PageSettings('Import');
$this->response->addHTML($pageSettings->getErrorHTML());
$this->response->addHTML($pageSettings->getHTML());
$pageSettingsErrorHtml = $pageSettings->getErrorHTML();
$pageSettingsHtml = $pageSettings->getHTML();
$this->addScriptFiles(['import.js']);
@ -51,16 +56,58 @@ final class ImportController extends AbstractController
return;
}
$import = Import::get(
'database',
$db,
$table,
$max_upload_size,
$SESSION_KEY,
$uploadId,
$importList
);
$offset = null;
if (Core::isValid($_REQUEST['offset'], 'numeric')) {
$offset = intval($_REQUEST['offset']);
}
$this->render('display/import/import', $import);
$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'],
'pma_theme_image' => $GLOBALS['pmaThemeImage'],
'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),
]);
}
}

View File

@ -4,23 +4,29 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Server;
use PhpMyAdmin\Charsets;
use PhpMyAdmin\Charsets\Charset;
use PhpMyAdmin\Common;
use PhpMyAdmin\Config\PageSettings;
use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Display\Import;
use PhpMyAdmin\Core;
use PhpMyAdmin\Display\ImportAjax;
use PhpMyAdmin\Encoding;
use PhpMyAdmin\Import;
use PhpMyAdmin\Message;
use PhpMyAdmin\Plugins;
use PhpMyAdmin\Util;
use function intval;
final class ImportController extends AbstractController
{
public function index(): void
{
global $db, $max_upload_size, $table, $SESSION_KEY;
global $db, $max_upload_size, $table, $SESSION_KEY, $cfg;
$pageSettings = new PageSettings('Import');
$this->response->addHTML($pageSettings->getErrorHTML());
$this->response->addHTML($pageSettings->getHTML());
$pageSettingsErrorHtml = $pageSettings->getErrorHTML();
$pageSettingsHtml = $pageSettings->getHTML();
$this->addScriptFiles(['import.js']);
@ -38,16 +44,57 @@ final class ImportController extends AbstractController
return;
}
$import = Import::get(
'server',
$db,
$table,
$max_upload_size,
$SESSION_KEY,
$uploadId,
$importList
);
$offset = null;
if (Core::isValid($_REQUEST['offset'], 'numeric')) {
$offset = intval($_REQUEST['offset']);
}
$this->render('display/import/import', $import);
$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' => 'server',
];
$this->render('server/import/index', [
'page_settings_error_html' => $pageSettingsErrorHtml,
'page_settings_html' => $pageSettingsHtml,
'upload_id' => $uploadId,
'handler' => $_SESSION[$SESSION_KEY]['handler'],
'pma_theme_image' => $GLOBALS['pmaThemeImage'],
'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),
]);
}
}

View File

@ -4,23 +4,29 @@ declare(strict_types=1);
namespace PhpMyAdmin\Controllers\Table;
use PhpMyAdmin\Charsets;
use PhpMyAdmin\Charsets\Charset;
use PhpMyAdmin\Common;
use PhpMyAdmin\Config\PageSettings;
use PhpMyAdmin\Display\Import;
use PhpMyAdmin\Core;
use PhpMyAdmin\Display\ImportAjax;
use PhpMyAdmin\Encoding;
use PhpMyAdmin\Import;
use PhpMyAdmin\Message;
use PhpMyAdmin\Plugins;
use PhpMyAdmin\Url;
use PhpMyAdmin\Util;
use function intval;
final class ImportController extends AbstractController
{
public function index(): void
{
global $db, $max_upload_size, $table, $url_query, $url_params, $SESSION_KEY;
global $db, $max_upload_size, $table, $url_query, $url_params, $SESSION_KEY, $cfg;
$pageSettings = new PageSettings('Import');
$this->response->addHTML($pageSettings->getErrorHTML());
$this->response->addHTML($pageSettings->getHTML());
$pageSettingsErrorHtml = $pageSettings->getErrorHTML();
$pageSettingsHtml = $pageSettings->getHTML();
$this->addScriptFiles(['import.js']);
@ -42,16 +48,59 @@ final class ImportController extends AbstractController
return;
}
$import = Import::get(
'table',
$db,
$table,
$max_upload_size,
$SESSION_KEY,
$uploadId,
$importList
);
$offset = null;
if (Core::isValid($_REQUEST['offset'], 'numeric')) {
$offset = intval($_REQUEST['offset']);
}
$this->render('display/import/import', $import);
$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' => 'table',
'db' => $db,
'table' => $table,
];
$this->render('table/import/index', [
'page_settings_error_html' => $pageSettingsErrorHtml,
'page_settings_html' => $pageSettingsHtml,
'upload_id' => $uploadId,
'handler' => $_SESSION[$SESSION_KEY]['handler'],
'pma_theme_image' => $GLOBALS['pmaThemeImage'],
'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),
]);
}
}

View File

@ -1,131 +0,0 @@
<?php
declare(strict_types=1);
namespace PhpMyAdmin\Display;
use PhpMyAdmin\Charsets;
use PhpMyAdmin\Charsets\Charset;
use PhpMyAdmin\Core;
use PhpMyAdmin\Encoding;
use PhpMyAdmin\FileListing;
use PhpMyAdmin\Util;
use function function_exists;
use function intval;
/**
* Functions for displaying import for: server, database and table
*/
class Import
{
/**
* @param string $importType Import type: server|database|table
* @param string $db Selected DB
* @param string $table Selected Table
* @param int $maxUploadSize Max upload size
*
* @return array
*/
public static function get(
$importType,
$db,
$table,
$maxUploadSize,
string $sessionKey,
string $uploadId,
array $importList
): array {
global $cfg;
if (Core::isValid($_REQUEST['offset'], 'numeric')) {
$offset = intval($_REQUEST['offset']);
}
if (isset($_REQUEST['timeout_passed'])) {
$timeoutPassed = $_REQUEST['timeout_passed'];
}
$localImportFile = '';
if (isset($_REQUEST['local_import_file'])) {
$localImportFile = $_REQUEST['local_import_file'];
}
// zip, gzip and bzip2 encode features
$compressions = [];
if ($cfg['GZipDump'] && function_exists('gzopen')) {
$compressions[] = 'gzip';
}
if ($cfg['BZipDump'] && function_exists('bzopen')) {
$compressions[] = 'bzip2';
}
if ($cfg['ZipDump'] && function_exists('zip_open')) {
$compressions[] = 'zip';
}
$allCharsets = Charsets::getCharsets($GLOBALS['dbi'], $cfg['Server']['DisableIS']);
$charsets = [];
/** @var Charset $charset */
foreach ($allCharsets as $charset) {
$charsets[] = [
'name' => $charset->getName(),
'description' => $charset->getDescription(),
];
}
return [
'upload_id' => $uploadId,
'handler' => $_SESSION[$sessionKey]['handler'],
'id_key' => $_SESSION[$sessionKey]['handler']::getIdKey(),
'pma_theme_image' => $GLOBALS['pmaThemeImage'],
'import_type' => $importType,
'db' => $db,
'table' => $table,
'max_upload_size' => $maxUploadSize,
'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 ?? null,
'offset' => $offset ?? null,
'can_convert_kanji' => Encoding::canConvertKanji(),
'charsets' => $charsets,
'is_foreign_key_check' => Util::isForeignKeyCheck(),
'user_upload_dir' => Util::userDir($cfg['UploadDir'] ?? ''),
'local_files' => self::getLocalFiles($importList),
];
}
/**
* @param array $importList List of plugin instances.
*
* @return false|string
*/
private static function getLocalFiles(array $importList)
{
$fileListing = new FileListing();
$extensions = '';
foreach ($importList as $importPlugin) {
if (! empty($extensions)) {
$extensions .= '|';
}
$extensions .= $importPlugin->getProperties()->getExtension();
}
$matcher = '@\.(' . $extensions . ')(\.(' . $fileListing->supportedDecompressions() . '))?$@';
$active = isset($GLOBALS['timeout_passed'], $GLOBALS['local_import_file']) && $GLOBALS['timeout_passed']
? $GLOBALS['local_import_file']
: '';
return $fileListing->getFileSelectOptions(
Util::userDir($GLOBALS['cfg']['UploadDir'] ?? ''),
$matcher,
$active
);
}
}

View File

@ -16,6 +16,7 @@ use PhpMyAdmin\SqlParser\Utils\Query;
use function abs;
use function count;
use function explode;
use function function_exists;
use function htmlspecialchars;
use function implode;
use function is_array;
@ -1782,4 +1783,54 @@ class Import
return $GLOBALS['dbi']->numRows($result) == 1;
}
/** @return string[] */
public static function getCompressions(): array
{
global $cfg;
$compressions = [];
if ($cfg['GZipDump'] && function_exists('gzopen')) {
$compressions[] = 'gzip';
}
if ($cfg['BZipDump'] && function_exists('bzopen')) {
$compressions[] = 'bzip2';
}
if ($cfg['ZipDump'] && function_exists('zip_open')) {
$compressions[] = 'zip';
}
return $compressions;
}
/**
* @param array $importList List of plugin instances.
*
* @return false|string
*/
public static function getLocalFiles(array $importList)
{
$fileListing = new FileListing();
$extensions = '';
foreach ($importList as $importPlugin) {
if (! empty($extensions)) {
$extensions .= '|';
}
$extensions .= $importPlugin->getProperties()->getExtension();
}
$matcher = '@\.(' . $extensions . ')(\.(' . $fileListing->supportedDecompressions() . '))?$@';
$active = isset($GLOBALS['timeout_passed'], $GLOBALS['local_import_file']) && $GLOBALS['timeout_passed']
? $GLOBALS['local_import_file']
: '';
return $fileListing->getFileSelectOptions(
Util::userDir($GLOBALS['cfg']['UploadDir'] ?? ''),
$matcher,
$active
);
}
}

View File

@ -0,0 +1,3 @@
{% extends 'import.twig' %}
{% block title %}{{ 'Importing into the database "%s"'|trans|format(db) }}{% endblock %}

View File

@ -1,3 +1,6 @@
{{ page_settings_error_html|raw }}
{{ page_settings_html|raw }}
<iframe id="import_upload_iframe" name="import_upload_iframe" width="1" height="1" class="hide"></iframe>
<div id="import_form_status" class="hide"></div>
<div id="importmain" class="container-fluid">
@ -5,7 +8,7 @@
<script type="text/javascript">
//<![CDATA[
{% include 'display/import/javascript.twig' with {
{% include 'import/javascript.twig' with {
'upload_id': upload_id,
'handler': handler,
'pma_theme_image': pma_theme_image
@ -23,26 +26,12 @@
target="import_upload_iframe"
{%- endif %}>
<input type="hidden" name="{{ id_key }}" value="{{ upload_id }}">
{% if import_type == 'server' %}
{{ get_hidden_inputs('', '', 1) }}
{% elseif import_type == 'database' %}
{{ get_hidden_inputs(db, '', 1) }}
{% else %}
{{ get_hidden_inputs(db, table, 1) }}
{% endif %}
<input type="hidden" name="import_type" value="{{ import_type }}">
{{ get_hidden_inputs(hidden_inputs) }}
<div class="exportoptions" id="header">
<h2>
{{ get_image('b_import', 'Import'|trans) }}
{% if import_type == 'server' %}
{% trans 'Importing into the current server' %}
{% elseif import_type == 'database' %}
{{ 'Importing into the database "%s"'|trans|format(db) }}
{% else %}
{{ 'Importing into the table "%s"'|trans|format(table) }}
{% endif %}
{% block title %}{% endblock %}
</h2>
</div>

View File

@ -0,0 +1,3 @@
{% extends 'import.twig' %}
{% block title %}{% trans 'Importing into the current server' %}{% endblock %}

View File

@ -0,0 +1,3 @@
{% extends 'import.twig' %}
{% block title %}{{ 'Importing into the table "%s"'|trans|format(table) }}{% endblock %}