. * */ namespace OCA\Contacts; /** * This class manages our addressbooks. */ class Addressbook extends PIMCollectionAbstract { protected $backend; /** * An array containing the mandatory: * 'displayname' * 'discription' * 'permissions' * * And the optional: * 'Etag' * 'lastModified' * * @var string */ protected $addressBookInfo; /** * @param AbstractBackend $backend The storage backend * @param array $addressBookInfo */ public function __construct(Backend\AbstractBackend $backend, array $addressBookInfo) { $this->backend = $backend; $this->addressBookInfo = $addressBookInfo; //\OCP\Util::writeLog('contacts', __METHOD__.' backend: ' . print_r($this->backend, true), \OCP\Util::DEBUG); } /** * @return string */ public function getId() { return $this->addressBookInfo['id']; } /** * @return array */ public function getMetaData() { $metadata = $this->addressBookInfo; $metadata['lastmodified'] = $this->lastModified(); return $metadata; } /** * @return string */ public function getDisplayName() { return $this->addressBookInfo['displayname']; } /** * @return string */ public function getURI() { return $this->addressBookInfo['uri']; } /** * @return string */ public function getOwner() { return $this->addressBookInfo['userid']; } /** * @return string */ public function getPermissions() { return $this->addressBookInfo['permissions']; } /** * Returns a specific child node, referenced by its id * * @param string $id * @return IPIMObject */ function getChild($id) { if(!isset($this->objects[$id])) { $contact = $this->$backend->getContact($id); if($contact) { $this->objects[$id] = new Contact($this, $this->backend, $contact); } } return isset($this->objects[$id]) ? $this->objects[$id] : null; } /** * Checks if a child-node with the specified id exists * * @param string $id * @return bool */ function childExists($id) { return ($this->getChild($id) !== null); } /** * Returns an array with all the child nodes * * @return Contact[] */ function getChildren($limit = null, $offset = null, $omitdata = false) { //\OCP\Util::writeLog('contacts', __METHOD__.' backend: ' . print_r($this->backend, true), \OCP\Util::DEBUG); $contacts = array(); foreach($this->backend->getContacts($this->getId(), $limit, $offset, $omitdata) as $contact) { //\OCP\Util::writeLog('contacts', __METHOD__.' id: '.$contact['id'], \OCP\Util::DEBUG); if(!isset($this->objects[$contact['id']])) { $this->objects[$contact['id']] = new Contact($this, $this->backend, $contact); } $contacts[] = $this->objects[$contact['id']]; } return $contacts; } /** * Save the address book data to backend * * @param array $data * @return bool */ public function update(array $data) { foreach($data as $key => $value) { switch($key) { case 'displayname': $this->addressBookInfo['displayname'] = $value; break; case 'description': $this->addressBookInfo['description'] = $value; break; } } $this->backend->updateAddressBook($this->getId(), $data); } /** * @brief Get the last modification time for the object. * * Must return a UNIX time stamp or null if the backend * doesn't support it. * * @returns int | null */ public function lastModified() { return $this->backend->lastModifiedAddressBook($this->getId()); } }