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;
|
use RainLoop\Providers\AddressBook\CardDAV;
|
||||||
private $contactsManager;
|
private $contactsManager;
|
||||||
|
|
||||||
|
private const DEFAULT_URI = 'webmail';
|
||||||
|
private const SETTINGS_KEY = 'nextCloudAddressBookUri';
|
||||||
|
|
||||||
function __construct()
|
function __construct()
|
||||||
{
|
{
|
||||||
$this->GetSavedAddressBookKey();
|
$this->GetSavedAddressBookKey();
|
||||||
|
|
@ -21,20 +24,21 @@ class NextcloudAddressBook implements \RainLoop\Providers\AddressBook\AddressBoo
|
||||||
$this->contactsManager->unregisterAddressBook($addressBook);
|
$this->contactsManager->unregisterAddressBook($addressBook);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$uid = \OC::$server->getUserSession()->getUser()->getUID();
|
$uid = \OC::$server->getUserSession()->getUser()->getUID();
|
||||||
$cardDavBackend = \OC::$server->get(\OCA\DAV\CardDAV\CardDavBackend::class);
|
$cardDavBackend = \OC::$server->get(\OCA\DAV\CardDAV\CardDavBackend::class);
|
||||||
$principalUri = 'principals/users/' . $uid;
|
$principalUri = 'principals/users/' . $uid;
|
||||||
$uri = $this->GetSavedUri();
|
$uri = $this->GetSavedUri();
|
||||||
$addressBookId = $cardDavBackend->getAddressBooksByUri($principalUri, $uri);
|
$addressBookId = $cardDavBackend->getAddressBooksByUri($principalUri, $uri);
|
||||||
|
|
||||||
if ($addressBookId === null) {
|
if ($addressBookId === null) {
|
||||||
$addressBookId = $cardDavBackend->createAddressBook($principalUri, $uri, array_filter([
|
return $cardDavBackend->createAddressBook($principalUri, $uri, array_filter([
|
||||||
'{DAV:}displayname' => 'WebMail',
|
'{DAV:}displayname' => 'WebMail',
|
||||||
'{urn:ietf:params:xml:ns:carddav}addressbook-description' => 'Recipients from snappymail',
|
'{urn:ietf:params:xml:ns:carddav}addressbook-description' => 'Recipients from snappymail',
|
||||||
]));
|
]));
|
||||||
} else {
|
|
||||||
$addressBookId = $addressBookId['id'];
|
|
||||||
}
|
}
|
||||||
return $addressBookId;
|
|
||||||
|
return $addressBookId['id'];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function IsSupported(): bool
|
public function IsSupported(): bool
|
||||||
|
|
@ -177,6 +181,6 @@ class NextcloudAddressBook implements \RainLoop\Providers\AddressBook\AddressBoo
|
||||||
|
|
||||||
private function GetSavedUri(): string
|
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+',
|
DESCRIPTION = 'Integrate with Nextcloud v20+',
|
||||||
REQUIRED = '2.36.2';
|
REQUIRED = '2.36.2';
|
||||||
|
|
||||||
|
|
||||||
|
private const DEFAULT_ADDRESSBOOK_URI = 'webmail';
|
||||||
|
private const ADDRESSBOOK_SETTINGS_KEY = 'nextCloudAddressBookUri';
|
||||||
|
|
||||||
public function Init(): void
|
public function Init(): void
|
||||||
{
|
{
|
||||||
if (static::IsIntegrated()) {
|
if (static::IsIntegrated()) {
|
||||||
|
|
@ -42,9 +46,8 @@ class NextcloudPlugin extends \RainLoop\Plugins\AbstractPlugin
|
||||||
$this->addHook('smtp.before-login', 'beforeLogin');
|
$this->addHook('smtp.before-login', 'beforeLogin');
|
||||||
$this->addHook('sieve.before-login', 'beforeLogin');
|
$this->addHook('sieve.before-login', 'beforeLogin');
|
||||||
|
|
||||||
$this->addJs('js/addressbook.js'); // add js file
|
$this->addJs('js/addressbook.js');
|
||||||
$this->addTemplate('templates/AddressBookSettings.html');
|
$this->addJsonHook('NextcloudGetAddressBooks', 'GetAddressBooks');
|
||||||
$this->addJsonHook('JsonGetAddressbooks', 'GetAddressBooks');
|
|
||||||
$this->addJsonHook('NextcloudUpdateAddressBook', 'UpdateAddressBook');
|
$this->addJsonHook('NextcloudUpdateAddressBook', 'UpdateAddressBook');
|
||||||
} else {
|
} else {
|
||||||
\SnappyMail\Log::debug('Nextcloud', 'NOT integrated');
|
\SnappyMail\Log::debug('Nextcloud', 'NOT integrated');
|
||||||
|
|
@ -59,7 +62,7 @@ class NextcloudPlugin extends \RainLoop\Plugins\AbstractPlugin
|
||||||
|
|
||||||
$contactsManager = \OC::$server->getContactsManager();
|
$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) {
|
foreach ($contactsManager->getUserAddressBooks() as $addressBook) {
|
||||||
if ($addressBook->isSystemAddressBook()) {
|
if ($addressBook->isSystemAddressBook()) {
|
||||||
|
|
@ -88,7 +91,7 @@ class NextcloudPlugin extends \RainLoop\Plugins\AbstractPlugin
|
||||||
$uri = $this->jsonParam('uri');
|
$uri = $this->jsonParam('uri');
|
||||||
$oSettings = $this->Settings();
|
$oSettings = $this->Settings();
|
||||||
if (\is_string($uri)) {
|
if (\is_string($uri)) {
|
||||||
$oSettings->SetConf('NextCloudAddressBookUri', $uri);
|
$oSettings->SetConf(self::ADDRESSBOOK_SETTINGS_KEY, $uri);
|
||||||
$this->SettingsProvider()->Save($this->Account(), $oSettings);
|
$this->SettingsProvider()->Save($this->Account(), $oSettings);
|
||||||
}
|
}
|
||||||
return $this->jsonResponse(__FUNCTION__, true);
|
return $this->jsonResponse(__FUNCTION__, true);
|
||||||
|
|
|
||||||
|
|
@ -1,36 +1,38 @@
|
||||||
(rl => {
|
(rl => {
|
||||||
if (rl) {
|
if (rl) {
|
||||||
class AddressBookSettings /* extends AbstractViewSettings */ {
|
addEventListener('rl-view-model', e => {
|
||||||
constructor() {
|
if ('SettingsContacts' === e.detail.viewModelTemplateID) {
|
||||||
this.addressBookList = ko.observableArray();
|
const container = e.detail.viewModelDom.querySelector('.form-horizontal');
|
||||||
this.selectedAddressBook = ko.observable();
|
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) => {
|
const selectElement = Element.fromHTML('<select></select>');
|
||||||
if (!iError) {
|
|
||||||
const books = JSON.parse(oData.Result.addressbooks);
|
|
||||||
books.forEach(book => {
|
|
||||||
this.addressBookList.push(book);
|
|
||||||
|
|
||||||
if (book.selected) {
|
const books = JSON.parse(oData.Result.addressbooks);
|
||||||
this.selectedAddressBook(book.uri);
|
books.forEach(book => {
|
||||||
}
|
if (book.selected) {
|
||||||
});
|
selectElement.append(Element.fromHTML('<option value="' + book.uri + '" selected="selected">' + book.name + '</option>'));
|
||||||
|
} else {
|
||||||
this.selectedAddressBook.subscribe(value => {
|
selectElement.append(Element.fromHTML('<option value="' + book.uri + '">' + book.name + '</option>'));
|
||||||
rl.pluginRemoteRequest(() => { }, 'NextcloudUpdateAddressBook', {
|
}
|
||||||
uri: value
|
|
||||||
});
|
});
|
||||||
});
|
|
||||||
}
|
|
||||||
}, "JsonGetAddressbooks");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
rl.addSettingsViewModel(
|
selectElement.onchange = function() {
|
||||||
AddressBookSettings,
|
rl.pluginRemoteRequest(() => { }, 'NextcloudUpdateAddressBook', {
|
||||||
'AddressBookSettings',
|
uri: selectElement.value
|
||||||
'NEXTCLOUD/ADDRESS_BOOK',
|
});
|
||||||
'addressbook'
|
}
|
||||||
);
|
|
||||||
|
mainDivElement.append(selectElement);
|
||||||
|
container.append(mainDivElement);
|
||||||
|
}
|
||||||
|
}, "NextcloudGetAddressBooks");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
})(window.rl);
|
})(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