public function __construct($ical) { $this->error = null; $this->ical = $ical; $this->abscount = 0; $this->count = 0; $this->cache = \OC::$server->getCache(); //fix for multiple subcalendars if (substr_count($ical, 'BEGIN:VCALENDAR') > 1) { $ical = substr_replace($ical, '**##++FancyReplacementForFirstOccurrenceOfTheSearchPattern++##**', 0, 15); $ical = str_replace('BEGIN:VCALENDAR', '', $ical); $ical = str_replace('END:VCALENDAR', '', $ical); $ical = substr_replace($ical, 'BEGIN:VCALENDAR', 0, 64); $ical .= "\n" . 'END:VCALENDAR'; } try { $this->calobject = VObject::parse($this->ical); } catch (Exception $e) { //MISSING: write some log $this->error = true; return false; } return true; }
public function parseAlarm($aEvents) { $factor = 60; foreach ($aEvents as $event) { $startalarmtime = 0; $vMode = ''; $object = VObject::parse($event['calendardata']); if (isset($object->VEVENT)) { $vevent = $object->VEVENT; $dtstart = $vevent->DTSTART; $vMode = 'event'; } if (isset($object->VTODO)) { $vevent = $object->VTODO; $dtstart = $vevent->DUE; $vMode = 'todo'; } if ($event['startdate'] !== '' && ($vMode == 'event' || $vMode == 'todo')) { $starttimeTmp = new \DateTime($event['startdate'], new \DateTimeZone('UTC')); $starttimeTmp->setTimezone(new \DateTimeZone(self::$tz)); $starttime = $starttimeTmp->format('d.m.Y H:i'); } else { $starttime = $dtstart->getDateTime()->format('d.m.Y H:i'); } $startTimeShow = $starttime; $starttime = strtotime($starttime); if ($vevent->VALARM) { $valarm = $vevent->VALARM; $triggerTime = $valarm->getAsString('TRIGGER'); if (stristr($triggerTime, 'PT')) { $triggerAlarm = self::parseTrigger($triggerTime); $startalarmtime = $starttime + $triggerAlarm; } else { $triggerDate = $valarm->TRIGGER; if ($triggerDate->getValueType() !== 'DURATION' && $valarm->getAsString('ACTION') === 'DISPLAY') { $triggerAlarm = $triggerDate->getDateTime()->format('d.m.Y H:i'); $startalarmtime = strtotime($triggerAlarm); } } $triggerAction = $valarm->getAsString('ACTION'); } // $checktime=$startalarmtime-$this->nowTime; if ($this->nowTime == $startalarmtime) { $userid = Object::getowner($event['id']); $link = ''; $icon = ''; if ($vMode === 'event') { $link = \OC::$server->getURLGenerator()->linkToRoute(App::$appname . '.page.index') . '#' . urlencode($event['id']); $icon = 'calendar'; } if ($vMode === 'todo') { $link = \OC::$server->getURLGenerator()->linkToRoute('tasksplus.page.index') . '#' . urlencode($event['id']); $icon = 'tasks'; } $this->activeAlarms[$event['id']] = array('id' => $event['id'], 'userid' => $userid, 'icon' => $icon, 'link' => $link, 'action' => $triggerAction, 'summary' => $event['summary'], 'startdate' => $startTimeShow); } //\OCP\Util::writeLog('calendar', 'AlarmCheck Active:' . $event['summary'] . ' -> ' . date('d.m.Y H:i', $startalarmtime) . ' : ' . date('d.m.Y H:i', $this -> nowTime), \OCP\Util::DEBUG); } }
/** * @brief generates the cache the first time * @param (int) id - id of the event * @return (bool) */ public static function generate($id) { $event = Object::find($id); if ($event['repeating'] == 0) { return false; } $object = VObject::parse($event['calendardata']); $start = new \DateTime('01-01-' . date('Y') . ' 00:00:00', new \DateTimeZone('UTC')); $start->modify('-2 years'); $end = new \DateTime('31-12-' . date('Y') . ' 23:59:59', new \DateTimeZone('UTC')); $end->modify('+2 years'); $object->expand($start, $end); foreach ($object->getComponents() as $vevent) { if (!$vevent instanceof \Sabre\VObject\Component) { continue; } $startenddate = Object::generateStartEndDate($vevent->DTSTART, Object::getDTEndFromVEvent($vevent), $vevent->DTSTART->getValueType() == 'DATE' ? true : false, 'UTC'); $stmt = \OCP\DB::prepare('INSERT INTO `' . App::CldRepeatTable . '` (`eventid`,`calid`,`startdate`,`enddate`) VALUES(?,?,?,?)'); $stmt->execute(array($id, Object::getCalendarid($id), $startenddate['start'], $startenddate['end'])); } return true; }
/** * @brief creates an VCalendar Object from the request data * @param array $request * @return object created $vcalendar */ public static function createVCalendarFromRequest($request) { $vcalendar = new VObject('VCALENDAR'); $vcalendar->add('PRODID', 'ownCloud Calendar'); $vcalendar->add('VERSION', '2.0'); $vevent = new VObject('VEVENT'); $vcalendar->add($vevent); $vevent->setDateTime('CREATED', 'now'); //$vevent->setUID(); return self::updateVCalendarFromRequest($request, $vcalendar); }
/** * @brief generates the VEVENT/VTODO/VJOURNAL with UTC dates * @param array $event * @return string */ private static function generateEvent($event) { $object = VObject::parse($event['calendardata']); $serializeObjects = ''; if (!$object) { return false; } $sharedAccessClassPermissions = Object::getAccessClassPermissions($object); if (Object::getowner($event['id']) !== \OCP\User::getUser()) { if (!($sharedAccessClassPermissions & \OCP\PERMISSION_READ)) { return ''; } } $object = Object::cleanByAccessClass($event['id'], $object); if ($object->VEVENT) { /* $dtstart = $object->VEVENT->DTSTART; $start_dt = $dtstart->getDateTime(); $dtend = Object::getDTEndFromVEvent($object->VEVENT); $end_dt = $dtend->getDateTime(); if($dtstart->getValueType() !== 'DATE') { $start_dt->setTimezone(new \DateTimeZone('UTC')); $end_dt->setTimezone(new \DateTimeZone('UTC')); $object->VEVENT->setDateTime('DTSTART', $start_dt); $object->VEVENT->setDateTime('DTEND', $end_dt); }*/ return $object->VEVENT->serialize(); } if ($object->VTODO) { return $object->VTODO->serialize(); } if ($object->VJOURNAL) { return $object->VJOURNAL->serialize(); } return ''; }