"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( "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;TYPE;WORK", "adr_two_type" => "ADR;TYPE;HOME", "tel_prefer" => "TEL;PREFER", "email_type" => "EMAIL;TYPE;WORK", "email_home_type" => "EMAIL;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", "address2" => "EXT", "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" => "EMAIL;WORK", "email_home" => "EMAIL;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++) { $work = ""; $workaddr = ""; $workattr = ""; $wlabel = ""; $home = ""; $homeaddr = ""; $homeattr = ""; $hlabel = ""; $org_name = ""; $org_unit = ""; $firstname = ""; $middle = ""; $lastname = ""; $prefix = ""; $suffix = ""; $entry = ""; $header = "BEGIN:VCARD\r\n"; $header .= "VERSION:2.1\r\n"; $header .= "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 if (strstr($buffer[$i][$value],"\n")) { $buffer[$i][$value] = ereg_replace("\r\n","=0D=0A",$buffer[$i][$value]); $entry .= $value . ";QUOTED-PRINTABLE:".$buffer[$i][$value]."\r\n"; } else { $entry .= $value . ":".$buffer[$i][$value]."\r\n"; } } else { switch ($mult[0]) { case "N": switch ($mult[1]) { case "PREFIX": $prefix = ";" . $buffer[$i][$value]; break; case "GIVEN": $firstname = ";" . $buffer[$i][$value]; break; case "MIDDLE": $middle = ";" . $buffer[$i][$value]; break; case "FAMILY": $lastname = $buffer[$i][$value]; break; case "SUFFIX": $suffix = ";" . $buffer[$i][$value]; break; } break; case "ORG": switch ($mult[1]) { case "NAME": $org_name = $buffer[$i][$value]; break; case "UNIT": $org_unit = ";".$buffer[$i][$value]; break; } break; case "ADR": switch ($mult[1]) { case "TYPE": $types = explode(";",$buffer[$i][$value]); if ($types[1]) { while ( $type = each($types) ) { $typei[$i][$mult[2]] .= ";".strtoupper($type[1]); } } elseif ($types[0]) { $typei[$i][$mult[2]] .= ";".strtoupper($types[0]); } else { $typei[$i][$mult[2]] .= ";".strtoupper($buffer[$i][$value]); } //echo "TYPE=".$typei[$i][$mult[2]]; break; case "WORK": $workaddr .= $buffer[$i][$value].";"; $workattr = $mult[0].";".$mult[1].$typei[$i][$mult[1]]; break; case "HOME": $homeaddr .= $buffer[$i][$value].";"; $homeattr = $mult[0].";".$mult[1].$typei[$i][$mult[1]]; 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! $entry .= "A.".$mult[0].";".$mult[1].$prefi[$i][$mult[1]].":".$buffer[$i][$value]."\r\n"; break; case "HOME": $entry .= "B.".$mult[0].";".$mult[1].$prefi[$i][$mult[1]].":".$buffer[$i][$value]."\r\n"; break; default: $entry .= $mult[0].";".$mult[1].$prefi[$i][$mult[1]].":".$buffer[$i][$value]."\r\n"; break; } break; case "EMAIL": switch($mult[1]) { case "TYPE": if ($mult[2] == "WORK") { $emailtype = ";".$buffer[$i][$value]; } if ($mult[2] == "HOME") { $hemailtype = ";".$buffer[$i][$value]; } break; case "WORK": $newval = "A.".$value; $entry .= $newval.$emailtype.":".$buffer[$i][$value]."\r\n"; break; case "HOME": $newval = "B.".$value; $entry .= $newval.$hemailtype.":".$buffer[$i][$value]."\r\n"; break; default: break; } break; default: break; } } } } if ($lastname && $firstname) { $entries .= $header; $entries .= "N:".$lastname.$firstname.$middle.$prefix.$suffix."\r\n"; $entries .= $entry; if (!$buffer[$i]["FN"]) { if ($lastname || $firstname ) { $entries .= "FN:".substr($firstname,1)." ".$lastname."\r\n"; } } if ($org_name || $org_unit) { $entries .= "ORG:".$org_name.$org_unit."\r\n"; } $workattr = ereg_replace("ADR;","",$workattr); $homeattr = ereg_replace("ADR;","",$homeattr); if (!$buffer[$i]['EXT']) { $buffer[$i]['EXT'] = ";"; } if ($workaddr) { $work = "A.ADR;".$workattr.":;".$buffer[$i]['EXT'].substr($workaddr,0,-1)."\r\n"; $wlabel = substr($workaddr,0,-1); $wlabel = ereg_replace(";","=0D=0A",$wlabel); //$wlabel = ereg_replace("(",",",$wlabel); //$wlabel = ereg_replace(")",",",$wlabel); $wlabel = "LABEL;WORK;QUOTED-PRINTABLE:".$wlabel."\r\n"; } if ($homeaddr) { $home = "B.ADR;".$homeattr.":;;".substr($homeaddr,0,-1)."\r\n"; $hlabel = substr($homeaddr,0,-1); $hlabel = ereg_replace(";","=0D=0A",$hlabel); //$hlabel = ereg_replace("(",",",$hlabel); //$hlabel = ereg_replace(")",",",$hlabel); $hlabel = "LABEL;HOME;QUOTED-PRINTABLE:".$hlabel."\r\n"; } $entries .= $work.$home.$wlabel.$hlabel."END:VCARD\r\n"; $entries .= "\r\n"; } } $buffer = $entries; return $buffer; } } ?>