summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristoph Wurst <christoph@winzerhof-wurst.at>2017-04-10 16:49:26 +0200
committerChristoph Wurst <christoph@winzerhof-wurst.at>2017-04-25 20:47:17 +0200
commitb8c2a8ae36235780675103286a04f8b6af50b4aa (patch)
treec75dd2baa0fdaabaf2a2c7aec40781ce3177509a
parent36cee1f3867bdaf9fd792fe9c03fe4e4ef95ffcc (diff)
downloadnextcloud-server-b8c2a8ae36235780675103286a04f8b6af50b4aa.tar.gz
nextcloud-server-b8c2a8ae36235780675103286a04f8b6af50b4aa.zip
Don't show contacts an entry for themselves
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
-rw-r--r--lib/private/Contacts/ContactsMenu/ContactsStore.php10
-rw-r--r--lib/private/Contacts/ContactsMenu/Manager.php3
-rw-r--r--lib/public/Contacts/ContactsMenu/IProvider.php1
-rw-r--r--tests/lib/Contacts/ContactsMenu/ContactsStoreTest.php57
-rw-r--r--tests/lib/Contacts/ContactsMenu/ManagerTest.php2
5 files changed, 59 insertions, 14 deletions
diff --git a/lib/private/Contacts/ContactsMenu/ContactsStore.php b/lib/private/Contacts/ContactsMenu/ContactsStore.php
index fba970e93fa..1cdb5d6fc5f 100644
--- a/lib/private/Contacts/ContactsMenu/ContactsStore.php
+++ b/lib/private/Contacts/ContactsMenu/ContactsStore.php
@@ -26,6 +26,7 @@ namespace OC\Contacts\ContactsMenu;
use OCP\Contacts\ContactsMenu\IEntry;
use OCP\Contacts\IManager;
+use OCP\IUser;
class ContactsStore {
@@ -40,17 +41,22 @@ class ContactsStore {
}
/**
+ * @param IUser $user
* @param string|null $filter
* @return IEntry[]
*/
- public function getContacts($filter) {
+ public function getContacts(IUser $user, $filter) {
$allContacts = $this->contactsManager->search($filter ?: '', [
'FN',
]);
- return array_map(function(array $contact) {
+ $self = $user->getUID();
+ $entries = array_map(function(array $contact) {
return $this->contactArrayToEntry($contact);
}, $allContacts);
+ return array_filter($entries, function(IEntry $entry) use ($self) {
+ return $entry->getProperty('UID') !== $self;
+ });
}
/**
diff --git a/lib/private/Contacts/ContactsMenu/Manager.php b/lib/private/Contacts/ContactsMenu/Manager.php
index 40ceac7d783..16d77c2df08 100644
--- a/lib/private/Contacts/ContactsMenu/Manager.php
+++ b/lib/private/Contacts/ContactsMenu/Manager.php
@@ -26,7 +26,6 @@ namespace OC\Contacts\ContactsMenu;
use OCP\App\IAppManager;
use OCP\Contacts\ContactsMenu\IEntry;
-use OCP\IURLGenerator;
use OCP\IUser;
class Manager {
@@ -57,7 +56,7 @@ class Manager {
* @return array
*/
public function getEntries(IUser $user, $filter) {
- $entries = $this->store->getContacts($filter);
+ $entries = $this->store->getContacts($user, $filter);
$sortedEntries = $this->sortEntries($entries);
$topEntries = array_slice($sortedEntries, 0, 25);
diff --git a/lib/public/Contacts/ContactsMenu/IProvider.php b/lib/public/Contacts/ContactsMenu/IProvider.php
index 17fcc003720..e41b1c7c639 100644
--- a/lib/public/Contacts/ContactsMenu/IProvider.php
+++ b/lib/public/Contacts/ContactsMenu/IProvider.php
@@ -32,6 +32,7 @@ interface IProvider {
/**
* @since 12.0
* @param IEntry $entry
+ * @return void
*/
public function process(IEntry $entry);
}
diff --git a/tests/lib/Contacts/ContactsMenu/ContactsStoreTest.php b/tests/lib/Contacts/ContactsMenu/ContactsStoreTest.php
index fa7c57bb409..80c26a9078e 100644
--- a/tests/lib/Contacts/ContactsMenu/ContactsStoreTest.php
+++ b/tests/lib/Contacts/ContactsMenu/ContactsStoreTest.php
@@ -26,6 +26,7 @@ namespace Tests\Contacts\ContactsMenu;
use OC\Contacts\ContactsMenu\ContactsStore;
use OCP\Contacts\IManager;
+use OCP\IUser;
use PHPUnit_Framework_MockObject_MockObject;
use Test\TestCase;
@@ -46,23 +47,27 @@ class ContactsStoreTest extends TestCase {
}
public function testGetContactsWithoutFilter() {
+ $user = $this->createMock(IUser::class);
$this->contactsManager->expects($this->once())
->method('search')
->with($this->equalTo(''), $this->equalTo(['FN']))
->willReturn([
[
- 'id' => 123,
+ 'UID' => 123,
],
[
- 'id' => 567,
+ 'UID' => 567,
'FN' => 'Darren Roner',
'EMAIL' => [
'darren@roner.au'
],
],
]);
+ $user->expects($this->once())
+ ->method('getUID')
+ ->willReturn('user123');
- $entries = $this->contactsStore->getContacts('');
+ $entries = $this->contactsStore->getContacts($user, '');
$this->assertCount(2, $entries);
$this->assertEquals([
@@ -70,16 +75,43 @@ class ContactsStoreTest extends TestCase {
], $entries[1]->getEMailAddresses());
}
+ public function testGetContactsHidesOwnEntry() {
+ $user = $this->createMock(IUser::class);
+ $this->contactsManager->expects($this->once())
+ ->method('search')
+ ->with($this->equalTo(''), $this->equalTo(['FN']))
+ ->willReturn([
+ [
+ 'UID' => 'user123',
+ ],
+ [
+ 'UID' => 567,
+ 'FN' => 'Darren Roner',
+ 'EMAIL' => [
+ 'darren@roner.au'
+ ],
+ ],
+ ]);
+ $user->expects($this->once())
+ ->method('getUID')
+ ->willReturn('user123');
+
+ $entries = $this->contactsStore->getContacts($user, '');
+
+ $this->assertCount(1, $entries);
+ }
+
public function testGetContactsWithoutBinaryImage() {
+ $user = $this->createMock(IUser::class);
$this->contactsManager->expects($this->once())
->method('search')
->with($this->equalTo(''), $this->equalTo(['FN']))
->willReturn([
[
- 'id' => 123,
+ 'UID' => 123,
],
[
- 'id' => 567,
+ 'UID' => 567,
'FN' => 'Darren Roner',
'EMAIL' => [
'darren@roner.au'
@@ -87,23 +119,27 @@ class ContactsStoreTest extends TestCase {
'PHOTO' => base64_encode('photophotophoto'),
],
]);
+ $user->expects($this->once())
+ ->method('getUID')
+ ->willReturn('user123');
- $entries = $this->contactsStore->getContacts('');
+ $entries = $this->contactsStore->getContacts($user, '');
$this->assertCount(2, $entries);
$this->assertNull($entries[1]->getAvatar());
}
public function testGetContactsWithoutAvatarURI() {
+ $user = $this->createMock(IUser::class);
$this->contactsManager->expects($this->once())
->method('search')
->with($this->equalTo(''), $this->equalTo(['FN']))
->willReturn([
[
- 'id' => 123,
+ 'UID' => 123,
],
[
- 'id' => 567,
+ 'UID' => 567,
'FN' => 'Darren Roner',
'EMAIL' => [
'darren@roner.au'
@@ -111,8 +147,11 @@ class ContactsStoreTest extends TestCase {
'PHOTO' => 'VALUE=uri:https://photo',
],
]);
+ $user->expects($this->once())
+ ->method('getUID')
+ ->willReturn('user123');
- $entries = $this->contactsStore->getContacts('');
+ $entries = $this->contactsStore->getContacts($user, '');
$this->assertCount(2, $entries);
$this->assertEquals('https://photo', $entries[1]->getAvatar());
diff --git a/tests/lib/Contacts/ContactsMenu/ManagerTest.php b/tests/lib/Contacts/ContactsMenu/ManagerTest.php
index 9b84bd76648..9c92ec54b9f 100644
--- a/tests/lib/Contacts/ContactsMenu/ManagerTest.php
+++ b/tests/lib/Contacts/ContactsMenu/ManagerTest.php
@@ -77,7 +77,7 @@ class ManagerTest extends TestCase {
$provider = $this->createMock(IProvider::class);
$this->contactsStore->expects($this->once())
->method('getContacts')
- ->with($filter)
+ ->with($user, $filter)
->willReturn($entries);
$this->actionProviderStore->expects($this->once())
->method('getProviders')