Initial check-in of export utility - not functional yet

This commit is contained in:
Miles Lott 2001-03-17 21:32:35 +00:00
parent e87d1171cc
commit 7a4db59d28
3 changed files with 321 additions and 0 deletions

112
addressbook/export.php Normal file
View File

@ -0,0 +1,112 @@
<?php
/**************************************************************************\
* phpGroupWare - addressbook *
* http://www.phpgroupware.org *
* Written by Joseph Engo <jengo@phpgroupware.org> *
* -------------------------------------------- *
* 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 "<!-- ".is_file($phpgw_info["server"]["app_root"].$sep."conv".$sep.$file)." -->";
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<count($myfilearray);$i++) {
$fname = ereg_replace('_',' ',$myfilearray[$i]);
$conv .= '<OPTION VALUE="'.$myfilearray[$i].'">'.$fname.'</OPTION>';
}
$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;$i<count($this->ids);$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 "<pre>\n";
$i=0;
while(list($name,$value) = each($buffer[$i])) {
echo $i.' - '.$name.': '.$value."\n";
$i++;
}
echo "\n</pre>\n";
echo '<a href="'.$phpgw->link("/addressbook/index.php").'">'.lang("OK").'</a>';
$phpgw->common->phpgw_footer();
}
}
?>

View File

@ -0,0 +1,114 @@
<?php
// This file defines a set of functions and an associative array.
// The key of the array corresponds to a header in the source
// export file and the value of the array item will be used in
// the creation of the output file.
//
// An exported Outlook file looks like this:
//
// Title<tab>First Name<tab>Middle Name<tab>Last Name<tab>...
// <tab>Patrick<tab><tab>Walsh<tab>...
//
// 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 '<br>';
for ($i=1;$i<=count($buffer);$i++) {
while ( list($name,$value) = @each($buffer[$i]) ) {
//echo '<br>'.$i.': '.$name.' => '.$value;
$entry[$i][$name] = $value;
}
//echo '<br>';
$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 '<br>'.$name.' => '.$value;
}
return $buffer;
}
function export_new_attrib($buffer,$name,$value) {
$value = str_replace("\n","<BR>",$value);
$value = str_replace("\r","",$value);
$this->currentrecord += array($name => $value);
return $buffer;
}
}
?>

View File

@ -0,0 +1,95 @@
<?php
// This file defines a set of functions and an associative array.
// The key of the array corresponds to a header in the source
// export file and the value of the array item will be used in
// the creation of the output file.
//
// 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;
//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;$i<count($tmp);$i++) {
$this->ids[$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 '<br>'.$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 '<br>'.$this->id.' - '.$buffer[$this->id]['dn'];
return $buffer;
}
function export_end_file($buffer) {
return $buffer;
}
}
?>