diff --git a/lib/private/Contacts/ContactsMenu/ContactsStore.php b/lib/private/Contacts/ContactsMenu/ContactsStore.php index fba970e93f..1cdb5d6fc5 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 40ceac7d78..16d77c2df0 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 17fcc00372..e41b1c7c63 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 fa7c57bb40..80c26a9078 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 testGetContactsWithoutBinaryImage() { + public function testGetContactsHidesOwnEntry() { + $user = $this->createMock(IUser::class); $this->contactsManager->expects($this->once()) ->method('search') ->with($this->equalTo(''), $this->equalTo(['FN'])) ->willReturn([ [ - 'id' => 123, + 'UID' => 'user123', ], [ - 'id' => 567, + '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([ + [ + 'UID' => 123, + ], + [ + '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 9b84bd7664..9c92ec54b9 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')