From 7a4db59d2801562f25c4f01258c3873738d7dfaa Mon Sep 17 00:00:00 2001 From: Miles Lott Date: Sat, 17 Mar 2001 21:32:35 +0000 Subject: [PATCH] Initial check-in of export utility - not functional yet --- addressbook/export.php | 112 +++++++++++++++++++++++++++++ addressbook/export/Export_to_CSV | 114 ++++++++++++++++++++++++++++++ addressbook/export/Export_to_LDIF | 95 +++++++++++++++++++++++++ 3 files changed, 321 insertions(+) create mode 100644 addressbook/export.php create mode 100644 addressbook/export/Export_to_CSV create mode 100644 addressbook/export/Export_to_LDIF diff --git a/addressbook/export.php b/addressbook/export.php new file mode 100644 index 0000000000..1ba018ee00 --- /dev/null +++ b/addressbook/export.php @@ -0,0 +1,112 @@ + * + * -------------------------------------------- * + * This program is free software; you can redistribute it and/or modify it * + * under the terms of the GNU General Public License as published by the * + * Free Software Foundation; either version 2 of the License, or (at your * + * option) any later version. * + \**************************************************************************/ + + /* $Id$ */ + + $phpgw_info["flags"]["currentapp"] = "addressbook"; + $phpgw_info["flags"]["enable_contacts_class"] = True; + include("../header.inc.php"); + + $sep = SEP; + + if (!$convert) { + $t = new Template($phpgw_info["server"]["app_tpl"]); + $t->set_file(array("export" => "export.tpl")); + + $dir_handle=opendir($phpgw_info["server"]["app_root"].$sep."export"); + $i=0; $myfilearray=""; + while ($file = readdir($dir_handle)) { + #echo ""; + if ((substr($file, 0, 1) != ".") && is_file($phpgw_info["server"]["app_root"].$sep."export".$sep.$file) ) { + $myfilearray[$i] = $file; + $i++; + } + } + closedir($dir_handle); + sort($myfilearray); + for ($i=0;$i'.$fname.''; + } + + $t->set_var("lang_cancel",lang("Cancel")); + $t->set_var("cancel_url",$phpgw->link("/addressbook/index.php")); + $t->set_var("navbar_bg",$phpgw_info["theme"]["navbar_bg"]); + $t->set_var("navbar_text",$phpgw_info["theme"]["navbar_text"]); + $t->set_var("export_text",lang("Export from Addressbook to CSV or LDIF")); + $t->set_var("action_url",$phpgw->link("/addressbook/export.php")); + $t->set_var("filename",lang("Export file name")); + $t->set_var("conv",$conv); + $t->set_var("debug",lang("")); + $t->set_var("download",lang("Submit")); + + $t->pparse("out","export"); + + $phpgw->common->phpgw_footer(); + } else { + include ($phpgw_info["server"]["app_root"].$sep."export".$sep.$conv_type); + $buffer=array(); + $this = new export_conv; + + // Read in user custom fields, if any + $phpgw->preferences->read_repository(); + $customfields = array(); + while (list($col,$descr) = each($phpgw_info["user"]["preferences"]["addressbook"])) { + if ( substr($col,0,6) == 'extra_' ) { + $field = ereg_replace('extra_','',$col); + $field = ereg_replace(' ','_',$field); + $customfields[$field] = ucfirst($field); + } + } + $extrafields = array( + "ophone" => "ophone", + "address2" => "address2", + "address3" => "address3" + ); + $this->qfields = $this->stock_contact_fields;# + $extrafields;# + $customfields; + + $buffer = $this->export_start_file($buffer); + + for ($i=0;$iids);$i++) { + $this->id = $this->ids[$i]; + $buffer = $this->export_start_record($buffer); + while( list($name,$value) = each($this->currentrecord) ) { + $buffer = $this->export_new_attrib($buffer,$name,$value); + } + $buffer = $this->export_end_record($buffer); + } + + $buffer = $this->export_end_file($buffer); + + $tsvfilename = $phpgw_info['server']['temp_dir'].$sep.$tsvfilename; + + if ($download == "Submit") { + header("Content-disposition: attachment; filename=\"".$tsvfilename."\""); + header("Content-type: application/octetstream"); + header("Pragma: no-cache"); + header("Expires: 0"); +// while(list($name,$value) = each($buffer)) { + //echo $name.': '.$value."\n"; +// } + } else { + echo "
\n";
+			$i=0;
+			while(list($name,$value) = each($buffer[$i])) {
+				echo $i.' - '.$name.': '.$value."\n";
+				$i++;
+			}
+			echo "\n
\n"; + echo ''.lang("OK").''; + $phpgw->common->phpgw_footer(); + } + } +?> diff --git a/addressbook/export/Export_to_CSV b/addressbook/export/Export_to_CSV new file mode 100644 index 0000000000..dd4bda44a4 --- /dev/null +++ b/addressbook/export/Export_to_CSV @@ -0,0 +1,114 @@ +First NameMiddle NameLast Name... +// PatrickWalsh... +// +// Where the first line explains each optional field. This is what +// will be looked up in the key. +// +// The array need not be in any order and any fields not defined will +// not be transferred. If the val='+', the value will be appended to +// the previous field and any text after the '+' will be appended +// before the value. For example, the following would add a comma and +// a space between LastName and FirstName and store it in FullName: +// +// array("LastName" => "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; + var $type = 'csv'; + + var $export = array( + "title" => "Title", + "n_given" => "First Name", + "n_middle" => "Middle Name", + "n_family" => "Last Name", + "n_suffix" => "Suffix", + "org_name" => "Company", + "org_unit" => "Department", + "adr_one_street" => "Business Street", + "address2" => "Business Street 2", + "address3" => "Business Street 3", + "adr_one_locality" => "Business City", + "adr_one_region" => "Business State", + "adr_one_postalcode" => "Business Postal Code", + "adr_one_countryname" => "Business Country", + "adr_two_street" => "Home Street", + "adr_two_locality" => "Home City", + "adr_two_region" => "Home State", + "adr_two_postalcode" => "Home Postal Code", + "adr_two_countryname" => "Home Country", + "tel_fax" => "Business Fax", + "tel_work" => "Business Phone", + "tel_msg" => "Assistant's Phone", + "tel_car" => "Car Phone", + "tel_isdn" => "ISDN", + "tel_home" => "Home Phone", + "tel_cell" => "Mobile Phone", + "tel_pager" => "Pager", + "ophone" => "Business Phone 2", + "bday" => "Birthday", + "email" => "E-mail Address", + "email_home" => "E-mail Address 2", + "url" => "Web Page", + "note" => "Notes" + ); + + function export_start_file($buffer,$j="",$k="") { + return $buffer; + } + + function export_end_file($buffer) { + global $phpgw,$phpgw_info; + + $contacts = CreateObject("phpgwapi.contacts"); + echo '
'; + for ($i=1;$i<=count($buffer);$i++) { + while ( list($name,$value) = @each($buffer[$i]) ) { + //echo '
'.$i.': '.$name.' => '.$value; + $entry[$i][$name] = $value; + } + //echo '
'; + $contacts->add($phpgw_info["user"]["account_id"],$entry[$i]); + } + $num = $i - 1; + return "Successfully exported $num records from your addressbook."; + } + + function export_start_record($buffer) { + $top=array(); + ++$this->id; + $this->currentrecord = $top; + return $buffer; + } + + function export_end_record($buffer,$private="private") { + global $phpgw_info; + $buffer[$this->id]=""; + while ( list($name, $value) = each($this->currentrecord)) { + $buffer[$this->id][$name] = $value; + //echo '
'.$name.' => '.$value; + } + return $buffer; + } + + function export_new_attrib($buffer,$name,$value) { + $value = str_replace("\n","
",$value); + $value = str_replace("\r","",$value); + $this->currentrecord += array($name => $value); + + return $buffer; + } + } +?> diff --git a/addressbook/export/Export_to_LDIF b/addressbook/export/Export_to_LDIF new file mode 100644 index 0000000000..16b0c3cf42 --- /dev/null +++ b/addressbook/export/Export_to_LDIF @@ -0,0 +1,95 @@ + "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( + "title" => "title", + "n_given" => "givenname", + "n_family" => "sn", + "fn" => "cn", + "org_name" => "o", + "org_unit" => "ou", + "adr_one_street" => "streetaddress", + "adr_one_locality" => "locality", + "adr_one_state" => "st", + "adr_one_postalcode" => "postalcode", + "adr_one_countryname" => "countryname", + "tel_work" => "telephonenumber", + "tel_home" => "homephone", + "tel_fax" => "facsimiletelephonenumber", + "ophone" => "xmozillaanyphone", + "tel_cell" => "cellphone", + "note" => "description", + "tel_pager" => "pagerphone", + "email" => "mail", + "url" => "homeurl", + ); + + // 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->contacts = CreateObject('phpgwapi.contacts'); + $tmp = $this->contacts->read(0,''); + 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) { + $top = $this->contacts->read_single_entry($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]) { + $buffer[$this->id][$this->export[$name]] = $value; + //echo '
'.$this->id.' - '.$this->export[$name].': '.$buffer[$this->id][$this->export[$name]]; + } + return $buffer; + } + + // Tack on some extra values + function export_end_record($buffer) { + $buffer[$this->id]["dn"] = 'dn: cn='.$buffer[$this->id]["cn"].',mail='.$buffer[$this->id]["mail"]; + $buffer[$this->id]["xmozillauseconferenceserver"] = ""; + $buffer[$this->id]["xmozillanickname"] = ""; + $buffer[$this->id]["xmozillausehtmlmail"] = ""; + $buffer[$this->id]["objectClass"] = "person"; + //echo '
'.$this->id.' - '.$buffer[$this->id]['dn']; + return $buffer; + } + + function export_end_file($buffer) { + return $buffer; + } + } +?>