From f48ca203c07ff2559b1353fb0129d1e40ee3c429 Mon Sep 17 00:00:00 2001 From: Bjoern Schiessle Date: Sun, 4 Oct 2020 22:56:54 +0200 Subject: [PATCH 1/5] expose system address book Signed-off-by: Bjoern Schiessle --- apps/dav/lib/CardDAV/CardDavBackend.php | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/apps/dav/lib/CardDAV/CardDavBackend.php b/apps/dav/lib/CardDAV/CardDavBackend.php index 14ade3f16e..60167c61d8 100644 --- a/apps/dav/lib/CardDAV/CardDavBackend.php +++ b/apps/dav/lib/CardDAV/CardDavBackend.php @@ -242,6 +242,31 @@ class CardDavBackend implements BackendInterface, SyncSupport { } $result->closeCursor(); + // query for system addressbooks + $principalUri="principals/system/system"; + $query = $this->db->getQueryBuilder(); + $query->select(['id', 'uri', 'displayname', 'principaluri', 'description', 'synctoken']) + ->from('addressbooks') + ->where($query->expr()->eq('principaluri', $query->createNamedParameter($principalUri))); + $result = $query->execute(); + + while ($row = $result->fetch()) { + $addressBooks[$row['id']] = [ + 'id' => $row['id'], + 'uri' => "system-address-book", + 'principaluri' => $principalUriOriginal, + '{DAV:}displayname' => "System address book", + '{' . Plugin::NS_CARDDAV . '}addressbook-description' => $row['description'], + '{http://calendarserver.org/ns/}getctag' => $row['synctoken'], + '{http://sabredav.org/ns}sync-token' => $row['synctoken'] ?: '0', + '{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal' => $row['principaluri'], + $readOnlyPropertyName => true, + ]; + + $this->addOwnerPrincipal($addressBooks[$row['id']]); + } + $result->closeCursor(); + return array_values($addressBooks); } From 5f1e7c69d027df401773d9d289a93804c2cb4a8f Mon Sep 17 00:00:00 2001 From: Bjoern Schiessle Date: Sun, 4 Oct 2020 23:25:21 +0200 Subject: [PATCH 2/5] add setting to expose system address book Signed-off-by: Bjoern Schiessle --- apps/dav/appinfo/info.xml | 3 +- .../composer/composer/autoload_classmap.php | 1 + .../dav/composer/composer/autoload_static.php | 1 + apps/dav/js/settings-admin-carddav.js | 28 ++++++++ apps/dav/lib/Settings/CardDAVSettings.php | 68 +++++++++++++++++++ apps/dav/templates/settings-admin-carddav.php | 42 ++++++++++++ 6 files changed, 142 insertions(+), 1 deletion(-) create mode 100644 apps/dav/js/settings-admin-carddav.js create mode 100644 apps/dav/lib/Settings/CardDAVSettings.php create mode 100644 apps/dav/templates/settings-admin-carddav.php diff --git a/apps/dav/appinfo/info.xml b/apps/dav/appinfo/info.xml index 53825f5507..3c4e266ddd 100644 --- a/apps/dav/appinfo/info.xml +++ b/apps/dav/appinfo/info.xml @@ -5,7 +5,7 @@ WebDAV WebDAV endpoint WebDAV endpoint - 1.17.0 + 1.18.0 agpl owncloud.org DAV @@ -55,6 +55,7 @@ OCA\DAV\Settings\CalDAVSettings + OCA\DAV\Settings\CardDAVSettings diff --git a/apps/dav/composer/composer/autoload_classmap.php b/apps/dav/composer/composer/autoload_classmap.php index aaa5e82da0..4f6a427640 100644 --- a/apps/dav/composer/composer/autoload_classmap.php +++ b/apps/dav/composer/composer/autoload_classmap.php @@ -239,6 +239,7 @@ return array( 'OCA\\DAV\\Search\\TasksSearchProvider' => $baseDir . '/../lib/Search/TasksSearchProvider.php', 'OCA\\DAV\\Server' => $baseDir . '/../lib/Server.php', 'OCA\\DAV\\Settings\\CalDAVSettings' => $baseDir . '/../lib/Settings/CalDAVSettings.php', + 'OCA\\DAV\\Settings\\CardDAVSettings' => $baseDir . '/../lib/Settings/CardDAVSettings.php', 'OCA\\DAV\\Storage\\PublicOwnerWrapper' => $baseDir . '/../lib/Storage/PublicOwnerWrapper.php', 'OCA\\DAV\\SystemTag\\SystemTagMappingNode' => $baseDir . '/../lib/SystemTag/SystemTagMappingNode.php', 'OCA\\DAV\\SystemTag\\SystemTagNode' => $baseDir . '/../lib/SystemTag/SystemTagNode.php', diff --git a/apps/dav/composer/composer/autoload_static.php b/apps/dav/composer/composer/autoload_static.php index 0dc34f5a31..01f5a645dd 100644 --- a/apps/dav/composer/composer/autoload_static.php +++ b/apps/dav/composer/composer/autoload_static.php @@ -254,6 +254,7 @@ class ComposerStaticInitDAV 'OCA\\DAV\\Search\\TasksSearchProvider' => __DIR__ . '/..' . '/../lib/Search/TasksSearchProvider.php', 'OCA\\DAV\\Server' => __DIR__ . '/..' . '/../lib/Server.php', 'OCA\\DAV\\Settings\\CalDAVSettings' => __DIR__ . '/..' . '/../lib/Settings/CalDAVSettings.php', + 'OCA\\DAV\\Settings\\CardDAVSettings' => __DIR__ . '/..' . '/../lib/Settings/CardDAVSettings.php', 'OCA\\DAV\\Storage\\PublicOwnerWrapper' => __DIR__ . '/..' . '/../lib/Storage/PublicOwnerWrapper.php', 'OCA\\DAV\\SystemTag\\SystemTagMappingNode' => __DIR__ . '/..' . '/../lib/SystemTag/SystemTagMappingNode.php', 'OCA\\DAV\\SystemTag\\SystemTagNode' => __DIR__ . '/..' . '/../lib/SystemTag/SystemTagNode.php', diff --git a/apps/dav/js/settings-admin-carddav.js b/apps/dav/js/settings-admin-carddav.js new file mode 100644 index 0000000000..db81c80288 --- /dev/null +++ b/apps/dav/js/settings-admin-carddav.js @@ -0,0 +1,28 @@ +/** + * @copyright 2017, Bjoern Schiessle + * + * @author Bjoern Schiessle + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +"use strict"; + +$('#carddavExposeSystemAddressBook').change(function() { + var val = $(this)[0].checked; + + OCP.AppConfig.setValue('dav', 'exposeSystemAddressBook', val ? 'yes' : 'no'); +}); diff --git a/apps/dav/lib/Settings/CardDAVSettings.php b/apps/dav/lib/Settings/CardDAVSettings.php new file mode 100644 index 0000000000..53435905bf --- /dev/null +++ b/apps/dav/lib/Settings/CardDAVSettings.php @@ -0,0 +1,68 @@ + + * + * @author Bjoern Schiessle + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCA\DAV\Settings; + +use OCP\AppFramework\Http\TemplateResponse; +use OCP\IConfig; +use OCP\Settings\ISettings; + +class CardDAVSettings implements ISettings { + + /** @var IConfig */ + private $config; + + /** + * CalDAVSettings constructor. + * + * @param IConfig $config + */ + public function __construct(IConfig $config) { + $this->config = $config; + } + + /** + * @return TemplateResponse + */ + public function getForm() { + $parameters = [ + 'expose_system_address_book' => $this->config->getAppValue('dav', 'exposeSystemAddressBook', 'no'), + ]; + + return new TemplateResponse('dav', 'settings-admin-carddav', $parameters); + } + + /** + * @return string + */ + public function getSection() { + return 'groupware'; + } + + /** + * @return int + */ + public function getPriority() { + return 10; + } +} diff --git a/apps/dav/templates/settings-admin-carddav.php b/apps/dav/templates/settings-admin-carddav.php new file mode 100644 index 0000000000..b82a9168f6 --- /dev/null +++ b/apps/dav/templates/settings-admin-carddav.php @@ -0,0 +1,42 @@ + + * + * @author Bjoern Schiessle + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +script('dav', [ + 'settings-admin-carddav' +]); + +/** @var \OCP\IL10N $l */ +/** @var array $_ */ +?> +
+

