<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* functions for displaying server, database and table export
*
* @package PhpMyAdmin
*/
use PMA\libraries\Encoding;
use PMA\libraries\Message;
use PMA\libraries\plugins\ExportPlugin;
use PMA\libraries\Response;
use PMA\libraries\Table;
use PMA\libraries\Template;
use PMA\libraries\URL;
/**
* Outputs appropriate checked statement for checkbox.
*
* @param string $str option name
*
* @return string
*/
function PMA_exportCheckboxCheck($str)
{
if (isset($GLOBALS['cfg']['Export'][$str]) && $GLOBALS['cfg']['Export'][$str]) {
return ' checked="checked"';
}
return null;
}
/**
* Prints Html For Export Selection Options
*
* @param String $tmp_select Tmp selected method of export
*
* @return string
*/
function PMA_getHtmlForExportSelectOptions($tmp_select = '')
{
$multi_values = '<div>';
$multi_values .= '<a href="#"';
$multi_values .= ' onclick="setSelectOptions'
. '(\'dump\', \'db_select[]\', true); return false;">';
$multi_values .= __('Select all');
$multi_values .= '</a>';
$multi_values .= ' / ';
$multi_values .= '<a href="#"';
$multi_values .= ' onclick="setSelectOptions'
. '(\'dump\', \'db_select[]\', false); return false;">';
$multi_values .= __('Unselect all') . '</a><br />';
$multi_values .= '<select name="db_select[]" '
. 'id="db_select" size="10" multiple="multiple">';
$multi_values .= "\n";
// Check if the selected databases are defined in $_GET
// (from clicking Back button on export.php)
if (isset($_GET['db_select'])) {
$_GET['db_select'] = urldecode($_GET['db_select']);
$_GET['db_select'] = explode(",", $_GET['db_select']);
}
foreach ($GLOBALS['dblist']->databases as $current_db) {
if ($GLOBALS['dbi']->isSystemSchema($current_db, true)) {
continue;
}
if (isset($_GET['db_select'])) {
if (in_array($current_db, $_GET['db_select'])) {
$is_selected = ' selected="selected"';
} else {
$is_selected = '';
}
} elseif (!empty($tmp_select)) {
if (mb_strpos(
' ' . $tmp_select,
'|' . $current_db . '|'
)) {
$is_selected = ' selected="selected"';
} else {
$is_selected = '';
}
} else {
$is_selected = ' selected="selected"';
}
$current_db = htmlspecialchars($current_db);
$multi_values .= ' <option value="' . $current_db . '"'
. $is_selected . '>' . $current_db . '</option>' . "\n";
} // end while
$multi_values .= "\n";
$multi_values .= '</select></div>';
return $multi_values;
}
/**
* Prints Html For Export Hidden Input
*
* @param String $export_type Selected Export Type
* @param String $db Selected DB
* @param String $table Selected Table
* @param String $single_table Single Table
* @param String $sql_query Sql Query
*
* @return string
*/
function PMA_getHtmlForHiddenInput(
$export_type, $db, $table, $single_table, $sql_query
) {
global $cfg;
$html = "";
if ($export_type == 'server') {
$html .= URL::getHiddenInputs('', '', 1);
} elseif ($export_type == 'database') {
$html .= URL::getHiddenInputs($db, '', 1);
} else {
$html .= URL::getHiddenInputs($db, $table, 1);
}
// just to keep this value for possible next display of this form after saving
// on server
if (!empty($single_table)) {
$html .= '<input type="hidden" name="single_table" value="TRUE" />'
. "\n";
}
$html .= '<input type="hidden" name="export_type" value="'
. $export_type . '" />';
$html .= "\n";
// If the export method was not set, the default is quick
if (isset($_GET['export_method'])) {
$cfg['Export']['method'] = $_GET['export_method'];
} elseif (! isset($cfg['Export']['method'])) {
$cfg['Export']['method'] = 'quick';
}
// The export method (quick, custom or custom-no-form)
$html .= '<input type="hidden" name="export_method" value="'
. htmlspecialchars($cfg['Export']['method']) . '" />';
if (! empty($sql_query)) {
$html .= '<input type="hidden" name="sql_query" value="'
. htmlspecialchars($sql_query) . '" />' . "\n";
} elseif (isset($_GET['sql_query'])) {
$html .= '<input type="hidden" name="sql_query" value="'
. htmlspecialchars($_GET['sql_query']) . '" />' . "\n";
}
$html .= '<input type="hidden" name="template_id"' . ' value="'
. (isset($_GET['template_id'])
? htmlspecialchars($_GET['template_id'])
: '')
. '" />';
return $html;
}
/**
* Prints Html For Export Options Header
*
* @param String $export_type Selected Export Type
* @param String $db Selected DB
* @param String $table Selected Table
*
* @return string
*/
function PMA_getHtmlForExportOptionHeader($export_type, $db, $table)
{
$html = '<div class="exportoptions" id="header">';
$html .= '<h2>';
$html .= PMA\libraries\Util::getImage('b_export.png', __('Export'));
if ($export_type == 'server') {
$html .= __('Exporting databases from the current server');
} elseif ($export_type == 'database') {
$html .= sprintf(
__('Exporting tables from "%s" database'),
htmlspecialchars($db)
);
} else {
$html .= sprintf(
__('Exporting rows from "%s" table'),
htmlspecialchars($table)
);
}
$html .= '</h2>';
$html .= '</div>';
return $html;
}
/**
* Returns HTML for export template operations
*
* @param string $export_type export type - server, database, or table
*
* @return string HTML for export template operations
*/
function PMA_getHtmlForExportTemplateLoading($export_type)
{
$html = '<div class="exportoptions" id="export_templates">';
$html .= '<h3>' . __('Export templates:') . '</h3>';
$html .= '<div class="floatleft">';
$html .= '<form method="post" action="tbl_export.php" id="newTemplateForm"'
. ' class="ajax">';
$html .= '<h4>' . __('New template:') . '</h4>';
$html .= '<input type="text" name="templateName" id="templateName" '
. 'maxlength="64"' . 'required="required" '
. 'placeholder="' . __('Template name') . '" />';
$html .= '<input type="submit" name="createTemplate" id="createTemplate" '
. 'value="' . __('Create') . '" />';
$html .= '</form>';
$html .= '</div>';
$html .= '<div class="floatleft" style="margin-left: 50px;">';
$html .= '<form method="post" action="tbl_export.php"'
. ' id="existingTemplatesForm" class="ajax">';
$html .= '<h4>' . __('Existing templates:') . '</h4>';
$html .= '<label for="template">' . __('Template:') . '</label>';
$html .= '<select required="required" name="template" id="template">';
$html .= PMA_getOptionsForExportTemplates($export_type);
$html .= '</select>';
$html .= '<input type="submit" name="updateTemplate" '
. 'id="updateTemplate" value="' . __('Update') . '" />';
$html .= '<input type="submit" name="deleteTemplate" '
. 'id="deleteTemplate" value="' . __('Delete') . '" />';
$html .= '</form>';
$html .= '</div>';
$html .= '<div class="clearfloat"></div>';
$html .= '</div>';
return $html;
}
/**
* Returns HTML for the options in teplate dropdown
*
* @param string $export_type export type - server, database, or table
*
* @return string HTML for the options in teplate dropdown
*/
function PMA_getOptionsForExportTemplates($export_type)
{
$ret = '<option value="">-- ' . __('Select a template') . ' --</option>';
// Get the relation settings
$cfgRelation = PMA_getRelationsParam();
$query = "SELECT `id`, `template_name` FROM "
. PMA\libraries\Util::backquote($cfgRelation['db']) . '.'
. PMA\libraries\Util::backquote($cfgRelation['export_templates'])
. " WHERE `username` = "
. "'" . $GLOBALS['dbi']->escapeString($GLOBALS['cfg']['Server']['user'])
. "' AND `export_type` = '" . $GLOBALS['dbi']->escapeString($export_type) . "'"
. " ORDER BY `template_name`;";
$result = PMA_queryAsControlUser($query);
if (!$result) {
return $ret;
}
while ($row = $GLOBALS['dbi']->fetchAssoc($result, $GLOBALS['controllink'])) {
$ret .= '<option value="' . htmlspecialchars($row['id']) . '"';
if (!empty($_GET['template_id']) && $_GET['template_id'] == $row['id']) {
$ret .= ' selected="selected"';
}
$ret .= '>';
$ret .= htmlspecialchars($row['template_name']) . '</option>';
}
return $ret;
}
/**
* Prints Html For Export Options Method
*
* @return string
*/
function PMA_getHtmlForExportOptionsMethod()
{
global $cfg;
if (isset($_GET['quick_or_custom'])) {
$export_method = $_GET['quick_or_custom'];
} else {
$export_method = $cfg['Export']['method'];
}
if ($export_method == 'custom-no-form') {
return '';
}
$html = '<div class="exportoptions" id="quick_or_custom">';
$html .= '<h3>' . __('Export method:') . '</h3>';
$html .= '<ul>';
$html .= '<li>';
$html .= '<input type="radio" name="quick_or_custom" value="quick" '
. ' id="radio_quick_export"';
if ($export_method == 'quick') {
$html .= ' checked="checked"';
}
$html .= ' />';
$html .= '<label for ="radio_quick_export">';
$html .= __('Quick - display only the minimal options');
$html .= '</label>';
$html .= '</li>';
$html .= '<li>';
$html .= '<input type="radio" name="quick_or_custom" value="custom" '
. ' id="radio_custom_export"';
if ($export_method == 'custom') {
$html .= ' checked="checked"';
}
$html .= ' />';
$html .= '<label for="radio_custom_export">';
$html .= __('Custom - display all possible options');
$html .= '</label>';
$html .= '</li>';
$html .= '</ul>';
$html .= '</div>';
return $html;
}
/**
* Prints Html For Export Options Selection
*
* @param String $export_type Selected Export Type
* @param String $multi_values Export Options
*
* @return string
*/
function PMA_getHtmlForExportOptionsSelection($export_type, $multi_values)
{
$html = '<div class="exportoptions" id="databases_and_tables">';
if ($export_type == 'server') {
$html .= '<h3>' . __('Databases:') . '</h3>';
} else if ($export_type == 'database') {
$html .= '<h3>' . __('Tables:') . '</h3>';
}
if (! empty($multi_values)) {
$html .= $multi_values;
}
$html .= '</div>';
return $html;
}
/**
* Prints Html For Export Options Format dropdown
*
* @param ExportPlugin[] $export_list Export List
*
* @return string
*/
function PMA_getHtmlForExportOptionsFormatDropdown($export_list)
{
$html = '<div class="exportoptions" id="format">';
$html .= '<h3>' . __('Format:') . '</h3>';
$html .= PMA_pluginGetChoice('Export', 'what', $export_list, 'format');
$html .= '</div>';
return $html;
}
/**
* Prints Html For Export Options Format-specific options
*
* @param ExportPlugin[] $export_list Export List
*
* @return string
*/
function PMA_getHtmlForExportOptionsFormat($export_list)
{
$html = '<div class="exportoptions" id="format_specific_opts">';
$html .= '<h3>' . __('Format-specific options:') . '</h3>';
$html .= '<p class="no_js_msg" id="scroll_to_options_msg">';
$html .= __(
'Scroll down to fill in the options for the selected format '
. 'and ignore the options for other formats.'
);
$html .= '</p>';
$html .= PMA_pluginGetOptions('Export', $export_list);
$html .= '</div>';
if (Encoding::canConvertKanji()) {
// Japanese encoding setting
$html .= '<div class="exportoptions" id="kanji_encoding">';
$html .= '<h3>' . __('Encoding Conversion:') . '</h3>';
$html .= Encoding::kanjiEncodingForm();
$html .= '</div>';
}
$html .= '<div class="exportoptions" id="submit">';
$html .= PMA\libraries\Util::getExternalBug(
__('SQL compatibility mode'), 'mysql', '50027', '14515'
);
global $cfg;
if ($cfg['ExecTimeLimit'] > 0) {
$html .= '<input type="submit" value="' . __('Go')
. '" id="buttonGo" onclick="check_time_out('
. $cfg['ExecTimeLimit'] . ')"/>';
} else {
// if the time limit set is zero, then time out won't occur
// So no need to check for time out.
$html .= '<input type="submit" value="' . __('Go') . '" id="buttonGo" />';
}
$html .= '</div>';
return $html;
}
/**
* Prints Html For Export Options Rows
*
* @param String $db Selected DB
* @param String $table Selected Table
* @param String $unlim_num_rows Num of Rows
*
* @return string
*/
function PMA_getHtmlForExportOptionsRows($db, $table, $unlim_num_rows)
{
$html = '<div class="exportoptions" id="rows">';
$html .= '<h3>' . __('Rows:') . '</h3>';
$html .= '<ul>';
$html .= '<li>';
$html .= '<input type="radio" name="allrows" value="0" id="radio_allrows_0"';
if (isset($_GET['allrows']) && $_GET['allrows'] == 0) {
$html .= ' checked="checked"';
}
$html .= '/>';
$html .= '<label for ="radio_allrows_0">' . __('Dump some row(s)') . '</label>';
$html .= '<ul>';
$html .= '<li>';
$html .= '<label for="limit_to">' . __('Number of rows:') . '</label>';
$html .= '<input type="text" id="limit_to" name="limit_to" size="5" value="';
if (isset($_GET['limit_to'])) {
$html .= htmlspecialchars($_GET['limit_to']);
} elseif (!empty($unlim_num_rows)) {
$html .= $unlim_num_rows;
} else {
$_table = new Table($table, $db);
$html .= $_table->countRecords();
}
$html .= '" onfocus="this.select()" />';
$html .= '</li>';
$html .= '<li>';
$html .= '<label for="limit_from">' . __('Row to begin at:') . '</label>';
$html .= '<input type="text" id="limit_from" name="limit_from" value="';
if (isset($_GET['limit_from'])) {
$html .= htmlspecialchars($_GET['limit_from']);
} else {
$html .= '0';
}
$html .= '" size="5" onfocus="this.select()" />';
$html .= '</li>';
$html .= '</ul>';
$html .= '</li>';
$html .= '<li>';
$html .= '<input type="radio" name="allrows" value="1" id="radio_allrows_1"';
if (! isset($_GET['allrows']) || $_GET['allrows'] == 1) {
$html .= ' checked="checked"';
}
$html .= '/>';
$html .= ' <label for="radio_allrows_1">' . __('Dump all rows') . '</label>';
$html .= '</li>';
$html .= '</ul>';
$html .= '</div>';
return $html;
}
/**
* Prints Html For Export Options Quick Export
*
* @return string
*/
function PMA_getHtmlForExportOptionsQuickExport()
{
global $cfg;
$html = '<div class="exportoptions" id="output_quick_export">';
$html .= '<h3>' . __('Output:') . '</h3>';
$html .= '<ul>';
$html .= '<li>';
$html .= '<input type="checkbox" name="quick_export_onserver" value="saveit" ';
$html .= 'id="checkbox_quick_dump_onserver" ';
$html .= PMA_exportCheckboxCheck('quick_export_onserver');
$html .= '/>';
$html .= '<label for="checkbox_quick_dump_onserver">';
$html .= sprintf(
__('Save on server in the directory <b>%s</b>'),
htmlspecialchars(PMA\libraries\Util::userDir($cfg['SaveDir']))
);
$html .= '</label>';
$html .= '</li>';
$html .= '<li>';
$html .= '<input type="checkbox" name="quick_export_onserver_overwrite" ';
$html .= 'value="saveitover" id="checkbox_quick_dump_onserver_overwrite" ';
$html .= PMA_exportCheckboxCheck('quick_export_onserver_overwrite');
$html .= '/>';
$html .= '<label for="checkbox_quick_dump_onserver_overwrite">';
$html .= __('Overwrite existing file(s)');
$html .= '</label>';
$html .= '</li>';
$html .= '</ul>';
$html .= '</div>';
return $html;
}
/**
* Prints Html For Export Options Save Dir
*
* @return string
*/
function PMA_getHtmlForExportOptionsOutputSaveDir()
{
global $cfg;
$html = '<li>';
$html .= '<input type="checkbox" name="onserver" value="saveit" ';
$html .= 'id="checkbox_dump_onserver" ';
$html .= PMA_exportCheckboxCheck('onserver');
$html .= '/>';
$html .= '<label for="checkbox_dump_onserver">';
$html .= sprintf(
__('Save on server in the directory <b>%s</b>'),
htmlspecialchars(PMA\libraries\Util::userDir($cfg['SaveDir']))
);
$html .= '</label>';
$html .= '</li>';
$html .= '<li>';
$html .= '<input type="checkbox" name="onserver_overwrite" value="saveitover"';
$html .= ' id="checkbox_dump_onserver_overwrite" ';
$html .= PMA_exportCheckboxCheck('onserver_overwrite');
$html .= '/>';
$html .= '<label for="checkbox_dump_onserver_overwrite">';
$html .= __('Overwrite existing file(s)');
$html .= '</label>';
$html .= '</li>';
return $html;
}
/**
* Prints Html For Export Options
*
* @param String $export_type Selected Export Type
*
* @return string
*/
function PMA_getHtmlForExportOptionsOutputFormat($export_type)
{
$html = '<li>';
$html .= '<label for="filename_template" class="desc">';
$html .= __('File name template:');
$trans = new Message;
$trans->addText(__('@SERVER@ will become the server name'));
if ($export_type == 'database' || $export_type == 'table') {
$trans->addText(__(', @DATABASE@ will become the database name'));
if ($export_type == 'table') {
$trans->addText(__(', @TABLE@ will become the table name'));
}
}
$msg = new Message(
__(
'This value is interpreted using %1$sstrftime%2$s, '
. 'so you can use time formatting strings. '
. 'Additionally the following transformations will happen: %3$s. '
. 'Other text will be kept as is. See the %4$sFAQ%5$s for details.'
)
);
$msg->addParamHtml(
'<a href="' . PMA_linkURL(PMA_getPHPDocLink('function.strftime.php'))
. '" target="documentation" title="' . __('Documentation') . '">'
);
$msg->addParamHtml('</a>');
$msg->addParam($trans);
$doc_url = PMA\libraries\Util::getDocuLink('faq', 'faq6-27');
$msg->addParamHtml(
'<a href="' . $doc_url . '" target="documentation">'
);
$msg->addParamHtml('</a>');
$html .= PMA\libraries\Util::showHint($msg);
$html .= '</label>';
$html .= '<input type="text" name="filename_template" id="filename_template" ';
$html .= ' value="';
if (isset($_GET['filename_template'])) {
$html .= htmlspecialchars($_GET['filename_template']);
} else {
if ($export_type == 'database') {
$html .= htmlspecialchars(
$GLOBALS['PMA_Config']->getUserValue(
'pma_db_filename_template',
$GLOBALS['cfg']['Export']['file_template_database']
)
);
} elseif ($export_type == 'table') {
$html .= htmlspecialchars(
$GLOBALS['PMA_Config']->getUserValue(
'pma_table_filename_template',
$GLOBALS['cfg']['Export']['file_template_table']
)
);
} else {
$html .= htmlspecialchars(
$GLOBALS['PMA_Config']->getUserValue(
'pma_server_filename_template',
$GLOBALS['cfg']['Export']['file_template_server']
)
);
}
}
$html .= '"';
$html .= '/>';
$html .= '<input type="checkbox" name="remember_template" ';
$html .= 'id="checkbox_remember_template" ';
$html .= PMA_exportCheckboxCheck('remember_file_template');
$html .= '/>';
$html .= '<label for="checkbox_remember_template">';
$html .= __('use this for future exports');
$html .= '</label>';
$html .= '</li>';
return $html;
}
/**
* Prints Html For Export Options Charset
*
* @return string
*/
function PMA_getHtmlForExportOptionsOutputCharset()
{
global $cfg;
$html = ' <li><label for="select_charset" class="desc">'
. __('Character set of the file:') . '</label>' . "\n";
$html .= '<select id="select_charset" name="charset" size="1">';
foreach (Encoding::listEncodings() as $temp_charset) {
$html .= '<option value="' . $temp_charset . '"';
if (isset($_GET['charset'])
&& ($_GET['charset'] != $temp_charset)
) {
$html .= '';
} elseif ((empty($cfg['Export']['charset']) && $temp_charset == 'utf-8')
|| $temp_charset == $cfg['Export']['charset']
) {
$html .= ' selected="selected"';
}
$html .= '>' . $temp_charset . '</option>';
} // end foreach
$html .= '</select></li>';
return $html;
}
/**
* Prints Html For Export Options Compression
*
* @return string
*/
function PMA_getHtmlForExportOptionsOutputCompression()
{
global $cfg;
if (isset($_GET['compression'])) {
$selected_compression = $_GET['compression'];
} elseif (isset($cfg['Export']['compression'])) {
$selected_compression = $cfg['Export']['compression'];
} else {
$selected_compression = "none";
}
// Since separate files export works with ZIP only
if (isset($cfg['Export']['as_separate_files'])
&& $cfg['Export']['as_separate_files']
) {
$selected_compression = "zip";
}
$html = "";
// zip and gzip encode features
$is_zip = ($cfg['ZipDump'] && @function_exists('gzcompress'));
$is_gzip = ($cfg['GZipDump'] && @function_exists('gzencode'));
if ($is_zip || $is_gzip) {
$html .= '<li>';
$html .= '<label for="compression" class="desc">'
. __('Compression:') . '</label>';
$html .= '<select id="compression" name="compression">';
$html .= '<option value="none">' . __('None') . '</option>';
if ($is_zip) {
$html .= '<option value="zip" ';
if ($selected_compression == "zip") {
$html .= 'selected="selected"';
}
$html .= '>' . __('zipped') . '</option>';
}
if ($is_gzip) {
$html .= '<option value="gzip" ';
if ($selected_compression == "gzip") {
$html .= 'selected="selected"';
}
$html .= '>' . __('gzipped') . '</option>';
}
$html .= '</select>';
$html .= '</li>';
} else {
$html .= '<input type="hidden" name="compression" value="'
. htmlspecialchars($selected_compression) . '" />';
}
return $html;
}
/**
* Prints Html For Export Options Radio
*
* @return string
*/
function PMA_getHtmlForExportOptionsOutputRadio()
{
$html = '<li>';
$html .= '<input type="radio" id="radio_view_as_text" '
. ' name="output_format" value="astext" ';
if (isset($_GET['repopulate']) || $GLOBALS['cfg']['Export']['asfile'] == false) {
$html .= 'checked="checked"';
}
$html .= '/>';
$html .= '<label for="radio_view_as_text">'
. __('View output as text') . '</label></li>';
return $html;
}
/**
* Prints Html For Export Options Checkbox - Separate files
*
* @param String $export_type Selected Export Type
*
* @return string
*/
function PMA_getHtmlForExportOptionsOutputSeparateFiles($export_type)
{
$html = '<li>';
$html .= '<input type="checkbox" id="checkbox_as_separate_files" '
. PMA_exportCheckboxCheck('as_separate_files')
. ' name="as_separate_files" value="' . $export_type . '" />';
$html .= '<label for="checkbox_as_separate_files">';
if ($export_type == 'server') {
$html .= __('Export databases as separate files');
} elseif ($export_type == 'database') {
$html .= __('Export tables as separate files');
}
$html .= '</label></li>';
return $html;
}
/**
* Prints Html For Export Options
*
* @param String $export_type Selected Export Type
*
* @return string
*/
function PMA_getHtmlForExportOptionsOutput($export_type)
{
global $cfg;
$html = '<div class="exportoptions" id="output">';
$html .= '<h3>' . __('Output:') . '</h3>';
$html .= '<ul id="ul_output">';
$html .= '<li><input type="checkbox" id="btn_alias_config" ';
if (isset($_SESSION['tmpval']['aliases'])
&& !PMA_emptyRecursive($_SESSION['tmpval']['aliases'])
) {
$html .= 'checked="checked"';
}
unset($_SESSION['tmpval']['aliases']);
$html .= '/>';
$html .= '<label for="btn_alias_config">';
$html .= __('Rename exported databases/tables/columns');
$html .= '</label></li>';
if ($export_type != 'server') {
$html .= '<li>';
$html .= '<input type="checkbox" name="lock_tables"';
$html .= ' value="something" id="checkbox_lock_tables"';
if (! isset($_GET['repopulate'])) {
$html .= PMA_exportCheckboxCheck('lock_tables') . '/>';
} elseif (isset($_GET['lock_tables'])) {
$html .= ' checked="checked"';
}
$html .= '<label for="checkbox_lock_tables">';
$html .= sprintf(__('Use %s statement'), '<code>LOCK TABLES</code>');
$html .= '</label></li>';
}
$html .= '<li>';
$html .= '<input type="radio" name="output_format" value="sendit" ';
$html .= 'id="radio_dump_asfile" ';
if (!isset($_GET['repopulate'])) {
$html .= PMA_exportCheckboxCheck('asfile');
}
$html .= '/>';
$html .= '<label for="radio_dump_asfile">'
. __('Save output to a file') . '</label>';
$html .= '<ul id="ul_save_asfile">';
if (isset($cfg['SaveDir']) && !empty($cfg['SaveDir'])) {
$html .= PMA_getHtmlForExportOptionsOutputSaveDir();
}
$html .= PMA_getHtmlForExportOptionsOutputFormat($export_type);
// charset of file
if (Encoding::isSupported()) {
$html .= PMA_getHtmlForExportOptionsOutputCharset();
} // end if
$html .= PMA_getHtmlForExportOptionsOutputCompression();
if ($export_type == 'server'
|| $export_type == 'database'
) {
$html .= PMA_getHtmlForExportOptionsOutputSeparateFiles($export_type);
}
$html .= '</ul>';
$html .= '</li>';
$html .= PMA_getHtmlForExportOptionsOutputRadio();
$html .= '</ul>';
/*
* @todo use sprintf() for better translatability, while keeping the
* <label></label> principle (for screen readers)
*/
$html .= '<label for="maxsize">'
. __('Skip tables larger than') . '</label>';
$html .= '<input type="text" id="maxsize" name="maxsize" size="4">' . __('MiB');
$html .= '</div>';
return $html;
}
/**
* Prints Html For Export Options
*
* @param String $export_type Selected Export Type
* @param String $db Selected DB
* @param String $table Selected Table
* @param String $multi_values Export selection
* @param String $num_tables number of tables
* @param ExportPlugin[] $export_list Export List
* @param String $unlim_num_rows Number of Rows
*
* @return string
*/
function PMA_getHtmlForExportOptions(
$export_type, $db, $table, $multi_values,
$num_tables, $export_list, $unlim_num_rows
) {
global $cfg;
$html = PMA_getHtmlForExportOptionsMethod();
$html .= PMA_getHtmlForExportOptionsFormatDropdown($export_list);
$html .= PMA_getHtmlForExportOptionsSelection($export_type, $multi_values);
$_table = new Table($table, $db);
if (strlen($table) > 0 && empty($num_tables) && ! $_table->isMerge()) {
$html .= PMA_getHtmlForExportOptionsRows($db, $table, $unlim_num_rows);
}
if (isset($cfg['SaveDir']) && !empty($cfg['SaveDir'])) {
$html .= PMA_getHtmlForExportOptionsQuickExport();
}
$html .= PMA_getHtmlForAliasModalDialog();
$html .= PMA_getHtmlForExportOptionsOutput($export_type);
$html .= PMA_getHtmlForExportOptionsFormat($export_list);
return $html;
}
/**
* Generate Html For currently defined aliases
*
* @return string
*/
function PMA_getHtmlForCurrentAlias()
{
$result = '<table id="alias_data"><thead><tr><th colspan="4">'
. __('Defined aliases')
. '</th></tr></thead><tbody>';
$template = Template::get('export/alias_item');
if (isset($_SESSION['tmpval']['aliases'])) {
foreach ($_SESSION['tmpval']['aliases'] as $db => $db_data) {
if (isset($db_data['alias'])) {
$result .= $template->render(array(
'type' => _pgettext('Alias', 'Database'),
'name' => $db,
'field' => 'aliases[' . $db . '][alias]',
'value' => $db_data['alias'],
));
}
if (! isset($db_data['tables'])) {
continue;
}
foreach ($db_data['tables'] as $table => $table_data) {
if (isset($table_data['alias'])) {
$result .= $template->render(array(
'type' => _pgettext('Alias', 'Table'),
'name' => $db . '.' . $table,
'field' => 'aliases[' . $db . '][tables][' . $table . '][alias]',
'value' => $table_data['alias'],
));
}
if (! isset($table_data['columns'])) {
continue;
}
foreach ($table_data['columns'] as $column => $column_name) {
$result .= $template->render(array(
'type' => _pgettext('Alias', 'Column'),
'name' => $db . '.' . $table . '.'. $column,
'field' => 'aliases[' . $db . '][tables][' . $table . '][colums][' . $column . ']',
'value' => $column_name,
));
}
}
}
}
// Empty row for javascript manipulations
$result .= '</tbody><tfoot class="hide">' . $template->render(array(
'type' => '', 'name' => '', 'field' => 'aliases_new', 'value' => ''
)) . '</tfoot>';
return $result . '</table>';
}
/**
* Generate Html For Alias Modal Dialog
*
* @return string
*/
function PMA_getHtmlForAliasModalDialog()
{
// In case of server export, the following list of
// databases are not shown in the list.
$dbs_not_allowed = array(
'information_schema',
'performance_schema',
'mysql'
);
// Fetch Columns info
// Server export does not have db set.
$title = __('Rename exported databases/tables/columns');
$html = '<div id="alias_modal" class="hide" title="' . $title . '">';
$html .= PMA_getHtmlForCurrentAlias();
$html .= Template::get('export/alias_add')->render();
$html .= '</div>';
return $html;
}
/**
* Gets HTML to display export dialogs
*
* @param String $export_type export type: server|database|table
* @param String $db selected DB
* @param String $table selected table
* @param String $sql_query SQL query
* @param Int $num_tables number of tables
* @param Int $unlim_num_rows unlimited number of rows
* @param String $multi_values selector options
*
* @return string $html
*/
function PMA_getExportDisplay(
$export_type, $db, $table, $sql_query, $num_tables,
$unlim_num_rows, $multi_values
) {
$cfgRelation = PMA_getRelationsParam();
if (isset($_REQUEST['single_table'])) {
$GLOBALS['single_table'] = $_REQUEST['single_table'];
}
include_once './libraries/file_listing.lib.php';
include_once './libraries/plugin_interface.lib.php';
include_once './libraries/display_export.lib.php';
/* Scan for plugins */
/* @var $export_list ExportPlugin[] */
$export_list = PMA_getPlugins(
"export",
'libraries/plugins/export/',
array(
'export_type' => $export_type,
'single_table' => isset($GLOBALS['single_table'])
)
);
/* Fail if we didn't find any plugin */
if (empty($export_list)) {
Message::error(
__('Could not load export plugins, please check your installation!')
)->display();
exit;
}
$html = PMA_getHtmlForExportOptionHeader($export_type, $db, $table);
if ($cfgRelation['exporttemplateswork']) {
$html .= PMA_getHtmlForExportTemplateLoading($export_type);
}
$html .= '<form method="post" action="export.php" '
. ' name="dump" class="disableAjax">';
//output Hidden Inputs
$single_table_str = isset($GLOBALS['single_table']) ? $GLOBALS['single_table']
: '';
$html .= PMA_getHtmlForHiddenInput(
$export_type,
$db,
$table,
$single_table_str,
$sql_query
);
//output Export Options
$html .= PMA_getHtmlForExportOptions(
$export_type,
$db,
$table,
$multi_values,
$num_tables,
$export_list,
$unlim_num_rows
);
$html .= '</form>';
return $html;
}
/**
* Handles export template actions
*
* @param array $cfgRelation Relation configuration
*
* @return void
*/
function PMA_handleExportTemplateActions($cfgRelation)
{
if (isset($_REQUEST['templateId'])) {
$id = $GLOBALS['dbi']->escapeString($_REQUEST['templateId']);
} else {
$id = '';
}
$templateTable = PMA\libraries\Util::backquote($cfgRelation['db']) . '.'
. PMA\libraries\Util::backquote($cfgRelation['export_templates']);
$user = $GLOBALS['dbi']->escapeString($GLOBALS['cfg']['Server']['user']);
switch ($_REQUEST['templateAction']) {
case 'create':
$query = "INSERT INTO " . $templateTable . "("
. " `username`, `export_type`,"
. " `template_name`, `template_data`"
. ") VALUES ("
. "'" . $user . "', "
. "'" . $GLOBALS['dbi']->escapeString($_REQUEST['exportType'])
. "', '" . $GLOBALS['dbi']->escapeString($_REQUEST['templateName'])
. "', '" . $GLOBALS['dbi']->escapeString($_REQUEST['templateData'])
. "');";
break;
case 'load':
$query = "SELECT `template_data` FROM " . $templateTable
. " WHERE `id` = " . $id . " AND `username` = '" . $user . "'";
break;
case 'update':
$query = "UPDATE " . $templateTable . " SET `template_data` = "
. "'" . $GLOBALS['dbi']->escapeString($_REQUEST['templateData']) . "'"
. " WHERE `id` = " . $id . " AND `username` = '" . $user . "'";
break;
case 'delete':
$query = "DELETE FROM " . $templateTable
. " WHERE `id` = " . $id . " AND `username` = '" . $user . "'";
break;
default:
$query = '';
break;
}
$result = PMA_queryAsControlUser($query, false);
$response = Response::getInstance();
if (! $result) {
$error = $GLOBALS['dbi']->getError($GLOBALS['controllink']);
$response->setRequestStatus(false);
$response->addJSON('message', $error);
exit;
}
$response->setRequestStatus(true);
if ('create' == $_REQUEST['templateAction']) {
$response->addJSON(
'data',
PMA_getOptionsForExportTemplates($_REQUEST['exportType'])
);
} elseif ('load' == $_REQUEST['templateAction']) {
$data = null;
while ($row = $GLOBALS['dbi']->fetchAssoc(
$result, $GLOBALS['controllink']
)) {
$data = $row['template_data'];
}
$response->addJSON('data', $data);
}
$GLOBALS['dbi']->freeResult($result);
}
|