From a47cc450e81146ed970b5a919b69e19e59ad9a64 Mon Sep 17 00:00:00 2001 From: Fahim Salam Chowdhury Date: Fri, 30 Aug 2024 13:55:55 +0600 Subject: [PATCH] feat: move nextcloud addressbook user settings under contatcs settings section --- plugins/nextcloud/NextcloudAddressBook.php | 14 +++-- plugins/nextcloud/index.php | 13 +++-- plugins/nextcloud/js/addressbook.js | 58 ++++++++++--------- .../templates/AddressBookSettings.html | 12 ---- 4 files changed, 47 insertions(+), 50 deletions(-) delete mode 100644 plugins/nextcloud/templates/AddressBookSettings.html diff --git a/plugins/nextcloud/NextcloudAddressBook.php b/plugins/nextcloud/NextcloudAddressBook.php index 4d3d06de6..aaccb0b31 100644 --- a/plugins/nextcloud/NextcloudAddressBook.php +++ b/plugins/nextcloud/NextcloudAddressBook.php @@ -7,6 +7,9 @@ class NextcloudAddressBook implements \RainLoop\Providers\AddressBook\AddressBoo use RainLoop\Providers\AddressBook\CardDAV; private $contactsManager; + private const DEFAULT_URI = 'webmail'; + private const SETTINGS_KEY = 'nextCloudAddressBookUri'; + function __construct() { $this->GetSavedAddressBookKey(); @@ -21,20 +24,21 @@ class NextcloudAddressBook implements \RainLoop\Providers\AddressBook\AddressBoo $this->contactsManager->unregisterAddressBook($addressBook); } } + $uid = \OC::$server->getUserSession()->getUser()->getUID(); $cardDavBackend = \OC::$server->get(\OCA\DAV\CardDAV\CardDavBackend::class); $principalUri = 'principals/users/' . $uid; $uri = $this->GetSavedUri(); $addressBookId = $cardDavBackend->getAddressBooksByUri($principalUri, $uri); + if ($addressBookId === null) { - $addressBookId = $cardDavBackend->createAddressBook($principalUri, $uri, array_filter([ + return $cardDavBackend->createAddressBook($principalUri, $uri, array_filter([ '{DAV:}displayname' => 'WebMail', '{urn:ietf:params:xml:ns:carddav}addressbook-description' => 'Recipients from snappymail', ])); - } else { - $addressBookId = $addressBookId['id']; } - return $addressBookId; + + return $addressBookId['id']; } public function IsSupported(): bool @@ -177,6 +181,6 @@ class NextcloudAddressBook implements \RainLoop\Providers\AddressBook\AddressBoo private function GetSavedUri(): string { - return $this->Settings()->GetConf('NextCloudAddressBookUri', 'webmail'); + return $this->Settings()->GetConf(self::SETTINGS_KEY, self::DEFAULT_URI); } } diff --git a/plugins/nextcloud/index.php b/plugins/nextcloud/index.php index 04bc3a084..09164fff0 100644 --- a/plugins/nextcloud/index.php +++ b/plugins/nextcloud/index.php @@ -10,6 +10,10 @@ class NextcloudPlugin extends \RainLoop\Plugins\AbstractPlugin DESCRIPTION = 'Integrate with Nextcloud v20+', REQUIRED = '2.36.2'; + + private const DEFAULT_ADDRESSBOOK_URI = 'webmail'; + private const ADDRESSBOOK_SETTINGS_KEY = 'nextCloudAddressBookUri'; + public function Init(): void { if (static::IsIntegrated()) { @@ -42,9 +46,8 @@ class NextcloudPlugin extends \RainLoop\Plugins\AbstractPlugin $this->addHook('smtp.before-login', 'beforeLogin'); $this->addHook('sieve.before-login', 'beforeLogin'); - $this->addJs('js/addressbook.js'); // add js file - $this->addTemplate('templates/AddressBookSettings.html'); - $this->addJsonHook('JsonGetAddressbooks', 'GetAddressBooks'); + $this->addJs('js/addressbook.js'); + $this->addJsonHook('NextcloudGetAddressBooks', 'GetAddressBooks'); $this->addJsonHook('NextcloudUpdateAddressBook', 'UpdateAddressBook'); } else { \SnappyMail\Log::debug('Nextcloud', 'NOT integrated'); @@ -59,7 +62,7 @@ class NextcloudPlugin extends \RainLoop\Plugins\AbstractPlugin $contactsManager = \OC::$server->getContactsManager(); - $selectedUri = $this->Settings()->GetConf('NextCloudAddressBookUri', 'webmail'); + $selectedUri = $this->Settings()->GetConf(self::ADDRESSBOOK_SETTINGS_KEY, self::DEFAULT_ADDRESSBOOK_URI); foreach ($contactsManager->getUserAddressBooks() as $addressBook) { if ($addressBook->isSystemAddressBook()) { @@ -88,7 +91,7 @@ class NextcloudPlugin extends \RainLoop\Plugins\AbstractPlugin $uri = $this->jsonParam('uri'); $oSettings = $this->Settings(); if (\is_string($uri)) { - $oSettings->SetConf('NextCloudAddressBookUri', $uri); + $oSettings->SetConf(self::ADDRESSBOOK_SETTINGS_KEY, $uri); $this->SettingsProvider()->Save($this->Account(), $oSettings); } return $this->jsonResponse(__FUNCTION__, true); diff --git a/plugins/nextcloud/js/addressbook.js b/plugins/nextcloud/js/addressbook.js index 1ce7bfc79..c871c0928 100644 --- a/plugins/nextcloud/js/addressbook.js +++ b/plugins/nextcloud/js/addressbook.js @@ -1,36 +1,38 @@ (rl => { if (rl) { - class AddressBookSettings /* extends AbstractViewSettings */ { - constructor() { - this.addressBookList = ko.observableArray(); - this.selectedAddressBook = ko.observable(); + addEventListener('rl-view-model', e => { + if ('SettingsContacts' === e.detail.viewModelTemplateID) { + const container = e.detail.viewModelDom.querySelector('.form-horizontal'); + if (container) { + rl.pluginRemoteRequest((iError, oData) => { + if (!iError) { + const mainDivElement = Element.fromHTML('
' + + '' + + '
'); - rl.pluginRemoteRequest((iError, oData) => { - if (!iError) { - const books = JSON.parse(oData.Result.addressbooks); - books.forEach(book => { - this.addressBookList.push(book); + const selectElement = Element.fromHTML(''); - if (book.selected) { - this.selectedAddressBook(book.uri); - } - }); - - this.selectedAddressBook.subscribe(value => { - rl.pluginRemoteRequest(() => { }, 'NextcloudUpdateAddressBook', { - uri: value + const books = JSON.parse(oData.Result.addressbooks); + books.forEach(book => { + if (book.selected) { + selectElement.append(Element.fromHTML('')); + } else { + selectElement.append(Element.fromHTML('')); + } }); - }); - } - }, "JsonGetAddressbooks"); - } - } - rl.addSettingsViewModel( - AddressBookSettings, - 'AddressBookSettings', - 'NEXTCLOUD/ADDRESS_BOOK', - 'addressbook' - ); + selectElement.onchange = function() { + rl.pluginRemoteRequest(() => { }, 'NextcloudUpdateAddressBook', { + uri: selectElement.value + }); + } + + mainDivElement.append(selectElement); + container.append(mainDivElement); + } + }, "NextcloudGetAddressBooks"); + } + } + }); } })(window.rl); diff --git a/plugins/nextcloud/templates/AddressBookSettings.html b/plugins/nextcloud/templates/AddressBookSettings.html deleted file mode 100644 index e33682515..000000000 --- a/plugins/nextcloud/templates/AddressBookSettings.html +++ /dev/null @@ -1,12 +0,0 @@ -
-
AddressBook
-
- -
- - -
- -
-