Skip to content

Commit 4ad68f0

Browse files
Merge pull request #62335 from nextcloud/refactor/sharing/use-constructor-properties
Use constructor properties in Sharing
2 parents b1e2697 + 513ecea commit 4ad68f0

24 files changed

Lines changed: 94 additions & 145 deletions

apps/files/lib/AppInfo/Application.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,20 +116,20 @@ public function register(IRegistrationContext $context): void {
116116
$registry->markPropertyTypeCompatibleWithSourceType(NodeGridViewSharePropertyType::class, NodeShareSourceType::class);
117117
$registry->markPropertyTypeCompatibleWithRecipientType(NodeGridViewSharePropertyType::class, TokenShareRecipientType::class);
118118

119-
$registry->registerPermissionType(NodeShareSourceType::class, new NodeCreateSharePermissionType());
119+
$registry->registerPermissionType(NodeShareSourceType::class, Server::get(NodeCreateSharePermissionType::class));
120120
$registry->markPermissionTypeCompatibleWithPermissionPreset(NodeCreateSharePermissionType::class, EditSharePermissionPreset::class);
121121

122122
$registry->registerPermissionType(NodeShareSourceType::class, new NodeReadSharePermissionType());
123123
$registry->markPermissionTypeCompatibleWithPermissionPreset(NodeReadSharePermissionType::class, ViewSharePermissionPreset::class);
124124
$registry->markPermissionTypeCompatibleWithPermissionPreset(NodeReadSharePermissionType::class, EditSharePermissionPreset::class);
125125

126-
$registry->registerPermissionType(NodeShareSourceType::class, new NodeUpdateSharePermissionType());
126+
$registry->registerPermissionType(NodeShareSourceType::class, Server::get(NodeUpdateSharePermissionType::class));
127127
$registry->markPermissionTypeCompatibleWithPermissionPreset(NodeUpdateSharePermissionType::class, EditSharePermissionPreset::class);
128128

129-
$registry->registerPermissionType(NodeShareSourceType::class, new NodeDeleteSharePermissionType());
129+
$registry->registerPermissionType(NodeShareSourceType::class, Server::get(NodeDeleteSharePermissionType::class));
130130
$registry->markPermissionTypeCompatibleWithPermissionPreset(NodeDeleteSharePermissionType::class, EditSharePermissionPreset::class);
131131

132-
$registry->registerPermissionType(NodeShareSourceType::class, new NodeDownloadSharePermissionType());
132+
$registry->registerPermissionType(NodeShareSourceType::class, Server::get(NodeDownloadSharePermissionType::class));
133133
$registry->markPermissionTypeCompatibleWithPermissionPreset(NodeDownloadSharePermissionType::class, ViewSharePermissionPreset::class);
134134
$registry->markPermissionTypeCompatibleWithPermissionPreset(NodeDownloadSharePermissionType::class, EditSharePermissionPreset::class);
135135
}

apps/files/lib/Sharing/Permission/NodeCreateSharePermissionType.php

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,12 @@
1313
use OCP\Constants;
1414
use OCP\IAppConfig;
1515
use OCP\L10N\IFactory;
16-
use OCP\Server;
1716
use OCP\Sharing\Permission\ISharePermissionType;
1817

