diff --git a/libraries/classes/Tracking/LogTypeEnum.php b/libraries/classes/Tracking/LogTypeEnum.php new file mode 100644 index 0000000000..5e4e5ab266 --- /dev/null +++ b/libraries/classes/Tracking/LogTypeEnum.php @@ -0,0 +1,39 @@ + 'schema_sql', + LogTypeEnum::DML => 'data_sql', + }; + } + + /** @psalm-return literal-string */ + public function getLogName(): string + { + return match ($this) { + LogTypeEnum::DDL => 'ddlog', + LogTypeEnum::DML => 'dmlog', + }; + } + + public function getSuccessMessage(): string + { + return match ($this) { + LogTypeEnum::DDL => __('Tracking data definition successfully deleted'), + LogTypeEnum::DML => __('Tracking data manipulation successfully deleted'), + }; + } +} diff --git a/libraries/classes/Tracking/Tracking.php b/libraries/classes/Tracking/Tracking.php index 547f0ae9a4..0542da0e1e 100644 --- a/libraries/classes/Tracking/Tracking.php +++ b/libraries/classes/Tracking/Tracking.php @@ -810,28 +810,12 @@ class Tracking $html = ''; if ($deleteDdlog) { // Delete ddlog row data - $html .= $this->deleteFromTrackingReportLog( - $db, - $table, - $version, - $data, - 'ddlog', - 'DDL', - __('Tracking data definition successfully deleted'), - ); + $html .= $this->deleteFromTrackingReportLog($db, $table, $version, $data, LogTypeEnum::DDL); } if ($deleteDmlog) { // Delete dmlog row data - $html .= $this->deleteFromTrackingReportLog( - $db, - $table, - $version, - $data, - 'dmlog', - 'DML', - __('Tracking data manipulation successfully deleted'), - ); + $html .= $this->deleteFromTrackingReportLog($db, $table, $version, $data, LogTypeEnum::DML); } return $html; @@ -840,10 +824,8 @@ class Tracking /** * Function to delete from a tracking report log * - * @param mixed[] $data tracked data - * @param string $whichLog ddlog|dmlog - * @param string $type DDL|DML - * @param string $message success message + * @param mixed[] $data tracked data + * @param LogTypeEnum $logType DDL|DML * * @return string HTML for the message */ @@ -852,20 +834,19 @@ class Tracking string $table, string $version, array &$data, - string $whichLog, - string $type, - string $message, + LogTypeEnum $logType, ): string { $html = ''; + $whichLog = $logType->getLogName(); $deleteId = $_POST['delete_' . $whichLog]; // Only in case of valid id if ($deleteId == (int) $deleteId) { unset($data[$whichLog][$deleteId]); - $successfullyDeleted = $this->changeTrackingData($db, $table, $version, $type, $data[$whichLog]); + $successfullyDeleted = $this->changeTrackingData($db, $table, $version, $logType, $data[$whichLog]); if ($successfullyDeleted) { - $msg = Message::success($message); + $msg = Message::success($logType->getSuccessMessage()); } else { $msg = Message::rawError(__('Query error')); } @@ -882,24 +863,16 @@ class Tracking * @param string $dbName name of database * @param string $tableName name of table * @param string $version version - * @param string $type type of data(DDL || DML) + * @param LogTypeEnum $logType type of data(DDL || DML) * @param string|mixed[] $newData the new tracking data */ public function changeTrackingData( string $dbName, string $tableName, string $version, - string $type, + LogTypeEnum $logType, string|array $newData, ): bool { - if ($type === 'DDL') { - $saveTo = 'schema_sql'; - } elseif ($type === 'DML') { - $saveTo = 'data_sql'; - } else { - return false; - } - $date = Util::date('Y-m-d H:i:s'); $newDataProcessed = ''; @@ -920,7 +893,7 @@ class Tracking 'UPDATE %s.%s SET `%s` = %s WHERE `db_name` = %s AND `table_name` = %s AND `version` = %s', Util::backquote($trackingFeature->database), Util::backquote($trackingFeature->tracking), - $saveTo, + $logType->getColumnName(), $this->dbi->quoteString($newDataProcessed, Connection::TYPE_CONTROL), $this->dbi->quoteString($dbName, Connection::TYPE_CONTROL), $this->dbi->quoteString($tableName, Connection::TYPE_CONTROL), diff --git a/test/classes/Tracking/TrackingTest.php b/test/classes/Tracking/TrackingTest.php index 4f26b5f03c..89791bb19c 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\Tests\Stubs\DummyResult; +use PhpMyAdmin\Tracking\LogTypeEnum; use PhpMyAdmin\Tracking\Tracking; use PhpMyAdmin\Tracking\TrackingChecker; use PhpMyAdmin\Url; @@ -586,10 +587,6 @@ class TrackingTest extends AbstractTestCase */ public function testChangeTrackingData(): void { - $this->assertFalse( - $this->tracking->changeTrackingData('', '', '', '', ''), - ); - $dbi = $this->getMockBuilder(DatabaseInterface::class) ->disableOriginalConstructor() ->getMock(); @@ -640,7 +637,7 @@ class TrackingTest extends AbstractTestCase 'pma_db', 'pma_table', '1.0', - 'DDL', + LogTypeEnum::DDL, '# new_data_processed', ), ); @@ -650,7 +647,7 @@ class TrackingTest extends AbstractTestCase 'pma_db', 'pma_table', '1.0', - 'DML', + LogTypeEnum::DML, $newData, ), );