<?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';