major update
This commit is contained in:
@@ -3,11 +3,16 @@
|
||||
namespace MintyPHP\Support\Search;
|
||||
|
||||
use MintyPHP\Service\User\UserAvatarService;
|
||||
use MintyPHP\Service\User\UserServicesFactory;
|
||||
|
||||
class SearchItemMapperProvider
|
||||
{
|
||||
private static ?UserAvatarService $userAvatarService = null;
|
||||
/** @var (callable(): UserAvatarService)|null */
|
||||
private static $userAvatarServiceResolver = null;
|
||||
|
||||
public static function configure(callable $userAvatarServiceResolver): void
|
||||
{
|
||||
self::$userAvatarServiceResolver = $userAvatarServiceResolver;
|
||||
}
|
||||
|
||||
public static function mapPreviewItem(string $key, array $data, string $query): ?array
|
||||
{
|
||||
@@ -59,6 +64,15 @@ class SearchItemMapperProvider
|
||||
$label = $requestId;
|
||||
}
|
||||
$url = lurl('admin/api-audit/view/' . ($data['id'] ?? '')) . '?search=' . urlencode($query);
|
||||
} elseif ($key === 'system-audit') {
|
||||
$eventType = trim((string) ($data['event_type'] ?? ''));
|
||||
$outcome = strtolower(trim((string) ($data['outcome'] ?? '')));
|
||||
$requestId = trim((string) ($data['request_id'] ?? ''));
|
||||
$label = $eventType !== '' ? $eventType : $requestId;
|
||||
if ($outcome !== '') {
|
||||
$label = trim($label . ' — ' . $outcome);
|
||||
}
|
||||
$url = lurl('admin/system-audit/view/' . ($data['id'] ?? '')) . '?search=' . urlencode($query);
|
||||
} elseif ($key === 'pages') {
|
||||
$label = (string) ($data['slug'] ?? '');
|
||||
$url = lurl('page/' . $label) . '?search=' . urlencode($query);
|
||||
@@ -90,7 +104,8 @@ class SearchItemMapperProvider
|
||||
$description = (string) ($data['email'] ?? '');
|
||||
$uuid = (string) ($data['uuid'] ?? '');
|
||||
$url = lurl('address-book/view/' . $uuid);
|
||||
if ($uuid !== '' && self::userAvatarService()->hasAvatar($uuid)) {
|
||||
$userAvatarService = self::userAvatarService();
|
||||
if ($uuid !== '' && $userAvatarService->hasAvatar($uuid)) {
|
||||
$image = lurl('admin/users/avatar-file') . '?uuid=' . urlencode($uuid) . '&size=64';
|
||||
}
|
||||
} elseif ($key === 'permissions') {
|
||||
@@ -128,6 +143,13 @@ class SearchItemMapperProvider
|
||||
}
|
||||
$description = trim(($statusCode > 0 ? (string) $statusCode : '') . ($requestId !== '' ? ' — ' . $requestId : ''));
|
||||
$url = lurl('admin/api-audit/view/' . ($data['id'] ?? ''));
|
||||
} elseif ($key === 'system-audit') {
|
||||
$eventType = trim((string) ($data['event_type'] ?? ''));
|
||||
$outcome = strtolower(trim((string) ($data['outcome'] ?? '')));
|
||||
$requestId = trim((string) ($data['request_id'] ?? ''));
|
||||
$title = $eventType !== '' ? $eventType : $requestId;
|
||||
$description = trim(($outcome !== '' ? strtoupper($outcome) : '') . ($requestId !== '' ? ' — ' . $requestId : ''));
|
||||
$url = lurl('admin/system-audit/view/' . ($data['id'] ?? ''));
|
||||
} else {
|
||||
$title = (string) ($data['description'] ?? '');
|
||||
$description = $label;
|
||||
@@ -150,11 +172,16 @@ class SearchItemMapperProvider
|
||||
|
||||
private static function userAvatarService(): UserAvatarService
|
||||
{
|
||||
if (self::$userAvatarService instanceof UserAvatarService) {
|
||||
return self::$userAvatarService;
|
||||
if (!is_callable(self::$userAvatarServiceResolver)) {
|
||||
throw new \RuntimeException('SearchItemMapperProvider is not configured for dependency: ' . UserAvatarService::class);
|
||||
}
|
||||
|
||||
self::$userAvatarService = (new UserServicesFactory())->createUserAvatarService();
|
||||
return self::$userAvatarService;
|
||||
$service = (self::$userAvatarServiceResolver)();
|
||||
if (!$service instanceof UserAvatarService) {
|
||||
throw new \RuntimeException('SearchItemMapperProvider resolver returned invalid dependency: ' . UserAvatarService::class);
|
||||
}
|
||||
|
||||
return $service;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -131,6 +131,17 @@ class SearchSqlResourceProvider
|
||||
'resultSql' => "select id, request_id, method, path, status_code, created_at from api_audit_log where (request_id like ? escape '\\\\' or path like ? escape '\\\\' or error_code like ? escape '\\\\' or ip like ? escape '\\\\') order by created_at desc",
|
||||
'resultParams' => [$like, $like, $like, $like],
|
||||
],
|
||||
[
|
||||
'key' => 'system-audit',
|
||||
'label' => t('System audit'),
|
||||
'permission' => PermissionService::SYSTEM_AUDIT_VIEW,
|
||||
'countSql' => "select count(*) from system_audit_log where (request_id like ? escape '\\\\' or event_type like ? escape '\\\\' or error_code like ? escape '\\\\' or path like ? escape '\\\\')",
|
||||
'countParams' => [$like, $like, $like, $like],
|
||||
'previewSql' => "select id, request_id, event_type, outcome, created_at from system_audit_log where (request_id like ? escape '\\\\' or event_type like ? escape '\\\\' or error_code like ? escape '\\\\' or path like ? escape '\\\\') order by created_at desc limit ?",
|
||||
'previewParams' => [$like, $like, $like, $like],
|
||||
'resultSql' => "select id, request_id, event_type, outcome, created_at from system_audit_log where (request_id like ? escape '\\\\' or event_type like ? escape '\\\\' or error_code like ? escape '\\\\' or path like ? escape '\\\\') order by created_at desc",
|
||||
'resultParams' => [$like, $like, $like, $like],
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@ class SearchUiMetaProvider
|
||||
'pages' => 'bi-file-text',
|
||||
'mail-log' => 'bi-envelope-paper',
|
||||
'api-audit' => 'bi-shield-check',
|
||||
'system-audit' => 'bi-journal-lock',
|
||||
'docs' => 'bi-journal-text',
|
||||
];
|
||||
|
||||
@@ -29,6 +30,7 @@ class SearchUiMetaProvider
|
||||
'pages',
|
||||
'mail-log',
|
||||
'api-audit',
|
||||
'system-audit',
|
||||
];
|
||||
|
||||
public static function iconForKey(string $key): string
|
||||
@@ -51,6 +53,7 @@ class SearchUiMetaProvider
|
||||
'pages' => lurl(''),
|
||||
'mail-log' => lurl('admin/mail-log') . '?search=' . $encoded,
|
||||
'api-audit' => lurl('admin/api-audit') . '?search=' . $encoded,
|
||||
'system-audit' => lurl('admin/system-audit') . '?search=' . $encoded,
|
||||
default => lurl(''),
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user