egroupware_official/addressbook/inc/class.addressbook_csv.inc.php

125 lines
2.9 KiB
PHP
Raw Normal View History

2006-04-26 23:23:38 +02:00
<?php
2006-07-09 09:14:01 +02:00
/**
* Addressbook - export to csv
*
* @link www.egroupware.org
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @copyright (c) 2006-8 by Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @package addressbook
* @subpackage export
2006-07-09 09:14:01 +02:00
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @version $Id$
2006-07-09 09:14:01 +02:00
*/
2006-04-26 23:23:38 +02:00
/**
* export to csv
*/
class addressbook_csv
2006-04-26 23:23:38 +02:00
{
var $obj;
var $charset;
var $charset_out;
var $separator;
function __construct($obj,$charset=null,$separator=';')
2006-04-26 23:23:38 +02:00
{
$this->obj = $obj;
2006-04-26 23:23:38 +02:00
$this->separator = $separator;
$this->charset_out = $charset;
$this->charset = $GLOBALS['egw']->translation->charset();
}
/**
2006-07-09 09:14:01 +02:00
* Exports some contacts as CSV: download or write to a file
*
* @param array $ids contact-ids
* @param array $fields
2006-07-09 09:14:01 +02:00
* @param string $file filename or null for download
2006-04-26 23:23:38 +02:00
*/
function export($ids,$fields,$file=null)
{
unset($fields['jpegphoto']);
if (!$file)
{
$browser = new browser();
2006-04-26 23:23:38 +02:00
$browser->content_header('addressbook.csv','text/comma-separated-values');
}
if (!($fp = fopen($file ? $file : 'php://output','w')))
{
return false;
}
fwrite($fp,$this->csv_encode($fields,$fields)."\n");
foreach($ids as $id)
{
if (!($data = $this->obj->read($id)))
{
return false;
}
$this->csv_prepare($data,$fields);
fwrite($fp,$this->csv_encode($data,$fields)."\n");
}
fclose($fp);
2006-04-26 23:23:38 +02:00
if (!$file)
{
$GLOBALS['egw']->common->egw_exit();
}
2006-04-26 23:23:38 +02:00
return true;
}
2006-04-26 23:23:38 +02:00
function csv_encode($data,$fields)
{
$out = array();
foreach($fields as $field => $label)
{
$value = $data[$field];
if (strpos($value,$this->separator) !== false || strpos($value,"\n") !== false || strpos($value,"\r") !== false)
2006-04-26 23:23:38 +02:00
{
$value = '"'.str_replace(array('\\','"'),array('\\\\','\\"'),$value).'"';
}
$out[] = $value;
}
$out = implode($this->separator,$out);
2006-04-26 23:23:38 +02:00
if ($this->charset_out && $this->charset != $this->charset_out)
{
$out = $GLOBALS['egw']->translation->convert($out,$this->charset,$this->charset_out);
}
return $out;
}
2006-04-26 23:23:38 +02:00
function csv_prepare(&$data,$fields)
{
foreach(array('owner','creator','modifier') as $name)
{
if ($data[$name])
{
$data[$name] = $GLOBALS['egw']->common->grab_owner_name($data[$name]);
}
elseif ($name == 'owner')
{
$data[$name] = lang('Accounts');
}
}
foreach(array('modified','created') as $name)
{
if ($data[$name]) $data[$name] = date('Y-m-d H:i:s',$data[$name]);
}
if ($data['tel_prefer']) $data['tel_prefer'] = $fields[$data['tel_prefer']];
2006-04-26 23:23:38 +02:00
$cats = array();
foreach(explode(',',$data['cat_id']) as $cat_id)
{
if ($cat_id) $cats[] = $GLOBALS['egw']->categories->id2name($cat_id);
}
$data['cat_id'] = implode('; ',$cats);
2006-04-26 23:23:38 +02:00
$data['private'] = $data['private'] ? lang('yes') : lang('no');
2006-04-26 23:23:38 +02:00
$data['n_fileas'] = $this->obj->fileas($data);
$data['n_fn'] = $this->obj->fullname($data);
}
}