From 780f39e5e7a87ded57b410308461756a720eb06e Mon Sep 17 00:00:00 2001 From: Miles Lott Date: Tue, 20 Mar 2001 05:15:36 +0000 Subject: [PATCH] Almost functional multiple vcard export --- addressbook/export/Multiple_VCard | 264 ++++++++++++++++++++++++++++++ 1 file changed, 264 insertions(+) create mode 100644 addressbook/export/Multiple_VCard diff --git a/addressbook/export/Multiple_VCard b/addressbook/export/Multiple_VCard new file mode 100644 index 0000000000..0e0d345095 --- /dev/null +++ b/addressbook/export/Multiple_VCard @@ -0,0 +1,264 @@ + "FullName","FirstName" => "+, "); +// +// Also start with a '#' symbol and a comma separated list will be +// turned into a number of the same entries. + + class export_conv + { + var $currentrecord = array(); //used for buffering to allow uid lines to go first + var $id; + //list of all id's + var $ids = array(); + + var $export = array( + // These are normal + "fn" => "FN", + "n_given" => "N.GIVEN", + "n_family" => "N.FAMILY", + "n_middle" => "N.MIDDLE", + "n_prefix" => "N.PREFIX", + "n_suffix" => "N.SUFFIX", + "sound" => "SOUND", + "bday" => "BDAY", + "note" => "NOTE", + "tz" => "TZ", + "geo" => "GEO", + "url" => "URL", + "pubkey" => "PUBKEY", + "org_name" => "ORG_NAME", + "org_unit" => "ORG_UNIT", + "title" => "TITLE", + + // Following require further parsing + // Load these weird ones first + "adr_one_type" => "ADR;TYPE;WORK", + "adr_two_type" => "ADR;TYPE;HOME", + "tel_prefer" => "TEL;PREFER", + "email_type" => "MAIL;TYPE;WORK", + "email_home_type" => "MAIL;TYPE;HOME", + + "adr_one_street" => "ADR;WORK;STREET", + "adr_one_locality" => "ADR;WORK;LOCALITY", + "adr_one_region" => "ADR;WORK;REGION", + "adr_one_postalcode" => "ADR;WORK;POSTALCODE", + "adr_one_countryname" => "ADR;WORK;COUNTRYNAME", + "label" => "LABEL", + + "adr_two_street" => "ADR;HOME;STREET", + "adr_two_locality" => "ADR;HOME;LOCALITY", + "adr_two_region" => "ADR;HOME;REGION", + "adr_two_postalcode" => "ADR;HOME;POSTALCODE", + "adr_two_countryname" => "ADR;HOME;COUNTRYNAME", + + "tel_work" => "TEL;WORK", + "tel_home" => "TEL;HOME", + "tel_voice" => "TEL;VOICE", + "tel_fax" => "TEL;FAX", + "tel_msg" => "TEL;MSG", + "tel_cell" => "TEL;CELL", + "tel_pager" => "TEL;PAGER", + "tel_bbs" => "TEL;BBS", + "tel_modem" => "TEL;MODEM", + "tel_car" => "TEL;CAR", + "tel_isdn" => "TEL;ISDN", + "tel_video" => "TEL;VIDEO", + "email" => "MAIL;WORK", + "email_home" => "MAIL;HOME", + ); + + // make sure to order how we ask for these + var $qfields = array( + "fn" => "fn", + "n_given" => "n_given", + "n_family" => "n_family", + "n_middle" => "n_middle", + "n_prefix" => "n_prefix", + "n_suffix" => "n_suffix", + "sound" => "sound", + "bday" => "bday", + "note" => "note", + "tz" => "tz", + "geo" => "geo", + "url" => "url", + "pubkey" => "pubkey", + "org_name" => "org_name", + "org_unit" => "org_unit", + "title" => "title", + + "adr_one_type" => "adr_one_type", + "adr_two_type" => "adr_two_type", + "tel_prefer" => "tel_prefer", + "email_type" => "email_type", + "email_home_type" => "email_home_type", + + "adr_one_street" => "adr_one_street", + "adr_one_locality" => "adr_one_locality", + "adr_one_region" => "adr_one_region", + "adr_one_postalcode" => "adr_one_postalcode", + "adr_one_countryname" => "adr_one_countryname", + "label" => "label", + + "adr_two_street" => "adr_two_street", + "adr_two_locality" => "adr_two_locality", + "adr_two_region" => "adr_two_region", + "adr_two_postalcode" => "adr_two_postalcode", + "adr_two_countryname" => "adr_two_countryname", + + "tel_work" => "tel_work", + "tel_home" => "tel_home", + "tel_voice" => "tel_voice", + "tel_fax" => "tel_fax", + "tel_msg" => "tel_msg", + "tel_cell" => "tel_cell", + "tel_pager" => "tel_pager", + "tel_bbs" => "tel_bbs", + "tel_modem" => "tel_modem", + "tel_car" => "tel_car", + "tel_isdn" => "tel_isdn", + "tel_video" => "tel_video", + "email" => "email", + "email_home" => "email_home" + ); + + // This will store the contacts object + var $contacts = ''; + + // Read full list of user's contacts only to get id's for each + function export_start_file($buffer) { + $this->id=-1; + $this->contacts = CreateObject('phpgwapi.contacts'); + $tmp = $this->contacts->read(); + for ($i=0;$iids[$i] = $tmp[$i]['id']; + } + // $ids is now an array of all id's for this user, e.g. $ids[0] = 21, etc... + // $buffer is still empty + return $buffer; + } + + // Read each entry + function export_start_record($buffer) { + $this->id++; + $top = $this->contacts->read_single_entry($this->ids[$this->id],$this->qfields); + $this->currentrecord = $top[0]; + return $buffer; + } + + // Read each attribute, populate buffer + // name/value are the fields from the export array above + function export_new_attrib($buffer,$name,$value) { + if ($this->export[$name] && ($value != "") ) { + $buffer[$this->id][$this->export[$name]] = $value; + //echo '
'.$this->id.' - '.$this->export[$name].': '.$buffer[$this->id][$this->export[$name]]; + } + return $buffer; + } + + function export_end_record($buffer) { + return $buffer; + } + + function export_end_file($buffer) { + reset($this->ids); + for ($i=0;$iids);$i++) { + $entries .= "BEGIN:VCARD\r\n"; + $entries .= "VERSION:2.1\r\n"; + $entries .= "X-PHPGROUPWARE-FILE-AS:phpGroupWare.org\r\n"; + + reset($this->export); + while (list($name,$value)=each($this->export)) { + if (!empty($buffer[$i][$value])) { + $mult = explode(";",$value); + if (!$mult[1]) { // Normal + $entries .= $value . ":".$buffer[$i][$value]."\r\n"; + } else { + switch ($mult[0]) { + case "ADR": + switch ($mult[1]) { + case "WORK": + $value = "A.".$value; + switch ($mult[2]) { + } + break; + case "HOME": + $value = "B.".$value; + break; + default: + break; + } + break; + case "TEL": + switch($mult[1]) { + case "PREFER": + $prefer = explode(";",$buffer[$i][$value]); + if ($prefer[1]) { + while ($pref = strtoupper(each($prefer))) { + $prefi[$i][$pref] = ";PREF"; + } + //echo "PREF1"; + } elseif ($prefer[0]) { + $prefi[$i][strtoupper($prefer[0])] = ";PREF"; + //echo "PREF=".strtoupper($prefer[0]); + } elseif ($buffer[$i][$value]) { + $prefi[$i][$buffer[$i][$value]] = ";PREF"; + //echo "PREF3"; + } + break; + case "WORK": + // Wow, this is fun! + $entries .= "A.".$mult[0].";".$mult[1].$prefi[$i][$mult[1]].":".$buffer[$i][$value]."\r\n"; + break; + case "HOME": + $entries .= "B.".$mult[0].";".$mult[1].$prefi[$i][$mult[1]].":".$buffer[$i][$value]."\r\n"; + break; + default: + $entries .= $mult[0].";".$mult[1].$prefi[$i][$mult[1]].":".$buffer[$i][$value]."\r\n"; + break; + } + break; + case "MAIL": + switch($mult[1]) { + case "WORK": + $newval = "A.".$value; + $entries .= $newval.":".$buffer[$i][$value]."\r\n"; + break; + case "HOME": + $newval = "B.".$value; + $entries .= $newval.":".$buffer[$i][$value]."\r\n"; + break; + default: + break; + } + break; + default: + break; + } + } + } + } + + if (!$buffer[$i]["FN"]) { + if ($buffer[$i]['N.GIVEN'] || $buffer[$i]['N.FAMILY']) { + $entries .= "FN".$buffer[$i]['N.GIVEN']." ".$buffer[$i]['N.FAMILY']."\r\n"; + } + } + $entries .= "END:VCARD\r\n"; + $entries .= "\r\n"; + } + $buffer = $entries; + return $buffer; + } + } +?>