Skip to content

Commit 5570d2b

Browse files
enh: add system address book settings in ui
Signed-off-by: SebastianKrupinski <krupinskis05@gmail.com>
1 parent 4efd119 commit 5570d2b

File tree

5 files changed

+122
-0
lines changed

5 files changed

+122
-0
lines changed

apps/dav/composer/composer/autoload_classmap.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,7 @@
295295
'OCA\\DAV\\Listener\\CalendarShareUpdateListener' => $baseDir . '/../lib/Listener/CalendarShareUpdateListener.php',
296296
'OCA\\DAV\\Listener\\CardListener' => $baseDir . '/../lib/Listener/CardListener.php',
297297
'OCA\\DAV\\Listener\\ClearPhotoCacheListener' => $baseDir . '/../lib/Listener/ClearPhotoCacheListener.php',
298+
'OCA\\DAV\\Listener\\DavAdminSettingsListener' => $baseDir . '/../lib/Listener/DavAdminSettingsListener.php',
298299
'OCA\\DAV\\Listener\\OutOfOfficeListener' => $baseDir . '/../lib/Listener/OutOfOfficeListener.php',
299300
'OCA\\DAV\\Listener\\SubscriptionListener' => $baseDir . '/../lib/Listener/SubscriptionListener.php',
300301
'OCA\\DAV\\Listener\\TrustedServerRemovedListener' => $baseDir . '/../lib/Listener/TrustedServerRemovedListener.php',
@@ -358,6 +359,7 @@
358359
'OCA\\DAV\\Server' => $baseDir . '/../lib/Server.php',
359360
'OCA\\DAV\\ServerFactory' => $baseDir . '/../lib/ServerFactory.php',
360361
'OCA\\DAV\\Service\\AbsenceService' => $baseDir . '/../lib/Service/AbsenceService.php',
362+
'OCA\\DAV\\Settings\\Admin\\SystemAddressBookSettings' => $baseDir . '/../lib/Settings/Admin/SystemAddressBookSettings.php',
361363
'OCA\\DAV\\Settings\\AvailabilitySettings' => $baseDir . '/../lib/Settings/AvailabilitySettings.php',
362364
'OCA\\DAV\\Settings\\CalDAVSettings' => $baseDir . '/../lib/Settings/CalDAVSettings.php',
363365
'OCA\\DAV\\SetupChecks\\NeedsSystemAddressBookSync' => $baseDir . '/../lib/SetupChecks/NeedsSystemAddressBookSync.php',

apps/dav/composer/composer/autoload_static.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,7 @@ class ComposerStaticInitDAV
310310
'OCA\\DAV\\Listener\\CalendarShareUpdateListener' => __DIR__ . '/..' . '/../lib/Listener/CalendarShareUpdateListener.php',
311311
'OCA\\DAV\\Listener\\CardListener' => __DIR__ . '/..' . '/../lib/Listener/CardListener.php',
312312
'OCA\\DAV\\Listener\\ClearPhotoCacheListener' => __DIR__ . '/..' . '/../lib/Listener/ClearPhotoCacheListener.php',
313+
'OCA\\DAV\\Listener\\DavAdminSettingsListener' => __DIR__ . '/..' . '/../lib/Listener/DavAdminSettingsListener.php',
313314
'OCA\\DAV\\Listener\\OutOfOfficeListener' => __DIR__ . '/..' . '/../lib/Listener/OutOfOfficeListener.php',
314315
'OCA\\DAV\\Listener\\SubscriptionListener' => __DIR__ . '/..' . '/../lib/Listener/SubscriptionListener.php',
315316
'OCA\\DAV\\Listener\\TrustedServerRemovedListener' => __DIR__ . '/..' . '/../lib/Listener/TrustedServerRemovedListener.php',
@@ -373,6 +374,7 @@ class ComposerStaticInitDAV
373374
'OCA\\DAV\\Server' => __DIR__ . '/..' . '/../lib/Server.php',
374375
'OCA\\DAV\\ServerFactory' => __DIR__ . '/..' . '/../lib/ServerFactory.php',
375376
'OCA\\DAV\\Service\\AbsenceService' => __DIR__ . '/..' . '/../lib/Service/AbsenceService.php',
377+
'OCA\\DAV\\Settings\\Admin\\SystemAddressBookSettings' => __DIR__ . '/..' . '/../lib/Settings/Admin/SystemAddressBookSettings.php',
376378
'OCA\\DAV\\Settings\\AvailabilitySettings' => __DIR__ . '/..' . '/../lib/Settings/AvailabilitySettings.php',
377379
'OCA\\DAV\\Settings\\CalDAVSettings' => __DIR__ . '/..' . '/../lib/Settings/CalDAVSettings.php',
378380
'OCA\\DAV\\SetupChecks\\NeedsSystemAddressBookSync' => __DIR__ . '/..' . '/../lib/SetupChecks/NeedsSystemAddressBookSync.php',

