/usr/share/davical/inc/vcard.php is in davical 1.1.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 | <?php
/**
* Extend the vComponent to specifically handle VCARD resources
*/
require_once('AwlQuery.php');
require_once('vComponent.php');
class VCard extends vComponent {
/**
CREATE TABLE addressbook_resource (
dav_id INT8 NOT NULL REFERENCES caldav_data(dav_id) ON UPDATE CASCADE ON DELETE CASCADE PRIMARY KEY,
version TEXT,
uid TEXT,
nickname TEXT,
fn TEXT, -- fullname
n TEXT, -- Name Surname;First names
note TEXT,
org TEXT,
url TEXT,
fburl TEXT,
caluri TEXT
);
*/
function Write( $dav_id, $exists = true ) {
$qry = new AwlQuery();
// Only run a local transaction if we're not in one already.
$in_transaction = ($qry->TransactionState() == 1);
if ( ! $in_transaction ) $qry->Begin();
if ( $exists ) {
$sql = 'UPDATE addressbook_resource SET version=:version, uid=:uid, nickname=:nickname, fn=:fn, n=:name,
note=:note, org=:org, url=:url, fburl=:fburl, caladruri=:caladruri, caluri=:caluri WHERE dav_id=:dav_id';
}
else {
$sql = 'INSERT INTO addressbook_resource ( dav_id, version, uid, nickname, fn, n, note, org, url, fburl, caladruri, caluri )
VALUES( :dav_id, :version, :uid, :nickname, :fn, :name, :note, :org, :url, :fburl, :caladruri, :caluri )';
}
$params = array( ':dav_id' => $dav_id );
$wanted = array('VERSION' => true, 'UID' => true, 'NICKNAME' => true, 'FN' => true, 'N' => true,
'NOTE'=> true, 'ORG' => true, 'URL' => true, 'FBURL' => true, 'CALADRURI' => true, 'CALURI' => true);
$properties = $this->GetProperties( $wanted );
foreach( $wanted AS $k => $v ) {
$pname = ':' . strtolower($k);
if ( $pname == ':n' ) $pname = ':name';
$params[$pname] = null;
}
foreach( $properties AS $k => $v ) {
$pname = ':' . strtolower($v->Name());
if ( $pname == ':n' ) $pname = ':name';
if ( !isset($params[$pname]) /** @todo or this is one is in the user's language */ ) $params[$pname] = $v->Value();
}
$qry->QDo( $sql, $params );
$this->WriteAddresses($dav_id);
$this->WritePhones($dav_id);
$this->WriteEmails($dav_id);
if ( ! $in_transaction ) $qry->Commit();
}
/**
CREATE TABLE addressbook_address_adr (
dav_id INT8 NOT NULL REFERENCES caldav_data(dav_id) ON UPDATE CASCADE ON DELETE CASCADE,
type TEXT,
box_no TEXT,
unit_no TEXT,
street_address TEXT,
locality TEXT,
region TEXT,
postcode TEXT,
country TEXT,
property TEXT -- The full text of the property
);
*/
function WriteAddresses( $dav_id ) {
$addresses = $this->GetProperties('ADR');
$qry = new AwlQuery();
// Only run a local transaction if we're not in one already.
$in_transaction = ($qry->TransactionState() == 1);
if ( ! $in_transaction ) $qry->Begin();
$params = array( ':dav_id' => $dav_id );
$qry->QDo('DELETE FROM addressbook_address_adr WHERE dav_id = :dav_id', $params );
foreach( $addresses AS $adr ) {
$type = $adr->GetParameterValue('TYPE');
if ( is_array($type) ) $type = implode('~|~',$type);
$params[':type'] = $type;
$address = explode(';',$adr->Value());
// We use @ to suppress the warnings here, because the NULL in the database suits us well.
@$params[':box_no'] = $address[0];
@$params[':unit_no'] = $address[1];
@$params[':street_address'] = $address[2];
@$params[':locality'] = $address[3];
@$params[':region'] = $address[4];
@$params[':postcode'] = $address[5];
@$params[':country'] = $address[6];
$params[':property'] = $adr->Render();
$qry->QDo( 'INSERT INTO addressbook_address_adr (dav_id, type, box_no, unit_no, street_address, locality, region, postcode, country, property)
VALUES( :dav_id, :type, :box_no, :unit_no, :street_address, :locality, :region, :postcode, :country, :property)', $params );
}
if ( ! $in_transaction ) $qry->Commit();
}
/**
CREATE TABLE addressbook_address_tel (
dav_id INT8 NOT NULL REFERENCES caldav_data(dav_id) ON UPDATE CASCADE ON DELETE CASCADE,
type TEXT,
tel TEXT,
property TEXT -- The full text of the property
);
*/
function WritePhones( $dav_id ) {
$telephones = $this->GetProperties('TEL');
$qry = new AwlQuery();
// Only run a local transaction if we're not in one already.
$in_transaction = ($qry->TransactionState() == 1);
if ( ! $in_transaction ) $qry->Begin();
$params = array( ':dav_id' => $dav_id );
$qry->QDo('DELETE FROM addressbook_address_tel WHERE dav_id = :dav_id', $params );
foreach( $telephones AS $tel ) {
$type = $tel->GetParameterValue('TYPE');
if ( is_array($type) ) $type = implode('~|~',$type);
$params[':type'] = $type;
if ( ! isset($params[':type']) ) $params[':type'] = 'voice';
$params[':tel'] = $tel->Value();
$params[':property'] = $tel->Render();
$qry->QDo( 'INSERT INTO addressbook_address_tel (dav_id, type, tel, property) VALUES( :dav_id, :type, :tel, :property)', $params );
}
if ( ! $in_transaction ) $qry->Commit();
}
/**
CREATE TABLE addressbook_address_email (
dav_id INT8 NOT NULL REFERENCES caldav_data(dav_id) ON UPDATE CASCADE ON DELETE CASCADE,
type TEXT,
email TEXT,
property TEXT -- The full text of the property
);
*/
function WriteEmails( $dav_id ) {
$emails = $this->GetProperties('EMAIL');
$qry = new AwlQuery();
// Only run a local transaction if we're not in one already.
$in_transaction = ($qry->TransactionState() == 1);
if ( ! $in_transaction ) $qry->Begin();
$params = array( ':dav_id' => $dav_id );
$qry->QDo('DELETE FROM addressbook_address_email WHERE dav_id = :dav_id', $params );
foreach( $emails AS $email ) {
$type = $email->GetParameterValue('TYPE');
if ( is_array($type) ) $type = implode('~|~',$type);
$params[':type'] = $type;
$params[':email'] = $email->Value();
$params[':property'] = $email->Render();
$qry->QDo( 'INSERT INTO addressbook_address_email (dav_id, type, email, property) VALUES( :dav_id, :type, :email, :property)', $params );
}
if ( ! $in_transaction ) $qry->Commit();
}
}
|