From 0754a34411c49d280ad300c904fba8784447ba17 Mon Sep 17 00:00:00 2001 From: Sven Strickroth Date: Thu, 4 Mar 2021 11:09:56 +0100 Subject: [PATCH 1/4] Fix #16713 - Add backward compatibility for DefaultTabServer, DefaultTabDatabase, DefaultTabTable, NavigationTreeDefaultTabTable and NavigationTreeDefaultTabTable2 Fixes: #16713 Signed-off-by: Sven Strickroth --- libraries/classes/Util.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/libraries/classes/Util.php b/libraries/classes/Util.php index db4163dab8..fd42228f35 100644 --- a/libraries/classes/Util.php +++ b/libraries/classes/Util.php @@ -1767,26 +1767,35 @@ class Util // Values for $cfg['DefaultTabServer'] switch ($target) { case 'welcome': + case 'index.php': return '/'; case 'databases': + case 'server_databases.php': return '/server/databases'; case 'status': + case 'server_status.php': return '/server/status'; case 'variables': + case 'server_variables.php': return '/server/variables'; case 'privileges': + case 'server_privileges.php': return '/server/privileges'; } } elseif ($location === 'database') { // Values for $cfg['DefaultTabDatabase'] switch ($target) { case 'structure': + case 'db_structure.php': return '/database/structure'; case 'sql': + case 'db_sql.php': return '/database/sql'; case 'search': + case 'db_search.php': return '/database/search'; case 'operations': + case 'db_operations.php': return '/database/operations'; } } elseif ($location === 'table') { @@ -1795,14 +1804,19 @@ class Util // $cfg['NavigationTreeDefaultTabTable2'] switch ($target) { case 'structure': + case 'tbl_structure.php': return '/table/structure'; case 'sql': + case 'tbl_sql.php': return '/table/sql'; case 'search': + case 'tbl_select.php': return '/table/search'; case 'insert': + case 'tbl_change.php': return '/table/change'; case 'browse': + case 'sql.php': return '/sql'; } } From 965c124d962a2da3e4612cfc31dd803dfec96770 Mon Sep 17 00:00:00 2001 From: Sven Strickroth Date: Fri, 5 Mar 2021 14:32:33 +0100 Subject: [PATCH 2/4] Fix #16698 - Wrong Absolute Links In Navigation ("/" instead of "./") Fixes: #16698 Signed-off-by: Sven Strickroth --- libraries/classes/Util.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/classes/Util.php b/libraries/classes/Util.php index fd42228f35..d399b70ede 100644 --- a/libraries/classes/Util.php +++ b/libraries/classes/Util.php @@ -1742,7 +1742,7 @@ class Util { $url = self::getUrlForOption($target, $location); if ($url === null) { - return '/'; + return './'; } return Url::getFromRoute($url); From 8da837aa3ed8f2145cb9cc7398cbefff30eea620 Mon Sep 17 00:00:00 2001 From: William Desportes Date: Fri, 5 Mar 2021 14:44:29 +0100 Subject: [PATCH 3/4] Fix #16713 - Add a default route as a navigation fallback Signed-off-by: William Desportes --- libraries/classes/Menu.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/classes/Menu.php b/libraries/classes/Menu.php index c539068437..282a26a426 100644 --- a/libraries/classes/Menu.php +++ b/libraries/classes/Menu.php @@ -201,20 +201,20 @@ class Menu $server['url'] = Util::getUrlForOption( $cfg['DefaultTabServer'], 'server' - ); + ) ?? '/'; if (strlen($this->db) > 0) { $database['name'] = $this->db; $database['url'] = Util::getUrlForOption( $cfg['DefaultTabDatabase'], 'database' - ); + ) ?? '/'; if (strlen((string) $this->table) > 0) { $table['name'] = $this->table; $table['url'] = Util::getUrlForOption( $cfg['DefaultTabTable'], 'table' - ); + ) ?? '/'; /** @var Table $tableObj */ $tableObj = $dbi->getTable($this->db, $this->table); $table['is_view'] = $tableObj->isView(); From 3ad189b452f98a7938b53cfd4b0c7b67b353156f Mon Sep 17 00:00:00 2001 From: William Desportes Date: Fri, 5 Mar 2021 14:54:29 +0100 Subject: [PATCH 4/4] Add tests for #16713 and #16698 Signed-off-by: William Desportes --- test/classes/UtilTest.php | 173 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 173 insertions(+) diff --git a/test/classes/UtilTest.php b/test/classes/UtilTest.php index adffbc7d8d..508ebf86d3 100644 --- a/test/classes/UtilTest.php +++ b/test/classes/UtilTest.php @@ -2600,4 +2600,177 @@ class UtilTest extends AbstractTestCase $this->assertFalse(Util::currentUserHasPrivilege('EVENT', 'my_data_base', 'my_data_table')); $GLOBALS['dbi'] = $oldDbi; } + + /** + * @return array[] + */ + public function dataProviderScriptNames(): array + { + // target + // location + // function output + return [ + [ + 'structure', // Notice the typo on db_structure.php + 'databasesss', + './',// Fallback to a relative path, impossible to build a valid route link + ], + [ + 'db_structures.php', // Notice the typo on databases + 'database', + './',// Fallback to a relative path, impossible to build a valid route link + ], + [ + 'tbl_structure.php', // Support the legacy value + 'table', + 'index.php?route=/table/structure&lang=en', + ], + [ + 'structure', + 'table', + 'index.php?route=/table/structure&lang=en', + ], + [ + 'tbl_sql.php', // Support the legacy value + 'table', + 'index.php?route=/table/sql&lang=en', + ], + [ + 'sql', + 'table', + 'index.php?route=/table/sql&lang=en', + ], + [ + 'tbl_select.php', // Support the legacy value + 'table', + 'index.php?route=/table/search&lang=en', + ], + [ + 'search', + 'table', + 'index.php?route=/table/search&lang=en', + ], + [ + 'tbl_change.php', // Support the legacy value + 'table', + 'index.php?route=/table/change&lang=en', + ], + [ + 'insert', + 'table', + 'index.php?route=/table/change&lang=en', + ], + [ + 'sql.php', // Support the legacy value + 'table', + 'index.php?route=/sql&lang=en', + ], + [ + 'browse', + 'table', + 'index.php?route=/sql&lang=en', + ], + [ + 'db_structure.php', // Support the legacy value + 'database', + 'index.php?route=/database/structure&lang=en', + ], + [ + 'structure', + 'database', + 'index.php?route=/database/structure&lang=en', + ], + [ + 'db_sql.php', // Support the legacy value + 'database', + 'index.php?route=/database/sql&lang=en', + ], + [ + 'sql', + 'database', + 'index.php?route=/database/sql&lang=en', + ], + [ + 'db_search.php', // Support the legacy value + 'database', + 'index.php?route=/database/search&lang=en', + ], + [ + 'search', + 'database', + 'index.php?route=/database/search&lang=en', + ], + [ + 'db_operations.php', // Support the legacy value + 'database', + 'index.php?route=/database/operations&lang=en', + ], + [ + 'operations', + 'database', + 'index.php?route=/database/operations&lang=en', + ], + [ + 'index.php', // Support the legacy value + 'server', + 'index.php?route=/&lang=en', + ], + [ + 'welcome', + 'server', + 'index.php?route=/&lang=en', + ], + [ + 'server_databases.php', // Support the legacy value + 'server', + 'index.php?route=/server/databases&lang=en', + ], + [ + 'databases', + 'server', + 'index.php?route=/server/databases&lang=en', + ], + [ + 'server_status.php', // Support the legacy value + 'server', + 'index.php?route=/server/status&lang=en', + ], + [ + 'status', + 'server', + 'index.php?route=/server/status&lang=en', + ], + [ + 'server_variables.php', // Support the legacy value + 'server', + 'index.php?route=/server/variables&lang=en', + ], + [ + 'variables', + 'server', + 'index.php?route=/server/variables&lang=en', + ], + [ + 'server_privileges.php', // Support the legacy value + 'server', + 'index.php?route=/server/privileges&lang=en', + ], + [ + 'privileges', + 'server', + 'index.php?route=/server/privileges&lang=en', + ], + ]; + } + + /** + * @dataProvider dataProviderScriptNames + */ + public function testGetScriptNameForOption(string $target, string $location, string $finalLink): void + { + $this->assertSame( + $finalLink, + Util::getScriptNameForOption($target, $location) + ); + } }