diff options
author | Jakob Sack <mail@jakobsack.de> | 2011-09-08 23:36:47 +0200 |
---|---|---|
committer | Jakob Sack <mail@jakobsack.de> | 2011-09-08 23:36:47 +0200 |
commit | 5fed5bab4a45038f0b1b250170782d3e95b37abd (patch) | |
tree | 79ca6e5f6d3c3eb027fb0a1b2b96c571057bb232 /apps/contacts/lib/addressbook.php | |
parent | 74f6dd5d5a40596c5e900640852d46f79a4925ae (diff) | |
download | nextcloud-server-5fed5bab4a45038f0b1b250170782d3e95b37abd.tar.gz nextcloud-server-5fed5bab4a45038f0b1b250170782d3e95b37abd.zip |
Improving contacts
Diffstat (limited to 'apps/contacts/lib/addressbook.php')
-rw-r--r-- | apps/contacts/lib/addressbook.php | 218 |
1 files changed, 196 insertions, 22 deletions
diff --git a/apps/contacts/lib/addressbook.php b/apps/contacts/lib/addressbook.php index 9a5dea6f45f..89894d33b5b 100644 --- a/apps/contacts/lib/addressbook.php +++ b/apps/contacts/lib/addressbook.php @@ -47,6 +47,11 @@ * This class manages our addressbooks. */ class OC_Contacts_Addressbook{ + /** + * @brief Returns the list of addressbooks for a specific user. + * @param string $uid + * @return array + */ public static function allAddressbooks($uid){ $stmt = OC_DB::prepare( 'SELECT * FROM *PREFIX*contacts_addressbooks WHERE userid = ?' ); $result = $stmt->execute(array($uid)); @@ -59,11 +64,21 @@ class OC_Contacts_Addressbook{ return $addressbooks; } + /** + * @brief Returns the list of addressbooks for a principal (DAV term of user) + * @param string $principaluri + * @return array + */ public static function allAddressbooksWherePrincipalURIIs($principaluri){ $uid = self::extractUserID($principaluri); return self::allAddressbooks($uid); } + /** + * @brief Gets the data of one address book + * @param integer $id + * @return associative array + */ public static function findAddressbook($id){ $stmt = OC_DB::prepare( 'SELECT * FROM *PREFIX*contacts_addressbooks WHERE id = ?' ); $result = $stmt->execute(array($id)); @@ -71,6 +86,13 @@ class OC_Contacts_Addressbook{ return $result->fetchRow(); } + /** + * @brief Creates a new address book + * @param string $userid + * @param string $name + * @param string $description + * @return insertid + */ public static function addAddressbook($userid,$name,$description){ $all = self::allAddressbooks($userid); $uris = array(); @@ -86,6 +108,14 @@ class OC_Contacts_Addressbook{ return OC_DB::insertid(); } + /** + * @brief Creates a new address book from the data sabredav provides + * @param string $principaluri + * @param string $uri + * @param string $name + * @param string $description + * @return insertid + */ public static function addAddressbookFromDAVData($principaluri,$uri,$name,$description){ $userid = self::extractUserID($principaluri); @@ -95,6 +125,13 @@ class OC_Contacts_Addressbook{ return OC_DB::insertid(); } + /** + * @brief Edits an addressbook + * @param integer $id + * @param string $name + * @param string $description + * @return boolean + */ public static function editAddressbook($id,$name,$description){ // Need these ones for checking uri $addressbook = self::find($id); @@ -112,6 +149,11 @@ class OC_Contacts_Addressbook{ return true; } + /** + * @brief Updates ctag for addressbook + * @param integer $id + * @return boolean + */ public static function touchAddressbook($id){ $stmt = OC_DB::prepare( 'UPDATE *PREFIX*contacts_addressbooks SET ctag = ctag + 1 WHERE id = ?' ); $stmt->execute(array($id)); @@ -119,6 +161,11 @@ class OC_Contacts_Addressbook{ return true; } + /** + * @brief removes an address book + * @param integer $id + * @return boolean + */ public static function deleteAddressbook($id){ $stmt = OC_DB::prepare( 'DELETE FROM *PREFIX*contacts_addressbooks WHERE id = ?' ); $stmt->execute(array($id)); @@ -129,6 +176,14 @@ class OC_Contacts_Addressbook{ return true; } + /** + * @brief Returns all cards of an address book + * @param integer $id + * @return array + * + * The cards are associative arrays. You'll find the original vCard in + * ['carddata'] + */ public static function allCards($id){ $stmt = OC_DB::prepare( 'SELECT * FROM *PREFIX*contacts_cards WHERE addressbookid = ?' ); $result = $stmt->execute(array($id)); @@ -141,6 +196,11 @@ class OC_Contacts_Addressbook{ return $addressbooks; } + /** + * @brief Returns a card + * @param integer $id + * @return associative array + */ public static function findCard($id){ $stmt = OC_DB::prepare( 'SELECT * FROM *PREFIX*contacts_cards WHERE id = ?' ); $result = $stmt->execute(array($id)); @@ -148,6 +208,12 @@ class OC_Contacts_Addressbook{ return $result->fetchRow(); } + /** + * @brief finds a card by its DAV Data + * @param integer $aid Addressbook id + * @param string $uri the uri ('filename') + * @return associative array + */ public static function findCardWhereDAVDataIs($aid,$uri){ $stmt = OC_DB::prepare( 'SELECT * FROM *PREFIX*contacts_cards WHERE addressbookid = ? AND uri = ?' ); $result = $stmt->execute(array($aid,$uri)); @@ -155,23 +221,36 @@ class OC_Contacts_Addressbook{ return $result->fetchRow(); } + /** + * @brief Adds a card + * @param integer $id Addressbook id + * @param string $data vCard file + * @return insertid + */ public static function addCard($id,$data){ $fn = null; $uri = null; - $card = Sabre_VObject_Reader::read($data); - foreach($card->children as $property){ - if($property->name == 'FN'){ - $fn = $property->value; - } - elseif(is_null($uri) && $property->name == 'UID' ){ - $uri = $property->value.'.vcf'; + if(self::isValidVObject($data)){ + $card = Sabre_VObject_Reader::read($data); + foreach($card->children as $property){ + if($property->name == 'FN'){ + $fn = $property->value; + } + elseif(is_null($uri) && $property->name == 'UID' ){ + $uri = $property->value.'.vcf'; + } } + if(is_null($uri)){ + $uid = self::createUID(); + $uri = $uid.'.vcf'; + $card->add(new Sabre_VObject_Property('UID',$uid)); + $data = $card->serialize(); + }; } - if(is_null($uri)){ + else{ + // that's hard. Creating a UID and not saving it $uid = self::createUID(); $uri = $uid.'.vcf'; - $card->add(new Sabre_VObject_Property('UID',$uid)); - $data = $card->serialize(); }; $stmt = OC_DB::prepare( 'INSERT INTO *PREFIX*contacts_cards (addressbookid,fullname,carddata,uri,lastmodified) VALUES(?,?,?,?,?)' ); @@ -182,12 +261,21 @@ class OC_Contacts_Addressbook{ return OC_DB::insertid(); } + /** + * @brief Adds a card with the data provided by sabredav + * @param integer $id Addressbook id + * @param string $uri the uri the card will have + * @param string $data vCard file + * @return insertid + */ public static function addCardFromDAVData($id,$uri,$data){ $fn = null; - $card = Sabre_VObject_Reader::read($data); - foreach($card->children as $property){ - if($property->name == 'FN'){ - $fn = $property->value; + if(self::isValidVObject($data)){ + $card = Sabre_VObject_Reader::read($data); + foreach($card->children as $property){ + if($property->name == 'FN'){ + $fn = $property->value; + } } } @@ -199,13 +287,21 @@ class OC_Contacts_Addressbook{ return OC_DB::insertid(); } + /** + * @brief edits a card + * @param integer $id id of card + * @param string $data vCard file + * @return boolean + */ public static function editCard($id, $data){ $oldcard = self::findCard($id); $fn = null; - $card = Sabre_VObject_Reader::read($data); - foreach($card->children as $property){ - if($property->name == 'FN'){ - $fn = $property->value; + if(self::isValidVObject($data)){ + $card = Sabre_VObject_Reader::read($data); + foreach($card->children as $property){ + if($property->name == 'FN'){ + $fn = $property->value; + } } } @@ -217,14 +313,23 @@ class OC_Contacts_Addressbook{ return true; } + /** + * @brief edits a card with the data provided by sabredav + * @param integer $id Addressbook id + * @param string $uri the uri of the card + * @param string $data vCard file + * @return boolean + */ public static function editCardFromDAVData($aid,$uri,$data){ $oldcard = self::findCardWhereDAVDataIs($aid,$uri); $fn = null; - $card = Sabre_VObject_Reader::read($data); - foreach($card->children as $property){ - if($property->name == 'FN'){ - $fn = $property->value; + if(self::isValidVObject($data)){ + $card = Sabre_VObject_Reader::read($data); + foreach($card->children as $property){ + if($property->name == 'FN'){ + $fn = $property->value; + } } } @@ -236,6 +341,11 @@ class OC_Contacts_Addressbook{ return true; } + /** + * @brief deletes a card + * @param integer $id id of card + * @return boolean + */ public static function deleteCard($id){ $stmt = OC_DB::prepare( 'DELETE FROM *PREFIX*contacts_cards WHERE id = ?' ); $stmt->execute(array($id)); @@ -243,6 +353,12 @@ class OC_Contacts_Addressbook{ return true; } + /** + * @brief deletes a card with the data provided by sabredav + * @param integer $id Addressbook id + * @param string $uri the uri of the card + * @return boolean + */ public static function deleteCardFromDAVData($aid,$uri){ $stmt = OC_DB::prepare( 'DELETE FROM *PREFIX*contacts_cards WHERE addressbookid = ? AND uri=?' ); $stmt->execute(array($aid,$uri)); @@ -250,6 +366,12 @@ class OC_Contacts_Addressbook{ return true; } + /** + * @brief Creates a URI for Addressbook + * @param string $name name of the addressbook + * @param array $existing the uri of the card + * @return boolean + */ public static function createURI($name,$existing){ $name = strtolower($name); $newname = $name; @@ -261,15 +383,28 @@ class OC_Contacts_Addressbook{ return $newname; } + /** + * @brief Creates a UID + * @return string + */ public static function createUID(){ return substr(md5(rand().time()),0,10); } + /** + * @brief gets the userid from a principal path + * @return string + */ public static function extractUserID($principaluri){ list($prefix,$userid) = Sabre_DAV_URLUtil::splitPath($principaluri); return $userid; } + /** + * @brief Escapes semicolons + * @param string $value + * @return string + */ public static function escapeSemicolons($value){ foreach($value as &$i ){ $i = implode("\\\\;", explode(';', $i)); @@ -277,6 +412,11 @@ class OC_Contacts_Addressbook{ return implode(';',$value); } + /** + * @brief Creates an array out of a multivalue property + * @param string $value + * @return array + */ public static function unescapeSemicolons($value){ $array = explode(';',$value); for($i=0;$i<count($array);$i++){ @@ -294,6 +434,13 @@ class OC_Contacts_Addressbook{ return $array; } + /** + * @brief Data structure of vCard + * @param object $property + * @return associative array + * + * look at code ... + */ public static function structureContact($object){ $details = array(); foreach($object->children as $property){ @@ -308,6 +455,17 @@ class OC_Contacts_Addressbook{ return $details; } + /** + * @brief Data structure of properties + * @param object $property + * @return associative array + * + * returns an associative array with + * ['name'] name of property + * ['value'] htmlspecialchars escaped value of property + * ['parameters'] associative array name=>value + * ['checksum'] checksum of whole property + */ public static function structureProperty($property){ $value = $property->value; $value = htmlspecialchars($value); @@ -329,4 +487,20 @@ class OC_Contacts_Addressbook{ } return $temp; } + + /** + * @brief Checks if SabreDAV can parse the file + * @param string vCard + * @return boolean + * + * The code is largely copypasted from Sabre_VObject_Reader + */ + public static function isValidVObject($data){ + try { + Sabre_VObject_Reader::read($data); + return true; + } catch (Exception $e) { + return false; + } + } } |