Skip to content

Commit ee92159

Browse files
refactor(sharereview): adopt OCP\Share\ShareReview interface and event namespaces
Assisted-by: Claude Code:claude-fable-5 Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
1 parent b0444a4 commit ee92159

9 files changed

Lines changed: 103 additions & 124 deletions

lib/AppInfo/Application.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99

1010
use Exception;
1111
use OCA\Analytics\Datasource\DatasourceEvent;
12-
use OCA\ShareReview\Sources\SourceEvent;
1312
use OCA\Tables\Capabilities;
1413
use OCA\Tables\Event\RowDeletedEvent;
1514
use OCA\Tables\Event\TableDeletedEvent;
@@ -42,6 +41,7 @@
4241
use OCP\Collaboration\Reference\RenderReferenceEvent;
4342
use OCP\Collaboration\Resources\LoadAdditionalScriptsEvent;
4443
use OCP\DB\Events\AddMissingIndicesEvent;
44+
use OCP\Share\ShareReview\RegisterShareReviewSourceEvent;
4545
use OCP\User\Events\BeforeUserDeletedEvent;
4646
use Psr\Container\ContainerInterface;
4747

@@ -81,7 +81,7 @@ public function register(IRegistrationContext $context): void {
8181

8282
$context->registerEventListener(BeforeUserDeletedEvent::class, UserDeletedListener::class);
8383
$context->registerEventListener(DatasourceEvent::class, AnalyticsDatasourceListener::class);
84-
$context->registerEventListener(SourceEvent::class, ShareReviewListener::class);
84+
$context->registerEventListener(RegisterShareReviewSourceEvent::class, ShareReviewListener::class);
8585
$context->registerEventListener(RenderReferenceEvent::class, TablesReferenceListener::class);
8686
$context->registerEventListener(BeforeTemplateRenderedEvent::class, BeforeTemplateRenderedListener::class);
8787
$context->registerEventListener(LoadAdditionalScriptsEvent::class, LoadAdditionalListener::class);

lib/ShareReview/ShareReviewAccessCheckEvent.php

Lines changed: 0 additions & 43 deletions
This file was deleted.

lib/ShareReview/ShareReviewListener.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,17 @@
99

1010
namespace OCA\Tables\ShareReview;
1111

12-
use OCA\ShareReview\Sources\SourceEvent;
1312
use OCP\EventDispatcher\Event;
1413
use OCP\EventDispatcher\IEventListener;
14+
use OCP\Share\ShareReview\RegisterShareReviewSourceEvent;
1515

16-
/** @template-implements IEventListener<SourceEvent> */
16+
/** @template-implements IEventListener<RegisterShareReviewSourceEvent> */
1717
class ShareReviewListener implements IEventListener {
1818
public function __construct() {
1919
}
2020

2121
public function handle(Event $event): void {
22-
if (!$event instanceof SourceEvent) {
22+
if (!$event instanceof RegisterShareReviewSourceEvent) {
2323
return;
2424
}
2525
$event->registerSource(ShareReviewSource::class);

lib/ShareReview/ShareReviewSource.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99

1010
namespace OCA\Tables\ShareReview;
1111

12-
use OCA\ShareReview\Sources\ISource;
1312
use OCA\Tables\Db\ContextMapper;
1413
use OCA\Tables\Db\ShareMapper;
1514
use OCA\Tables\Db\TableMapper;
@@ -21,9 +20,11 @@
2120
use OCP\EventDispatcher\IEventDispatcher;
2221
use OCP\IL10N;
2322
use OCP\Share\IShare;
23+
use OCP\Share\ShareReview\Events\ShareReviewAccessCheckEvent;
24+
use OCP\Share\ShareReview\IShareReviewSource;
2425
use Psr\Log\LoggerInterface;
2526

26-
class ShareReviewSource implements ISource {
27+
class ShareReviewSource implements IShareReviewSource {
2728

2829
private const NODE_TYPE_TABLE = 'table';
2930
private const NODE_TYPE_VIEW = 'view';
@@ -93,7 +94,7 @@ public function deleteShare(string $shareId): bool {
9394
return false;
9495
}
9596

96-
$event = new ShareReviewAccessCheckEvent();
97+
$event = new ShareReviewAccessCheckEvent('Tables', $shareId);
9798
$this->eventDispatcher->dispatchTyped($event);
9899

99100
if (!$event->isHandled() || !$event->isGranted()) {

tests/stub.phpstub

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,32 @@ namespace OCA\Analytics\Datasource {
1515
}
1616
}
1717

18-
namespace OCA\ShareReview\Sources {
19-
class SourceEvent extends \OCP\EventDispatcher\Event {
20-
abstract public function registerSource(string $source): void {}
18+
namespace OCP\Share\ShareReview {
19+
class RegisterShareReviewSourceEvent extends \OCP\EventDispatcher\Event {
20+
public function registerSource(string $source): void {}
21+
public function getSources(): array { return []; }
2122
}
2223

23-
interface ISource {
24+
interface IShareReviewSource {
2425
public function getName(): string;
2526
public function getShares(): array;
2627
public function deleteShare(string $shareId): bool;
2728
}
2829
}
2930

31+
namespace OCP\Share\ShareReview\Events {
32+
class ShareReviewAccessCheckEvent extends \OCP\EventDispatcher\Event {
33+
public function __construct(string $sourceName, string $shareId) {}
34+
public function getSourceName(): string { return ''; }
35+
public function getShareId(): string { return ''; }
36+
public function grantAccess(): void {}
37+
public function denyAccess(string $reason): void {}
38+
public function isHandled(): bool { return false; }
39+
public function isGranted(): bool { return false; }
40+
public function getReason(): ?string { return null; }
41+
}
42+
}
43+
3044
namespace OCA\Circles\Model {
3145
class Circle {
3246
abstract public function getSingleId(): string {}

tests/unit/ShareReview/ShareReviewAccessCheckEventTest.php

Lines changed: 0 additions & 58 deletions
This file was deleted.

tests/unit/ShareReview/ShareReviewSourceTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@
1414
use OCA\Tables\Db\TableMapper;
1515
use OCA\Tables\Db\ViewMapper;
1616
use OCA\Tables\Service\ShareService;
17-
use OCA\Tables\ShareReview\ShareReviewAccessCheckEvent;
1817
use OCA\Tables\ShareReview\ShareReviewSource;
1918
use OCP\AppFramework\Db\DoesNotExistException;
2019
use OCP\Constants;
2120
use OCP\DB\Exception;
2221
use OCP\EventDispatcher\IEventDispatcher;
2322
use OCP\IL10N;
2423
use OCP\Share\IShare;
24+
use OCP\Share\ShareReview\Events\ShareReviewAccessCheckEvent;
2525
use PHPUnit\Framework\MockObject\MockObject;
2626
use PHPUnit\Framework\TestCase;
2727
use Psr\Log\LoggerInterface;

tests/unit/ShareReview/Stubs.php

Lines changed: 74 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,81 @@
77
* SPDX-License-Identifier: AGPL-3.0-or-later
88
*/
99

10-
namespace OCA\ShareReview\Sources;
10+
namespace OCP\Share\ShareReview {
1111

12-
/**
13-
* Runtime stub for the optional grc_sharereview app.
14-
* Only loaded when the real app is not installed.
15-
*/
16-
interface ISource {
17-
public function getName(): string;
12+
/**
13+
* Runtime stub for servers that do not ship the ShareReview OCP classes yet.
14+
* Only loaded when the real classes are not available.
15+
*/
16+
interface IShareReviewSource {
17+
public function getName(): string;
18+
19+
public function getShares(): array;
20+
21+
public function deleteShare(string $shareId): bool;
22+
}
23+
24+
class RegisterShareReviewSourceEvent extends \OCP\EventDispatcher\Event {
25+
/** @var array<int, class-string<IShareReviewSource>> */
26+
private array $sources = [];
27+
28+
public function registerSource(string $source): void {
29+
$this->sources[] = $source;
30+
}
31+
32+
public function getSources(): array {
33+
return $this->sources;
34+
}
35+
}
36+
}
37+
38+
namespace OCP\Share\ShareReview\Events {
39+
40+
class ShareReviewAccessCheckEvent extends \OCP\EventDispatcher\Event {
41+
private bool $handled = false;
42+
private bool $granted = false;
43+
private ?string $reason = null;
44+
45+
public function __construct(
46+
private readonly string $sourceName,
47+
private readonly string $shareId,
48+
) {
49+
parent::__construct();
50+
}
51+
52+
public function getSourceName(): string {
53+
return $this->sourceName;
54+
}
55+
56+
public function getShareId(): string {
57+
return $this->shareId;
58+
}
59+
60+
public function grantAccess(): void {
61+
if ($this->handled && !$this->granted) {
62+
return;
63+
}
64+
$this->handled = true;
65+
$this->granted = true;
66+
}
67+
68+
public function denyAccess(string $reason): void {
69+
$this->handled = true;
70+
$this->granted = false;
71+
$this->reason = $reason;
72+
$this->stopPropagation();
73+
}
74+
75+
public function isHandled(): bool {
76+
return $this->handled;
77+
}
1878

19-
public function getShares(): array;
79+
public function isGranted(): bool {
80+
return $this->granted;
81+
}
2082

21-
public function deleteShare(string $shareId): bool;
83+
public function getReason(): ?string {
84+
return $this->reason;
85+
}
86+
}
2287
}

tests/unit/bootstrap.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
require_once __DIR__ . '/Db/Row2MapperTestDependencies.php';
2525

26-
if (!interface_exists('OCA\ShareReview\Sources\ISource')) {
26+
if (!interface_exists('OCP\Share\ShareReview\IShareReviewSource')) {
2727
require_once __DIR__ . '/ShareReview/Stubs.php';
2828
}
2929

0 commit comments

Comments
 (0)