Skip to content

Commit 15ceadf

Browse files
fix(sharereview): log warnings for unknown node and receiver types of shares
Assisted-by: ClaudeCode:claude-sonnet-4-6 Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
1 parent 8359170 commit 15ceadf

2 files changed

Lines changed: 57 additions & 13 deletions

File tree

lib/ShareReview/ShareReviewSource.php

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -192,22 +192,41 @@ private function fetchNames(string $table, string $nameColumn, array $ids): arra
192192
*/
193193
private function resolveObjectName(array $share, array $tableNames, array $viewNames, array $contextNames): string {
194194
$nodeId = (int)$share['node_id'];
195-
return match($share['node_type']) {
196-
self::NODE_TYPE_TABLE => $this->l10n->t('%s (Table)', [$tableNames[$nodeId] ?? $this->l10n->t('Table %s', [$nodeId])]),
197-
self::NODE_TYPE_VIEW => $this->l10n->t('%s (View)', [$viewNames[$nodeId] ?? $this->l10n->t('View %s', [$nodeId])]),
198-
self::NODE_TYPE_CONTEXT => $this->l10n->t('%s (Context)', [$contextNames[$nodeId] ?? $this->l10n->t('Context %s', [$nodeId])]),
199-
default => $this->l10n->t('Unknown %s', [$nodeId]),
200-
};
195+
$nodeType = (string)$share['node_type'];
196+
if ($nodeType === self::NODE_TYPE_TABLE) {
197+
return $this->l10n->t('%s (Table)', [$tableNames[$nodeId] ?? $this->l10n->t('Table %s', [$nodeId])]);
198+
}
199+
if ($nodeType === self::NODE_TYPE_VIEW) {
200+
return $this->l10n->t('%s (View)', [$viewNames[$nodeId] ?? $this->l10n->t('View %s', [$nodeId])]);
201+
}
202+
if ($nodeType === self::NODE_TYPE_CONTEXT) {
203+
return $this->l10n->t('%s (Context)', [$contextNames[$nodeId] ?? $this->l10n->t('Context %s', [$nodeId])]);
204+
}
205+
$this->logger->warning(
206+
'Tables ShareReview: unknown node type {type} for share node {id}',
207+
['type' => $nodeType, 'id' => $nodeId]
208+
);
209+
return $this->l10n->t('Unknown %s', [$nodeId]);
201210
}
202211

203212
private function mapReceiverType(string $receiverType): int {
204-
return match($receiverType) {
205-
'user' => IShare::TYPE_USER,
206-
'group' => IShare::TYPE_GROUP,
207-
'link' => IShare::TYPE_LINK,
208-
'circle' => IShare::TYPE_CIRCLE,
209-
default => IShare::TYPE_USER,
210-
};
213+
if ($receiverType === 'user') {
214+
return IShare::TYPE_USER;
215+
}
216+
if ($receiverType === 'group') {
217+
return IShare::TYPE_GROUP;
218+
}
219+
if ($receiverType === 'link') {
220+
return IShare::TYPE_LINK;
221+
}
222+
if ($receiverType === 'circle') {
223+
return IShare::TYPE_CIRCLE;
224+
}
225+
$this->logger->warning(
226+
'Tables ShareReview: unknown receiver type {type}, falling back to user share type',
227+
['type' => $receiverType]
228+
);
229+
return IShare::TYPE_USER;
211230
}
212231

213232
/** @param array<string, mixed> $share */

tests/unit/ShareReview/ShareReviewSourceTest.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,31 @@ public function testGetSharesDeletedNode(): void {
199199
$this->assertSame('Table 42 (Table)', $shares[0]['object']);
200200
}
201201

202+
public function testGetSharesUnknownNodeTypeLogsWarning(): void {
203+
$this->db->method('getQueryBuilder')->willReturnOnConsecutiveCalls(
204+
$this->makeQb([$this->makeShareRow(['node_type' => 'dashboard', 'node_id' => 5])]),
205+
);
206+
$this->logger->expects($this->once())->method('warning');
207+
208+
$shares = $this->source->getShares();
209+
210+
$this->assertCount(1, $shares);
211+
$this->assertSame('Unknown 5', $shares[0]['object']);
212+
}
213+
214+
public function testGetSharesUnknownReceiverTypeLogsWarning(): void {
215+
$this->db->method('getQueryBuilder')->willReturnOnConsecutiveCalls(
216+
$this->makeQb([$this->makeShareRow(['receiver_type' => 'email', 'receiver' => 'bob@example.com'])]),
217+
$this->makeQb([['id' => 10, 'title' => 'My Table']]),
218+
);
219+
$this->logger->expects($this->once())->method('warning');
220+
221+
$shares = $this->source->getShares();
222+
223+
$this->assertCount(1, $shares);
224+
$this->assertSame(IShare::TYPE_USER, $shares[0]['type']);
225+
}
226+
202227
public function testGetSharesReturnsEmptyOnDbException(): void {
203228
$this->db->method('getQueryBuilder')->willReturn($this->makeThrowingQb());
204229
$this->logger->expects($this->once())->method('error');

0 commit comments

Comments
 (0)