1
0
mirror of https://github.com/owncloudarchive/contacts.git synced 2024-12-01 13:24:10 +01:00

Contacts: Some updates to Datebase backend

This commit is contained in:
Thomas Tanghus 2013-03-20 11:24:05 +01:00
parent 9044749985
commit 5e67fc27d6

View File

@ -23,6 +23,7 @@
namespace OCA\Contacts\Backend; namespace OCA\Contacts\Backend;
use OCA\Contacts\Contact; use OCA\Contacts\Contact;
use OCA\Contacts\VObject\VCard;
use Sabre\VObject\Reader; use Sabre\VObject\Reader;
/** /**
@ -89,16 +90,13 @@ class Database extends AbstractBackend {
//\OCP\Util::writeLog('contacts', __METHOD__.' id: ' //\OCP\Util::writeLog('contacts', __METHOD__.' id: '
// . $addressbookid, \OCP\Util::DEBUG); // . $addressbookid, \OCP\Util::DEBUG);
if($this->addressbooks && isset($this->addressbooks[$addressbookid])) { if($this->addressbooks && isset($this->addressbooks[$addressbookid])) {
//print(__METHOD__ . ' ' . __LINE__ .' addressBookInfo: ' . print_r($this->addressbooks[$addressbookid], true));
return $this->addressbooks[$addressbookid]; return $this->addressbooks[$addressbookid];
/*foreach($this->addressbooks as $addressbook) {
if($addressbook['id'] === $addressbookid) {
return $addressbook;
}
}*/
// Hmm, not found. Lets query the db.
} }
// Hmm, not found. Lets query the db.
try { try {
$query = 'SELECT * FROM `' . $this->addressBooksTableName $query = 'SELECT `id`, `displayname`, `description`, `userid` AS `owner`, `ctag` AS `lastmodified` FROM `'
. $this->addressBooksTableName
. '` WHERE `id` = ?'; . '` WHERE `id` = ?';
if(!isset(self::$preparedQueries['getaddressbook'])) { if(!isset(self::$preparedQueries['getaddressbook'])) {
self::$preparedQueries['getaddressbook'] = \OCP\DB::prepare($query); self::$preparedQueries['getaddressbook'] = \OCP\DB::prepare($query);
@ -109,7 +107,9 @@ class Database extends AbstractBackend {
. \OC_DB::getErrorMessage($result), \OCP\Util::ERROR); . \OC_DB::getErrorMessage($result), \OCP\Util::ERROR);
return array(); return array();
} }
return $result->fetchRow(); $row = $result->fetchRow();
$row['permissions'] = \OCP\PERMISSION_ALL;
return $row;
} catch(\Exception $e) { } catch(\Exception $e) {
\OCP\Util::writeLog('contacts', __METHOD__.' exception: ' \OCP\Util::writeLog('contacts', __METHOD__.' exception: '
. $e->getMessage(), \OCP\Util::ERROR); . $e->getMessage(), \OCP\Util::ERROR);
@ -192,7 +192,7 @@ class Database extends AbstractBackend {
*/ */
public function createAddressBook(array $properties, $userid = null) { public function createAddressBook(array $properties, $userid = null) {
$userid = $userid ? $userid : $this->userid; $userid = $userid ? $userid : $this->userid;
if(count($properties) === 0) { if(count($properties) === 0 || !isset($properties['displayname'])) {
return false; return false;
} }
@ -424,10 +424,23 @@ class Database extends AbstractBackend {
} }
} }
try {
$contact->validate(VCard::REPAIR|VCard::UPGRADE);
} catch (\Exception $e) {
OCP\Util::writeLog('contacts', __METHOD__ . ' ' .
'Error validating vcard: ' . $e->getMessage(), \OCP\Util::ERROR);
return false;
}
$uri = is_null($uri) ? $contact->UID . '.vcf' : $uri; $uri = is_null($uri) ? $contact->UID . '.vcf' : $uri;
$now = new \DateTime; $now = new \DateTime;
$contact->REV = $now->format(\DateTime::W3C); $contact->REV = $now->format(\DateTime::W3C);
$appinfo = \OCP\App::getAppInfo('contacts');
$appversion = \OCP\App::getAppVersion('contacts');
$prodid = '-//ownCloud//NONSGML '.$appinfo['name'].' '.$appversion.'//EN';
$contact->add('PRODID', $prodid);
$data = $contact->serialize(); $data = $contact->serialize();
if(!isset(self::$preparedQueries['createcontact'])) { if(!isset(self::$preparedQueries['createcontact'])) {
self::$preparedQueries['createcontact'] = \OCP\DB::prepare('INSERT INTO `' self::$preparedQueries['createcontact'] = \OCP\DB::prepare('INSERT INTO `'
@ -436,7 +449,15 @@ class Database extends AbstractBackend {
} }
try { try {
$result = self::$preparedQueries['createcontact'] $result = self::$preparedQueries['createcontact']
->execute(array($addressbookid, (string)$contact->FN, $contact->serialize(), $uri, time())); ->execute(
array(
$addressbookid,
(string)$contact->FN,
$contact->serialize(),
$uri,
time()
)
);
if (\OC_DB::isError($result)) { if (\OC_DB::isError($result)) {
\OC_Log::write('contacts', __METHOD__. 'DB error: ' . \OC_DB::getErrorMessage($result), \OCP\Util::ERROR); \OC_Log::write('contacts', __METHOD__. 'DB error: ' . \OC_DB::getErrorMessage($result), \OCP\Util::ERROR);
return false; return false;