From c0b367cc579161002797c8f91130ca62433bea93 Mon Sep 17 00:00:00 2001 From: Kamil Tekiela Date: Mon, 13 Mar 2023 21:04:42 +0000 Subject: [PATCH 1/6] Create Tracking namespace Signed-off-by: Kamil Tekiela --- libraries/classes/Common.php | 1 + .../Database/StructureController.php | 2 +- .../Database/TrackingController.php | 4 +- .../Controllers/Table/StructureController.php | 2 +- .../Controllers/Table/TrackingController.php | 4 +- libraries/classes/DatabaseInterface.php | 1 + libraries/classes/Menu.php | 1 + libraries/classes/{ => Tracking}/Tracker.php | 5 +- libraries/classes/{ => Tracking}/Tracking.php | 11 +- libraries/services.php | 2 +- phpstan-baseline.neon | 236 +++++++++--------- psalm-baseline.xml | 8 +- .../Table/TrackingControllerTest.php | 2 +- test/classes/{ => Tracking}/TrackerTest.php | 7 +- test/classes/{ => Tracking}/TrackingTest.php | 7 +- 15 files changed, 154 insertions(+), 139 deletions(-) rename libraries/classes/{ => Tracking}/Tracker.php (99%) rename libraries/classes/{ => Tracking}/Tracking.php (99%) rename test/classes/{ => Tracking}/TrackerTest.php (99%) rename test/classes/{ => Tracking}/TrackingTest.php (99%) diff --git a/libraries/classes/Common.php b/libraries/classes/Common.php index d7933de6f5..54ee06241c 100644 --- a/libraries/classes/Common.php +++ b/libraries/classes/Common.php @@ -19,6 +19,7 @@ use PhpMyAdmin\Plugins\AuthenticationPlugin; use PhpMyAdmin\Plugins\AuthenticationPluginFactory; use PhpMyAdmin\SqlParser\Lexer; use PhpMyAdmin\Theme\ThemeManager; +use PhpMyAdmin\Tracking\Tracker; use RuntimeException; use Symfony\Component\DependencyInjection\ContainerInterface; diff --git a/libraries/classes/Controllers/Database/StructureController.php b/libraries/classes/Controllers/Database/StructureController.php index 90eae0521e..5811f01582 100644 --- a/libraries/classes/Controllers/Database/StructureController.php +++ b/libraries/classes/Controllers/Database/StructureController.php @@ -20,7 +20,7 @@ use PhpMyAdmin\ResponseRenderer; use PhpMyAdmin\Sanitize; use PhpMyAdmin\StorageEngine; use PhpMyAdmin\Template; -use PhpMyAdmin\Tracker; +use PhpMyAdmin\Tracking\Tracker; use PhpMyAdmin\Url; use PhpMyAdmin\Util; diff --git a/libraries/classes/Controllers/Database/TrackingController.php b/libraries/classes/Controllers/Database/TrackingController.php index e5e27a8897..b6bb656aaf 100644 --- a/libraries/classes/Controllers/Database/TrackingController.php +++ b/libraries/classes/Controllers/Database/TrackingController.php @@ -13,8 +13,8 @@ use PhpMyAdmin\Message; use PhpMyAdmin\Query\Utilities; use PhpMyAdmin\ResponseRenderer; use PhpMyAdmin\Template; -use PhpMyAdmin\Tracker; -use PhpMyAdmin\Tracking; +use PhpMyAdmin\Tracking\Tracker; +use PhpMyAdmin\Tracking\Tracking; use PhpMyAdmin\Url; use PhpMyAdmin\Util; diff --git a/libraries/classes/Controllers/Table/StructureController.php b/libraries/classes/Controllers/Table/StructureController.php index 1723a401ba..09fb849c44 100644 --- a/libraries/classes/Controllers/Table/StructureController.php +++ b/libraries/classes/Controllers/Table/StructureController.php @@ -23,7 +23,7 @@ use PhpMyAdmin\ResponseRenderer; use PhpMyAdmin\StorageEngine; use PhpMyAdmin\Table; use PhpMyAdmin\Template; -use PhpMyAdmin\Tracker; +use PhpMyAdmin\Tracking\Tracker; use PhpMyAdmin\Transformations; use PhpMyAdmin\Url; use PhpMyAdmin\Util; diff --git a/libraries/classes/Controllers/Table/TrackingController.php b/libraries/classes/Controllers/Table/TrackingController.php index c85c04305f..6e8d95b7ee 100644 --- a/libraries/classes/Controllers/Table/TrackingController.php +++ b/libraries/classes/Controllers/Table/TrackingController.php @@ -12,8 +12,8 @@ use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\Message; use PhpMyAdmin\ResponseRenderer; use PhpMyAdmin\Template; -use PhpMyAdmin\Tracker; -use PhpMyAdmin\Tracking; +use PhpMyAdmin\Tracking\Tracker; +use PhpMyAdmin\Tracking\Tracking; use PhpMyAdmin\Url; use PhpMyAdmin\Util; use Throwable; diff --git a/libraries/classes/DatabaseInterface.php b/libraries/classes/DatabaseInterface.php index eb267079e0..c7061e3ab4 100644 --- a/libraries/classes/DatabaseInterface.php +++ b/libraries/classes/DatabaseInterface.php @@ -20,6 +20,7 @@ use PhpMyAdmin\Query\Compatibility; use PhpMyAdmin\Query\Generator as QueryGenerator; use PhpMyAdmin\Query\Utilities; use PhpMyAdmin\SqlParser\Context; +use PhpMyAdmin\Tracking\Tracker; use PhpMyAdmin\Utils\SessionCache; use stdClass; diff --git a/libraries/classes/Menu.php b/libraries/classes/Menu.php index 59f6779566..61fef9c525 100644 --- a/libraries/classes/Menu.php +++ b/libraries/classes/Menu.php @@ -10,6 +10,7 @@ namespace PhpMyAdmin; use PhpMyAdmin\ConfigStorage\Relation; use PhpMyAdmin\Dbal\Connection; use PhpMyAdmin\Query\Utilities; +use PhpMyAdmin\Tracking\Tracker; use PhpMyAdmin\Utils\SessionCache; use function __; diff --git a/libraries/classes/Tracker.php b/libraries/classes/Tracking/Tracker.php similarity index 99% rename from libraries/classes/Tracker.php rename to libraries/classes/Tracking/Tracker.php index 5dfd7a0506..18ab5decc3 100644 --- a/libraries/classes/Tracker.php +++ b/libraries/classes/Tracking/Tracker.php @@ -5,10 +5,12 @@ declare(strict_types=1); -namespace PhpMyAdmin; +namespace PhpMyAdmin\Tracking; +use PhpMyAdmin\Cache; use PhpMyAdmin\ConfigStorage\Relation; use PhpMyAdmin\Dbal\Connection; +use PhpMyAdmin\Plugins; use PhpMyAdmin\Plugins\Export\ExportSql; use PhpMyAdmin\SqlParser\Parser; use PhpMyAdmin\SqlParser\Statements\AlterStatement; @@ -19,6 +21,7 @@ use PhpMyAdmin\SqlParser\Statements\InsertStatement; use PhpMyAdmin\SqlParser\Statements\RenameStatement; use PhpMyAdmin\SqlParser\Statements\TruncateStatement; use PhpMyAdmin\SqlParser\Statements\UpdateStatement; +use PhpMyAdmin\Util; use function array_values; use function count; diff --git a/libraries/classes/Tracking.php b/libraries/classes/Tracking/Tracking.php similarity index 99% rename from libraries/classes/Tracking.php rename to libraries/classes/Tracking/Tracking.php index 7679d9e82d..0a3583ea9a 100644 --- a/libraries/classes/Tracking.php +++ b/libraries/classes/Tracking/Tracking.php @@ -5,12 +5,19 @@ declare(strict_types=1); -namespace PhpMyAdmin; +namespace PhpMyAdmin\Tracking; use DateTimeImmutable; use PhpMyAdmin\ConfigStorage\Relation; +use PhpMyAdmin\Core; +use PhpMyAdmin\DatabaseInterface; use PhpMyAdmin\Dbal\ResultInterface; use PhpMyAdmin\Html\Generator; +use PhpMyAdmin\Message; +use PhpMyAdmin\SqlQueryForm; +use PhpMyAdmin\Template; +use PhpMyAdmin\Url; +use PhpMyAdmin\Util; use function __; use function array_key_exists; @@ -32,7 +39,7 @@ use function strtotime; use const SORT_ASC; /** - * PhpMyAdmin\Tracking class + * PhpMyAdmin\Tracking\Tracking class */ class Tracking { diff --git a/libraries/services.php b/libraries/services.php index c593726b17..d5b17cbc7f 100644 --- a/libraries/services.php +++ b/libraries/services.php @@ -236,7 +236,7 @@ return [ 'arguments' => ['$config' => '@config'], ], 'tracking' => [ - 'class' => PhpMyAdmin\Tracking::class, + 'class' => PhpMyAdmin\Tracking\Tracking::class, 'arguments' => [ '$sqlQueryForm' => '@sql_query_form', '$template' => '@template', diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 71fe08eb97..d8ab541c65 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -1591,17 +1591,17 @@ parameters: path: libraries/classes/Controllers/Database/TrackingController.php - - message: "#^Parameter \\#2 \\$selected of method PhpMyAdmin\\\\Tracking\\:\\:createTrackingForMultipleTables\\(\\) expects array, mixed given\\.$#" + message: "#^Parameter \\#2 \\$selected of method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:createTrackingForMultipleTables\\(\\) expects array, mixed given\\.$#" count: 1 path: libraries/classes/Controllers/Database/TrackingController.php - - message: "#^Parameter \\#2 \\$tableName of static method PhpMyAdmin\\\\Tracker\\:\\:deleteTracking\\(\\) expects string, mixed given\\.$#" + message: "#^Parameter \\#2 \\$tableName of static method PhpMyAdmin\\\\Tracking\\\\Tracker\\:\\:deleteTracking\\(\\) expects string, mixed given\\.$#" count: 2 path: libraries/classes/Controllers/Database/TrackingController.php - - message: "#^Parameter \\#3 \\$version of method PhpMyAdmin\\\\Tracking\\:\\:createTrackingForMultipleTables\\(\\) expects string, mixed given\\.$#" + message: "#^Parameter \\#3 \\$version of method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:createTrackingForMultipleTables\\(\\) expects string, mixed given\\.$#" count: 1 path: libraries/classes/Controllers/Database/TrackingController.php @@ -8458,307 +8458,307 @@ parameters: - message: "#^Cannot access property \\$dest on PhpMyAdmin\\\\SqlParser\\\\Components\\\\IntoKeyword\\|null\\.$#" count: 1 - path: libraries/classes/Tracker.php + path: libraries/classes/Tracking/Tracker.php - message: "#^Cannot access property \\$table on PhpMyAdmin\\\\SqlParser\\\\Components\\\\Expression\\|null\\.$#" count: 4 - path: libraries/classes/Tracker.php + path: libraries/classes/Tracking/Tracker.php - message: "#^Cannot access property \\$table on PhpMyAdmin\\\\SqlParser\\\\Components\\\\Expression\\|string\\|null\\.$#" count: 1 - path: libraries/classes/Tracker.php + path: libraries/classes/Tracking/Tracker.php - message: "#^Cannot access property \\$tokens on PhpMyAdmin\\\\SqlParser\\\\TokensList\\|null\\.$#" count: 1 - path: libraries/classes/Tracker.php + path: libraries/classes/Tracking/Tracker.php - message: "#^Cannot access property \\$value on PhpMyAdmin\\\\SqlParser\\\\Token\\|string\\.$#" count: 3 - path: libraries/classes/Tracker.php + path: libraries/classes/Tracking/Tracker.php - message: "#^Foreach overwrites \\$logEntry with its value variable\\.$#" count: 1 - path: libraries/classes/Tracker.php + path: libraries/classes/Tracking/Tracker.php - - message: "#^Method PhpMyAdmin\\\\Tracker\\:\\:changeTrackingData\\(\\) has parameter \\$newData with no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracker\\:\\:changeTrackingData\\(\\) has parameter \\$newData with no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracker.php + path: libraries/classes/Tracking/Tracker.php - - message: "#^Method PhpMyAdmin\\\\Tracker\\:\\:parseQuery\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracker\\:\\:parseQuery\\(\\) return type has no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracker.php + path: libraries/classes/Tracking/Tracker.php - message: "#^Offset 0 does not exist on array\\\\|null\\.$#" count: 4 - path: libraries/classes/Tracker.php + path: libraries/classes/Tracking/Tracker.php - message: "#^Offset 0 does not exist on array\\\\|null\\.$#" count: 2 - path: libraries/classes/Tracker.php + path: libraries/classes/Tracking/Tracker.php - message: "#^Only numeric types are allowed in \\-, int\\<0, max\\>\\|false given on the left side\\.$#" count: 2 - path: libraries/classes/Tracker.php + path: libraries/classes/Tracking/Tracker.php - - message: "#^Property PhpMyAdmin\\\\Tracker\\:\\:\\$trackingCache type has no value type specified in iterable type array\\.$#" + message: "#^Property PhpMyAdmin\\\\Tracking\\\\Tracker\\:\\:\\$trackingCache type has no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracker.php + path: libraries/classes/Tracking/Tracker.php - message: "#^Cannot access offset 'COLUMNS' on mixed\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - message: "#^Cannot access offset 'INDEXES' on mixed\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:createTrackingForMultipleTables\\(\\) has parameter \\$selected with no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:createTrackingForMultipleTables\\(\\) has parameter \\$selected with no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:deleteFromTrackingReportLog\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:deleteFromTrackingReportLog\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:deleteTrackingReportRows\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:deleteTrackingReportRows\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:exportAsSqlDump\\(\\) has parameter \\$entries with no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:exportAsSqlDump\\(\\) has parameter \\$entries with no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:exportAsSqlExecution\\(\\) has parameter \\$entries with no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:exportAsSqlExecution\\(\\) has parameter \\$entries with no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:extractTableNames\\(\\) has parameter \\$table_list with no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:extractTableNames\\(\\) has parameter \\$table_list with no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:extractTableNames\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:extractTableNames\\(\\) return type has no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:filter\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:filter\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:filter\\(\\) has parameter \\$filter_users with no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:filter\\(\\) has parameter \\$filter_users with no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:filter\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:filter\\(\\) return type has no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:getEntries\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:getEntries\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:getEntries\\(\\) has parameter \\$filter_users with no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:getEntries\\(\\) has parameter \\$filter_users with no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:getEntries\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:getEntries\\(\\) return type has no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:getHtmlForColumns\\(\\) has parameter \\$columns with no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:getHtmlForColumns\\(\\) has parameter \\$columns with no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:getHtmlForDataDefinitionStatements\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:getHtmlForDataDefinitionStatements\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:getHtmlForDataDefinitionStatements\\(\\) has parameter \\$filter_users with no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:getHtmlForDataDefinitionStatements\\(\\) has parameter \\$filter_users with no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:getHtmlForDataDefinitionStatements\\(\\) has parameter \\$url_params with no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:getHtmlForDataDefinitionStatements\\(\\) has parameter \\$url_params with no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:getHtmlForDataDefinitionStatements\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:getHtmlForDataDefinitionStatements\\(\\) return type has no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:getHtmlForDataManipulationStatements\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:getHtmlForDataManipulationStatements\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:getHtmlForDataManipulationStatements\\(\\) has parameter \\$filter_users with no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:getHtmlForDataManipulationStatements\\(\\) has parameter \\$filter_users with no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:getHtmlForDataManipulationStatements\\(\\) has parameter \\$url_params with no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:getHtmlForDataManipulationStatements\\(\\) has parameter \\$url_params with no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:getHtmlForDataStatements\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:getHtmlForDataStatements\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:getHtmlForDataStatements\\(\\) has parameter \\$filterUsers with no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:getHtmlForDataStatements\\(\\) has parameter \\$filterUsers with no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:getHtmlForDataStatements\\(\\) has parameter \\$urlParams with no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:getHtmlForDataStatements\\(\\) has parameter \\$urlParams with no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:getHtmlForDataStatements\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:getHtmlForDataStatements\\(\\) return type has no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:getHtmlForDbTrackingTables\\(\\) has parameter \\$urlParams with no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:getHtmlForDbTrackingTables\\(\\) has parameter \\$urlParams with no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:getHtmlForIndexes\\(\\) has parameter \\$indexes with no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:getHtmlForIndexes\\(\\) has parameter \\$indexes with no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:getHtmlForMainPage\\(\\) has parameter \\$urlParams with no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:getHtmlForMainPage\\(\\) has parameter \\$urlParams with no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:getHtmlForSchemaSnapshot\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:getHtmlForSchemaSnapshot\\(\\) has parameter \\$params with no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:getHtmlForTrackingReport\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:getHtmlForTrackingReport\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:getHtmlForTrackingReport\\(\\) has parameter \\$filter_users with no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:getHtmlForTrackingReport\\(\\) has parameter \\$filter_users with no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:getHtmlForTrackingReport\\(\\) has parameter \\$url_params with no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:getHtmlForTrackingReport\\(\\) has parameter \\$url_params with no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:getHtmlForTrackingReportExportForm1\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:getHtmlForTrackingReportExportForm1\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:getHtmlForTrackingReportExportForm1\\(\\) has parameter \\$filter_users with no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:getHtmlForTrackingReportExportForm1\\(\\) has parameter \\$filter_users with no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:getHtmlForTrackingReportExportForm1\\(\\) has parameter \\$url_params with no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:getHtmlForTrackingReportExportForm1\\(\\) has parameter \\$url_params with no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:getHtmlForTrackingReportExportForm2\\(\\) has parameter \\$url_params with no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:getHtmlForTrackingReportExportForm2\\(\\) has parameter \\$url_params with no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\:\\:getUntrackedTables\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:getUntrackedTables\\(\\) return type has no value type specified in iterable type array\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - message: "#^Offset 'statement' does not exist on array\\{date\\: string, username\\: string, statement\\: string\\}\\|string\\.$#" count: 4 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - message: "#^Offset 0 does not exist on array\\\\|string\\|null\\.$#" count: 3 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - message: "#^Offset 1 does not exist on array\\\\|string\\|null\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Parameter \\#1 \\$columns of method PhpMyAdmin\\\\Tracking\\:\\:getHtmlForColumns\\(\\) expects array, mixed given\\.$#" + message: "#^Parameter \\#1 \\$columns of method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:getHtmlForColumns\\(\\) expects array, mixed given\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - message: "#^Parameter \\#1 \\$data of static method PhpMyAdmin\\\\Core\\:\\:safeUnserialize\\(\\) expects string, array\\\\>\\|string\\|null given\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Parameter \\#1 \\$dbName of static method PhpMyAdmin\\\\Tracker\\:\\:isTracked\\(\\) expects string, string\\|null given\\.$#" + message: "#^Parameter \\#1 \\$dbName of static method PhpMyAdmin\\\\Tracking\\\\Tracker\\:\\:isTracked\\(\\) expects string, string\\|null given\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Parameter \\#1 \\$indexes of method PhpMyAdmin\\\\Tracking\\:\\:getHtmlForIndexes\\(\\) expects array, mixed given\\.$#" + message: "#^Parameter \\#1 \\$indexes of method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:getHtmlForIndexes\\(\\) expects array, mixed given\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - message: "#^Parameter \\#1 \\$str of method PhpMyAdmin\\\\DatabaseInterface\\:\\:escapeString\\(\\) expects string, string\\|null given\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - message: "#^Parameter \\#1 \\$value of function count expects array\\|Countable, mixed given\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - - message: "#^Parameter \\#2 \\$tableName of static method PhpMyAdmin\\\\Tracker\\:\\:isTracked\\(\\) expects string, string\\|null given\\.$#" + message: "#^Parameter \\#2 \\$tableName of static method PhpMyAdmin\\\\Tracking\\\\Tracker\\:\\:isTracked\\(\\) expects string, string\\|null given\\.$#" count: 1 - path: libraries/classes/Tracking.php + path: libraries/classes/Tracking/Tracking.php - message: "#^Foreach overwrites \\$file with its value variable\\.$#" @@ -10846,29 +10846,29 @@ parameters: path: test/classes/Theme/ThemeTest.php - - message: "#^Method PhpMyAdmin\\\\Tests\\\\TrackerTest\\:\\:getTableNameData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tests\\\\Tracking\\\\TrackerTest\\:\\:getTableNameData\\(\\) return type has no value type specified in iterable type array\\.$#" count: 1 - path: test/classes/TrackerTest.php + path: test/classes/Tracking/TrackerTest.php - - message: "#^Method PhpMyAdmin\\\\Tests\\\\TrackerTest\\:\\:getTrackedDataProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tests\\\\Tracking\\\\TrackerTest\\:\\:getTrackedDataProvider\\(\\) return type has no value type specified in iterable type array\\.$#" count: 1 - path: test/classes/TrackerTest.php + path: test/classes/Tracking/TrackerTest.php - - message: "#^Method PhpMyAdmin\\\\Tests\\\\TrackerTest\\:\\:parseQueryData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tests\\\\Tracking\\\\TrackerTest\\:\\:parseQueryData\\(\\) return type has no value type specified in iterable type array\\.$#" count: 1 - path: test/classes/TrackerTest.php + path: test/classes/Tracking/TrackerTest.php - - message: "#^Method PhpMyAdmin\\\\Tests\\\\TrackerTest\\:\\:testGetTrackedData\\(\\) has parameter \\$expectedArray with no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tests\\\\Tracking\\\\TrackerTest\\:\\:testGetTrackedData\\(\\) has parameter \\$expectedArray with no value type specified in iterable type array\\.$#" count: 1 - path: test/classes/TrackerTest.php + path: test/classes/Tracking/TrackerTest.php - - message: "#^Method PhpMyAdmin\\\\Tests\\\\TrackerTest\\:\\:testGetTrackedData\\(\\) has parameter \\$fetchArrayReturn with no value type specified in iterable type array\\.$#" + message: "#^Method PhpMyAdmin\\\\Tests\\\\Tracking\\\\TrackerTest\\:\\:testGetTrackedData\\(\\) has parameter \\$fetchArrayReturn with no value type specified in iterable type array\\.$#" count: 1 - path: test/classes/TrackerTest.php + path: test/classes/Tracking/TrackerTest.php - message: "#^Method PhpMyAdmin\\\\Tests\\\\TransformationsTest\\:\\:fixupData\\(\\) return type has no value type specified in iterable type array\\.$#" diff --git a/psalm-baseline.xml b/psalm-baseline.xml index 128eb2d26a..15cb8da68a 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -13644,7 +13644,7 @@ return false; - + escapeString escapeString @@ -13770,7 +13770,7 @@ getTableName - + escapeString escapeString @@ -15849,7 +15849,7 @@ array - + array array @@ -15860,7 +15860,7 @@ $fetchArrayReturn[0] - + $html diff --git a/test/classes/Controllers/Table/TrackingControllerTest.php b/test/classes/Controllers/Table/TrackingControllerTest.php index 7804ecede1..c1cdf394c4 100644 --- a/test/classes/Controllers/Table/TrackingControllerTest.php +++ b/test/classes/Controllers/Table/TrackingControllerTest.php @@ -13,7 +13,7 @@ use PhpMyAdmin\Template; use PhpMyAdmin\Tests\AbstractTestCase; use PhpMyAdmin\Tests\Stubs\DbiDummy; use PhpMyAdmin\Tests\Stubs\ResponseRenderer; -use PhpMyAdmin\Tracking; +use PhpMyAdmin\Tracking\Tracking; /** @covers \PhpMyAdmin\Controllers\Table\TrackingController */ class TrackingControllerTest extends AbstractTestCase diff --git a/test/classes/TrackerTest.php b/test/classes/Tracking/TrackerTest.php similarity index 99% rename from test/classes/TrackerTest.php rename to test/classes/Tracking/TrackerTest.php index 79c8448a78..90c0a4ace9 100644 --- a/test/classes/TrackerTest.php +++ b/test/classes/Tracking/TrackerTest.php @@ -2,18 +2,19 @@ declare(strict_types=1); -namespace PhpMyAdmin\Tests; +namespace PhpMyAdmin\Tests\Tracking; use PhpMyAdmin\Cache; use PhpMyAdmin\ConfigStorage\RelationParameters; use PhpMyAdmin\DatabaseInterface; use PhpMyAdmin\Dbal\Connection; +use PhpMyAdmin\Tests\AbstractTestCase; use PhpMyAdmin\Tests\Stubs\DummyResult; -use PhpMyAdmin\Tracker; +use PhpMyAdmin\Tracking\Tracker; use PhpMyAdmin\Util; use ReflectionMethod; -/** @covers \PhpMyAdmin\Tracker */ +/** @covers \PhpMyAdmin\Tracking\Tracker */ class TrackerTest extends AbstractTestCase { /** diff --git a/test/classes/TrackingTest.php b/test/classes/Tracking/TrackingTest.php similarity index 99% rename from test/classes/TrackingTest.php rename to test/classes/Tracking/TrackingTest.php index bb7ee60358..ea9c819aca 100644 --- a/test/classes/TrackingTest.php +++ b/test/classes/Tracking/TrackingTest.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace PhpMyAdmin\Tests; +namespace PhpMyAdmin\Tests\Tracking; use DateTimeImmutable; use PhpMyAdmin\ConfigStorage\Relation; @@ -10,7 +10,8 @@ use PhpMyAdmin\ConfigStorage\RelationParameters; use PhpMyAdmin\DatabaseInterface; use PhpMyAdmin\SqlQueryForm; use PhpMyAdmin\Template; -use PhpMyAdmin\Tracking; +use PhpMyAdmin\Tests\AbstractTestCase; +use PhpMyAdmin\Tracking\Tracking; use PhpMyAdmin\Url; use function __; @@ -22,7 +23,7 @@ use function ini_restore; use function ini_set; use function sprintf; -/** @covers \PhpMyAdmin\Tracking */ +/** @covers \PhpMyAdmin\Tracking\Tracking */ class TrackingTest extends AbstractTestCase { private Tracking $tracking; From ebbf2e8d010b8a14a8777d1e707a7527e16035bd Mon Sep 17 00:00:00 2001 From: Kamil Tekiela Date: Mon, 13 Mar 2023 21:11:18 +0000 Subject: [PATCH 2/6] Remove unused params Signed-off-by: Kamil Tekiela --- libraries/classes/Controllers/Table/TrackingController.php | 2 +- libraries/classes/Tracking/Tracking.php | 2 +- psalm-baseline.xml | 4 ---- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/libraries/classes/Controllers/Table/TrackingController.php b/libraries/classes/Controllers/Table/TrackingController.php index 6e8d95b7ee..96ec279dac 100644 --- a/libraries/classes/Controllers/Table/TrackingController.php +++ b/libraries/classes/Controllers/Table/TrackingController.php @@ -209,7 +209,7 @@ final class TrackingController extends AbstractController $message = $GLOBALS['msg']->getDisplay(); } elseif ($reportExport === 'sqldump') { $this->addScriptFiles(['sql.js']); - $sqlDump = $this->tracking->exportAsSqlDump($GLOBALS['db'], $GLOBALS['table'], $GLOBALS['entries']); + $sqlDump = $this->tracking->exportAsSqlDump($GLOBALS['entries']); } $schemaSnapshot = ''; diff --git a/libraries/classes/Tracking/Tracking.php b/libraries/classes/Tracking/Tracking.php index 0a3583ea9a..dd1dbb5aac 100644 --- a/libraries/classes/Tracking/Tracking.php +++ b/libraries/classes/Tracking/Tracking.php @@ -781,7 +781,7 @@ class Tracking * * @return string HTML SQL query form */ - public function exportAsSqlDump(string $db, string $table, array $entries): string + public function exportAsSqlDump(array $entries): string { $html = ''; $new_query = '# ' diff --git a/psalm-baseline.xml b/psalm-baseline.xml index 15cb8da68a..29feb7e358 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -13879,10 +13879,6 @@ - - $db - $table - $delete_id From 924fcc79f98225a60521bad6f3cc984438e1dae2 Mon Sep 17 00:00:00 2001 From: Kamil Tekiela Date: Mon, 13 Mar 2023 21:22:41 +0000 Subject: [PATCH 3/6] Refactor logic for getting Tracking status Signed-off-by: Kamil Tekiela --- .../Database/StructureController.php | 15 +-- libraries/classes/Tracking/TrackedTable.php | 12 ++ libraries/classes/Tracking/Tracker.php | 5 +- libraries/classes/Tracking/Tracking.php | 45 +------ .../classes/Tracking/TrackingChecker.php | 84 +++++++++++++ libraries/classes/Util.php | 118 ------------------ libraries/services.php | 8 ++ libraries/services_controllers.php | 1 + phpstan-baseline.neon | 25 ---- psalm-baseline.xml | 74 +---------- .../Database/StructureControllerTest.php | 9 ++ .../Table/TrackingControllerTest.php | 9 +- test/classes/Stubs/DbiDummy.php | 16 +++ test/classes/Tracking/TrackingCheckerTest.php | 79 ++++++++++++ test/classes/Tracking/TrackingTest.php | 27 +--- 15 files changed, 237 insertions(+), 290 deletions(-) create mode 100644 libraries/classes/Tracking/TrackedTable.php create mode 100644 libraries/classes/Tracking/TrackingChecker.php create mode 100644 test/classes/Tracking/TrackingCheckerTest.php diff --git a/libraries/classes/Controllers/Database/StructureController.php b/libraries/classes/Controllers/Database/StructureController.php index 5811f01582..a72e69aa96 100644 --- a/libraries/classes/Controllers/Database/StructureController.php +++ b/libraries/classes/Controllers/Database/StructureController.php @@ -20,7 +20,9 @@ use PhpMyAdmin\ResponseRenderer; use PhpMyAdmin\Sanitize; use PhpMyAdmin\StorageEngine; use PhpMyAdmin\Template; +use PhpMyAdmin\Tracking\TrackedTable; use PhpMyAdmin\Tracking\Tracker; +use PhpMyAdmin\Tracking\TrackingChecker; use PhpMyAdmin\Url; use PhpMyAdmin\Util; @@ -74,6 +76,7 @@ class StructureController extends AbstractController private Relation $relation, private Replication $replication, private DatabaseInterface $dbi, + private TrackingChecker $trackingChecker, ) { parent::__construct($response, $template); @@ -221,6 +224,7 @@ class StructureController extends AbstractController $hiddenFields = []; $overallApproxRows = false; $structureTableRows = []; + $trackedTables = $this->trackingChecker->getTrackedTables($GLOBALS['db']); foreach ($this->tables as $currentTable) { // Get valid statistics whatever is the table type @@ -396,7 +400,7 @@ class StructureController extends AbstractController ), ), ), - 'tracking_icon' => $this->getTrackingIcon($truename), + 'tracking_icon' => $this->getTrackingIcon($truename, $trackedTables[$truename] ?? null), 'server_replica_status' => $replicaInfo['status'], 'table_url_params' => $tableUrlParams, 'db_is_system_schema' => $this->dbIsSystemSchema, @@ -500,20 +504,17 @@ class StructureController extends AbstractController /** * Returns the tracking icon if the table is tracked * - * @param string $table table name - * * @return string HTML for tracking icon */ - protected function getTrackingIcon(string $table): string + protected function getTrackingIcon(string $table, TrackedTable|null $trackedTable): string { $trackingIcon = ''; if (Tracker::isActive()) { - $isTracked = Tracker::isTracked($GLOBALS['db'], $table); - if ($isTracked || Tracker::getVersion($GLOBALS['db'], $table) > 0) { + if ($trackedTable !== null) { $trackingIcon = $this->template->render('database/structure/tracking_icon', [ 'db' => $GLOBALS['db'], 'table' => $table, - 'is_tracked' => $isTracked, + 'is_tracked' => $trackedTable->active, ]); } } diff --git a/libraries/classes/Tracking/TrackedTable.php b/libraries/classes/Tracking/TrackedTable.php new file mode 100644 index 0000000000..6cfe93f7a7 --- /dev/null +++ b/libraries/classes/Tracking/TrackedTable.php @@ -0,0 +1,12 @@ + 0 if a version exists) */ - public static function getVersion(string $dbname, string $tablename, string|null $statement = null): int + private static function getVersion(string $dbname, string $tablename, string|null $statement = null): int { $relation = new Relation($GLOBALS['dbi']); $trackingFeature = $relation->getRelationParameters()->trackingFeature; @@ -803,8 +803,6 @@ class Tracker */ public static function handleQuery(string $query): void { - $relation = new Relation($GLOBALS['dbi']); - // If query is marked as untouchable, leave if (mb_strstr($query, '/*NOTRACK*/')) { return; @@ -884,6 +882,7 @@ class Tracker // Add log information $query = self::getLogComment() . $query; + $relation = new Relation($GLOBALS['dbi']); $trackingFeature = $relation->getRelationParameters()->trackingFeature; if ($trackingFeature === null) { return; diff --git a/libraries/classes/Tracking/Tracking.php b/libraries/classes/Tracking/Tracking.php index dd1dbb5aac..b535d9e75c 100644 --- a/libraries/classes/Tracking/Tracking.php +++ b/libraries/classes/Tracking/Tracking.php @@ -20,7 +20,6 @@ use PhpMyAdmin\Url; use PhpMyAdmin\Util; use function __; -use function array_key_exists; use function array_merge; use function array_multisort; use function count; @@ -28,7 +27,6 @@ use function date; use function htmlspecialchars; use function in_array; use function ini_set; -use function is_array; use function json_encode; use function mb_strstr; use function preg_replace; @@ -48,6 +46,7 @@ class Tracking public Template $template, protected Relation $relation, private DatabaseInterface $dbi, + private TrackingChecker $trackingChecker, ) { } @@ -1089,7 +1088,7 @@ class Tracking . '\' GROUP BY table_name ORDER BY table_name ASC'; $allTablesResult = $this->dbi->queryAsControlUser($allTablesQuery); - $untrackedTables = $this->getUntrackedTables($db); + $untrackedTables = $this->trackingChecker->getUntrackedTableNames($db); // If a HEAD version exists $versions = []; @@ -1114,44 +1113,4 @@ class Tracking 'untracked_tables' => $untrackedTables, ]); } - - /** - * Helper function: Recursive function for getting table names from $table_list - * - * @param array $table_list Table list - * @param string $db Current database - * - * @return array - */ - public function extractTableNames(array $table_list, string $db): array - { - $untracked_tables = []; - $sep = $GLOBALS['cfg']['NavigationTreeTableSeparator']; - - foreach ($table_list as $value) { - if (is_array($value) && array_key_exists('is' . $sep . 'group', $value) && $value['is' . $sep . 'group']) { - // Recursion step - $untracked_tables = array_merge($this->extractTableNames($value, $db), $untracked_tables); - } elseif (is_array($value) && (Tracker::getVersion($db, $value['Name']) == -1)) { - $untracked_tables[] = $value['Name']; - } - } - - return $untracked_tables; - } - - /** - * Get untracked tables - * - * @param string $db current database - * - * @return array - */ - public function getUntrackedTables(string $db): array - { - $table_list = Util::getTableList($db); - - //Use helper function to get table list recursively. - return $this->extractTableNames($table_list, $db); - } } diff --git a/libraries/classes/Tracking/TrackingChecker.php b/libraries/classes/Tracking/TrackingChecker.php new file mode 100644 index 0000000000..58b3a27e9b --- /dev/null +++ b/libraries/classes/Tracking/TrackingChecker.php @@ -0,0 +1,84 @@ +trackingFeature = $relation->getRelationParameters()->trackingFeature; + } + + /** + * Get a list of untracked tables. + * Deactivated tracked tables are not included in the list. + * + * @return array + */ + public function getUntrackedTableNames(string $dbName): array + { + $tableList = $this->dbi->getTables($dbName, Connection::TYPE_CONTROL); + + if ($this->trackingFeature === null) { + return $tableList; + } + + $trackedTables = array_column($this->getTrackedTables($dbName), 'name'); + + return array_values(array_diff($tableList, $trackedTables)); + } + + /** @return TrackedTable[] */ + public function getTrackedTables(string $dbName): array + { + $trackingEnabled = Cache::get(Tracker::TRACKER_ENABLED_CACHE_KEY, false); + if (! $trackingEnabled) { + return []; + } + + if ($this->trackingFeature === null) { + return []; + } + + $sqlQuery = sprintf( + "SELECT table_name, tracking_active + FROM ( + SELECT table_name, MAX(version) version + FROM %s.%s WHERE db_name = %s AND table_name <> '' + GROUP BY table_name + ) filtered_tables + JOIN %s.%s USING(table_name, version)", + Util::backquote($this->trackingFeature->database), + Util::backquote($this->trackingFeature->tracking), + $this->dbi->quoteString($dbName, Connection::TYPE_CONTROL), + Util::backquote($this->trackingFeature->database), + Util::backquote($this->trackingFeature->tracking), + ); + + $trackedTables = []; + foreach ($this->dbi->queryAsControlUser($sqlQuery) as $row) { + $trackedTable = new TrackedTable((string) $row['table_name'], (bool) $row['tracking_active']); + $trackedTables[$trackedTable->name] = $trackedTable; + } + + return $trackedTables; + } +} diff --git a/libraries/classes/Util.php b/libraries/classes/Util.php index e7007e2ebb..0b1a168012 100644 --- a/libraries/classes/Util.php +++ b/libraries/classes/Util.php @@ -8,7 +8,6 @@ use PhpMyAdmin\Dbal\ResultInterface; use PhpMyAdmin\Html\Generator; use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\Query\Compatibility; -use PhpMyAdmin\Query\Utilities; use PhpMyAdmin\SqlParser\Components\Expression; use PhpMyAdmin\SqlParser\Context; use PhpMyAdmin\SqlParser\Token; @@ -20,7 +19,6 @@ use function _pgettext; use function abs; use function array_key_exists; use function array_map; -use function array_merge; use function array_shift; use function array_unique; use function bin2hex; @@ -53,7 +51,6 @@ use function mb_detect_encoding; use function mb_strlen; use function mb_strpos; use function mb_strrpos; -use function mb_strstr; use function mb_strtolower; use function mb_substr; use function number_format; @@ -222,121 +219,6 @@ class Util return self::getMySQLDocuURL(''); } - /** - * Check the correct row count - * - * @param string $db the db name - * @param array $table the table infos - * - * @return int the possibly modified row count - */ - private static function checkRowCount(string $db, array $table): int - { - $rowCount = 0; - - if ($table['Rows'] === null) { - // Do not check exact row count here, - // if row count is invalid possibly the table is defect - // and this would break the navigation panel; - // but we can check row count if this is a view or the - // information_schema database - // since Table::countRecords() returns a limited row count - // in this case. - - // set this because Table::countRecords() can use it - $tableIsView = $table['TABLE_TYPE'] === 'VIEW'; - - if ($tableIsView || Utilities::isSystemSchema($db)) { - $rowCount = $GLOBALS['dbi'] - ->getTable($db, $table['Name']) - ->countRecords(); - } - } - - return $rowCount; - } - - /** - * returns array with tables of given db with extended information and grouped - * - * @return array (recursive) grouped table list - */ - public static function getTableList(string $db): array - { - $sep = $GLOBALS['cfg']['NavigationTreeTableSeparator']; - - $tables = $GLOBALS['dbi']->getTablesFull($db); - - if ($GLOBALS['cfg']['NaturalOrder']) { - uksort($tables, 'strnatcasecmp'); - } - - if (count($tables) < 1) { - return $tables; - } - - $default = [ - 'Name' => '', - 'Rows' => 0, - 'Comment' => '', - 'disp_name' => '', - ]; - - $tableGroups = []; - - foreach ($tables as $table) { - /** @var string $tableName */ - $tableName = $table['TABLE_NAME']; - $table['Rows'] = self::checkRowCount($db, $table); - - // in $group we save the reference to the place in $table_groups - // where to store the table info - if ($GLOBALS['cfg']['NavigationTreeEnableGrouping'] && $sep && mb_strstr($tableName, $sep)) { - $parts = explode($sep, $tableName); - - $group =& $tableGroups; - $i = 0; - $groupNameFull = ''; - $partsCount = count($parts) - 1; - - while (($i < $partsCount) && ($i < $GLOBALS['cfg']['NavigationTreeTableLevel'])) { - $groupName = $parts[$i] . $sep; - $groupNameFull .= $groupName; - - if (! isset($group[$groupName])) { - $group[$groupName] = []; - $group[$groupName]['is' . $sep . 'group'] = true; - $group[$groupName]['tab' . $sep . 'count'] = 1; - $group[$groupName]['tab' . $sep . 'group'] = $groupNameFull; - } elseif (! isset($group[$groupName]['is' . $sep . 'group'])) { - $table = $group[$groupName]; - $group[$groupName] = []; - $group[$groupName][$groupName] = $table; - $group[$groupName]['is' . $sep . 'group'] = true; - $group[$groupName]['tab' . $sep . 'count'] = 1; - $group[$groupName]['tab' . $sep . 'group'] = $groupNameFull; - } else { - $group[$groupName]['tab' . $sep . 'count']++; - } - - $group =& $group[$groupName]; - $i++; - } - } else { - if (! isset($tableGroups[$tableName])) { - $tableGroups[$tableName] = []; - } - - $group =& $tableGroups; - } - - $table['disp_name'] = $table['Name']; - $group[$tableName] = array_merge($default, $table); - } - - return $tableGroups; - } - /* ----------------------- Set of misc functions ----------------------- */ /** diff --git a/libraries/services.php b/libraries/services.php index d5b17cbc7f..3b6bfb6dd3 100644 --- a/libraries/services.php +++ b/libraries/services.php @@ -242,6 +242,14 @@ return [ '$template' => '@template', '$relation' => '@relation', '$dbi' => '@dbi', + '$trackingChecker' => '@tracking_checker', + ], + ], + 'tracking_checker' => [ + 'class' => PhpMyAdmin\Tracking\TrackingChecker::class, + 'arguments' => [ + '$dbi' => '@dbi', + '$relation' => '@relation', ], ], 'transformations' => [ diff --git a/libraries/services_controllers.php b/libraries/services_controllers.php index c2c5b0bf93..a604df0c0a 100644 --- a/libraries/services_controllers.php +++ b/libraries/services_controllers.php @@ -422,6 +422,7 @@ return [ '$relation' => '@relation', '$replication' => '@replication', '$dbi' => '@dbi', + '$trackingChecker' => '@tracking_checker', ], ], Database\TrackingController::class => [ diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index d8ab541c65..1159060973 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -8550,16 +8550,6 @@ parameters: count: 1 path: libraries/classes/Tracking/Tracking.php - - - message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:extractTableNames\\(\\) has parameter \\$table_list with no value type specified in iterable type array\\.$#" - count: 1 - path: libraries/classes/Tracking/Tracking.php - - - - message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:extractTableNames\\(\\) return type has no value type specified in iterable type array\\.$#" - count: 1 - path: libraries/classes/Tracking/Tracking.php - - message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:filter\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" count: 1 @@ -8705,11 +8695,6 @@ parameters: count: 1 path: libraries/classes/Tracking/Tracking.php - - - message: "#^Method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:getUntrackedTables\\(\\) return type has no value type specified in iterable type array\\.$#" - count: 1 - path: libraries/classes/Tracking/Tracking.php - - message: "#^Offset 'statement' does not exist on array\\{date\\: string, username\\: string, statement\\: string\\}\\|string\\.$#" count: 4 @@ -8870,11 +8855,6 @@ parameters: count: 1 path: libraries/classes/Util.php - - - message: "#^Method PhpMyAdmin\\\\Util\\:\\:checkRowCount\\(\\) has parameter \\$table with no value type specified in iterable type array\\.$#" - count: 1 - path: libraries/classes/Util.php - - message: "#^Method PhpMyAdmin\\\\Util\\:\\:extractColumnSpec\\(\\) return type has no value type specified in iterable type array\\.$#" count: 1 @@ -8900,11 +8880,6 @@ parameters: count: 1 path: libraries/classes/Util.php - - - message: "#^Method PhpMyAdmin\\\\Util\\:\\:getTableList\\(\\) return type has no value type specified in iterable type array\\.$#" - count: 1 - path: libraries/classes/Util.php - - message: "#^Method PhpMyAdmin\\\\Util\\:\\:getTablesWhenOpen\\(\\) return type has no value type specified in iterable type array\\.$#" count: 1 diff --git a/psalm-baseline.xml b/psalm-baseline.xml index 29feb7e358..279e4a576c 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -13797,7 +13797,6 @@ $indexes $selected_table $selected_table - $statements[$key] $temp $timestamps[$key] - $untracked_tables[] $usernames[$key] - $value string @@ -13858,14 +13855,6 @@ $html - - $sep - $sep - - - $sep - $sep - @@ -13883,6 +13872,11 @@ $delete_id + + + $trackingEnabled + + escapeString @@ -14029,27 +14023,18 @@ $byteUnits[$d] $units[$d] - - $tableGroups - $maxSize $maxUnit $row[$i] ?? null - $table - $table - $columnNames - $array[$p] - $group[$groupName] - @@ -14069,27 +14054,11 @@ - - - $group[$groupName] - $group[$groupName] - $group[$groupName] - $group[$groupName] - $group[$groupName] - $group[$groupName] - $group[$groupName] - $group[$groupName] - $group[$groupName] - $group[$groupName] - - $group[$tableName] - $tableGroups[$tableName] - $array[$p] @@ -14108,8 +14077,6 @@ $array $columnNames[] $columnNames[] - $group[$groupName][$groupName] - @@ -14120,18 +14087,13 @@ $p $p $row - $table - $table - $unit $value - array int - $unit $unit @@ -14139,7 +14101,6 @@ - $tableGroups @@ -14147,34 +14108,9 @@ - - $sep - $sep - - - $group[$groupName] - $group[$groupName] - $group[$groupName] - $group[$groupName] - $group[$tableName] - $tableGroups[$tableName] - - - $sep - $sep - - $sep - $sep - $sep - $sep - $sep - $sep - $sep - $sep - $sep $maxSize diff --git a/test/classes/Controllers/Database/StructureControllerTest.php b/test/classes/Controllers/Database/StructureControllerTest.php index 8802d0b699..970bde02fc 100644 --- a/test/classes/Controllers/Database/StructureControllerTest.php +++ b/test/classes/Controllers/Database/StructureControllerTest.php @@ -13,6 +13,7 @@ use PhpMyAdmin\Table; use PhpMyAdmin\Template; use PhpMyAdmin\Tests\AbstractTestCase; use PhpMyAdmin\Tests\Stubs\ResponseRenderer as ResponseStub; +use PhpMyAdmin\Tracking\TrackingChecker; use ReflectionClass; use ReflectionException; @@ -78,6 +79,7 @@ class StructureControllerTest extends AbstractTestCase $this->relation, $this->replication, $GLOBALS['dbi'], + $this->createStub(TrackingChecker::class), ); // Showing statistics $property = $class->getProperty('isShowStats'); @@ -121,6 +123,7 @@ class StructureControllerTest extends AbstractTestCase $this->relation, $this->replication, $GLOBALS['dbi'], + $this->createStub(TrackingChecker::class), ); $currentTable['ENGINE'] = 'InnoDB'; @@ -148,6 +151,7 @@ class StructureControllerTest extends AbstractTestCase $this->relation, $this->replication, $GLOBALS['dbi'], + $this->createStub(TrackingChecker::class), ); // Showing statistics $property = $class->getProperty('isShowStats'); @@ -198,6 +202,7 @@ class StructureControllerTest extends AbstractTestCase $this->relation, $this->replication, $GLOBALS['dbi'], + $this->createStub(TrackingChecker::class), ); [$currentTable, , , , , , $sumSize] = $method->invokeArgs( $controller, @@ -219,6 +224,7 @@ class StructureControllerTest extends AbstractTestCase $this->relation, $this->replication, $GLOBALS['dbi'], + $this->createStub(TrackingChecker::class), ); [$currentTable] = $method->invokeArgs( $controller, @@ -249,6 +255,7 @@ class StructureControllerTest extends AbstractTestCase $this->relation, $this->replication, $GLOBALS['dbi'], + $this->createStub(TrackingChecker::class), ); // When parameter $db is empty @@ -283,6 +290,7 @@ class StructureControllerTest extends AbstractTestCase $this->relation, $this->replication, $GLOBALS['dbi'], + $this->createStub(TrackingChecker::class), ); $_SESSION['tmpval']['favoriteTables'][$GLOBALS['server']] = [ @@ -313,6 +321,7 @@ class StructureControllerTest extends AbstractTestCase $this->relation, $this->replication, $GLOBALS['dbi'], + $this->createStub(TrackingChecker::class), ); // Showing statistics $class = new ReflectionClass(StructureController::class); diff --git a/test/classes/Controllers/Table/TrackingControllerTest.php b/test/classes/Controllers/Table/TrackingControllerTest.php index c1cdf394c4..8da1388b21 100644 --- a/test/classes/Controllers/Table/TrackingControllerTest.php +++ b/test/classes/Controllers/Table/TrackingControllerTest.php @@ -14,6 +14,7 @@ use PhpMyAdmin\Tests\AbstractTestCase; use PhpMyAdmin\Tests\Stubs\DbiDummy; use PhpMyAdmin\Tests\Stubs\ResponseRenderer; use PhpMyAdmin\Tracking\Tracking; +use PhpMyAdmin\Tracking\TrackingChecker; /** @covers \PhpMyAdmin\Controllers\Table\TrackingController */ class TrackingControllerTest extends AbstractTestCase @@ -47,7 +48,13 @@ class TrackingControllerTest extends AbstractTestCase (new TrackingController( $response, $template, - new Tracking(new SqlQueryForm($template, $this->dbi), $template, new Relation($this->dbi), $this->dbi), + new Tracking( + new SqlQueryForm($template, $this->dbi), + $template, + new Relation($this->dbi), + $this->dbi, + $this->createStub(TrackingChecker::class), + ), ))($this->createStub(ServerRequest::class)); $main = $template->render('table/tracking/main', [ diff --git a/test/classes/Stubs/DbiDummy.php b/test/classes/Stubs/DbiDummy.php index c72b3df4aa..76a3553d56 100644 --- a/test/classes/Stubs/DbiDummy.php +++ b/test/classes/Stubs/DbiDummy.php @@ -2360,6 +2360,22 @@ class DbiDummy implements DbiExtension 'columns' => ['tracking_active'], 'result' => [['1']], ], + [ + 'query' => 'SELECT table_name, tracking_active ' + . 'FROM ( ' + . 'SELECT table_name, MAX(version) version ' + . "FROM `pmadb`.`tracking` WHERE db_name = 'dummyDb' AND table_name <> '' " + . 'GROUP BY table_name ' + . ') filtered_tables ' + . 'JOIN `pmadb`.`tracking` USING(table_name, version)', + 'columns' => ['table_name', 'tracking_active'], + 'result' => [['0', '1'],['actor', '0']], + ], + [ + 'query' => 'SHOW TABLES FROM `dummyDb`;', + 'columns' => ['Tables_in_dummyDb'], + 'result' => [['0'], ['actor'], ['untrackedTable']], + ], [ 'query' => 'SHOW TABLE STATUS FROM `PMA_db` WHERE `Name` LIKE \'PMA\\\\_table%\'', 'columns' => ['Name', 'Engine'], diff --git a/test/classes/Tracking/TrackingCheckerTest.php b/test/classes/Tracking/TrackingCheckerTest.php new file mode 100644 index 0000000000..704247f4cb --- /dev/null +++ b/test/classes/Tracking/TrackingCheckerTest.php @@ -0,0 +1,79 @@ +createDatabaseInterface(); + + $_SESSION['relation'] = []; + $_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([ + 'db' => 'pmadb', + 'tracking' => 'tracking', + 'trackingwork' => true, + ])->toArray(); + + $this->trackingChecker = new TrackingChecker( + $GLOBALS['dbi'], + new Relation($GLOBALS['dbi']), + ); + } + + public function testGetTrackedTables(): void + { + $this->assertFalse( + Cache::has(Tracker::TRACKER_ENABLED_CACHE_KEY), + ); + + $actual = $this->trackingChecker->getTrackedTables('dummyDb'); + $this->assertEquals([], $actual); + + Tracker::enable(); + + $expectation = [ + 0 => new TrackedTable('0', true), + 'actor' => new TrackedTable('actor', false), + ]; + + $actual = $this->trackingChecker->getTrackedTables('dummyDb'); + + $this->assertEquals($expectation, $actual); + } + + public function testGetUntrackedTableNames(): void + { + $this->assertFalse( + Cache::has(Tracker::TRACKER_ENABLED_CACHE_KEY), + ); + + $expectation = ['0', 'actor', 'untrackedTable']; + $actual = $this->trackingChecker->getUntrackedTableNames('dummyDb'); + $this->assertEquals($expectation, $actual); + + Tracker::enable(); + + $expectation = ['untrackedTable']; + $actual = $this->trackingChecker->getUntrackedTableNames('dummyDb'); + $this->assertEquals($expectation, $actual); + } +} diff --git a/test/classes/Tracking/TrackingTest.php b/test/classes/Tracking/TrackingTest.php index ea9c819aca..3ea8cdb6b2 100644 --- a/test/classes/Tracking/TrackingTest.php +++ b/test/classes/Tracking/TrackingTest.php @@ -12,6 +12,7 @@ use PhpMyAdmin\SqlQueryForm; use PhpMyAdmin\Template; use PhpMyAdmin\Tests\AbstractTestCase; use PhpMyAdmin\Tracking\Tracking; +use PhpMyAdmin\Tracking\TrackingChecker; use PhpMyAdmin\Url; use function __; @@ -60,6 +61,7 @@ class TrackingTest extends AbstractTestCase $template, new Relation($GLOBALS['dbi']), $GLOBALS['dbi'], + $this->createStub(TrackingChecker::class), ); } @@ -93,30 +95,6 @@ class TrackingTest extends AbstractTestCase $this->assertEquals('statement1', $ret[0]['statement']); } - /** - * Tests for extractTableNames() method from nested table_list. - */ - public function testExtractTableNames(): void - { - $GLOBALS['cfg']['NavigationTreeTableSeparator'] = '_'; - - $table_list = [ - 'hello_' => [ - 'is_group' => 1, - 'lovely_' => [ - 'is_group' => 1, - 'hello_lovely_world' => ['Name' => 'hello_lovely_world'], - 'hello_lovely_world2' => ['Name' => 'hello_lovely_world2'], - ], - 'hello_world' => ['Name' => 'hello_world'], - ], - ]; - $untracked_tables = $this->tracking->extractTableNames($table_list, 'db'); - $this->assertContains('hello_world', $untracked_tables); - $this->assertContains('hello_lovely_world', $untracked_tables); - $this->assertNotContains('hello_lovely_world2', $untracked_tables); - } - public function testGetHtmlForMain(): void { $html = $this->tracking->getHtmlForMainPage('PMA_db', 'PMA_table', [], 'ltr'); @@ -596,6 +574,7 @@ class TrackingTest extends AbstractTestCase $this->createStub(Template::class), $this->createStub(Relation::class), $this->createStub(DatabaseInterface::class), + $this->createStub(TrackingChecker::class), ); ini_set('url_rewriter.tags', 'a=href,area=href,frame=src,form=,fieldset='); $entries = [['statement' => 'first statement'], ['statement' => 'second statement']]; From 938dd6f7f8409c0d78862b5833b008a7df42242e Mon Sep 17 00:00:00 2001 From: Kamil Tekiela Date: Tue, 14 Mar 2023 01:04:22 +0000 Subject: [PATCH 4/6] Remove getSqlResultForSelectableTables Signed-off-by: Kamil Tekiela --- libraries/classes/Tracking/Tracking.php | 33 +------------------ phpstan-baseline.neon | 10 ------ psalm-baseline.xml | 3 -- templates/table/tracking/main.twig | 10 +++--- .../Table/TrackingControllerTest.php | 1 - test/classes/Stubs/DbiDummy.php | 6 ---- test/classes/Tracking/TrackingTest.php | 14 ++------ 7 files changed, 8 insertions(+), 69 deletions(-) diff --git a/libraries/classes/Tracking/Tracking.php b/libraries/classes/Tracking/Tracking.php index b535d9e75c..8c2e4e46c4 100644 --- a/libraries/classes/Tracking/Tracking.php +++ b/libraries/classes/Tracking/Tracking.php @@ -123,18 +123,6 @@ class Tracking string $textDir, int|null $lastVersion = null, ): string { - $selectableTablesSqlResult = $this->getSqlResultForSelectableTables($db); - $selectableTablesEntries = []; - $selectableTablesNumRows = 0; - if ($selectableTablesSqlResult !== false) { - foreach ($selectableTablesSqlResult as $entry) { - $entry['is_tracked'] = Tracker::isTracked($entry['db_name'], $entry['table_name']); - $selectableTablesEntries[] = $entry; - } - - $selectableTablesNumRows = $selectableTablesSqlResult->numRows(); - } - $versionSqlResult = $this->getListOfVersionsOfTable($db, $table); if ($lastVersion === null && $versionSqlResult !== false) { $lastVersion = $this->getTableLastVersionNumber($versionSqlResult); @@ -151,8 +139,7 @@ class Tracking 'url_params' => $urlParams, 'db' => $db, 'table' => $table, - 'selectable_tables_num_rows' => $selectableTablesNumRows, - 'selectable_tables_entries' => $selectableTablesEntries, + 'selectable_tables_entries' => $this->trackingChecker->getTrackedTables($db), 'selected_table' => $_POST['table'] ?? null, 'last_version' => $lastVersion, 'versions' => $versions, @@ -170,24 +157,6 @@ class Tracking return (int) $result->fetchValue('version'); } - /** - * Function to get sql results for selectable tables - */ - public function getSqlResultForSelectableTables(string $db): ResultInterface|false - { - $trackingFeature = $this->relation->getRelationParameters()->trackingFeature; - if ($trackingFeature === null) { - return false; - } - - $sql_query = ' SELECT DISTINCT db_name, table_name FROM ' - . Util::backquote($trackingFeature->database) . '.' . Util::backquote($trackingFeature->tracking) - . " WHERE db_name = '" . $this->dbi->escapeString($db) . "' " - . ' ORDER BY db_name, table_name'; - - return $this->dbi->queryAsControlUser($sql_query); - } - /** * Function to get html for tracking report and tracking report export * diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 1159060973..0a0eb52423 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -8720,11 +8720,6 @@ parameters: count: 1 path: libraries/classes/Tracking/Tracking.php - - - message: "#^Parameter \\#1 \\$dbName of static method PhpMyAdmin\\\\Tracking\\\\Tracker\\:\\:isTracked\\(\\) expects string, string\\|null given\\.$#" - count: 1 - path: libraries/classes/Tracking/Tracking.php - - message: "#^Parameter \\#1 \\$indexes of method PhpMyAdmin\\\\Tracking\\\\Tracking\\:\\:getHtmlForIndexes\\(\\) expects array, mixed given\\.$#" count: 1 @@ -8740,11 +8735,6 @@ parameters: count: 1 path: libraries/classes/Tracking/Tracking.php - - - message: "#^Parameter \\#2 \\$tableName of static method PhpMyAdmin\\\\Tracking\\\\Tracker\\:\\:isTracked\\(\\) expects string, string\\|null given\\.$#" - count: 1 - path: libraries/classes/Tracking/Tracking.php - - message: "#^Foreach overwrites \\$file with its value variable\\.$#" count: 1 diff --git a/psalm-baseline.xml b/psalm-baseline.xml index 279e4a576c..bc2faaaffb 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -13777,7 +13777,6 @@ escapeString escapeString escapeString - escapeString $columns @@ -13857,8 +13856,6 @@ - - $tableName diff --git a/templates/table/tracking/main.twig b/templates/table/tracking/main.twig index 899f40abc2..a3c101b018 100644 --- a/templates/table/tracking/main.twig +++ b/templates/table/tracking/main.twig @@ -1,12 +1,12 @@ -{% if selectable_tables_num_rows > 0 %} +{% if selectable_tables_entries|length > 0 %}
{{ get_hidden_inputs(db, table) }}