<?php
/**
* icalsub.php: subscribe to a calendar in kronolith as a subscription
*
* J. Adams <jna@retina.net>
* 1/30/2005
*/
@define('AUTH_HANDLER', true);
@define('KRONOLITH_BASE', dirname(__FILE__));
require_once KRONOLITH_BASE . '/lib/base.php';
require_once 'Horde/Data.php';
if (!$conf['menu']['import_export']) {
require KRONOLITH_BASE . '/index.php';
exit;
}
/* Templates for the different import steps. */
$templates = array(
IMPORT_FILE => array(KRONOLITH_TEMPLATES . '/data/import.inc', KRONOLITH_TEMPLATES . '/data/export.inc'),
IMPORT_CSV => array($registry->get('templates', 'horde') . '/data/csvinfo.inc'),
IMPORT_MAPPED => array($registry->get('templates', 'horde') . '/data/csvmap.inc'),
IMPORT_DATETIME => array($registry->get('templates', 'horde') . '/data/datemap.inc')
);
/* Initial values. */
$actionID = "export";
$next_step = IMPORT_FILE;
$error = false;
/* Loop through the action handlers. */
/* always get all events */
$start = null;
$end = null;
$events = array();
# apparently this is calendars to display; note support for multiple calendars here.
if (!empty($_SERVER['PATH_INFO'])) {
$cal = basename($_SERVER['PATH_INFO']);
} else {
$cal = Util::getFormData('c');
if (is_array($cal)) {
$cal = implode('|', $cal);
}
}
$kronolith->open($cal);
$events[$cal] = $kronolith->listEvents(null,null);
if (!count($events)) {
print "no events.\n";
exit;
} else {
require_once 'Horde/Identity.php';
require_once 'Horde/iCalendar.php';
$iCal = &new Horde_iCalendar();
foreach ($events as $cal => $calevents) {
if ($kronolith->getCalendar() != $cal) {
$kronolith->close();
$kronolith->open($cal);
}
$identity = &$kronolith_shares->getIdentityByShare($kronolith_shares->getShare($cal));
foreach ($calevents as $id) {
$event = &$kronolith->getEvent($id);
$iCal->addComponent($event->toiCalendar($iCal, $identity));
}
}
$data = $iCal->exportvCalendar();
$browser->downloadHeaders(_("events.ics"), 'text/calendar', false, strlen($data));
echo $data;
exit;
}
/* We have a final result set. */
if (is_array($next_step)) {
$events = array();
$kronolith->open($_SESSION['import_data']['import_cal']);
$error = false;
foreach ($next_step as $row) {
$event = &$kronolith->getEvent();
if (!$event || is_a($event, 'PEAR_Error')) {
$msg = _("Can't create a new event.");
if (is_a($event, 'PEAR_Error')) {
$msg .= ' ' . sprintf(_("This is what the server said: %s"), $event->getMessage());
}
$notification->push($msg, 'horde.error');
$error = true;
break;
}
if (is_a($row, 'Horde_iCalendar_vevent')) {
$event->fromiCalendar($row);
} elseif (is_a($row, 'Horde_iCalendar')) {
// Skip other iCalendar components for now.
continue;
} else {
$event->fromHash($row);
}
$success = $event->save();
if (is_a($success, 'PEAR_Error')) {
$notification->push($success, 'horde.error');
$error = true;
break;
}
}
if (!$error) {
$notification->push(sprintf(_("%s file successfully imported"),
$file_types[$_SESSION['import_data']['format']]), 'horde.success');
}
$next_step = $data->cleanup();
}
$title = _("Import/Export Calendar");
require KRONOLITH_TEMPLATES . '/common-header.inc';
require KRONOLITH_TEMPLATES . '/menu.inc';
foreach ($templates[$next_step] as $template) {
require $template;
}
require $registry->get('templates', 'horde') . '/common-footer.inc';