diff options
author | Christoph Wurst <christoph@winzerhof-wurst.at> | 2017-04-10 16:49:26 +0200 |
---|---|---|
committer | Christoph Wurst <christoph@winzerhof-wurst.at> | 2017-04-25 20:47:17 +0200 |
commit | b8c2a8ae36235780675103286a04f8b6af50b4aa (patch) | |
tree | c75dd2baa0fdaabaf2a2c7aec40781ce3177509a | |
parent | 36cee1f3867bdaf9fd792fe9c03fe4e4ef95ffcc (diff) | |
download | nextcloud-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.php | 10 | ||||
-rw-r--r-- | lib/private/Contacts/ContactsMenu/Manager.php | 3 | ||||
-rw-r--r-- | lib/public/Contacts/ContactsMenu/IProvider.php | 1 | ||||
-rw-r--r-- | tests/lib/Contacts/ContactsMenu/ContactsStoreTest.php | 57 | ||||
-rw-r--r-- | tests/lib/Contacts/ContactsMenu/ManagerTest.php | 2 |
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') |