From 5c3f5341101bfd52d97c037161f3e7d618fdc8f1 Mon Sep 17 00:00:00 2001 From: Josh Date: Sun, 16 Aug 2026 19:37:47 -0400 Subject: [PATCH 1/5] fix(admin_audit): clarify unavailable IDs for new file reads Signed-off-by: Josh --- apps/admin_audit/lib/Actions/Files.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/admin_audit/lib/Actions/Files.php b/apps/admin_audit/lib/Actions/Files.php index 4ba96b8d70ab4..579fa631b98f4 100644 --- a/apps/admin_audit/lib/Actions/Files.php +++ b/apps/admin_audit/lib/Actions/Files.php @@ -33,7 +33,7 @@ public function read(BeforeNodeReadEvent $event): void { try { $node = $event->getNode(); $params = [ - 'id' => $node instanceof NonExistingFile ? null : $node->getId(), + 'id' => $node instanceof NonExistingFile ? 'not-yet-assigned' : $node->getId(), 'path' => $node->getPath(), ]; } catch (InvalidPathException|NotFoundException $e) { From 97760450596e43c57cc1b5eb0fc88d99f0347e4e Mon Sep 17 00:00:00 2001 From: Josh Date: Sun, 16 Aug 2026 19:40:17 -0400 Subject: [PATCH 2/5] fix(admin_audit): allow explicitly null audit parameters Signed-off-by: Josh --- apps/admin_audit/lib/Actions/Action.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/apps/admin_audit/lib/Actions/Action.php b/apps/admin_audit/lib/Actions/Action.php index d44b9ca179b05..31464a2c1a37c 100644 --- a/apps/admin_audit/lib/Actions/Action.php +++ b/apps/admin_audit/lib/Actions/Action.php @@ -25,12 +25,14 @@ public function __construct( * @param array $elements * @param bool $obfuscateParameters */ - public function log(string $text, + public function log( + string $text, array $params, array $elements, - bool $obfuscateParameters = false): void { + bool $obfuscateParameters = false, + ): void { foreach ($elements as $element) { - if (!isset($params[$element])) { + if (!array_key_exists($element, $params)) { if ($obfuscateParameters) { $this->logger->critical( '$params["' . $element . '"] was missing.', From ca7ee33eb4b2bc1c4d37c778d4d0cbfadd1ab550 Mon Sep 17 00:00:00 2001 From: Josh Date: Sun, 16 Aug 2026 19:55:01 -0400 Subject: [PATCH 3/5] refactor(admin_audit): improve audit parameter handling refactor(admin_audit): improve audit parameter handling refactor(admin_audit): improve audit parameter handling - clarify missing-parameter validation and logging; - support DateTimeInterface values; - simplify the vsprintf invocation. Signed-off-by: Josh --- apps/admin_audit/lib/Actions/Action.php | 34 ++++++++++--------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/apps/admin_audit/lib/Actions/Action.php b/apps/admin_audit/lib/Actions/Action.php index 31464a2c1a37c..280de21a47335 100644 --- a/apps/admin_audit/lib/Actions/Action.php +++ b/apps/admin_audit/lib/Actions/Action.php @@ -33,37 +33,31 @@ public function log( ): void { foreach ($elements as $element) { if (!array_key_exists($element, $params)) { - if ($obfuscateParameters) { - $this->logger->critical( - '$params["' . $element . '"] was missing.', - ['app' => 'admin_audit'] - ); - } else { - $this->logger->critical( - '$params["' . $element . '"] was missing. Transferred value: {params}', - ['app' => 'admin_audit', 'params' => $params] - ); + $message = '$params["' . $element . '"] was missing.'; + $context = ['app' => 'admin_audit']; + + if (!$obfuscateParameters) { + $message .= ' Transferred value: {params}'; + $context['params'] = $params; } + + $this->logger->critical($message, $context); return; } } $replaceArray = []; foreach ($elements as $element) { - if ($params[$element] instanceof \DateTime) { - $params[$element] = $params[$element]->format('Y-m-d H:i:s'); + $value = $params[$element]; + if ($value instanceof \DateTimeInterface) { + $value = $value->format('Y-m-d H:i:s'); } - $replaceArray[] = $params[$element]; + $replaceArray[] = $value; } $this->logger->info( - vsprintf( - $text, - $replaceArray - ), - [ - 'app' => 'admin_audit' - ] + vsprintf($text, $replaceArray), + ['app' => 'admin_audit'], ); } } From 2b80cd2c9a427ce52d60810ad85ec031493b5c70 Mon Sep 17 00:00:00 2001 From: Josh Date: Sun, 16 Aug 2026 19:59:12 -0400 Subject: [PATCH 4/5] refactor(admin_audit): constrain audit parameter types Signed-off-by: Josh --- apps/admin_audit/lib/Actions/Action.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/admin_audit/lib/Actions/Action.php b/apps/admin_audit/lib/Actions/Action.php index 280de21a47335..29988b44c5441 100644 --- a/apps/admin_audit/lib/Actions/Action.php +++ b/apps/admin_audit/lib/Actions/Action.php @@ -21,8 +21,8 @@ public function __construct( * Log a single action with a log level of info * * @param string $text - * @param array $params - * @param array $elements + * @param array $params + * @param list $elements * @param bool $obfuscateParameters */ public function log( From 57e246a19967cb93a7038cb35cf723e86314f1a8 Mon Sep 17 00:00:00 2001 From: Josh Date: Sun, 16 Aug 2026 20:10:27 -0400 Subject: [PATCH 5/5] refactor(admin_audit): reduce repetitive node access in Files And align event handlers for consistency. Signed-off-by: Josh --- apps/admin_audit/lib/Actions/Files.php | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/apps/admin_audit/lib/Actions/Files.php b/apps/admin_audit/lib/Actions/Files.php index 579fa631b98f4..71048345f8f76 100644 --- a/apps/admin_audit/lib/Actions/Files.php +++ b/apps/admin_audit/lib/Actions/Files.php @@ -80,9 +80,10 @@ public function afterRename(NodeRenamedEvent $event): void { */ public function create(NodeCreatedEvent $event): void { try { + $node = $event->getNode(); $params = [ - 'id' => $event->getNode()->getId(), - 'path' => $event->getNode()->getPath(), + 'id' => $node->getId(), + 'path' => $node->getPath(), ]; } catch (InvalidPathException|NotFoundException $e) { Server::get(LoggerInterface::class)->error( @@ -105,11 +106,13 @@ public function create(NodeCreatedEvent $event): void { */ public function copy(NodeCopiedEvent $event): void { try { + $source = $event->getSource(); + $target = $event->getTarget(); $params = [ - 'oldid' => $event->getSource()->getId(), - 'newid' => $event->getTarget()->getId(), - 'oldpath' => $event->getSource()->getPath(), - 'newpath' => $event->getTarget()->getPath(), + 'oldid' => $source->getId(), + 'newid' => $target->getId(), + 'oldpath' => $source->getPath(), + 'newpath' => $target->getPath(), ]; } catch (InvalidPathException|NotFoundException $e) { Server::get(LoggerInterface::class)->error( @@ -128,8 +131,8 @@ public function copy(NodeCopiedEvent $event): void { * Logs writing of files */ public function write(NodeWrittenEvent $event): void { - $node = $event->getNode(); try { + $node = $event->getNode(); $params = [ 'id' => $node->getId(), 'path' => $node->getPath(), @@ -156,9 +159,10 @@ public function write(NodeWrittenEvent $event): void { */ public function delete(BeforeNodeDeletedEvent $event): void { try { + $node = $event->getNode(); $params = [ - 'id' => $event->getNode()->getId(), - 'path' => $event->getNode()->getPath(), + 'id' => $node->getId(), + 'path' => $node->getPath(), ]; } catch (InvalidPathException|NotFoundException $e) { Server::get(LoggerInterface::class)->error(