Ejemplo n.º 1
0
$sql = 'SELECT * FROM calendar_alarm JOIN calendar_item USING (dav_id) JOIN caldav_data USING (dav_id) WHERE rrule IS NOT NULL AND next_trigger IS NULL';
if ($args->debug) {
    printf("%s\n", $sql);
}
$qry = new AwlQuery($sql);
if ($qry->Exec() && $qry->rows()) {
    while ($alarm = $qry->Fetch()) {
        if ($args->debug) {
            printf("refresh: Processing alarm for '%s' based on '%s','%s', '%s'\n", $alarm->dav_name, $alarm->dtstart, $alarm->rrule, $alarm->trigger);
        }
        $ic = new vComponent($alarm->caldav_data);
        $expanded = expand_event_instances($ic, $earliest, $expand_range_end);
        $expanded->MaskComponents(array('VEVENT' => 1, 'VTODO' => 1, 'VJOURNAL' => 1));
        $instances = $expanded->GetComponents();
        $trigger = new vProperty($alarm->trigger);
        $related = $trigger->GetParameterValue('RELATED');
        $first = new RepeatRuleDateTime($alarm->dtstart);
        $first->modify($trigger->Value());
        $next = null;
        $last = null;
        foreach ($instances as $k => $component) {
            $when = new RepeatRuleDateTime($component->GetPValue('DTSTART'));
            // a UTC value
            if ($args->debug) {
                printf("refresh: Looking at event instance on '%s'\n", $when->UTC());
            }
            if ($related == 'END') {
                $when->modify($component->GetPValue('DURATION'));
            }
            $when->modify($trigger->Value());
            if ($when > $expand_range_start && $when < $expand_range_end && (!isset($next) || $when < $next)) {