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: 175: 176:
<?php
require_once('AwlQuery.php');
require_once('vComponent.php');
class VCard extends vComponent {
function Write( $dav_id, $exists = true ) {
$qry = new AwlQuery();
$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]) ) $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();
}
function WriteAddresses( $dav_id ) {
$addresses = $this->GetProperties('ADR');
$qry = new AwlQuery();
$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 = preg_split( '{(?<!\\\\);}', $adr->Value());
@$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();
}
function WritePhones( $dav_id ) {
$telephones = $this->GetProperties('TEL');
$qry = new AwlQuery();
$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();
}
function WriteEmails( $dav_id ) {
$emails = $this->GetProperties('EMAIL');
$qry = new AwlQuery();
$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();
}
}