1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
<?php
require_once 'Horde/iCalendar.php';
/**
* Abstract implementation of the Horde_Data:: API for IMC data -
* vCards and iCalendar data, etc. Provides a number of utility
* methods that vCard and iCalendar implementation can share and rely
* on.
*
* $Horde: framework/Data/Data/imc.php,v 1.32.10.8 2006/05/09 23:06:09 chuck Exp $
*
* Copyright 1999-2006 Jan Schneider <jan@horde.org>
*
* See the enclosed file COPYING for license information (LGPL). If you
* did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
*
* @author Jan Schneider <jan@horde.org>
* @package Horde_Data
* @since Horde 3.0
*/
class Horde_Data_imc extends Horde_Data {
var $_iCal = false;
function importData($text)
{
$this->_iCal = new Horde_iCalendar();
if (!$this->_iCal->parsevCalendar($text)) {
return PEAR::raiseError(_("There was an error importing the iCalendar data."));
}
return $this->_iCal->getComponents();
}
/**
* Builds an iCalendar file from a given data structure and
* returns it as a string.
*
* @param array $data An array containing Horde_iCalendar_vevent
* objects
* @param string $method The iTip method to use.
*
* @return string The iCalendar data.
*/
function exportData($data, $method = 'REQUEST')
{
$this->_iCal = new Horde_iCalendar();
$this->_iCal->setAttribute('METHOD', $method);
foreach ($data as $event) {
$this->_iCal->addComponent($event);
}
return $this->_iCal->exportvCalendar();
}
/**
* Builds an iCalendar file from a given data structure and
* triggers its download. It DOES NOT exit the current script but
* only outputs the correct headers and data.
*
* @param string $filename The name of the file to be downloaded.
* @param array $data An array containing Horde_iCalendar_vevents
*/
function exportFile($filename, $data)
{
$export = $this->exportData($data);
$GLOBALS['browser']->downloadHeaders($filename, 'text/calendar', false, strlen($export));
echo $export;
}
/**
* Takes all necessary actions for the given import step,
* parameters and form values and returns the next necessary step.
*
* @param integer $action The current step. One of the IMPORT_* constants.
* @param array $param An associative array containing needed
* parameters for the current step.
* @return mixed Either the next step as an integer constant or imported
* data set after the final step.
*/
function nextStep($action, $param = array())
{
switch ($action) {
case IMPORT_FILE:
$next_step = parent::nextStep($action, $param);
if (is_a($next_step, 'PEAR_Error')) {
return $next_step;
}
$import_data = $this->importFile($_FILES['import_file']['tmp_name']);
if (is_a($import_data, 'PEAR_Error')) {
return $import_data;
}
return $this->_iCal->getComponents();
break;
default:
return parent::nextStep($action, $param);
break;
}
}
}
|