mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-08-25 18:19:22 +03:00
feat: move nextcloud addressbook user settings under contatcs settings section
This commit is contained in:
parent
500b997f91
commit
a47cc450e8
4 changed files with 47 additions and 50 deletions
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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('<div class="control-group">'
|
||||
+ '<label>' + rl.i18n("NEXTCLOUD/ADDRESS_BOOK") + '</label>'
|
||||
+ '</div>');
|
||||
|
||||
rl.pluginRemoteRequest((iError, oData) => {
|
||||
if (!iError) {
|
||||
const books = JSON.parse(oData.Result.addressbooks);
|
||||
books.forEach(book => {
|
||||
this.addressBookList.push(book);
|
||||
const selectElement = Element.fromHTML('<select></select>');
|
||||
|
||||
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('<option value="' + book.uri + '" selected="selected">' + book.name + '</option>'));
|
||||
} else {
|
||||
selectElement.append(Element.fromHTML('<option value="' + book.uri + '">' + book.name + '</option>'));
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}, "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);
|
||||
|
|
|
|||
|
|
@ -1,12 +0,0 @@
|
|||
<div class="b-settings-nextcloud-addressbook form-horizontal">
|
||||
<div class="legend">AddressBook</div>
|
||||
<div class="form-horizontal">
|
||||
|
||||
<div class="control-group">
|
||||
<label data-i18n="NEXTCLOUD/ADDRESS_BOOK"></label>
|
||||
<select data-bind="options: addressBookList, value: selectedAddressBook,
|
||||
optionsText: 'name', optionsValue: 'uri'"></select>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
Loading…
Add table
Add a link
Reference in a new issue