/** * @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; }
/** * @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; }
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]; }