diff options
-rw-r--r-- | apps/dav/lib/carddav/addressbookimpl.php | 7 | ||||
-rw-r--r-- | apps/dav/lib/carddav/contactsmanager.php | 14 | ||||
-rw-r--r-- | apps/dav/tests/unit/appinfo/applicationtest.php | 17 | ||||
-rw-r--r-- | apps/dav/tests/unit/carddav/contactsmanagertest.php | 2 | ||||
-rw-r--r-- | apps/files_sharing/api/sharees.php | 9 | ||||
-rw-r--r-- | lib/base.php | 9 | ||||
-rw-r--r-- | lib/private/contacts/localaddressbook.php | 118 | ||||
-rw-r--r-- | tests/lib/contacts/localadressbook.php | 114 |
8 files changed, 41 insertions, 249 deletions
diff --git a/apps/dav/lib/carddav/addressbookimpl.php b/apps/dav/lib/carddav/addressbookimpl.php index 240e40c9688..1d7b55c1a5d 100644 --- a/apps/dav/lib/carddav/addressbookimpl.php +++ b/apps/dav/lib/carddav/addressbookimpl.php @@ -178,7 +178,8 @@ class AddressBookImpl implements IAddressBook { protected function createUid() { do { $uid = $this->getUid(); - } while (!empty($this->backend->getContact($uid . '.vcf'))); + $contact = $this->backend->getContact($uid . '.vcf'); + } while (!empty($contact)); return $uid; } @@ -213,6 +214,10 @@ class AddressBookImpl implements IAddressBook { foreach ($vCard->children as $property) { $result[$property->name] = $property->getValue(); } + if ($this->addressBookInfo['principaluri'] === 'principals/system/system' && + $this->addressBookInfo['uri'] === 'system') { + $result['isLocalSystemBook'] = true; + } return $result; } } diff --git a/apps/dav/lib/carddav/contactsmanager.php b/apps/dav/lib/carddav/contactsmanager.php index 3fe4de4a15e..7900c6ccae0 100644 --- a/apps/dav/lib/carddav/contactsmanager.php +++ b/apps/dav/lib/carddav/contactsmanager.php @@ -39,8 +39,18 @@ class ContactsManager { * @param string $userId */ public function setupContactsProvider(IManager $cm, $userId) { - $addressBooks = $this->backend->getAddressBooksForUser("principals/$userId"); - foreach ($addressBooks as $addressBookInfo) { + $addressBooks = $this->backend->getAddressBooksForUser("principals/users/$userId"); + $this->register($cm, $addressBooks); + $addressBooks = $this->backend->getAddressBooksForUser("principals/system/system"); + $this->register($cm, $addressBooks); + } + + /** + * @param IManager $cm + * @param $addressBooks + */ + private function register(IManager $cm, $addressBooks) { + foreach ($addressBooks as $addressBookInfo) { $addressBook = new \OCA\DAV\CardDAV\AddressBook($this->backend, $addressBookInfo); $cm->registerAddressBook( new AddressBookImpl( diff --git a/apps/dav/tests/unit/appinfo/applicationtest.php b/apps/dav/tests/unit/appinfo/applicationtest.php index 36a75212ff5..7f533a185df 100644 --- a/apps/dav/tests/unit/appinfo/applicationtest.php +++ b/apps/dav/tests/unit/appinfo/applicationtest.php @@ -35,17 +35,28 @@ use Test\TestCase; class ApplicationTest extends TestCase { public function test() { $app = new Application(); + $c = $app->getContainer(); // assert service instances in the container are properly setup - $s = $app->getContainer()->query('ContactsManager'); + $s = $c->query('ContactsManager'); $this->assertInstanceOf('OCA\DAV\CardDAV\ContactsManager', $s); - $s = $app->getContainer()->query('CardDavBackend'); + $s = $c->query('CardDavBackend'); $this->assertInstanceOf('OCA\DAV\CardDAV\CardDavBackend', $s); + } + + public function testContactsManagerSetup() { + $app = new Application(); + $c = $app->getContainer(); + $c->registerService('CardDavBackend', function($c) { + $service = $this->getMockBuilder('OCA\DAV\CardDAV\CardDavBackend')->disableOriginalConstructor()->getMock(); + $service->method('getAddressBooksForUser')->willReturn([]); + return $service; + }); // assert setupContactsProvider() is proper /** @var IManager | \PHPUnit_Framework_MockObject_MockObject $cm */ $cm = $this->getMockBuilder('OCP\Contacts\IManager')->disableOriginalConstructor()->getMock(); - $app->setupContactsProvider($cm, 'user01'); + $app->setupContactsProvider($cm, 'xxx'); $this->assertTrue(true); } } diff --git a/apps/dav/tests/unit/carddav/contactsmanagertest.php b/apps/dav/tests/unit/carddav/contactsmanagertest.php index c4ec4c29e39..5a384550df5 100644 --- a/apps/dav/tests/unit/carddav/contactsmanagertest.php +++ b/apps/dav/tests/unit/carddav/contactsmanagertest.php @@ -30,7 +30,7 @@ class ContactsManagerTest extends TestCase { public function test() { /** @var IManager | \PHPUnit_Framework_MockObject_MockObject $cm */ $cm = $this->getMockBuilder('OCP\Contacts\IManager')->disableOriginalConstructor()->getMock(); - $cm->expects($this->once())->method('registerAddressBook'); + $cm->expects($this->exactly(2))->method('registerAddressBook'); /** @var CardDavBackend | \PHPUnit_Framework_MockObject_MockObject $backEnd */ $backEnd = $this->getMockBuilder('OCA\DAV\CardDAV\CardDavBackend')->disableOriginalConstructor()->getMock(); $backEnd->method('getAddressBooksForUser')->willReturn([ diff --git a/apps/files_sharing/api/sharees.php b/apps/files_sharing/api/sharees.php index d23a6f56501..85cea2e4238 100644 --- a/apps/files_sharing/api/sharees.php +++ b/apps/files_sharing/api/sharees.php @@ -270,8 +270,15 @@ class Sharees { $addressBookContacts = $this->contactsManager->search($search, ['CLOUD', 'FN']); $foundRemoteById = false; foreach ($addressBookContacts as $contact) { + if (isset($contact['isLocalSystemBook'])) { + continue; + } if (isset($contact['CLOUD'])) { - foreach ($contact['CLOUD'] as $cloudId) { + $cloudIds = $contact['CLOUD']; + if (!is_array($cloudIds)) { + $cloudIds = [$cloudIds]; + } + foreach ($cloudIds as $cloudId) { if (strtolower($contact['FN']) === $search || strtolower($cloudId) === $search) { if (strtolower($cloudId) === $search) { $foundRemoteById = true; diff --git a/lib/base.php b/lib/base.php index 56ff1cb8962..fc4a99287d0 100644 --- a/lib/base.php +++ b/lib/base.php @@ -645,7 +645,6 @@ class OC { } self::registerShareHooks(); self::registerLogRotate(); - self::registerLocalAddressBook(); self::registerEncryptionWrapper(); self::registerEncryptionHooks(); @@ -701,14 +700,6 @@ class OC { \OC::$server->getEventLogger()->end('boot'); } - private static function registerLocalAddressBook() { - self::$server->getContactsManager()->register(function() { - $userManager = \OC::$server->getUserManager(); - \OC::$server->getContactsManager()->registerAddressBook( - new \OC\Contacts\LocalAddressBook($userManager)); - }); - } - /** * register hooks for the cache */ diff --git a/lib/private/contacts/localaddressbook.php b/lib/private/contacts/localaddressbook.php deleted file mode 100644 index 6fba63ae327..00000000000 --- a/lib/private/contacts/localaddressbook.php +++ /dev/null @@ -1,118 +0,0 @@ -<?php -/** - * @author Joas Schilling <nickvergessen@owncloud.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * - * @copyright Copyright (c) 2016, ownCloud, Inc. - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * 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, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -namespace OC\Contacts; - -class LocalAddressBook implements \OCP\IAddressBook { - - /** - * @var \OCP\IUserManager - */ - private $userManager; - - /** - * @param $userManager - */ - public function __construct($userManager) { - $this->userManager = $userManager; - } - - /** - * @return string defining the technical unique key - */ - public function getKey() { - return 'local'; - } - - /** - * In comparison to getKey() this function returns a human readable (maybe translated) name - * - * @return mixed - */ - public function getDisplayName() { - return "Local users"; - } - - /** - * @param string $pattern which should match within the $searchProperties - * @param array $searchProperties defines the properties within the query pattern should match - * @param array $options - for future use. One should always have options! - * @return array an array of contacts which are arrays of key-value-pairs - */ - public function search($pattern, $searchProperties, $options) { - $users = array(); - if($pattern == '') { - // Fetch all contacts - $users = $this->userManager->search(''); - } else { - foreach($searchProperties as $property) { - $result = array(); - if($property === 'FN') { - $result = $this->userManager->searchDisplayName($pattern); - } else if ($property === 'id') { - $result = $this->userManager->search($pattern); - } - if (is_array($result)) { - $users = array_merge($users, $result); - } - } - } - - $contacts = array(); - foreach($users as $user){ - $contact = array( - "id" => $user->getUID(), - "FN" => $user->getDisplayname(), - "EMAIL" => array(), - "IMPP" => array( - "x-owncloud-handle:" . $user->getUID() - ) - ); - $contacts[] = $contact; - } - return $contacts; - } - - /** - * @param array $properties this array if key-value-pairs defines a contact - * @return array an array representing the contact just created or updated - */ - public function createOrUpdate($properties) { - return array(); - } - - /** - * @return int - */ - public function getPermissions() { - return \OCP\Constants::PERMISSION_READ; - } - - /** - * @param object $id the unique identifier to a contact - * @return bool successful or not - */ - public function delete($id) { - return false; - } -} diff --git a/tests/lib/contacts/localadressbook.php b/tests/lib/contacts/localadressbook.php deleted file mode 100644 index ad3c088e3cd..00000000000 --- a/tests/lib/contacts/localadressbook.php +++ /dev/null @@ -1,114 +0,0 @@ -<?php -use OC\Contacts\LocalAddressBook; -use OCP\IUser; - -/** - * ownCloud - * - * @author Thomas Müller - * @copyright 2014 Thomas Müller thomas.mueller@tmit.eu - * - * You should have received a copy of the GNU Affero General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -class Test_LocalAddressBook extends \Test\TestCase -{ - - public function testSearchFN() { - $stub = $this->getMockForAbstractClass('\OCP\IUserManager', array('searchDisplayName')); - - $stub->expects($this->any())->method('searchDisplayName')->will($this->returnValue(array( - new SimpleUserForTesting('tom', 'Thomas'), - new SimpleUserForTesting('tomtom', 'Thomas T.'), - ))); - - $localAddressBook = new LocalAddressBook($stub); - - $result = $localAddressBook->search('tom', array('FN'), array()); - $this->assertEquals(2, count($result)); - } - - public function testSearchId() { - $stub = $this->getMockForAbstractClass('\OCP\IUserManager', array('searchDisplayName')); - - $stub->expects($this->any())->method('search')->will($this->returnValue(array( - new SimpleUserForTesting('tom', 'Thomas'), - new SimpleUserForTesting('tomtom', 'Thomas T.'), - ))); - - $localAddressBook = new LocalAddressBook($stub); - - $result = $localAddressBook->search('tom', array('id'), array()); - $this->assertEquals(2, count($result)); - } -} - - -class SimpleUserForTesting implements IUser { - - private $uid; - private $displayName; - - public function __construct($uid, $displayName) { - - $this->uid = $uid; - $this->displayName = $displayName; - } - - public function getUID() { - return $this->uid; - } - - public function getDisplayName() { - return $this->displayName; - } - - public function setDisplayName($displayName) { - } - - public function getLastLogin() { - } - - public function updateLastLoginTimestamp() { - } - - public function delete() { - } - - public function setPassword($password, $recoveryPassword = null) { - } - - public function getHome() { - } - - public function getBackendClassName() { - } - - public function canChangeAvatar() { - } - - public function canChangePassword() { - } - - public function canChangeDisplayName() { - } - - public function isEnabled() { - } - - public function setEnabled($enabled) { - } - - public function getEMailAddress() { - } - - public function getAvatarImage($size) { - } - - public function getCloudId() { - } - - public function setEMailAddress($mailAddress) { - } -} |