diff --git a/appinfo/remote.php b/appinfo/remote.php index e99e296b..9b11ce61 100644 --- a/appinfo/remote.php +++ b/appinfo/remote.php @@ -40,7 +40,7 @@ $principalBackend = new OC_Connector_Sabre_Principal(); $addressbookbackends = array(); $addressbookbackends[] = new OCA\Contacts\Backend\Database(\OCP\User::getUser()); -$carddavBackend = new OCA\Contacts\CardDAV\Backend(array('local', 'shared')); +$carddavBackend = new OCA\Contacts\CardDAV\Backend(array('local', 'shared', 'ldap')); $requestBackend = new OC_Connector_Sabre_Request(); // Root nodes diff --git a/lib/app.php b/lib/app.php index 36d6b95f..86be14d2 100644 --- a/lib/app.php +++ b/lib/app.php @@ -53,7 +53,7 @@ class App { * @var array */ public static $backendClasses = array( - //'ldap' => 'OCA\Contacts\Backend\Ldap', + 'ldap' => 'OCA\Contacts\Backend\Ldap', 'local' => 'OCA\Contacts\Backend\Database', 'shared' => 'OCA\Contacts\Backend\Shared', ); diff --git a/lib/backend/abstractbackend.php b/lib/backend/abstractbackend.php index 242f1ffe..475f0c5b 100644 --- a/lib/backend/abstractbackend.php +++ b/lib/backend/abstractbackend.php @@ -313,8 +313,8 @@ abstract class AbstractBackend { * @param VCard $contact * @param array $options - Optional options * @return string|bool The identifier for the new contact or false on error. - public function createContact($addressbookid, $contact, array $options = array()); */ + public abstract function createContact($addressbookid, $contact, array $options = array()); /** * Updates a contact @@ -326,8 +326,8 @@ abstract class AbstractBackend { * @param VCard $contact * @param array $options - Optional options * @return bool - public function updateContact($addressbookid, $id, $carddata, array $options = array()); */ + public abstract function updateContact($addressbookid, $id, $carddata, array $options = array()); /** * Deletes a contact @@ -338,8 +338,8 @@ abstract class AbstractBackend { * @param mixed $id * @param array $options - Optional options * @return bool - public function deleteContact($addressbookid, $id, array $options = array()); */ + public abstract function deleteContact($addressbookid, $id, array $options = array()); /** * @brief Get the last modification time for a contact. @@ -414,7 +414,7 @@ abstract class AbstractBackend { $key = 'prefs_' . $key; $data = \OCP\Config::getUserValue($this->userid, 'contacts', $key, false); - return $data ? json_decode($data) : array(); + return $data ? (array)json_decode($data) : array(); } /** @@ -424,12 +424,34 @@ abstract class AbstractBackend { * @return boolean */ public function setPreferences($addressbookid, array $params) { - $key = $this->combinedKey($addressBookId); + $key = $this->combinedKey($addressbookid); $key = 'prefs_' . $key; + + $addressbookList = $this->getAddressbookList($params); + if (!in_array($addressbookid, $addressbookList)) { + $addressbookList[] = $addressbookid; + $this->setAddressbookList($addressbookList, $params); + } $data = json_encode($params); return $data ? \OCP\Config::setUserValue($this->userid, 'contacts', $key, $data) : false; } + + protected function setAddressbookList(array $addressbookList, array $params) { + $key = $this->name . "_list"; + $data = json_encode($addressbookList); + + return $data + ? \OCP\Config::setUserValue($this->userid, 'contacts', $key, $data) + : false; + } + + protected function getAddressbookList() { + $key = $this->name . "_list"; + $data = \OCP\Config::getUserValue($this->userid, 'contacts', $key, false); + + return $data ? json_decode($data) : array(); + } } diff --git a/lib/backend/ldap.php b/lib/backend/ldap.php index a873cba7..89c402d3 100644 --- a/lib/backend/ldap.php +++ b/lib/backend/ldap.php @@ -257,27 +257,28 @@ class Ldap extends AbstractBackend { */ public function getAddressBooksForUser(array $options = array()) { - try { + /*try { if(!isset(self::$preparedQueries['addressbooksforuser'])) { $sql = 'SELECT `configkey` from *PREFIX*preferences where `configkey` like ?'; $configkeyPrefix = $this->name . "_%_uri"; self::$preparedQueries['addressbooksforuser'] = \OCP\DB::prepare($sql); + error_log("ca farte ? ".$sql." ".$configkeyPrefix); $result = self::$preparedQueries['addressbooksforuser']->execute(array($configkeyPrefix)); if (\OC_DB::isError($result)) { \OCP\Util::write('contacts', __METHOD__. 'DB error: ' . \OC_DB::getErrorMessage($result), \OCP\Util::ERROR); return $this->addressbooks; } - $this->addressbooks = array(); - while($row = $result->fetchRow()) { - $id = str_replace("_uri", "", str_replace($this->name."_", "", $row['configkey'])); - $this->addressbooks[] = self::getAddressBook($id); - } - return $this->addressbooks; } } catch(\Exception $e) { \OC_Log::write('contacts', __METHOD__.' exception: ' . $e->getMessage(), \OCP\Util::ERROR); return $this->addressbooks; + }*/ + $addressbookidList = $this->getAddressbookList(); + $this->addressbooks = array(); + foreach($addressbookidList as $addressbookid) { + $this->addressbooks[] = self::getAddressBook($addressbookid); } + return $this->addressbooks; } @@ -304,11 +305,11 @@ class Ldap extends AbstractBackend { $preferences = self::getPreferences($addressbookid); if ($preferences != false) { $current = array(); - $current['id'] = $addressbookid; - $current['displayname'] = $preferences['displayname']; - $current['description'] = $preferences['description']; + $current['id'] = (string)$addressbookid; + $current['displayname'] = (string)$preferences['displayname']; + $current['description'] = (string)$preferences['description']; $current['owner'] = $this->userid; - $current['uri'] = $preferences['uri']; + $current['uri'] = (string)$preferences['uri']; $current['permissions'] = \OCP\PERMISSION_ALL; $current['lastmodified'] = self::lastModifiedAddressBook($addressbookid); return $current; @@ -431,7 +432,7 @@ class Ldap extends AbstractBackend { //OCP\Util::writeLog('contacts_ldap', __METHOD__.' Connector OK', \OC_Log::DEBUG); $info = self::ldapFindMultiple( $this->ldapParams['ldapbasednsearch'], - '(objectclass=person)', + $this->ldapParams['ldapfilter'], $this->connector->getLdapEntries(), isset($options['offset']) ? $options['offset'] : null, isset($options['limit']) ? $options['limit'] : null @@ -583,6 +584,7 @@ class Ldap extends AbstractBackend { * @return bool */ public function updateContact($addressbookid, $id, $carddata, array $options = array()) { + error_log("goat power ! $addressbookid, $id, $carddata"); $vcard = \Sabre\VObject\Reader::read($carddata); if (!is_array($id)) {