/** * @brief generates the output for an event which will be readable for our js * @param (mixed) $event - event object / array * @param (int) $start - DateTime object of start * @param (int) $end - DateTime object of end * @return (array) $output - readable output */ public static function generateEventOutput(array $event, $start, $end) { if (!isset($event['calendardata']) && !isset($event['vevent'])) { return false; } if (!isset($event['calendardata']) && isset($event['vevent'])) { $event['calendardata'] = "BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:ownCloud's Internal iCal System\n" . $event['vevent']->serialize() . "END:VCALENDAR"; } try { $object = OC_VObject::parse($event['calendardata']); if (!$object) { \OCP\Util::writeLog('calendar', __METHOD__ . ' Error parsing event: ' . print_r($event, true), \OCP\Util::DEBUG); return array(); } $output = array(); if ($object->name === 'VEVENT') { $vevent = $object; } elseif (isset($object->VEVENT)) { $vevent = $object->VEVENT; } else { \OCP\Util::writeLog('calendar', __METHOD__ . ' Object contains not event: ' . print_r($event, true), \OCP\Util::DEBUG); return $output; } $id = $event['id']; if (OC_Calendar_Object::getowner($id) !== OCP\USER::getUser()) { // do not show events with private or unknown access class if (isset($vevent->CLASS) && ($vevent->CLASS->value === 'PRIVATE' || $vevent->CLASS->value === '')) { return $output; } $object = OC_Calendar_Object::cleanByAccessClass($id, $object); } $allday = $vevent->DTSTART->getDateType() == Sabre\VObject\Property\DateTime::DATE ? true : false; $last_modified = @$vevent->__get('LAST-MODIFIED'); $lastmodified = $last_modified ? $last_modified->getDateTime()->format('U') : 0; $staticoutput = array('id' => (int) $event['id'], 'title' => !is_null($vevent->SUMMARY) && $vevent->SUMMARY->value != '' ? strtr($vevent->SUMMARY->value, array('\\,' => ',', '\\;' => ';')) : self::$l10n->t('unnamed'), 'description' => isset($vevent->DESCRIPTION) ? strtr($vevent->DESCRIPTION->value, array('\\,' => ',', '\\;' => ';')) : '', 'lastmodified' => $lastmodified, 'allDay' => $allday); if (OC_Calendar_Object::isrepeating($id) && OC_Calendar_Repeat::is_cached_inperiod($event['id'], $start, $end)) { $cachedinperiod = OC_Calendar_Repeat::get_inperiod($id, $start, $end); foreach ($cachedinperiod as $cachedevent) { $dynamicoutput = array(); if ($allday) { $start_dt = new DateTime($cachedevent['startdate'], new DateTimeZone('UTC')); $end_dt = new DateTime($cachedevent['enddate'], new DateTimeZone('UTC')); $dynamicoutput['start'] = $start_dt->format('Y-m-d'); $dynamicoutput['end'] = $end_dt->format('Y-m-d'); } else { $start_dt = new DateTime($cachedevent['startdate'], new DateTimeZone('UTC')); $end_dt = new DateTime($cachedevent['enddate'], new DateTimeZone('UTC')); $start_dt->setTimezone(new DateTimeZone(self::$tz)); $end_dt->setTimezone(new DateTimeZone(self::$tz)); $dynamicoutput['start'] = $start_dt->format('Y-m-d H:i:s'); $dynamicoutput['end'] = $end_dt->format('Y-m-d H:i:s'); } $output[] = array_merge($staticoutput, $dynamicoutput); } } else { if (OC_Calendar_Object::isrepeating($id) || $event['repeating'] == 1) { $object->expand($start, $end); } foreach ($object->getComponents() as $singleevent) { if (!$singleevent instanceof Sabre\VObject\Component\VEvent) { continue; } $dynamicoutput = OC_Calendar_Object::generateStartEndDate($singleevent->DTSTART, OC_Calendar_Object::getDTEndFromVEvent($singleevent), $allday, self::$tz); $output[] = array_merge($staticoutput, $dynamicoutput); } } return $output; } catch (Exception $e) { $uid = 'unknown'; if (isset($event['uri'])) { $uid = $event['uri']; } \OCP\Util::writeLog('calendar', 'Event (' . $uid . ') contains invalid data: ' . $e->getMessage(), \OCP\Util::WARN); } }
<?php /** * Copyright (c) 2012 Georg Ehrke <*****@*****.**> * This file is licensed under the Affero General Public License version 3 or * later. * See the COPYING-README file. */ OCP\JSON::checkLoggedIn(); OCP\JSON::checkAppEnabled('calendar'); $calendars = OC_Calendar_Calendar::allCalendars(OCP\USER::getUser()); $allcached = true; foreach ($calendars as $calendar) { if (!OC_Calendar_Repeat::is_calendar_cached($calendar['id'])) { $allcached = false; } } $l = new OC_L10N('calendar'); if (!$allcached) { OCP\JSON::error(array('message' => 'Not all calendars are completely cached', 'l10n' => $l->t('Not all calendars are completely cached'))); } else { OCP\JSON::success(array('message' => 'Everything seems to be completely cached', 'l10n' => $l->t('Everything seems to be completely cached'))); }
while ($row = $result->fetchRow()) { $id = $row['id']; $color = $row['calendarcolor']; if ($color[0] == '#' || strlen($color) < 6) { continue; } $color = '#' . $color; $stmt = OCP\DB::prepare('UPDATE `*PREFIX*clndr_calendars` SET `calendarcolor`=? WHERE `id`=?'); $r = $stmt->execute(array($color, $id)); } } if (version_compare($installedVersion, '0.5', '<')) { $calendars = OC_Calendar_Calendar::allCalendars(OCP\USER::getUser()); foreach ($calendars as $calendar) { OC_Calendar_Repeat::cleanCalendar($calendar['id']); OC_Calendar_Repeat::generateCalendar($calendar['id']); } } if ($installedVersion == '0.6') { // the update script in this version was not correct // also sharing of calendars did not work //$query = OCP\DB::prepare("DELETE FROM `*PREFIX*share` WHERE `item_type` IN ('calendar', 'event')"); //$query->execute(); } if (version_compare($installedVersion, '0.6.1', '<=')) { $calendar_stmt = OCP\DB::prepare('SELECT * FROM `*PREFIX*clndr_share_calendar`'); $calendar_result = $calendar_stmt->execute(); while ($cal = $calendar_result->fetchRow()) { $shareType = OCP\Share::SHARE_TYPE_USER; if ($cal['sharetype'] == 'group') { $shareType = OCP\Share::SHARE_TYPE_GROUP;
/** * @brief generates the output for an event which will be readable for our js * @param (mixed) $event - event object / array * @param (int) $start - DateTime object of start * @param (int) $end - DateTime object of end * @return (array) $output - readable output */ public static function generateEventOutput($event, $start, $end) { if (!isset($event['calendardata']) && !isset($event['vevent'])) { return false; } if (!isset($event['calendardata']) && isset($event['vevent'])) { $event['calendardata'] = "BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:ownCloud's Internal iCal System\n" . $event['vevent']->serialize() . "END:VCALENDAR"; } $object = OC_VObject::parse($event['calendardata']); $vevent = $object->VEVENT; $return = array(); $id = $event['id']; $allday = $vevent->DTSTART->getDateType() == Sabre_VObject_Element_DateTime::DATE ? true : false; $last_modified = @$vevent->__get('LAST-MODIFIED'); $lastmodified = $last_modified ? $last_modified->getDateTime()->format('U') : 0; $staticoutput = array('id' => (int) $event['id'], 'title' => $event['summary'] != NULL || $event['summary'] != '' ? $event['summary'] : self::$l10n->t('unnamed'), 'description' => isset($vevent->DESCRIPTION) ? $vevent->DESCRIPTION->value : '', 'lastmodified' => $lastmodified, 'allDay' => $allday); if (OC_Calendar_Object::isrepeating($id) && OC_Calendar_Repeat::is_cached_inperiod($event['id'], $start, $end)) { $cachedinperiod = OC_Calendar_Repeat::get_inperiod($id, $start, $end); foreach ($cachedinperiod as $cachedevent) { $dynamicoutput = array(); if ($allday) { $start_dt = new DateTime($cachedevent['startdate'], new DateTimeZone('UTC')); $end_dt = new DateTime($cachedevent['enddate'], new DateTimeZone('UTC')); $dynamicoutput['start'] = $start_dt->format('Y-m-d'); $dynamicoutput['end'] = $end_dt->format('Y-m-d'); } else { $start_dt = new DateTime($cachedevent['startdate'], new DateTimeZone('UTC')); $end_dt = new DateTime($cachedevent['enddate'], new DateTimeZone('UTC')); $start_dt->setTimezone(new DateTimeZone(self::$tz)); $end_dt->setTimezone(new DateTimeZone(self::$tz)); $dynamicoutput['start'] = $start_dt->format('Y-m-d H:i:s'); $dynamicoutput['end'] = $end_dt->format('Y-m-d H:i:s'); } $return[] = array_merge($staticoutput, $dynamicoutput); } } else { if (OC_Calendar_Object::isrepeating($id) || $event['repeating'] == 1) { $object->expand($start, $end); } foreach ($object->getComponents() as $singleevent) { if (!$singleevent instanceof Sabre_VObject_Component_VEvent) { continue; } $dynamicoutput = OC_Calendar_Object::generateStartEndDate($singleevent->DTSTART, OC_Calendar_Object::getDTEndFromVEvent($singleevent), $allday, self::$tz); $return[] = array_merge($staticoutput, $dynamicoutput); } } return $return; }