mirror of https://github.com/nextcloud/contacts
Merge pull request #173 from nextcloud/contactsmenu-integration
Add contacts menu integration
This commit is contained in:
commit
482d57ab9a
|
@ -26,4 +26,7 @@
|
|||
<nextcloud min-version="9" max-version="12" />
|
||||
</dependencies>
|
||||
<ocsid>168708</ocsid>
|
||||
<contactsmenu>
|
||||
<provider>OCA\Contacts\ContactsMenu\Providers\DetailsProvider</provider>
|
||||
</contactsmenu>
|
||||
</info>
|
||||
|
|
|
@ -198,7 +198,7 @@ angular.module('contactsApp')
|
|||
if(ctrl.contactList && ctrl.contactList.length > 0) {
|
||||
$route.updateParams({
|
||||
gid: $routeParams.gid,
|
||||
uid: ctrl.contactList[0].uid()
|
||||
uid: $routeParams.uid || ctrl.contactList[0].uid()
|
||||
});
|
||||
}
|
||||
unbindWatch(); // unbind as we only want one update
|
||||
|
|
|
@ -15,6 +15,12 @@ angular.module('contactsApp', ['uuid4', 'angular-cache', 'ngRoute', 'ui.bootstra
|
|||
template: '<contactdetails></contactdetails>'
|
||||
});
|
||||
|
||||
$routeProvider.when('/contact/:uid', {
|
||||
redirectTo: function(parameters) {
|
||||
return '/' + t('contacts', 'All contacts') + '/' + parameters.uid;
|
||||
}
|
||||
});
|
||||
|
||||
$routeProvider.when('/:gid/:uid', {
|
||||
template: '<contactdetails></contactdetails>'
|
||||
});
|
||||
|
|
|
@ -0,0 +1,77 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @copyright 2017 Christoph Wurst <christoph@winzerhof-wurst.at>
|
||||
*
|
||||
* @author 2017 Christoph Wurst <christoph@winzerhof-wurst.at>
|
||||
*
|
||||
* @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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace OCA\Contacts\ContactsMenu\Providers;
|
||||
|
||||
use OCP\Contacts\ContactsMenu\IActionFactory;
|
||||
use OCP\Contacts\ContactsMenu\IEntry;
|
||||
use OCP\Contacts\ContactsMenu\IProvider;
|
||||
use OCP\IL10N;
|
||||
use OCP\IURLGenerator;
|
||||
|
||||
class DetailsProvider implements IProvider {
|
||||
|
||||
/** @var IURLGenerator */
|
||||
private $urlGenerator;
|
||||
|
||||
/** @var IActionFactory */
|
||||
private $actionFactory;
|
||||
|
||||
/** @var IL10N */
|
||||
private $l10n;
|
||||
|
||||
/**
|
||||
* @param IURLGenerator $urlGenerator
|
||||
* @param IActionFactory $actionFactory
|
||||
*/
|
||||
public function __construct(IURLGenerator $urlGenerator, IActionFactory $actionFactory, IL10N $l10n) {
|
||||
$this->actionFactory = $actionFactory;
|
||||
$this->urlGenerator = $urlGenerator;
|
||||
$this->l10n = $l10n;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param IEntry $entry
|
||||
*/
|
||||
public function process(IEntry $entry) {
|
||||
$uid = $entry->getProperty('UID');
|
||||
|
||||
if (is_null($uid)) {
|
||||
// Nothing to do
|
||||
return;
|
||||
}
|
||||
|
||||
if ($entry->getProperty('isLocalSystemBook') === true) {
|
||||
// Cannot show details -> ignore
|
||||
return;
|
||||
}
|
||||
|
||||
$iconUrl = $this->urlGenerator->getAbsoluteURL($this->urlGenerator->imagePath('core', 'actions/info.svg'));
|
||||
$contactsUrl = $this->urlGenerator->getAbsoluteURL('/index.php/apps/contacts#/contact/' . $uid);
|
||||
$action = $this->actionFactory->newLinkAction($iconUrl, $this->l10n->t('Details'), $contactsUrl);
|
||||
$action->setPriority(0);
|
||||
$entry->addAction($action);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,124 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @copyright 2017 Christoph Wurst <christoph@winzerhof-wurst.at>
|
||||
*
|
||||
* @author 2017 Christoph Wurst <christoph@winzerhof-wurst.at>
|
||||
*
|
||||
* @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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace Tests\Contacts\ContactsMenu\Providers;
|
||||
|
||||
use OCA\Contacts\ContactsMenu\Providers\DetailsProvider;
|
||||
use OCP\Contacts\ContactsMenu\IActionFactory;
|
||||
use OCP\Contacts\ContactsMenu\IEntry;
|
||||
use OCP\Contacts\ContactsMenu\ILinkAction;
|
||||
use OCP\IL10N;
|
||||
use OCP\IURLGenerator;
|
||||
use PHPUnit_Framework_MockObject_MockObject;
|
||||
use PHPUnit_Framework_TestCase;
|
||||
|
||||
class DetailsProviderTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
/** @var IURLGenerator|PHPUnit_Framework_MockObject_MockObject */
|
||||
private $urlGenerator;
|
||||
|
||||
/** @var IActionFactory|PHPUnit_Framework_MockObject_MockObject */
|
||||
private $actionFactory;
|
||||
|
||||
/** @var IL10n|PHPUnit_Framework_MockObject_MockObject */
|
||||
private $l10n;
|
||||
|
||||
/** @var DetailsProvider */
|
||||
private $provider;
|
||||
|
||||
protected function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
$this->urlGenerator = $this->createMock(IURLGenerator::class);
|
||||
$this->actionFactory = $this->createMock(IActionFactory::class);
|
||||
$this->l10n = $this->createMock(IL10N::class);
|
||||
$this->provider = new DetailsProvider($this->urlGenerator, $this->actionFactory, $this->l10n);
|
||||
}
|
||||
|
||||
public function testProcess() {
|
||||
$entry = $this->createMock(IEntry::class);
|
||||
$action = $this->createMock(ILinkAction::class);
|
||||
|
||||
$entry->expects($this->exactly(2))
|
||||
->method('getProperty')
|
||||
->will($this->returnValueMap([
|
||||
['UID', 'e3a71614-c602-4eb5-9994-47eec551542b'],
|
||||
['isLocalSystemBook', null]
|
||||
]));
|
||||
$this->urlGenerator->expects($this->once())
|
||||
->method('imagePath')
|
||||
->with('core', 'actions/info.svg')
|
||||
->willReturn('core/img/actions/info.svg');
|
||||
$iconUrl = 'https://example.com/core/img/actions/info.svg';
|
||||
$this->urlGenerator->expects($this->exactly(2))
|
||||
->method('getAbsoluteURL')
|
||||
->will($this->returnValueMap([
|
||||
['/index.php/apps/contacts#/contact/e3a71614-c602-4eb5-9994-47eec551542b', 'cloud.example.com/index.php/apps/contacts#/contact/e3a71614-c602-4eb5-9994-47eec551542b'],
|
||||
['core/img/actions/info.svg', $iconUrl],
|
||||
]));
|
||||
$this->l10n->expects($this->once())
|
||||
->method('t')
|
||||
->with('Details')
|
||||
->willReturnArgument(0);
|
||||
$this->actionFactory->expects($this->once())
|
||||
->method('newLinkAction')
|
||||
->with($this->equalTo($iconUrl), $this->equalTo('Details'), $this->equalTo('cloud.example.com/index.php/apps/contacts#/contact/e3a71614-c602-4eb5-9994-47eec551542b'))
|
||||
->willReturn($action);
|
||||
$action->expects($this->once())
|
||||
->method('setPriority')
|
||||
->with($this->equalTo(0));
|
||||
$entry->expects($this->once())
|
||||
->method('addAction')
|
||||
->with($action);
|
||||
|
||||
$this->provider->process($entry);
|
||||
}
|
||||
|
||||
public function testProcessNoUID() {
|
||||
$entry = $this->createMock(IEntry::class);
|
||||
$entry->expects($this->once())
|
||||
->method('getProperty')
|
||||
->with($this->equalTo('UID'))
|
||||
->willReturn(null);
|
||||
$entry->expects($this->never())
|
||||
->method('addAction');
|
||||
|
||||
$this->provider->process($entry);
|
||||
}
|
||||
|
||||
public function testProcessSystemContact() {
|
||||
$entry = $this->createMock(IEntry::class);
|
||||
$entry->expects($this->exactly(2))
|
||||
->method('getProperty')
|
||||
->will($this->returnValueMap([
|
||||
['UID', 1234],
|
||||
['isLocalSystemBook', true]
|
||||
]));
|
||||
$entry->expects($this->never())
|
||||
->method('addAction');
|
||||
|
||||
$this->provider->process($entry);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue