/**
  * @static
  * @param Sabre\VObject\Component\VEvent $component
  * @return int
  */
 public static function getDtEndTimeStamp(&$component)
 {
     /** @var Sabre\VObject\Property\DateTime $dtstart */
     $dtstart = $component->__get("DTSTART");
     if ($component->__get("DTEND")) {
         /** @var Sabre\VObject\Property\DateTime $dtend */
         $dtend = $component->__get("DTEND");
         return $dtend->getDateTime()->getTimeStamp();
     } elseif ($component->__get("DURATION")) {
         $endDate = clone $dtstart->getDateTime();
         $endDate->add(Sabre\VObject\DateTimeParser::parse($component->__get("DURATION")->value));
         return $endDate->getTimeStamp();
     } elseif ($dtstart->getDateType() === Sabre\VObject\Property\DateTime::DATE) {
         $endDate = clone $dtstart->getDateTime();
         $endDate->modify('+1 day');
         return $endDate->getTimeStamp();
     } else {
         return $dtstart->getDateTime()->getTimeStamp() + 3600;
     }
 }
/**
 * @param Sabre\VObject\Component\VAlarm $alarm
 * @param Sabre\VObject\Component\VEvent|Sabre\VObject\Component\VTodo $parent
 * @return DateTime|null
 * @throws Sabre_DAV_Exception
 */
function renderCalDavEntry_calcalarm(&$alarm, &$parent)
{
    $trigger = $alarm->__get("TRIGGER");
    if (!isset($trigger['VALUE']) || strtoupper($trigger['VALUE']) === 'DURATION') {
        $triggerDuration = Sabre\VObject\DateTimeParser::parseDuration($trigger->value);
        $related = isset($trigger['RELATED']) && strtoupper($trigger['RELATED']) == 'END' ? 'END' : 'START';
        if ($related === 'START') {
            /** @var Sabre\VObject\Property\DateTime $dtstart  */
            $dtstart = $parent->__get("DTSTART");
            $effectiveTrigger = $dtstart->getDateTime();
            $effectiveTrigger->add($triggerDuration);
        } else {
            if ($parent->name === 'VTODO') {
                $endProp = 'DUE';
            } else {
                $endProp = 'DTEND';
            }
            /** @var Sabre\VObject\Property\DateTime $dtstart  */
            $dtstart = $parent->__get("DTSTART");
            if (isset($parent->{$endProp})) {
                $effectiveTrigger = clone $parent->{$endProp}->getDateTime();
                $effectiveTrigger->add($triggerDuration);
            } elseif ($parent->__get("DURATION") != "") {
                $effectiveTrigger = clone $dtstart->getDateTime();
                $duration = Sabre\VObject\DateTimeParser::parseDuration($parent->__get("DURATION"));
                $effectiveTrigger->add($duration);
                $effectiveTrigger->add($triggerDuration);
            } else {
                $effectiveTrigger = clone $dtstart->getDateTime();
                $effectiveTrigger->add($triggerDuration);
            }
        }
    } else {
        // ??? @TODO
        $effectiveTrigger = $trigger->getDateTime();
    }
    return $effectiveTrigger;
}
Beispiel #3
0
 /**
  * @param array $courseInfo
  * @param $file
  * @return array|bool|string
  */
 public function importEventFile($courseInfo, $file)
 {
     $charset = api_get_system_encoding();
     $filepath = api_get_path(SYS_ARCHIVE_PATH) . $file['name'];
     $messages = array();
     if (!@move_uploaded_file($file['tmp_name'], $filepath)) {
         error_log('Problem moving uploaded file: ' . $file['error'] . ' in ' . __FILE__ . ' line ' . __LINE__);
         return false;
     }
     $data = file_get_contents($filepath);
     $trans = array('DAILY' => 'daily', 'WEEKLY' => 'weekly', 'MONTHLY' => 'monthlyByDate', 'YEARLY' => 'yearly');
     $sentTo = array('everyone' => true);
     $calendar = Sabre\VObject\Reader::read($data);
     $currentTimeZone = _api_get_timezone();
     if (!empty($calendar->VEVENT)) {
         foreach ($calendar->VEVENT as $event) {
             $start = $event->DTSTART->getDateTime();
             $end = $event->DTEND->getDateTime();
             //Sabre\VObject\DateTimeParser::parseDateTime(string $dt, \Sabre\VObject\DateTimeZone $tz)
             $startDateTime = api_get_local_time($start->format('Y-m-d H:i:s'), $currentTimeZone, $start->format('e'));
             $endDateTime = api_get_local_time($end->format('Y-m-d H:i'), $currentTimeZone, $end->format('e'));
             $title = api_convert_encoding((string) $event->summary, $charset, 'UTF-8');
             $description = api_convert_encoding((string) $event->description, $charset, 'UTF-8');
             $id = $this->addEvent($startDateTime, $endDateTime, 'false', $title, $description, $sentTo);
             $messages[] = " {$title} - " . $startDateTime . " - " . $endDateTime;
             //$attendee = (string)$event->attendee;
             /** @var Sabre\VObject\Property\ICalendar\Recur $repeat */
             $repeat = $event->RRULE;
             if ($id && !empty($repeat)) {
                 $repeat = $repeat->getParts();
                 $freq = $trans[$repeat['FREQ']];
                 if (isset($repeat['UNTIL']) && !empty($repeat['UNTIL'])) {
                     // Check if datetime or just date (strlen == 8)
                     if (strlen($repeat['UNTIL']) == 8) {
                         // Fix the datetime format to avoid exception in the next step
                         $repeat['UNTIL'] .= 'T000000';
                     }
                     $until = Sabre\VObject\DateTimeParser::parseDateTime($repeat['UNTIL'], new DateTimeZone($currentTimeZone));
                     $until = $until->format('Y-m-d H:i');
                     //$res = agenda_add_repeat_item($courseInfo, $id, $freq, $until, $attendee);
                     $this->addRepeatedItem($id, $freq, $until, $sentTo);
                 }
                 if (!empty($repeat['COUNT'])) {
                     /*$count = $repeat['COUNT'];
                       $interval = $repeat['INTERVAL'];
                       $endDate = null;
                       switch($freq) {
                           case 'daily':
                               $start = api_strtotime($startDateTime);
                               $date = new DateTime($startDateTime);
                               $days = $count * $interval;
                               var_dump($days);
                               $date->add(new DateInterval("P".$days."D"));
                               $endDate = $date->format('Y-m-d H:i');
                               //$endDate = $count *
                               for ($i = 0; $i < $count; $i++) {
                                   $days = 86400 * 7
                               }
                           }
                       }*/
                     //$res = agenda_add_repeat_item($courseInfo, $id, $freq, $count, $attendee);
                     /*$this->addRepeatedItem(
                           $id,
                           $freq,
                           $endDate,
                           $sentTo
                       );*/
                 }
             }
         }
     }
     if (!empty($messages)) {
         $messages = implode('<br /> ', $messages);
     } else {
         $messages = get_lang('NoAgendaItems');
     }
     return $messages;
 }
Beispiel #4
0
 public function getEventDates($component)
 {
     $allday = 0;
     $endField = $this->getEndFieldName($component->name);
     // Start
     if (isset($component->DTSTART)) {
         $DTSTART = Sabre\VObject\DateTimeParser::parse($component->DTSTART);
         $date_start = $DTSTART->format('Y-m-d');
         $time_start = $DTSTART->format('H:i:s');
         $startHasTime = $component->DTSTART->hasTime();
     } else {
         $DTSTAMP = Sabre\VObject\DateTimeParser::parse($component->DTSTAMP);
         $date_start = $DTSTAMP->format('Y-m-d');
         $time_start = $DTSTAMP->format('H:i:s');
     }
     //End
     if (isset($component->{$endField})) {
         $DTEND = Sabre\VObject\DateTimeParser::parse($component->{$endField});
         $endHasTime = $component->{$endField}->hasTime();
         if (!$endHasTime) {
             $DTEND->modify('-1 day');
         }
         $due_date = $DTEND->format('Y-m-d');
         $time_end = $DTEND->format('H:i:s');
     } else {
         $endTime = strtotime('+7 day', strtotime($date_start . ' ' . $time_start));
         $due_date = date('Y-m-d', $endTime);
         $time_end = date('H:i:s', $endTime);
     }
     if (!$startHasTime && !$endHasTime) {
         $allday = 1;
     }
     return ['allday' => $allday, 'date_start' => $date_start, 'due_date' => $due_date, 'time_start' => $time_start, 'time_end' => $time_end];
 }