From a76fb00ce68fc4189740e2e7fba15c1ac7aec0ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Mon, 13 Nov 2017 17:20:27 -0200 Subject: [PATCH 1/5] Refactor Database/MultiTableQuery to use DI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Maurício Meneghini Fauth --- db_multi_table_query.php | 2 +- .../classes/Database/MultiTableQuery.php | 65 +++++++++++++++---- 2 files changed, 53 insertions(+), 14 deletions(-) diff --git a/db_multi_table_query.php b/db_multi_table_query.php index a375bfab9c..d38c3112c4 100644 --- a/db_multi_table_query.php +++ b/db_multi_table_query.php @@ -53,6 +53,6 @@ $scripts = $header->getScripts(); $scripts->addFile('vendor/jquery/jquery.md5.js'); $scripts->addFile('db_multi_table_query.js'); -$QueryInstance = new MultiTableQuery($db); +$QueryInstance = new MultiTableQuery($GLOBALS['dbi'], $db); $response->addHTML($QueryInstance->getFormHTML()); diff --git a/libraries/classes/Database/MultiTableQuery.php b/libraries/classes/Database/MultiTableQuery.php index c64401fc0e..9a068eb6ed 100644 --- a/libraries/classes/Database/MultiTableQuery.php +++ b/libraries/classes/Database/MultiTableQuery.php @@ -7,6 +7,7 @@ */ namespace PhpMyAdmin\Database; +use PhpMyAdmin\DatabaseInterface; use PhpMyAdmin\Template; /** @@ -16,43 +17,81 @@ 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); } + /** + * Get HTML for columns + * + * @return string HTML with columns + */ 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, + 'tables' => $this->tables, + 'dbi' => $this->dbi, + 'db' => $this->db, + 'default_no_of_columns' => $this->defaultNoOfColumns, ]); } + /** + * Get Multi Table Query page HTML + * + * @return string Multi Table Query page HTML + */ public function getFormHTML() { return Template::get('database/multi_table_query/form')->render([ - 'db' => $this->_db, + 'db' => $this->db, 'columns' => $this->getColumnsHTML(), ]); } From 45de599d797569ce78c0a9cc743cb1c0f0ae29db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Mon, 13 Nov 2017 18:05:39 -0200 Subject: [PATCH 2/5] Move columns template into form template MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Maurício Meneghini Fauth --- .../classes/Database/MultiTableQuery.php | 23 +++--------- .../database/multi_table_query/columns.twig | 34 ------------------ .../database/multi_table_query/form.twig | 36 ++++++++++++++++++- 3 files changed, 40 insertions(+), 53 deletions(-) delete mode 100644 templates/database/multi_table_query/columns.twig diff --git a/libraries/classes/Database/MultiTableQuery.php b/libraries/classes/Database/MultiTableQuery.php index 9a068eb6ed..4859d999e5 100644 --- a/libraries/classes/Database/MultiTableQuery.php +++ b/libraries/classes/Database/MultiTableQuery.php @@ -69,30 +69,17 @@ class MultiTableQuery } /** - * Get HTML for columns + * Get Multi-Table query page HTML * - * @return string HTML with columns - */ - private function getColumnsHTML() - { - return Template::get('database/multi_table_query/columns')->render([ - 'tables' => $this->tables, - 'dbi' => $this->dbi, - 'db' => $this->db, - 'default_no_of_columns' => $this->defaultNoOfColumns, - ]); - } - - /** - * Get Multi Table Query page HTML - * - * @return string Multi Table Query page HTML + * @return string Multi-Table query page HTML */ public function getFormHTML() { return Template::get('database/multi_table_query/form')->render([ + 'dbi' => $this->dbi, 'db' => $this->db, - 'columns' => $this->getColumnsHTML(), + 'tables' => $this->tables, + 'default_no_of_columns' => $this->defaultNoOfColumns, ]); } } 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..277fde61a7 100644 --- a/templates/database/multi_table_query/form.twig +++ b/templates/database/multi_table_query/form.twig @@ -1,7 +1,41 @@ {{ Util_getDivForSliderEffect('query_div', 'Query window'|trans, 'open') }}
- {{ columns|raw }} +
+ {% 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 %} +
+ +
  +
