From c028d421d77ad8595f384f454e939cfd1ebb332a Mon Sep 17 00:00:00 2001 From: Kamil Tekiela Date: Mon, 18 Dec 2023 22:19:17 +0100 Subject: [PATCH 01/11] Extract common code Signed-off-by: Kamil Tekiela --- src/Database/Designer.php | 104 ++++++++++++++++---------------------- 1 file changed, 44 insertions(+), 60 deletions(-) diff --git a/src/Database/Designer.php b/src/Database/Designer.php index 78446b8f25..5e8fb929dc 100644 --- a/src/Database/Designer.php +++ b/src/Database/Designer.php @@ -234,36 +234,7 @@ class Designer ): string { $GLOBALS['text_dir'] ??= null; - $columnsType = []; - foreach ($tableColumnsInfo as $tableName => $columnsInfo) { - foreach ($columnsInfo as $columnInfo) { - $tableColumnName = $tableName . '.' . $columnInfo->name; - if (isset($tablesPkOrUniqueKeys[$tableColumnName])) { - $columnsType[$tableColumnName] = 'designer/FieldKey_small'; - } else { - $columnsType[$tableColumnName] = 'designer/Field_small'; - if ( - str_contains($columnInfo->type, 'char') - || str_contains($columnInfo->type, 'text') - ) { - $columnsType[$tableColumnName] .= '_char'; - } elseif ( - str_contains($columnInfo->type, 'int') - || str_contains($columnInfo->type, 'float') - || str_contains($columnInfo->type, 'double') - || str_contains($columnInfo->type, 'decimal') - ) { - $columnsType[$tableColumnName] .= '_int'; - } elseif ( - str_contains($columnInfo->type, 'date') - || str_contains($columnInfo->type, 'time') - || str_contains($columnInfo->type, 'year') - ) { - $columnsType[$tableColumnName] .= '_date'; - } - } - } - } + $columnsType = $this->getColumnTypes($tableColumnsInfo, $tablesPkOrUniqueKeys); return $this->template->render('database/designer/database_tables', [ 'db' => Current::$database, @@ -319,36 +290,7 @@ class Designer $GLOBALS['text_dir'] ??= null; $relationParameters = $this->relation->getRelationParameters(); - $columnsType = []; - foreach ($tableColumnsInfo as $tableName => $columnsInfo) { - foreach ($columnsInfo as $columnInfo) { - $tableColumnName = $tableName . '.' . $columnInfo->name; - if (isset($tablesPkOrUniqueKeys[$tableColumnName])) { - $columnsType[$tableColumnName] = 'designer/FieldKey_small'; - } else { - $columnsType[$tableColumnName] = 'designer/Field_small'; - if ( - str_contains($columnInfo->type, 'char') - || str_contains($columnInfo->type, 'text') - ) { - $columnsType[$tableColumnName] .= '_char'; - } elseif ( - str_contains($columnInfo->type, 'int') - || str_contains($columnInfo->type, 'float') - || str_contains($columnInfo->type, 'double') - || str_contains($columnInfo->type, 'decimal') - ) { - $columnsType[$tableColumnName] .= '_int'; - } elseif ( - str_contains($columnInfo->type, 'date') - || str_contains($columnInfo->type, 'time') - || str_contains($columnInfo->type, 'year') - ) { - $columnsType[$tableColumnName] .= '_date'; - } - } - } - } + $columnsType = $this->getColumnTypes($tableColumnsInfo, $tablesPkOrUniqueKeys); $displayedFields = []; foreach ($scriptDisplayField as $designerTable) { @@ -386,4 +328,46 @@ class Designer 'columns_type' => $columnsType, ]); } + + /** + * @param list[] $tableColumnsInfo table column info + * @param mixed[] $tablesPkOrUniqueKeys unique or primary indices + * + * @return array + */ + private function getColumnTypes(array $tableColumnsInfo, array $tablesPkOrUniqueKeys): array + { + $columnsType = []; + foreach ($tableColumnsInfo as $tableName => $columnsInfo) { + foreach ($columnsInfo as $columnInfo) { + $tableColumnName = $tableName . '.' . $columnInfo->name; + if (isset($tablesPkOrUniqueKeys[$tableColumnName])) { + $columnsType[$tableColumnName] = 'designer/FieldKey_small'; + } else { + $columnsType[$tableColumnName] = 'designer/Field_small'; + if ( + str_contains($columnInfo->type, 'char') + || str_contains($columnInfo->type, 'text') + ) { + $columnsType[$tableColumnName] .= '_char'; + } elseif ( + str_contains($columnInfo->type, 'int') + || str_contains($columnInfo->type, 'float') + || str_contains($columnInfo->type, 'double') + || str_contains($columnInfo->type, 'decimal') + ) { + $columnsType[$tableColumnName] .= '_int'; + } elseif ( + str_contains($columnInfo->type, 'date') + || str_contains($columnInfo->type, 'time') + || str_contains($columnInfo->type, 'year') + ) { + $columnsType[$tableColumnName] .= '_date'; + } + } + } + } + + return $columnsType; + } } From 0b6e5fd1a0ce7fed0748cce6cd7381ad81712434 Mon Sep 17 00:00:00 2001 From: Kamil Tekiela Date: Mon, 18 Dec 2023 22:50:52 +0100 Subject: [PATCH 02/11] Inline controller method Signed-off-by: Kamil Tekiela --- phpstan-baseline.neon | 5 --- .../Database/DesignerController.php | 26 +++++++---- src/Database/Designer.php | 44 +------------------ 3 files changed, 18 insertions(+), 57 deletions(-) diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 94fa0bbfe6..c8d17a48d3 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -1610,11 +1610,6 @@ parameters: count: 2 path: src/Controllers/Database/DesignerController.php - - - message: "#^Parameter \\#1 \\$db of method PhpMyAdmin\\\\Database\\\\Designer\\:\\:getDatabaseTables\\(\\) expects string, mixed given\\.$#" - count: 1 - path: src/Controllers/Database/DesignerController.php - - message: "#^Parameter \\#1 \\$db of method PhpMyAdmin\\\\Database\\\\Designer\\:\\:getHtmlForEditOrDeletePages\\(\\) expects string, mixed given\\.$#" count: 2 diff --git a/src/Controllers/Database/DesignerController.php b/src/Controllers/Database/DesignerController.php index f0d60fa2ed..fc416fc220 100644 --- a/src/Controllers/Database/DesignerController.php +++ b/src/Controllers/Database/DesignerController.php @@ -64,15 +64,23 @@ class DesignerController extends AbstractController $tablesAllKeys = $this->designerCommon->getAllKeys($scriptDisplayField); $tablesPkOrUniqueKeys = $this->designerCommon->getPkOrUniqueKeys($scriptDisplayField); - $html = $this->databaseDesigner->getDatabaseTables( - $db, - $scriptDisplayField, - [], - -1, - $tableColumn, - $tablesAllKeys, - $tablesPkOrUniqueKeys, - ); + $GLOBALS['text_dir'] ??= null; + + $columnsType = $this->databaseDesigner->getColumnTypes($tableColumn, $tablesPkOrUniqueKeys); + + $html = $this->template->render('database/designer/database_tables', [ + 'db' => Current::$database, + 'text_dir' => $GLOBALS['text_dir'], + 'get_db' => $db, + 'has_query' => isset($_REQUEST['query']), + 'tab_pos' => [], + 'display_page' => -1, + 'tab_column' => $tableColumn, + 'tables_all_keys' => $tablesAllKeys, + 'tables_pk_or_unique_keys' => $tablesPkOrUniqueKeys, + 'tables' => $scriptDisplayField, + 'columns_type' => $columnsType, + ]); } if ($html !== '') { diff --git a/src/Database/Designer.php b/src/Database/Designer.php index 5e8fb929dc..1131ff1956 100644 --- a/src/Database/Designer.php +++ b/src/Database/Designer.php @@ -6,7 +6,6 @@ namespace PhpMyAdmin\Database; use PhpMyAdmin\Config; use PhpMyAdmin\ConfigStorage\Relation; -use PhpMyAdmin\Current; use PhpMyAdmin\Database\Designer\ColumnInfo; use PhpMyAdmin\Database\Designer\DesignerTable; use PhpMyAdmin\DatabaseInterface; @@ -210,47 +209,6 @@ class Designer return $classesArray; } - /** - * Get HTML to display tables on designer page - * - * @param string $db The database name from the request - * @param DesignerTable[] $designerTables The designer tables - * @param mixed[] $tabPos tables positions - * @param int $displayPage page number of the selected page - * @param list[] $tableColumnsInfo table column info - * @param mixed[] $tablesAllKeys all indices - * @param mixed[] $tablesPkOrUniqueKeys unique or primary indices - * - * @return string html - */ - public function getDatabaseTables( - string $db, - array $designerTables, - array $tabPos, - int $displayPage, - array $tableColumnsInfo, - array $tablesAllKeys, - array $tablesPkOrUniqueKeys, - ): string { - $GLOBALS['text_dir'] ??= null; - - $columnsType = $this->getColumnTypes($tableColumnsInfo, $tablesPkOrUniqueKeys); - - return $this->template->render('database/designer/database_tables', [ - 'db' => Current::$database, - 'text_dir' => $GLOBALS['text_dir'], - 'get_db' => $db, - 'has_query' => isset($_REQUEST['query']), - 'tab_pos' => $tabPos, - 'display_page' => $displayPage, - 'tab_column' => $tableColumnsInfo, - 'tables_all_keys' => $tablesAllKeys, - 'tables_pk_or_unique_keys' => $tablesPkOrUniqueKeys, - 'tables' => $designerTables, - 'columns_type' => $columnsType, - ]); - } - /** * Returns HTML for Designer page * @@ -335,7 +293,7 @@ class Designer * * @return array */ - private function getColumnTypes(array $tableColumnsInfo, array $tablesPkOrUniqueKeys): array + public function getColumnTypes(array $tableColumnsInfo, array $tablesPkOrUniqueKeys): array { $columnsType = []; foreach ($tableColumnsInfo as $tableName => $columnsInfo) { From 522792227864ed26a63e6d0ad86e10f30e0021aa Mon Sep 17 00:00:00 2001 From: Kamil Tekiela Date: Mon, 18 Dec 2023 22:58:50 +0100 Subject: [PATCH 03/11] Remove useless param Signed-off-by: Kamil Tekiela --- src/Controllers/Database/DesignerController.php | 1 - src/Database/Designer.php | 4 +--- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/Controllers/Database/DesignerController.php b/src/Controllers/Database/DesignerController.php index fc416fc220..efa896b4c4 100644 --- a/src/Controllers/Database/DesignerController.php +++ b/src/Controllers/Database/DesignerController.php @@ -239,7 +239,6 @@ class DesignerController extends AbstractController $scriptDisplayField, $scriptTables, $scriptContr, - $scriptDisplayField, $displayPage, $visualBuilderMode, $selectedPage, diff --git a/src/Database/Designer.php b/src/Database/Designer.php index 1131ff1956..9a5b5c021c 100644 --- a/src/Database/Designer.php +++ b/src/Database/Designer.php @@ -217,7 +217,6 @@ class Designer * @param DesignerTable[] $designerTables The designer tables * @param mixed[] $scriptTables array on foreign key support for each table * @param mixed[] $scriptContr initialization data array - * @param DesignerTable[] $scriptDisplayField displayed tables in designer with their display fields * @param int $displayPage page number of the selected page * @param bool $visualBuilderMode whether this is visual query builder * @param string|null $selectedPage name of the selected page @@ -235,7 +234,6 @@ class Designer array $designerTables, array $scriptTables, array $scriptContr, - array $scriptDisplayField, int $displayPage, bool $visualBuilderMode, string|null $selectedPage, @@ -251,7 +249,7 @@ class Designer $columnsType = $this->getColumnTypes($tableColumnsInfo, $tablesPkOrUniqueKeys); $displayedFields = []; - foreach ($scriptDisplayField as $designerTable) { + foreach ($designerTables as $designerTable) { if ($designerTable->getDisplayField() === null) { continue; } From 58a65847408126950374328f8fa46ed17bfbf61e Mon Sep 17 00:00:00 2001 From: Kamil Tekiela Date: Mon, 18 Dec 2023 23:08:25 +0100 Subject: [PATCH 04/11] Remove unused param Signed-off-by: Kamil Tekiela --- resources/templates/database/designer/main.twig | 1 - src/Controllers/Database/DesignerController.php | 1 - 2 files changed, 2 deletions(-) diff --git a/resources/templates/database/designer/main.twig b/resources/templates/database/designer/main.twig index bac8cb1142..384c41fb99 100644 --- a/resources/templates/database/designer/main.twig +++ b/resources/templates/database/designer/main.twig @@ -233,7 +233,6 @@ window.designerConfig = {{ designer_config|raw }}; {% include 'database/designer/database_tables.twig' with { 'db': db, 'text_dir': text_dir, - 'get_db': get_db, 'has_query': has_query, 'tab_pos': tab_pos, 'display_page': display_page, diff --git a/src/Controllers/Database/DesignerController.php b/src/Controllers/Database/DesignerController.php index efa896b4c4..563b2b7662 100644 --- a/src/Controllers/Database/DesignerController.php +++ b/src/Controllers/Database/DesignerController.php @@ -71,7 +71,6 @@ class DesignerController extends AbstractController $html = $this->template->render('database/designer/database_tables', [ 'db' => Current::$database, 'text_dir' => $GLOBALS['text_dir'], - 'get_db' => $db, 'has_query' => isset($_REQUEST['query']), 'tab_pos' => [], 'display_page' => -1, From 479f7d77ce9dbb7ee7cd0af1476c058239a2fdfe Mon Sep 17 00:00:00 2001 From: Kamil Tekiela Date: Mon, 18 Dec 2023 23:09:59 +0100 Subject: [PATCH 05/11] Inline Twig file Signed-off-by: Kamil Tekiela --- .../templates/database/designer/main.twig | 22 ++++++++++++++++++- resources/templates/modals/build_query.twig | 21 ------------------ 2 files changed, 21 insertions(+), 22 deletions(-) delete mode 100644 resources/templates/modals/build_query.twig diff --git a/resources/templates/database/designer/main.twig b/resources/templates/database/designer/main.twig index 384c41fb99..7d09712c44 100644 --- a/resources/templates/database/designer/main.twig +++ b/resources/templates/database/designer/main.twig @@ -1121,5 +1121,25 @@ window.designerConfig = {{ designer_config|raw }}; {% if visual_builder %} - {{ include('modals/build_query.twig', {'get_db': get_db}) }} + {% endif %} diff --git a/resources/templates/modals/build_query.twig b/resources/templates/modals/build_query.twig deleted file mode 100644 index b32fe296b3..0000000000 --- a/resources/templates/modals/build_query.twig +++ /dev/null @@ -1,21 +0,0 @@ - From 4f93d3d15d509a6b310e00ce7e6785e8b5c6cbd0 Mon Sep 17 00:00:00 2001 From: Kamil Tekiela Date: Mon, 18 Dec 2023 23:12:37 +0100 Subject: [PATCH 06/11] Remove Twig function call Signed-off-by: Kamil Tekiela --- resources/templates/database/designer/main.twig | 2 +- src/Database/Designer.php | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/resources/templates/database/designer/main.twig b/resources/templates/database/designer/main.twig index 7d09712c44..c8a9c028e3 100644 --- a/resources/templates/database/designer/main.twig +++ b/resources/templates/database/designer/main.twig @@ -1132,7 +1132,7 @@ window.designerConfig = {{ designer_config|raw }};
- {{ get_hidden_inputs(get_db) }} + {{ hidden_input_fields|raw }}