diff --git a/db_multi_table_query.php b/db_multi_table_query.php index a375bfab9c..0ac3a0172c 100644 --- a/db_multi_table_query.php +++ b/db_multi_table_query.php @@ -1,58 +1,30 @@ getHeader(); + $scripts = $header->getScripts(); + $scripts->addFile('vendor/jquery/jquery.md5.js'); + $scripts->addFile('db_multi_table_query.js'); + + $queryInstance = new MultiTableQuery($GLOBALS['dbi'], $db); + + $response->addHTML($queryInstance->getFormHtml()); } - -$response = Response::getInstance(); - -$header = $response->getHeader(); -$scripts = $header->getScripts(); -$scripts->addFile('vendor/jquery/jquery.md5.js'); -$scripts->addFile('db_multi_table_query.js'); - -$QueryInstance = new MultiTableQuery($db); - -$response->addHTML($QueryInstance->getFormHTML()); diff --git a/libraries/classes/Database/MultiTableQuery.php b/libraries/classes/Database/MultiTableQuery.php index c64401fc0e..d2f23d9dd6 100644 --- a/libraries/classes/Database/MultiTableQuery.php +++ b/libraries/classes/Database/MultiTableQuery.php @@ -7,6 +7,9 @@ */ namespace PhpMyAdmin\Database; +use PhpMyAdmin\DatabaseInterface; +use PhpMyAdmin\ParseAnalyze; +use PhpMyAdmin\Sql; use PhpMyAdmin\Template; /** @@ -16,44 +19,116 @@ use PhpMyAdmin\Template; */ class MultiTableQuery { + /** + * DatabaseInterface instance + * + * @access private + * @var DatabaseInterface + */ + private $dbi; + /** * Database name * * @access private * @var string */ - private $_db; + private $db; /** - * Default no. of columns + * Default number of columns * * @access private * @var integer */ - private $_default_no_of_columns; + private $defaultNoOfColumns; - public function __construct($db_name) - { - $this->_db = $db_name; - $this->_default_no_of_columns = 3; + /** + * Table names + * + * @access private + * @var array + */ + private $tables; + + /** + * Constructor + * + * @param DatabaseInterface $dbi DatabaseInterface instance + * @param string $dbName Database name + * @param integer $defaultNoOfColumns Default number of columns + */ + public function __construct( + DatabaseInterface $dbi, + $dbName, + $defaultNoOfColumns = 3 + ) { + $this->dbi = $dbi; + $this->db = $dbName; + $this->defaultNoOfColumns = $defaultNoOfColumns; + + $this->tables = $this->dbi->getTables($this->db); } - private function getColumnsHTML() - { - $tables = $GLOBALS['dbi']->getTables($this->_db); - return Template::get('database/multi_table_query/columns')->render([ - 'tables' => $tables, - 'dbi' => $GLOBALS['dbi'], - 'db' => $this->_db, - 'default_no_of_columns' => $this->_default_no_of_columns, - ]); - } - - public function getFormHTML() + /** + * Get Multi-Table query page HTML + * + * @return string Multi-Table query page HTML + */ + public function getFormHtml() { + $tables = []; + foreach($this->tables as $table) { + $tables[$table]['hash'] = md5($table); + $tables[$table]['columns'] = array_keys( + $this->dbi->getColumns($this->db, $table) + ); + } return Template::get('database/multi_table_query/form')->render([ - 'db' => $this->_db, - 'columns' => $this->getColumnsHTML(), + 'db' => $this->db, + 'tables' => $tables, + 'default_no_of_columns' => $this->defaultNoOfColumns, ]); } + + /** + * Displays multi-table query results + * + * @param string $sqlQuery The query to parse + * @param string $db The current database + * @param string $pmaThemeImage Uri of the PMA theme image + * + * @return void + */ + public static function displayResults($sqlQuery, $db, $pmaThemeImage) + { + list( + $analyzedSqlResults, + $db, + $tableFromSql + ) = ParseAnalyze::sqlQuery($sqlQuery, $db); + + extract($analyzedSqlResults); + $goto = 'db_multi_table_query.php'; + Sql::executeQueryAndSendQueryResponse( + null, // analyzed_sql_results + false, // is_gotofile + $db, // db + null, // table + null, // find_real_end + null, // sql_query_for_bookmark - see below + null, // extra_data + null, // message_to_show + null, // message + null, // sql_data + $goto, // goto + $pmaThemeImage, // pmaThemeImage + null, // disp_query + null, // disp_message + null, // query_type + $sqlQuery, // sql_query + null, // selectedTables + null // complete_query + ); + } } diff --git a/templates/database/multi_table_query/columns.twig b/templates/database/multi_table_query/columns.twig deleted file mode 100644 index c17c4114ea..0000000000 --- a/templates/database/multi_table_query/columns.twig +++ /dev/null @@ -1,34 +0,0 @@ -
- {% set tables_count = tables|length - 1 %} - {% for i in 0..tables_count %} - - {% endfor %} - - - - {% for i in 1..default_no_of_columns %} - {% include 'database/multi_table_query/new_column.twig' with { - 'id': i, - 'tables': tables - } only %} - {% endfor %} -
- -
  -
- -
- -
-
diff --git a/templates/database/multi_table_query/form.twig b/templates/database/multi_table_query/form.twig index 1392d41a35..2aff0ebfbb 100644 --- a/templates/database/multi_table_query/form.twig +++ b/templates/database/multi_table_query/form.twig @@ -1,11 +1,165 @@ {{ Util_getDivForSliderEffect('query_div', 'Query window'|trans, 'open') }}
- {{ columns|raw }} +
+ {% for table in tables %} + + {% endfor %} + + {% for id in 0..default_no_of_columns %} + {% if id == 0 %} + + X + +
+ {% if id == 0 %}{% endif %} + {% endfor %} + +
+ +
+ +
+ {% spaceless %} + + {% endspaceless %} +
+ +
- +{# Slider div #}
diff --git a/templates/database/multi_table_query/new_column.twig b/templates/database/multi_table_query/new_column.twig deleted file mode 100644 index 9ad92ce407..0000000000 --- a/templates/database/multi_table_query/new_column.twig +++ /dev/null @@ -1,94 +0,0 @@ -
- - . - -
{% trans 'Show' %} -
-
- - {% include 'div_for_slider_effect.twig' with { - 'id': 'criteria_div' ~ id, - 'initial_sliders_state': 'closed', - 'message': 'criteria'|trans - } %} -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
{% trans 'Sort' %}{% trans 'Ascending' %}{% trans 'Descending' %}
Op - - - -
-
- - X -