+ +
+ +
+
+
From fc08cca15bc5666c72eb20860cd7562401a97f77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Mon, 13 Nov 2017 21:55:41 -0200 Subject: [PATCH 3/5] Refactor getFormHTML method MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Maurício Meneghini Fauth --- db_multi_table_query.php | 4 +-- .../classes/Database/MultiTableQuery.php | 12 +++++-- .../database/multi_table_query/form.twig | 34 +++++++++---------- .../multi_table_query/new_column.twig | 10 +++--- 4 files changed, 34 insertions(+), 26 deletions(-) diff --git a/db_multi_table_query.php b/db_multi_table_query.php index d38c3112c4..e40720ee62 100644 --- a/db_multi_table_query.php +++ b/db_multi_table_query.php @@ -53,6 +53,6 @@ $scripts = $header->getScripts(); $scripts->addFile('vendor/jquery/jquery.md5.js'); $scripts->addFile('db_multi_table_query.js'); -$QueryInstance = new MultiTableQuery($GLOBALS['dbi'], $db); +$queryInstance = new MultiTableQuery($GLOBALS['dbi'], $db); -$response->addHTML($QueryInstance->getFormHTML()); +$response->addHTML($queryInstance->getFormHtml()); diff --git a/libraries/classes/Database/MultiTableQuery.php b/libraries/classes/Database/MultiTableQuery.php index 4859d999e5..c895cd3717 100644 --- a/libraries/classes/Database/MultiTableQuery.php +++ b/libraries/classes/Database/MultiTableQuery.php @@ -73,12 +73,18 @@ class MultiTableQuery * * @return string Multi-Table query page HTML */ - public function getFormHTML() + 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([ - 'dbi' => $this->dbi, 'db' => $this->db, - 'tables' => $this->tables, + 'tables' => $tables, 'default_no_of_columns' => $this->defaultNoOfColumns, ]); } diff --git a/templates/database/multi_table_query/form.twig b/templates/database/multi_table_query/form.twig index 277fde61a7..4f9c6f2a66 100644 --- a/templates/database/multi_table_query/form.twig +++ b/templates/database/multi_table_query/form.twig @@ -2,37 +2,37 @@
- {% set tables_count = tables|length - 1 %} - {% for i in 0..tables_count %} -
@@ -41,5 +41,5 @@
- +{# Slider div #}
diff --git a/templates/database/multi_table_query/new_column.twig b/templates/database/multi_table_query/new_column.twig index 9ad92ce407..e75bded104 100644 --- a/templates/database/multi_table_query/new_column.twig +++ b/templates/database/multi_table_query/new_column.twig @@ -1,8 +1,9 @@ +{% if id == 0 %} X +{% if id == 0 %}{% endif %} From f7d876296e69e942bdc8cf8dc34955c5b9fce81a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Mon, 13 Nov 2017 22:17:19 -0200 Subject: [PATCH 4/5] Move new_column template into form template MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Maurício Meneghini Fauth --- .../database/multi_table_query/form.twig | 134 +++++++++++++++++- .../multi_table_query/new_column.twig | 96 ------------- 2 files changed, 127 insertions(+), 103 deletions(-) delete mode 100644 templates/database/multi_table_query/new_column.twig diff --git a/templates/database/multi_table_query/form.twig b/templates/database/multi_table_query/form.twig index 4f9c6f2a66..2aff0ebfbb 100644 --- a/templates/database/multi_table_query/form.twig +++ b/templates/database/multi_table_query/form.twig @@ -11,11 +11,132 @@ {% endfor %} - {% for i in 0..default_no_of_columns %} - {% include 'database/multi_table_query/new_column.twig' with { - 'id': i, - 'tables': tables - } only %} + {% for id in 0..default_no_of_columns %} + {% if id == 0 %} + + X + + + {% if id == 0 %}{% endif %} {% endfor %}
@@ -24,12 +145,11 @@
{% spaceless %} - {% endspaceless %} 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 e75bded104..0000000000 --- a/templates/database/multi_table_query/new_column.twig +++ /dev/null @@ -1,96 +0,0 @@ -{% if id == 0 %} - X -
-{% if id == 0 %}{% endif %} From b996919c4773c75f097122a3500e5faba5845548 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Mon, 13 Nov 2017 22:58:02 -0200 Subject: [PATCH 5/5] Move query results logic into MultiTableQuery class MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Maurício Meneghini Fauth --- db_multi_table_query.php | 60 +++++-------------- .../classes/Database/MultiTableQuery.php | 43 +++++++++++++ 2 files changed, 59 insertions(+), 44 deletions(-) diff --git a/db_multi_table_query.php b/db_multi_table_query.php index e40720ee62..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($GLOBALS['dbi'], $db); - -$response->addHTML($queryInstance->getFormHtml()); diff --git a/libraries/classes/Database/MultiTableQuery.php b/libraries/classes/Database/MultiTableQuery.php index c895cd3717..d2f23d9dd6 100644 --- a/libraries/classes/Database/MultiTableQuery.php +++ b/libraries/classes/Database/MultiTableQuery.php @@ -8,6 +8,8 @@ namespace PhpMyAdmin\Database; use PhpMyAdmin\DatabaseInterface; +use PhpMyAdmin\ParseAnalyze; +use PhpMyAdmin\Sql; use PhpMyAdmin\Template; /** @@ -88,4 +90,45 @@ class MultiTableQuery '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 + ); + } }