summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2014-07-15 17:13:34 +0200
committerThomas Müller <thomas.mueller@tmit.eu>2014-07-24 17:35:02 +0200
commit176ecbd31199370b68e310aa0dc361a4e25a04ea (patch)
treed325ed24285f8e9c0f2e211fb4beb3c793743018
parent6c93bcc814b6f063c0ecf058307222f5c92b02ae (diff)
downloadnextcloud-server-176ecbd31199370b68e310aa0dc361a4e25a04ea.tar.gz
nextcloud-server-176ecbd31199370b68e310aa0dc361a4e25a04ea.zip
ownCloud users are exported as address book
-rw-r--r--lib/base.php9
-rw-r--r--lib/private/contacts/localaddressbook.php104
-rw-r--r--tests/lib/contacts/localadressbook.php95
3 files changed, 208 insertions, 0 deletions
diff --git a/lib/base.php b/lib/base.php
index 840d9044711..95e5ae17b49 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -585,6 +585,7 @@ class OC {
self::registerPreviewHooks();
self::registerShareHooks();
self::registerLogRotate();
+ self::registerLocalAddressBook();
//make sure temporary files are cleaned up
register_shutdown_function(array('OC_Helper', 'cleanTmp'));
@@ -596,6 +597,14 @@ class OC {
}
}
+ 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
new file mode 100644
index 00000000000..483bbee83f8
--- /dev/null
+++ b/lib/private/contacts/localaddressbook.php
@@ -0,0 +1,104 @@
+<?php
+ /**
+ * ownCloud
+ *
+ * @author Thomas Müller
+ * @copyright 2014 Thomas Müller >deepdiver@owncloud.com>
+ *
+ */
+
+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\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
new file mode 100644
index 00000000000..276863aeb6c
--- /dev/null
+++ b/tests/lib/contacts/localadressbook.php
@@ -0,0 +1,95 @@
+<?php
+use OC\Contacts\LocalAddressBook;
+
+/**
+ * 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 PHPUnit_Framework_TestCase
+{
+
+ public function testSearchFN() {
+ $stub = $this->getMockForAbstractClass('\OCP\IUserManager', array('searchDisplayName'));
+
+ $stub->expects($this->any())->method('searchDisplayName')->will($this->return(array(
+ new SimpleUserForTesting('tom', 'Thomas'),
+ new SimpleUserForTesting('tomtom', 'Thomas T.'),
+ )));
+
+ $localAddressBook = new LocalAddressBook($stub);
+
+ $result = $localAddressBook->search('tom', array('FN'), array());
+ $this->assertEqual(2, count($result));
+ }
+
+ public function testSearchId() {
+ $stub = $this->getMockForAbstractClass('\OCP\IUserManager', array('searchDisplayName'));
+
+ $stub->expects($this->any())->method('search')->will($this->return(array(
+ new SimpleUserForTesting('tom', 'Thomas'),
+ new SimpleUserForTesting('tomtom', 'Thomas T.'),
+ )));
+
+ $localAddressBook = new LocalAddressBook($stub);
+
+ $result = $localAddressBook->search('tom', array('id'), array());
+ $this->assertEqual(2, count($result));
+ }
+}
+
+
+class SimpleUserForTesting implements \OCP\IUser {
+
+ 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) {
+ }
+
+ public function getHome() {
+ }
+
+ public function canChangeAvatar() {
+ }
+
+ public function canChangePassword() {
+ }
+
+ public function canChangeDisplayName() {
+ }
+
+ public function isEnabled() {
+ }
+
+ public function setEnabled($enabled) {
+ }
+}