[Pkg-owncloud-commits] [owncloud] 19/61: ownCloud users are exported as address book

David Prévot taffit at moszumanska.debian.org
Thu Jul 31 03:51:42 UTC 2014


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository owncloud.

commit 02a61c0b6a16e956a0a8fdf5889162e7c857c169
Author: Thomas Müller <thomas.mueller at tmit.eu>
Date:   Tue Jul 15 17:13:34 2014 +0200

    ownCloud users are exported as address book
---
 lib/base.php                              |   9 +++
 lib/private/contacts/localaddressbook.php | 104 ++++++++++++++++++++++++++++++
 tests/lib/contacts/localadressbook.php    |  95 +++++++++++++++++++++++++++
 3 files changed, 208 insertions(+)

diff --git a/lib/base.php b/lib/base.php
index 730cee5..341859d 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -564,6 +564,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'));
@@ -575,6 +576,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 0000000..483bbee
--- /dev/null
+++ b/lib/private/contacts/localaddressbook.php
@@ -0,0 +1,104 @@
+<?php
+ /**
+ * ownCloud
+ *
+ * @author Thomas Müller
+ * @copyright 2014 Thomas Müller >deepdiver at 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 0000000..276863a
--- /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 at 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) {
+	}
+}

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud.git



More information about the Pkg-owncloud-commits mailing list