t('Addressbook server')); ?>

+

+ /> + +
+ + t('Only information set to "Public" or "Trusted" in the user\'s personal settings will be exposed.')); ?> + +

+
From 0f5f4cdbe1d8e59521445f6737647ff15ea037c1 Mon Sep 17 00:00:00 2001 From: Bjoern Schiessle Date: Mon, 5 Oct 2020 18:02:00 +0200 Subject: [PATCH 3/5] only expose system address book, if it is enabled by the admin. By default the address book will not be exposed. Signed-off-by: Bjoern Schiessle --- apps/dav/appinfo/v1/carddav.php | 2 +- apps/dav/lib/CardDAV/CardDavBackend.php | 52 +++++++++++-------- apps/dav/lib/RootCollection.php | 4 +- .../tests/unit/CardDAV/CardDavBackendTest.php | 24 +++++---- 4 files changed, 49 insertions(+), 33 deletions(-) diff --git a/apps/dav/appinfo/v1/carddav.php b/apps/dav/appinfo/v1/carddav.php index dbab1ae968..0b1486507e 100644 --- a/apps/dav/appinfo/v1/carddav.php +++ b/apps/dav/appinfo/v1/carddav.php @@ -57,7 +57,7 @@ $principalBackend = new Principal( 'principals/' ); $db = \OC::$server->getDatabaseConnection(); -$cardDavBackend = new CardDavBackend($db, $principalBackend, \OC::$server->getUserManager(), \OC::$server->getGroupManager(), \OC::$server->get(\OCP\EventDispatcher\IEventDispatcher::class), \OC::$server->getEventDispatcher()); +$cardDavBackend = new CardDavBackend($db, $principalBackend, \OC::$server->getUserManager(), \OC::$server->getGroupManager(), \OC::$server->get(\OCP\EventDispatcher\IEventDispatcher::class), \OC::$server->getEventDispatcher(), \OC::$server->getConfig()); $debugging = \OC::$server->getConfig()->getSystemValue('debug', false); diff --git a/apps/dav/lib/CardDAV/CardDavBackend.php b/apps/dav/lib/CardDAV/CardDavBackend.php index 60167c61d8..33bfe52224 100644 --- a/apps/dav/lib/CardDAV/CardDavBackend.php +++ b/apps/dav/lib/CardDAV/CardDavBackend.php @@ -47,6 +47,7 @@ use OCA\DAV\Events\CardDeletedEvent; use OCA\DAV\Events\CardUpdatedEvent; use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\EventDispatcher\IEventDispatcher; +use OCP\IConfig; use OCP\IDBConnection; use OCP\IGroupManager; use OCP\IUser; @@ -96,6 +97,9 @@ class CardDavBackend implements BackendInterface, SyncSupport { /** @var IEventDispatcher */ private $dispatcher; + /** @var IConfig */ + private $config; + /** @var EventDispatcherInterface */ private $legacyDispatcher; @@ -110,18 +114,21 @@ class CardDavBackend implements BackendInterface, SyncSupport { * @param IGroupManager $groupManager * @param IEventDispatcher $dispatcher * @param EventDispatcherInterface $legacyDispatcher + * @param IConfig $config */ public function __construct(IDBConnection $db, Principal $principalBackend, IUserManager $userManager, IGroupManager $groupManager, IEventDispatcher $dispatcher, - EventDispatcherInterface $legacyDispatcher) { + EventDispatcherInterface $legacyDispatcher, + IConfig $config) { $this->db = $db; $this->principalBackend = $principalBackend; $this->userManager = $userManager; $this->dispatcher = $dispatcher; $this->legacyDispatcher = $legacyDispatcher; + $this->config = $config; $this->sharingBackend = new Backend($this->db, $this->userManager, $groupManager, $principalBackend, 'addressbook'); } @@ -243,29 +250,32 @@ class CardDavBackend implements BackendInterface, SyncSupport { $result->closeCursor(); // query for system addressbooks - $principalUri="principals/system/system"; - $query = $this->db->getQueryBuilder(); - $query->select(['id', 'uri', 'displayname', 'principaluri', 'description', 'synctoken']) - ->from('addressbooks') - ->where($query->expr()->eq('principaluri', $query->createNamedParameter($principalUri))); - $result = $query->execute(); + $includeSystemAddressBook = $this->config->getAppValue('dav', 'exposeSystemAddressBook', 'no') === 'yes'; + if ($includeSystemAddressBook) { + $principalUri="principals/system/system"; + $query = $this->db->getQueryBuilder(); + $query->select(['id', 'uri', 'displayname', 'principaluri', 'description', 'synctoken']) + ->from('addressbooks') + ->where($query->expr()->eq('principaluri', $query->createNamedParameter($principalUri))); + $result = $query->execute(); - while ($row = $result->fetch()) { - $addressBooks[$row['id']] = [ - 'id' => $row['id'], - 'uri' => "system-address-book", - 'principaluri' => $principalUriOriginal, - '{DAV:}displayname' => "System address book", - '{' . Plugin::NS_CARDDAV . '}addressbook-description' => $row['description'], - '{http://calendarserver.org/ns/}getctag' => $row['synctoken'], - '{http://sabredav.org/ns}sync-token' => $row['synctoken'] ?: '0', - '{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal' => $row['principaluri'], - $readOnlyPropertyName => true, - ]; + while ($row = $result->fetch()) { + $addressBooks[$row['id']] = [ + 'id' => $row['id'], + 'uri' => "system-address-book", + 'principaluri' => $principalUriOriginal, + '{DAV:}displayname' => "System address book", + '{' . Plugin::NS_CARDDAV . '}addressbook-description' => $row['description'], + '{http://calendarserver.org/ns/}getctag' => $row['synctoken'], + '{http://sabredav.org/ns}sync-token' => $row['synctoken'] ?: '0', + '{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal' => $row['principaluri'], + $readOnlyPropertyName => true, + ]; - $this->addOwnerPrincipal($addressBooks[$row['id']]); + $this->addOwnerPrincipal($addressBooks[$row['id']]); + } + $result->closeCursor(); } - $result->closeCursor(); return array_values($addressBooks); } diff --git a/apps/dav/lib/RootCollection.php b/apps/dav/lib/RootCollection.php index 83f3691959..ce5744e609 100644 --- a/apps/dav/lib/RootCollection.php +++ b/apps/dav/lib/RootCollection.php @@ -128,11 +128,11 @@ class RootCollection extends SimpleCollection { ); $pluginManager = new PluginManager(\OC::$server, \OC::$server->query(IAppManager::class)); - $usersCardDavBackend = new CardDavBackend($db, $userPrincipalBackend, $userManager, $groupManager, $dispatcher, $legacyDispatcher); + $usersCardDavBackend = new CardDavBackend($db, $userPrincipalBackend, $userManager, $groupManager, $dispatcher, $legacyDispatcher, \OC::$server->getConfig()); $usersAddressBookRoot = new AddressBookRoot($userPrincipalBackend, $usersCardDavBackend, $pluginManager, 'principals/users'); $usersAddressBookRoot->disableListing = $disableListing; - $systemCardDavBackend = new CardDavBackend($db, $userPrincipalBackend, $userManager, $groupManager, $dispatcher, $legacyDispatcher); + $systemCardDavBackend = new CardDavBackend($db, $userPrincipalBackend, $userManager, $groupManager, $dispatcher, $legacyDispatcher, \OC::$server->getConfig()); $systemAddressBookRoot = new AddressBookRoot(new SystemPrincipalBackend(), $systemCardDavBackend, $pluginManager, 'principals/system'); $systemAddressBookRoot->disableListing = $disableListing; diff --git a/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php b/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php index 95617001b3..80012006f7 100644 --- a/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php +++ b/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php @@ -82,6 +82,9 @@ class CardDavBackendTest extends TestCase { /** @var IEventDispatcher|\PHPUnit\Framework\MockObject\MockObject */ private $dispatcher; + /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */ + private $config; + /** @var IDBConnection */ private $db; @@ -129,6 +132,9 @@ class CardDavBackendTest extends TestCase { protected function setUp(): void { parent::setUp(); + $this->config = $this->createMock(IConfig::class); + $this->config->expects($this->any())->method('getAppValue') + ->with('dav', 'exposeSystemAddressBook', 'no')->willReturn('no'); $this->userManager = $this->createMock(IUserManager::class); $this->groupManager = $this->createMock(IGroupManager::class); $this->principal = $this->getMockBuilder(Principal::class) @@ -156,7 +162,7 @@ class CardDavBackendTest extends TestCase { $this->db = \OC::$server->getDatabaseConnection(); - $this->backend = new CardDavBackend($this->db, $this->principal, $this->userManager, $this->groupManager, $this->dispatcher, $this->legacyDispatcher); + $this->backend = new CardDavBackend($this->db, $this->principal, $this->userManager, $this->groupManager, $this->dispatcher, $this->legacyDispatcher, $this->config); // start every test with a empty cards_properties and cards table $query = $this->db->getQueryBuilder(); $query->delete('cards_properties')->execute(); @@ -246,7 +252,7 @@ class CardDavBackendTest extends TestCase { /** @var CardDavBackend | \PHPUnit\Framework\MockObject\MockObject $backend */ $backend = $this->getMockBuilder(CardDavBackend::class) - ->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->groupManager, $this->dispatcher, $this->legacyDispatcher]) + ->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->groupManager, $this->dispatcher, $this->legacyDispatcher, $this->config]) ->setMethods(['updateProperties', 'purgeProperties'])->getMock(); // create a new address book @@ -318,7 +324,7 @@ class CardDavBackendTest extends TestCase { public function testMultiCard() { $this->backend = $this->getMockBuilder(CardDavBackend::class) - ->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->groupManager, $this->dispatcher, $this->legacyDispatcher]) + ->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->groupManager, $this->dispatcher, $this->legacyDispatcher, $this->config]) ->setMethods(['updateProperties'])->getMock(); // create a new address book @@ -371,7 +377,7 @@ class CardDavBackendTest extends TestCase { public function testMultipleUIDOnDifferentAddressbooks() { $this->backend = $this->getMockBuilder(CardDavBackend::class) - ->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->groupManager, $this->dispatcher, $this->legacyDispatcher]) + ->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->groupManager, $this->dispatcher, $this->legacyDispatcher, $this->config]) ->setMethods(['updateProperties'])->getMock(); // create 2 new address books @@ -393,7 +399,7 @@ class CardDavBackendTest extends TestCase { public function testMultipleUIDDenied() { $this->backend = $this->getMockBuilder(CardDavBackend::class) - ->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->groupManager, $this->dispatcher, $this->legacyDispatcher]) + ->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->groupManager, $this->dispatcher, $this->legacyDispatcher, $this->config]) ->setMethods(['updateProperties'])->getMock(); // create a new address book @@ -414,7 +420,7 @@ class CardDavBackendTest extends TestCase { public function testNoValidUID() { $this->backend = $this->getMockBuilder(CardDavBackend::class) - ->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->groupManager, $this->dispatcher, $this->legacyDispatcher]) + ->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->groupManager, $this->dispatcher, $this->legacyDispatcher, $this->config]) ->setMethods(['updateProperties'])->getMock(); // create a new address book @@ -431,7 +437,7 @@ class CardDavBackendTest extends TestCase { public function testDeleteWithoutCard() { $this->backend = $this->getMockBuilder(CardDavBackend::class) - ->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->groupManager, $this->dispatcher, $this->legacyDispatcher]) + ->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->groupManager, $this->dispatcher, $this->legacyDispatcher, $this->config]) ->setMethods([ 'getCardId', 'addChange', @@ -471,7 +477,7 @@ class CardDavBackendTest extends TestCase { public function testSyncSupport() { $this->backend = $this->getMockBuilder(CardDavBackend::class) - ->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->groupManager, $this->dispatcher, $this->legacyDispatcher]) + ->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->groupManager, $this->dispatcher, $this->legacyDispatcher, $this->config]) ->setMethods(['updateProperties'])->getMock(); // create a new address book @@ -537,7 +543,7 @@ class CardDavBackendTest extends TestCase { $cardId = 2; $backend = $this->getMockBuilder(CardDavBackend::class) - ->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->groupManager, $this->dispatcher, $this->legacyDispatcher]) + ->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->groupManager, $this->dispatcher, $this->legacyDispatcher, $this->config]) ->setMethods(['getCardId'])->getMock(); $backend->expects($this->any())->method('getCardId')->willReturn($cardId); From 0ee66348d1de9892a4c9af531a2c995015679725 Mon Sep 17 00:00:00 2001 From: Bjoern Schiessle Date: Mon, 5 Oct 2020 20:03:35 +0200 Subject: [PATCH 4/5] switch to pure js Signed-off-by: Bjoern Schiessle --- apps/dav/js/settings-admin-carddav.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/apps/dav/js/settings-admin-carddav.js b/apps/dav/js/settings-admin-carddav.js index db81c80288..db0ea65f03 100644 --- a/apps/dav/js/settings-admin-carddav.js +++ b/apps/dav/js/settings-admin-carddav.js @@ -21,8 +21,6 @@ */ "use strict"; -$('#carddavExposeSystemAddressBook').change(function() { - var val = $(this)[0].checked; - - OCP.AppConfig.setValue('dav', 'exposeSystemAddressBook', val ? 'yes' : 'no'); -}); +document.getElementById('carddavExposeSystemAddressBook').onclick = function() { + OCP.AppConfig.setValue('dav', 'exposeSystemAddressBook', this.checked ? 'yes' : 'no'); +}; From 14587d42489b96844867c262fdba7a04347d1101 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schie=C3=9Fle?= Date: Mon, 5 Oct 2020 20:36:15 +0200 Subject: [PATCH 5/5] Watch the chnage event to update the settings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: John Molakvoæ Signed-off-by: Bjoern Schiessle --- apps/dav/js/settings-admin-carddav.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/dav/js/settings-admin-carddav.js b/apps/dav/js/settings-admin-carddav.js index db0ea65f03..daaecae8e5 100644 --- a/apps/dav/js/settings-admin-carddav.js +++ b/apps/dav/js/settings-admin-carddav.js @@ -21,6 +21,6 @@ */ "use strict"; -document.getElementById('carddavExposeSystemAddressBook').onclick = function() { - OCP.AppConfig.setValue('dav', 'exposeSystemAddressBook', this.checked ? 'yes' : 'no'); -}; +document.getElementById('carddavExposeSystemAddressBook').addEventListener('change', function(e) { + OCP.AppConfig.setValue('dav', 'exposeSystemAddressBook', e.target.checked ? 'yes' : 'no'); +});