ExportController.php 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <?php
  2. declare(strict_types=1);
  3. namespace PhpMyAdmin\Controllers\Server;
  4. use PhpMyAdmin\Config\PageSettings;
  5. use PhpMyAdmin\Controllers\AbstractController;
  6. use PhpMyAdmin\DatabaseInterface;
  7. use PhpMyAdmin\Export\Options;
  8. use PhpMyAdmin\Message;
  9. use PhpMyAdmin\Plugins;
  10. use PhpMyAdmin\Response;
  11. use PhpMyAdmin\Template;
  12. use PhpMyAdmin\Url;
  13. use function array_merge;
  14. final class ExportController extends AbstractController
  15. {
  16. /** @var Options */
  17. private $export;
  18. /** @var DatabaseInterface */
  19. private $dbi;
  20. /**
  21. * @param Response $response
  22. * @param DatabaseInterface $dbi
  23. */
  24. public function __construct($response, Template $template, Options $export, $dbi)
  25. {
  26. parent::__construct($response, $template);
  27. $this->export = $export;
  28. $this->dbi = $dbi;
  29. }
  30. public function index(): void
  31. {
  32. global $db, $table, $sql_query, $num_tables, $unlim_num_rows;
  33. global $tmp_select, $select_item, $err_url;
  34. $err_url = Url::getFromRoute('/');
  35. if ($this->dbi->isSuperUser()) {
  36. $this->dbi->selectDb('mysql');
  37. }
  38. $pageSettings = new PageSettings('Export');
  39. $pageSettingsErrorHtml = $pageSettings->getErrorHTML();
  40. $pageSettingsHtml = $pageSettings->getHTML();
  41. $this->addScriptFiles(['export.js']);
  42. $select_item = $tmp_select ?? '';
  43. $databases = $this->export->getDatabasesForSelectOptions($select_item);
  44. if (! isset($sql_query)) {
  45. $sql_query = '';
  46. }
  47. if (! isset($num_tables)) {
  48. $num_tables = 0;
  49. }
  50. if (! isset($unlim_num_rows)) {
  51. $unlim_num_rows = 0;
  52. }
  53. $GLOBALS['single_table'] = $_POST['single_table'] ?? $_GET['single_table'] ?? $GLOBALS['single_table'] ?? null;
  54. $exportList = Plugins::getExport('server', isset($GLOBALS['single_table']));
  55. if (empty($exportList)) {
  56. $this->response->addHTML(Message::error(
  57. __('Could not load export plugins, please check your installation!')
  58. )->getDisplay());
  59. return;
  60. }
  61. $options = $this->export->getOptions(
  62. 'server',
  63. $db,
  64. $table,
  65. $sql_query,
  66. $num_tables,
  67. $unlim_num_rows,
  68. $exportList
  69. );
  70. $this->render('server/export/index', array_merge($options, [
  71. 'page_settings_error_html' => $pageSettingsErrorHtml,
  72. 'page_settings_html' => $pageSettingsHtml,
  73. 'databases' => $databases,
  74. ]));
  75. }
  76. }