<?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 $type = 'vcard';

		/* This will store the contacts and vcard objects */
		var $contacts = '';
		var $vcard = '';
		/* This will be filled by the vcard object */
		var $export = array();

		/* 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 and vcard objects */
		var $contacts = '';
		var $vcard = '';

		/* Read full list of user's contacts only to get id's for each */
		function export_start_file($buffer,$ncat_id='')
		{
			$this->id=-1;
			if ($ncat_id)
			{
				$filter = 'tid=n,cat_id='.$ncat_id;
			}
			else
			{
				$filter = 'tid=n';
			}
			/* Setup the contact and vcard objects, and the export fields var */
			$this->contacts = CreateObject('phpgwapi.contacts');
			$this->vcard = CreateObject('phpgwapi.vcard');
			$this->export = $this->vcard->export;

			$tmp = $this->contacts->read('','',array('id'=>'id'),'',$filter);
			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)
		{
			$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 in the vcard class
		*/
		function export_new_attrib($buffer,$name,$value)
		{
			if ($this->export[$name] && ($value != '') )
			{
				$buffer[$this->id][$this->export[$name]] = $value;
				/* echo '<br>'.$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;$i<count($this->ids);$i++)
			{
				$vcards .= $this->vcard->out($buffer[$i]);
			}
			$buffer = $vcards;
			return $buffer;
		}
	}
?>