19-
final class NodeCreateSharePermissionType implements ISharePermissionType {
20-
private ?IAppConfig $appConfig = null;
21-
22-
private function getAppConfig(): IAppConfig {
23-
return $this->appConfig ??= Server::get(IAppConfig::class);
18+
final readonly class NodeCreateSharePermissionType implements ISharePermissionType {
19+
public function __construct(
20+
private IAppConfig $appConfig,
21+
) {
2422
}
2523

2624
#[\Override]
@@ -40,6 +38,6 @@ public function getPriority(): int {
4038

4139
#[\Override]
4240
public function isEnabledByDefault(): bool {
43-
return ($this->getAppConfig()->getValueInt(\OC\Core\AppInfo\Application::APP_ID, 'shareapi_default_permissions') & Constants::PERMISSION_CREATE) === Constants::PERMISSION_CREATE;
41+
return ($this->appConfig->getValueInt(\OC\Core\AppInfo\Application::APP_ID, 'shareapi_default_permissions') & Constants::PERMISSION_CREATE) === Constants::PERMISSION_CREATE;
4442
}
4543
}

apps/files/lib/Sharing/Permission/NodeDeleteSharePermissionType.php

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,12 @@
1313
use OCP\Constants;
1414
use OCP\IAppConfig;
1515
use OCP\L10N\IFactory;
16-
use OCP\Server;
1716
use OCP\Sharing\Permission\ISharePermissionType;
1817

19-
final class NodeDeleteSharePermissionType implements ISharePermissionType {
20-
private ?IAppConfig $appConfig = null;
21-
22-
private function getAppConfig(): IAppConfig {
23-
return $this->appConfig ??= Server::get(IAppConfig::class);
18+
final readonly class NodeDeleteSharePermissionType implements ISharePermissionType {
19+
public function __construct(
20+
private IAppConfig $appConfig,
21+
) {
2422
}
2523

2624
#[\Override]
@@ -40,6 +38,6 @@ public function getPriority(): int {
4038

4139
#[\Override]
4240
public function isEnabledByDefault(): bool {
43-
return ($this->getAppConfig()->getValueInt(\OC\Core\AppInfo\Application::APP_ID, 'shareapi_default_permissions') & Constants::PERMISSION_DELETE) === Constants::PERMISSION_DELETE;
41+
return ($this->appConfig->getValueInt(\OC\Core\AppInfo\Application::APP_ID, 'shareapi_default_permissions') & Constants::PERMISSION_DELETE) === Constants::PERMISSION_DELETE;
4442
}
4543
}

apps/files/lib/Sharing/Permission/NodeDownloadSharePermissionType.php

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,13 @@
1111

1212
use OCA\Files\AppInfo\Application;
1313
use OCP\L10N\IFactory;
14-
use OCP\Server;
1514
use OCP\Share\IManager;
1615
use OCP\Sharing\Permission\ISharePermissionType;
1716

18-
final class NodeDownloadSharePermissionType implements ISharePermissionType {
19-
private ?IManager $legacyManager = null;
20-
21-
private function getLegacyManager(): IManager {
22-
return $this->legacyManager ??= Server::get(IManager::class);
17+
final readonly class NodeDownloadSharePermissionType implements ISharePermissionType {
18+
public function __construct(
19+
private IManager $legacyManager,
20+
) {
2321
}
2422

2523
#[\Override]
@@ -30,7 +28,7 @@ public function getDisplayName(IFactory $l10nFactory): string {
3028
#[\Override]
3129
public function getHint(IFactory $l10nFactory): ?string {
3230
// If previews are still allowed, the download option is only hidden, because on a technical level it is still possible to download.
33-
if ($this->getLegacyManager()->allowViewWithoutDownload()) {
31+
if ($this->legacyManager->allowViewWithoutDownload()) {
3432
return $l10nFactory->get(Application::APP_ID)->t('When disabled, the option to download will be hidden');
3533
}
3634

apps/files/lib/Sharing/Permission/NodeUpdateSharePermissionType.php

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,12 @@
1313
use OCP\Constants;
1414
use OCP\IAppConfig;
1515
use OCP\L10N\IFactory;
16-
use OCP\Server;
1716
use OCP\Sharing\Permission\ISharePermissionType;
1817

19-
final class NodeUpdateSharePermissionType implements ISharePermissionType {
20-
private ?IAppConfig $appConfig = null;
21-
22-
private function getAppConfig(): IAppConfig {
23-
return $this->appConfig ??= Server::get(IAppConfig::class);
18+
final readonly class NodeUpdateSharePermissionType implements ISharePermissionType {
19+
public function __construct(
20+
private IAppConfig $appConfig,
21+
) {
2422
}
2523

2624
#[\Override]
@@ -40,6 +38,6 @@ public function getPriority(): int {
4038

4139
#[\Override]
4240
public function isEnabledByDefault(): bool {
43-
return ($this->getAppConfig()->getValueInt(\OC\Core\AppInfo\Application::APP_ID, 'shareapi_default_permissions') & Constants::PERMISSION_UPDATE) === Constants::PERMISSION_UPDATE;
41+
return ($this->appConfig->getValueInt(\OC\Core\AppInfo\Application::APP_ID, 'shareapi_default_permissions') & Constants::PERMISSION_UPDATE) === Constants::PERMISSION_UPDATE;
4442
}
4543
}

apps/files/lib/Sharing/Source/NodeShareSourceType.php

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
use OCP\Interaction\Resources\NodeResource;
2424
use OCP\IURLGenerator;
2525
use OCP\L10N\IFactory;
26-
use OCP\Server;
2726
use OCP\Sharing\Icon\ShareIconURL;
2827
use OCP\Sharing\ISharingManager;
2928
use OCP\Sharing\ShareAccessContext;
@@ -33,41 +32,31 @@
3332
/**
3433
* @template-implements IEventListener<NodeDeletedEvent|MoveToTrashEvent>
3534
*/
36-
final class NodeShareSourceType implements IShareSourceType, IEventListener {
37-
private ?IRootFolder $rootFolder = null;
38-
39-
private ?IURLGenerator $urlGenerator = null;
40-
35+
final readonly class NodeShareSourceType implements IShareSourceType, IEventListener {
4136
public function __construct(
4237
IEventDispatcher $eventDispatcher,
43-
private readonly IDBConnection $dbConnection,
44-
private readonly ISharingManager $manager,
38+
private IDBConnection $dbConnection,
39+
private IRootFolder $rootFolder,
40+
private IURLGenerator $urlGenerator,
41+
private ISharingManager $manager,
4542
) {
4643
$eventDispatcher->addServiceListener(NodeDeletedEvent::class, self::class);
4744
$eventDispatcher->addServiceListener(MoveToTrashEvent::class, self::class);
4845
}
4946

50-
private function getRootFolder(): IRootFolder {
51-
return $this->rootFolder ??= Server::get(IRootFolder::class);
52-
}
53-
54-
private function getUrlGenerator(): IURLGenerator {
55-
return $this->urlGenerator ??= Server::get(IURLGenerator::class);
56-
}
57-
5847
#[\Override]
5948
public function getDisplayName(IFactory $l10nFactory): string {
6049
return $l10nFactory->get(Application::APP_ID)->t('File');
6150
}
6251

6352
#[\Override]
6453
public function validateSource(string $source): bool {
65-
return $this->getRootFolder()->getFirstNodeById((int)$source) instanceof Node;
54+
return $this->rootFolder->getFirstNodeById((int)$source) instanceof Node;
6655
}
6756

6857
#[\Override]
6958
public function getSourceDisplayName(string $source): ?string {
70-
$displayName = $this->getRootFolder()->getFirstNodeById((int)$source)?->getName();
59+
$displayName = $this->rootFolder->getFirstNodeById((int)$source)?->getName();
7160
if ($displayName === '') {
7261
return null;
7362
}
@@ -77,7 +66,7 @@ public function getSourceDisplayName(string $source): ?string {
7766

7867
#[\Override]
7968
public function getSourceIcon(string $source): ShareIconURL {
80-
$url = $this->getUrlGenerator()->linkToRouteAbsolute('core.Preview.getPreviewByFileId', ['fileId' => $source, 'x' => 64, 'y' => 64]);
69+
$url = $this->urlGenerator->linkToRouteAbsolute('core.Preview.getPreviewByFileId', ['fileId' => $source, 'x' => 64, 'y' => 64]);
8170

8271
return new ShareIconURL($url, $url);
8372
}

apps/files/tests/Sharing/Source/NodeShareSourceTypeTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use OCP\Files\IRootFolder;
1616
use OCP\Files\Node;
1717
use OCP\IDBConnection;
18+
use OCP\IURLGenerator;
1819
use OCP\IUser;
1920
use OCP\IUserManager;
2021
use OCP\Server;
@@ -56,7 +57,7 @@ public function setUp(): void {
5657
$userFolder = Server::get(IRootFolder::class)->getUserFolder($this->user1->getUID());
5758
$this->node = $userFolder->newFile('foo.txt', 'bar');
5859

59-
$this->sourceType = new NodeShareSourceType(Server::get(IEventDispatcher::class), $this->dbConnection, $this->manager);
60+
$this->sourceType = new NodeShareSourceType(Server::get(IEventDispatcher::class), $this->dbConnection, Server::get(IRootFolder::class), Server::get(IURLGenerator::class), $this->manager);
6061
}
6162

6263
#[\Override]

core/AppInfo/Application.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -118,13 +118,13 @@ public function register(IRegistrationContext $context): void {
118118

119119
$registry = Server::get(ISharingRegistry::class);
120120

121-
$registry->registerRecipientType(new EmailShareRecipientType());
121+
$registry->registerRecipientType(Server::get(EmailShareRecipientType::class));
122122
$registry->registerRecipientType(Server::get(GroupShareRecipientType::class));
123123
$registry->registerRecipientType(Server::get(TeamShareRecipientType::class));
124-
$registry->registerRecipientType(new TokenShareRecipientType());
124+
$registry->registerRecipientType(Server::get(TokenShareRecipientType::class));
125125
$registry->registerRecipientType(Server::get(UserShareRecipientType::class));
126126

127-
$registry->registerPropertyType(new ExpirationDateSharePropertyType());
127+
$registry->registerPropertyType(Server::get(ExpirationDateSharePropertyType::class));
128128
$registry->markPropertyTypeCompatibleWithRecipientType(ExpirationDateSharePropertyType::class, EmailShareRecipientType::class);
129129
$registry->markPropertyTypeCompatibleWithRecipientType(ExpirationDateSharePropertyType::class, GroupShareRecipientType::class);
130130
$registry->markPropertyTypeCompatibleWithRecipientType(ExpirationDateSharePropertyType::class, TeamShareRecipientType::class);
@@ -141,14 +141,14 @@ public function register(IRegistrationContext $context): void {
141141
$registry->markPropertyTypeCompatibleWithRecipientType(NoteSharePropertyType::class, TokenShareRecipientType::class);
142142
$registry->markPropertyTypeCompatibleWithRecipientType(NoteSharePropertyType::class, UserShareRecipientType::class);
143143

144-
$registry->registerPropertyType(new PasswordSharePropertyType());
144+
$registry->registerPropertyType(Server::get(PasswordSharePropertyType::class));
145145
$registry->markPropertyTypeCompatibleWithRecipientType(PasswordSharePropertyType::class, EmailShareRecipientType::class);
146146
$registry->markPropertyTypeCompatibleWithRecipientType(PasswordSharePropertyType::class, TokenShareRecipientType::class);
147147

148148
$registry->registerPermissionPreset(new ViewSharePermissionPreset());
149149
$registry->registerPermissionPreset(new EditSharePermissionPreset());
150150

151-
$registry->registerPermissionType(null, new ReshareSharePermissionType());
151+
$registry->registerPermissionType(null, Server::get(ReshareSharePermissionType::class));
152152
// Cannot use the APP_ID from files_sharing Application and EXCLUDE_RESHARE_FROM_EDIT from files_sharing ConfigLexicon, because the classes are not registered yet.
153153
if (!Server::get(IAppConfig::class)->getValueBool('files_sharing', 'shareapi_exclude_reshare_from_edit')) {
154154
$registry->markPermissionTypeCompatibleWithPermissionPreset(ReshareSharePermissionType::class, EditSharePermissionPreset::class);

core/Sharing/Permission/ReshareSharePermissionType.php

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,12 @@
1313
use OCP\Constants;
1414
use OCP\IAppConfig;
1515
use OCP\L10N\IFactory;
16-
use OCP\Server;
1716
use OCP\Sharing\Permission\ISharePermissionType;
1817

19-
final class ReshareSharePermissionType implements ISharePermissionType {
20-
private ?IAppConfig $appConfig = null;
21-
22-
private function getAppConfig(): IAppConfig {
23-
return $this->appConfig ??= Server::get(IAppConfig::class);
18+
final readonly class ReshareSharePermissionType implements ISharePermissionType {
19+
public function __construct(
20+
private IAppConfig $appConfig,
21+
) {
2422
}
2523

2624
#[\Override]
@@ -40,6 +38,6 @@ public function getPriority(): int {
4038

4139
#[\Override]
4240
public function isEnabledByDefault(): bool {
43-
return ($this->getAppConfig()->getValueInt(Application::APP_ID, 'shareapi_default_permissions') & Constants::PERMISSION_SHARE) === Constants::PERMISSION_SHARE;
41+
return ($this->appConfig->getValueInt(Application::APP_ID, 'shareapi_default_permissions') & Constants::PERMISSION_SHARE) === Constants::PERMISSION_SHARE;
4442
}
4543
}

core/Sharing/Property/ExpirationDateSharePropertyType.php

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
use DateTimeInterface;
1515
use OC\Core\AppInfo\Application;
1616
use OCP\L10N\IFactory;
17-
use OCP\Server;
1817
use OCP\Share\IManager;
1918
use OCP\Sharing\Property\ADateSharePropertyType;
2019
use OCP\Sharing\Property\ISharePropertyTypeFilter;
@@ -26,13 +25,9 @@
2625
final class ExpirationDateSharePropertyType extends ADateSharePropertyType implements ISharePropertyTypeFilter {
2726
private readonly DateTimeImmutable $now;
2827

29-
private ?IManager $legacyManager = null;
30-
31-
private function getLegacyManager(): IManager {
32-
return $this->legacyManager ??= Server::get(IManager::class);
33-
}
34-
35-
public function __construct() {
28+
public function __construct(
29+
private readonly IManager $legacyManager,
30+
) {
3631
$this->now = new DateTimeImmutable();
3732
}
3833

@@ -58,15 +53,15 @@ public function isAdvanced(): bool {
5853

5954
#[\Override]
6055
public function isRequired(): bool {
61-
if ($this->getLegacyManager()->shareApiLinkDefaultExpireDateEnforced()) {
56+
if ($this->legacyManager->shareApiLinkDefaultExpireDateEnforced()) {
6257
return true;
6358
}
6459

65-
if ($this->getLegacyManager()->shareApiRemoteDefaultExpireDateEnforced()) {
60+
if ($this->legacyManager->shareApiRemoteDefaultExpireDateEnforced()) {
6661
return true;
6762
}
6863

69-
return $this->getLegacyManager()->shareApiInternalDefaultExpireDateEnforced();
64+
return $this->legacyManager->shareApiInternalDefaultExpireDateEnforced();
7065
}
7166

7267
#[\Override]
@@ -93,16 +88,16 @@ public function getMaxDate(): ?DateTimeImmutable {
9388
private function getMaxExpirationDate(): ?DateTimeImmutable {
9489
// We do not have any distinction between link/remote/internal, so we just apply the lowest expiration days count to be safe.
9590
$days = INF;
96-
if ($this->getLegacyManager()->shareApiLinkDefaultExpireDate()) {
97-
$days = min($days, $this->getLegacyManager()->shareApiLinkDefaultExpireDays());
91+
if ($this->legacyManager->shareApiLinkDefaultExpireDate()) {
92+
$days = min($days, $this->legacyManager->shareApiLinkDefaultExpireDays());
9893
}
9994

100-
if ($this->getLegacyManager()->shareApiRemoteDefaultExpireDate()) {
101-
$days = min($days, $this->getLegacyManager()->shareApiRemoteDefaultExpireDays());
95+
if ($this->legacyManager->shareApiRemoteDefaultExpireDate()) {
96+
$days = min($days, $this->legacyManager->shareApiRemoteDefaultExpireDays());
10297
}
10398

104-
if ($this->getLegacyManager()->shareApiInternalDefaultExpireDate()) {
105-
$days = min($days, $this->getLegacyManager()->shareApiInternalDefaultExpireDays());
99+
if ($this->legacyManager->shareApiInternalDefaultExpireDate()) {
100+
$days = min($days, $this->legacyManager->shareApiInternalDefaultExpireDays());
106101
}
107102

108103
if ($days !== INF) {

0 commit comments

Comments
 (0)