apps/dav/lib/AppInfo/Application.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
use OCA\DAV\Listener\CalendarShareUpdateListener;
5858
use OCA\DAV\Listener\CardListener;
5959
use OCA\DAV\Listener\ClearPhotoCacheListener;
60+
use OCA\DAV\Listener\DavAdminSettingsListener;
6061
use OCA\DAV\Listener\OutOfOfficeListener;
6162
use OCA\DAV\Listener\SubscriptionListener;
6263
use OCA\DAV\Listener\TrustedServerRemovedListener;
@@ -65,6 +66,7 @@
6566
use OCA\DAV\Search\ContactsSearchProvider;
6667
use OCA\DAV\Search\EventsSearchProvider;
6768
use OCA\DAV\Search\TasksSearchProvider;
69+
use OCA\DAV\Settings\Admin\SystemAddressBookSettings;
6870
use OCA\DAV\SetupChecks\NeedsSystemAddressBookSync;
6971
use OCA\DAV\SetupChecks\WebdavEndpoint;
7072
use OCA\DAV\UserMigration\CalendarMigrator;
@@ -85,6 +87,8 @@
8587
use OCP\Files\AppData\IAppDataFactory;
8688
use OCP\IUserSession;
8789
use OCP\Server;
90+
use OCP\Settings\Events\DeclarativeSettingsGetValueEvent;
91+
use OCP\Settings\Events\DeclarativeSettingsSetValueEvent;
8892
use OCP\User\Events\BeforeUserDeletedEvent;
8993
use OCP\User\Events\BeforeUserIdUnassignedEvent;
9094
use OCP\User\Events\OutOfOfficeChangedEvent;
@@ -212,6 +216,12 @@ public function register(IRegistrationContext $context): void {
212216

213217
$context->registerSetupCheck(NeedsSystemAddressBookSync::class);
214218
$context->registerSetupCheck(WebdavEndpoint::class);
219+
220+
// register admin settings form and listener(s)
221+
$context->registerDeclarativeSettings(SystemAddressBookSettings::class);
222+
$context->registerEventListener(DeclarativeSettingsGetValueEvent::class, DavAdminSettingsListener::class);
223+
$context->registerEventListener(DeclarativeSettingsSetValueEvent::class, DavAdminSettingsListener::class);
224+
215225
}
216226

217227
public function boot(IBootContext $context): void {
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
/**
5+
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
6+
* SPDX-License-Identifier: AGPL-3.0-or-later
7+
*/
8+
namespace OCA\DAV\Listener;
9+
10+
use OCA\DAV\AppInfo\Application;
11+
use OCP\EventDispatcher\Event;
12+
use OCP\EventDispatcher\IEventListener;
13+
use OCP\IAppConfig;
14+
use OCP\Settings\Events\DeclarativeSettingsGetValueEvent;
15+
use OCP\Settings\Events\DeclarativeSettingsSetValueEvent;
16+
17+
/** @template-implements IEventListener<DeclarativeSettingsGetValueEvent|DeclarativeSettingsSetValueEvent> */
18+
class DavAdminSettingsListener implements IEventListener {
19+
20+
public function __construct(
21+
private IAppConfig $config,
22+
) {
23+
}
24+
25+
public function handle(Event $event): void {
26+
27+
/** @var DeclarativeSettingsGetValueEvent|DeclarativeSettingsSetValueEvent $event */
28+
if ($event->getApp() !== Application::APP_ID) {
29+
return;
30+
}
31+
32+
if ($event->getFormId() !== 'dav-admin-system-address-book') {
33+
return;
34+
}
35+
36+
if ($event instanceof DeclarativeSettingsGetValueEvent) {
37+
$this->handleGetValue($event);
38+
return;
39+
}
40+
41+
if ($event instanceof DeclarativeSettingsSetValueEvent) {
42+
$this->handleSetValue($event);
43+
return;
44+
}
45+
46+
}
47+
48+
private function handleGetValue(DeclarativeSettingsGetValueEvent $event): void {
49+
50+
if ($event->getFieldId() === 'system_addressbook_enabled') {
51+
$event->setValue((int)$this->config->getValueBool('dav', 'system_addressbook_exposed', true));
52+
}
53+
54+
}
55+
56+
private function handleSetValue(DeclarativeSettingsSetValueEvent $event): void {
57+
58+
if ($event->getFieldId() === 'system_addressbook_enabled') {
59+
$this->config->setValueBool('dav', 'system_addressbook_exposed', (bool)$event->getValue());
60+
$event->stopPropagation();
61+
}
62+
63+
}
64+
65+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
/**
5+
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
6+
* SPDX-License-Identifier: AGPL-3.0-or-later
7+
*/
8+
namespace OCA\DAV\Settings\Admin;
9+
10+
use OCP\IL10N;
11+
use OCP\Settings\DeclarativeSettingsTypes;
12+
use OCP\Settings\IDeclarativeSettingsForm;
13+
14+
class SystemAddressBookSettings implements IDeclarativeSettingsForm {
15+
16+
public function __construct(
17+
private IL10N $l,
18+
) {
19+
}
20+
21+
public function getSchema(): array {
22+
return [
23+
'id' => 'dav-admin-system-address-book',
24+
'priority' => 10,
25+
'section_type' => DeclarativeSettingsTypes::SECTION_TYPE_ADMIN,
26+
'section_id' => 'groupware',
27+
'storage_type' => DeclarativeSettingsTypes::STORAGE_TYPE_EXTERNAL,
28+
'title' => $this->l->t('System Address Book'),
29+
'description' => $this->l->t('The system address book contains contact information for all users in your instance.'),
30+
31+
'fields' => [
32+
[
33+
'id' => 'system_addressbook_enabled',
34+
'title' => $this->l->t('Enable System Address Book'),
35+
'type' => DeclarativeSettingsTypes::CHECKBOX,
36+
'default' => false,
37+
'options' => [],
38+
],
39+
],
40+
];
41+
}
42+
43+
}

0 commit comments

Comments
 (0)