. * */ /* * * The following SQL statement is just a help for developers and will not be * executed! * * CREATE TABLE contacts_addressbooks ( * id INT(11) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, * userid VARCHAR(255) NOT NULL, * displayname VARCHAR(255), * uri VARCHAR(100), * description TEXT, * ctag INT(11) UNSIGNED NOT NULL DEFAULT '1' * ); * */ /** * 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 all($uid){ $stmt = OC_DB::prepare( 'SELECT * FROM *PREFIX*contacts_addressbooks WHERE userid = ?' ); $result = $stmt->execute(array($uid)); $addressbooks = array(); while( $row = $result->fetchRow()){ $addressbooks[] = $row; } return $addressbooks; } /** * @brief Returns the list of addressbooks for a principal (DAV term of user) * @param string $principaluri * @return array */ public static function allWherePrincipalURIIs($principaluri){ $uid = self::extractUserID($principaluri); return self::all($uid); } /** * @brief Gets the data of one address book * @param integer $id * @return associative array */ public static function find($id){ $stmt = OC_DB::prepare( 'SELECT * FROM *PREFIX*contacts_addressbooks WHERE id = ?' ); $result = $stmt->execute(array($id)); return $result->fetchRow(); } /** * @brief Creates a new address book * @param string $userid * @param string $name * @param string $description * @return insertid */ public static function add($userid,$name,$description){ $all = self::all($userid); $uris = array(); foreach($all as $i){ $uris[] = $i['uri']; } $uri = self::createURI($name, $uris ); $stmt = OC_DB::prepare( 'INSERT INTO *PREFIX*contacts_addressbooks (userid,displayname,uri,description,ctag) VALUES(?,?,?,?,?)' ); $result = $stmt->execute(array($userid,$name,$uri,$description,1)); return OC_DB::insertid('*PREFIX*contacts_addressbooks'); } /** * @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 addFromDAVData($principaluri,$uri,$name,$description){ $userid = self::extractUserID($principaluri); $stmt = OC_DB::prepare( 'INSERT INTO *PREFIX*contacts_addressbooks (userid,displayname,uri,description,ctag) VALUES(?,?,?,?,?)' ); $result = $stmt->execute(array($userid,$name,$uri,$description,1)); return OC_DB::insertid('*PREFIX*contacts_addressbooks'); } /** * @brief Edits an addressbook * @param integer $id * @param string $name * @param string $description * @return boolean */ public static function edit($id,$name,$description){ // Need these ones for checking uri $addressbook = self::find($id); if(is_null($name)){ $name = $addressbook['name']; } if(is_null($description)){ $description = $addressbook['description']; } $stmt = OC_DB::prepare( 'UPDATE *PREFIX*contacts_addressbooks SET displayname=?,description=?, ctag=ctag+1 WHERE id=?' ); $result = $stmt->execute(array($name,$description,$id)); return true; } /** * @brief removes an address book * @param integer $id * @return boolean */ public static function delete($id){ $stmt = OC_DB::prepare( 'DELETE FROM *PREFIX*contacts_addressbooks WHERE id = ?' ); $stmt->execute(array($id)); $cards = OC_Contacts_VCard::all($id); foreach($cards as $card){ OC_Contacts_VCard::delete($card['id']); } return true; } /** * @brief Updates ctag for addressbook * @param integer $id * @return boolean */ public static function touch($id){ $stmt = OC_DB::prepare( 'UPDATE *PREFIX*contacts_addressbooks SET ctag = ctag + 1 WHERE id = ?' ); $stmt->execute(array($id)); return true; } /** * @brief Creates a URI for Addressbook * @param string $name name of the addressbook * @param array $existing existing addressbook URIs * @return string new name */ public static function createURI($name,$existing){ $name = strtolower($name); $newname = $name; $i = 1; while(in_array($newname,$existing)){ $newname = $name.$i; $i = $i + 1; } return $newname; } /** * @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; } }