Skip to content
Snippets Groups Projects
Commit 176ecbd3 authored by Thomas Müller's avatar Thomas Müller
Browse files

ownCloud users are exported as address book

parent 6c93bcc8
No related branches found
No related tags found
No related merge requests found
......@@ -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
*/
......
<?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;
}
}
<?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) {
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment