Add LogTypeEnum

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>
This commit is contained in:
Kamil Tekiela 2023-04-05 16:49:23 +01:00
parent 89fb8ee371
commit 3e5fe772b2
3 changed files with 53 additions and 44 deletions

View File

@ -0,0 +1,39 @@
<?php
declare(strict_types=1);
namespace PhpMyAdmin\Tracking;
use function __;
enum LogTypeEnum
{
case DDL;
case DML;
/** @psalm-return literal-string */
public function getColumnName(): string
{
return match ($this) {
LogTypeEnum::DDL => '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'),
};
}
}

View File

@ -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),

View File

@ -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,
),
);