Set namespace on DbQbe. Set namespace to 'DbSearch'. Split Advisor.class.php file. Change Advisor namespace. Rename DbQbe class and file. Set namespace on DisplayResults. Set namespace on Error. Use namespace for ErrorHandler. Add class autoloader. Change ErrorHandler filename. Remove some require. Update Config namespace path. Update PMA_Util to PMA\libraries\Util. Rename Font and File classes files. Use namespace for Footer. Set namespace in all libraries classes. Namespace OutputBuffering. Export SubPartition. Rename Partition file. Namespace PDF. Namespace RecentFavoriteTable. Replace PMA_Response by Response and PMA_Message by Message. Update uses and calls. Fix unit tests. Fix SqlParser autoload. Signed-off-by: Hugues Peccatte <hugues.peccatte@gmail.com>
178 lines
5.9 KiB
PHP
178 lines
5.9 KiB
PHP
<?php
|
|
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
|
/**
|
|
* Table export
|
|
*
|
|
* @package PhpMyAdmin
|
|
*/
|
|
|
|
/**
|
|
*
|
|
*/
|
|
require_once 'libraries/common.inc.php';
|
|
require_once 'libraries/config/page_settings.class.php';
|
|
require_once 'libraries/display_export.lib.php';
|
|
|
|
PMA_PageSettings::showGroup('Export');
|
|
|
|
$response = PMA\libraries\Response::getInstance();
|
|
$header = $response->getHeader();
|
|
$scripts = $header->getScripts();
|
|
$scripts->addFile('export.js');
|
|
|
|
// Get the relation settings
|
|
$cfgRelation = PMA_getRelationsParam();
|
|
|
|
// handling export template actions
|
|
if (isset($_REQUEST['templateAction']) && $cfgRelation['exporttemplateswork']) {
|
|
|
|
if (isset($_REQUEST['templateId'])) {
|
|
$templateId = $_REQUEST['templateId'];
|
|
$id = PMA\libraries\Util::sqlAddSlashes($templateId);
|
|
}
|
|
|
|
$templateTable = PMA\libraries\Util::backquote($cfgRelation['db']) . '.'
|
|
. PMA\libraries\Util::backquote($cfgRelation['export_templates']);
|
|
$user = PMA\libraries\Util::sqlAddSlashes($GLOBALS['cfg']['Server']['user']);
|
|
|
|
switch ($_REQUEST['templateAction']) {
|
|
case 'create':
|
|
$query = "INSERT INTO " . $templateTable . "("
|
|
. " `username`, `export_type`,"
|
|
. " `template_name`, `template_data`"
|
|
. ") VALUES ("
|
|
. "'" . $user . "', "
|
|
. "'" . PMA\libraries\Util::sqlAddSlashes($_REQUEST['exportType']) . "', "
|
|
. "'" . PMA\libraries\Util::sqlAddSlashes($_REQUEST['templateName']) . "', "
|
|
. "'" . PMA\libraries\Util::sqlAddSlashes($_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` = "
|
|
. "'" . PMA\libraries\Util::sqlAddSlashes($_REQUEST['templateData']) . "'"
|
|
. " WHERE `id` = " . $id . " AND `username` = '" . $user . "'";
|
|
break;
|
|
case 'delete':
|
|
$query = "DELETE FROM " . $templateTable
|
|
. " WHERE `id` = " . $id . " AND `username` = '" . $user . "'";
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
$result = PMA_queryAsControlUser($query, false);
|
|
|
|
$response = PMA\libraries\Response::getInstance();
|
|
if (! $result) {
|
|
$error = $GLOBALS['dbi']->getError($GLOBALS['controllink']);
|
|
$response->isSuccess(false);
|
|
$response->addJSON('message', $error);
|
|
exit;
|
|
}
|
|
|
|
$response->isSuccess(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);
|
|
exit;
|
|
}
|
|
|
|
/**
|
|
* Gets tables information and displays top links
|
|
*/
|
|
require_once 'libraries/tbl_common.inc.php';
|
|
$url_query .= '&goto=tbl_export.php&back=tbl_export.php';
|
|
require_once 'libraries/tbl_info.inc.php';
|
|
|
|
// Dump of a table
|
|
|
|
$export_page_title = __('View dump (schema) of table');
|
|
|
|
// When we have some query, we need to remove LIMIT from that and possibly
|
|
// generate WHERE clause (if we are asked to export specific rows)
|
|
|
|
if (! empty($sql_query)) {
|
|
$parser = new SqlParser\Parser($sql_query);
|
|
|
|
if ((!empty($parser->statements[0]))
|
|
&& ($parser->statements[0] instanceof SqlParser\Statements\SelectStatement)
|
|
) {
|
|
|
|
// Finding aliases and removing them, but we keep track of them to be
|
|
// able to replace them in select expression too.
|
|
$aliases = array();
|
|
foreach ($parser->statements[0]->from as $from) {
|
|
if ((!empty($from->table)) && (!empty($from->alias))) {
|
|
$aliases[$from->alias] = $from->table;
|
|
// We remove the alias of the table because they are going to
|
|
// be replaced anyway.
|
|
$from->alias = null;
|
|
$from->expr = null; // Force rebuild.
|
|
}
|
|
}
|
|
|
|
// Replacing the aliases in select expressions.
|
|
foreach ($parser->statements[0]->expr as $expr) {
|
|
if ((!empty($expr->table)) && (!empty($aliases[$expr->table]))) {
|
|
// Changing the table to null (leave the MySQL to find the
|
|
// right table).
|
|
// This is possible because exporting selected rows is only
|
|
// allowed for queries involing a single table.
|
|
$expr->table = null;
|
|
$expr->expr = null; // Force rebuild.
|
|
}
|
|
}
|
|
|
|
// Rebuilding the SELECT and FROM clauses.
|
|
$replaces = array(
|
|
array(
|
|
'SELECT', 'SELECT ' . SqlParser\Components\ExpressionArray::build(
|
|
$parser->statements[0]->expr
|
|
),
|
|
),
|
|
array(
|
|
'FROM', 'FROM ' . SqlParser\Components\ExpressionArray::build(
|
|
$parser->statements[0]->from
|
|
),
|
|
),
|
|
);
|
|
|
|
// Checking if the WHERE clause has to be replaced.
|
|
if ((!empty($where_clause)) && (is_array($where_clause))) {
|
|
$replaces[] = array(
|
|
'WHERE', 'WHERE (' . implode(') OR (', $where_clause) . ')'
|
|
);
|
|
}
|
|
|
|
// Preparing to remove the LIMIT clause.
|
|
$replaces[] = array('LIMIT', '');
|
|
|
|
// Replacing the clauses.
|
|
$sql_query = SqlParser\Utils\Query::replaceClauses(
|
|
$parser->statements[0],
|
|
$parser->list,
|
|
$replaces
|
|
);
|
|
}
|
|
|
|
echo PMA\libraries\Util::getMessage(PMA\libraries\Message::success());
|
|
}
|
|
|
|
$export_type = 'table';
|
|
require_once 'libraries/display_export.inc.php';
|