function _get_events_url(&$events, $url, $date) { $v = new vcalendar(); $v->setConfig('unique_id', 'barchat'); $v->setProperty('method', 'PUBLISH'); $v->setProperty("x-wr-calname", "Calendar Sample"); $v->setProperty("X-WR-CALDESC", "Calendar Description"); $v->setProperty("X-WR-TIMEZONE", "America/New_York"); $v->setConfig('url', $url); try { $v->parse(); } catch (exception $e) { } $v->sort(); $m = $date->format('n'); $d = $date->format('j'); $y = $date->format('Y'); $eventArray = $v->selectComponents($y, $m, 1, $y, $m, 31); foreach ((array) $eventArray as $yearkey => $yeararray) { foreach ((array) $yeararray as $monthkey => $montharray) { foreach ((array) $montharray as $daykey => $dayarray) { foreach ((array) $dayarray as $eventnumber => $event) { //echo "{$y}-{$m}-{$daykey} [{$eventnumber}]: "; $time = $event->dtstart['value']; $tz = $event->dtstart['params']['TZID'] == '' ? 'America/New_York' : $event->dtstart['params']['TZID']; if ($time['tz'] == 'Z') { $tz = 'GMT'; } if (isset($event->dtstart['params']['VALUE']) && $event->dtstart['params']['VALUE'] == 'DATE') { $allday = new DateTime("{$time['year']}-{$time['month']}-{$time['day']}", new DateTimeZone($tz)); $allday->setTimezone(new DateTimeZone('America/New_York')); $d = sprintf('%04d-%02d-%02d', $y, $m, $daykey); if (!is_array($events[$d])) { $events[$d] = array(); } $alldayint = intval($allday->format('U')); while (isset($events[$d][$alldayint])) { $alldayint++; } $events[$d][$alldayint] = '<span class="calendartime">All Day</span> ' . trim($event->summary['value']); //var_dump(date('r', $allday) . ' = ' . $allday); //var_dump($event->summary['value']); } else { if (isset($event->xprop['X-CURRENT-DTSTART'])) { $dt = new DateTime($event->xprop['X-CURRENT-DTSTART']['value'], new DateTimeZone($tz)); } else { $dt = new DateTime("{$time['year']}-{$time['month']}-{$time['day']} {$time['hour']}:{$time['min']}:{$time['sec']}", new DateTimeZone($tz)); } $dt->setTimezone(new DateTimeZone('America/New_York')); if (isset($event->xprop['X-CURRENT-DTEND'])) { $dte = new DateTime($event->xprop['X-CURRENT-DTEND']['value'], new DateTimeZone($tz)); } else { $timee = $event->dtstart['value']; $dte = new DateTime("{$timee['year']}-{$timee['month']}-{$timee['day']} {$timee['hour']}:{$timee['min']}:{$timee['sec']}", new DateTimeZone($tz)); } $dte->setTimezone(new DateTimeZone('America/New_York')); if (!is_array($events[$d])) { $events[$d] = array(); } $d = sprintf('%04d-%02d-%02d', $y, $m, $daykey); $daytime = $dt->format('U'); while (isset($events[$d][$daytime])) { $daytime++; } if ($dt->format('g:ia') != $dte->format('g:ia')) { $events[$d][$daytime] = '<span class="calendartime">' . $dt->format('g:ia') . ' - ' . $dte->format('g:ia') . '</span> ' . trim($event->summary['value']); } else { $events[$d][$daytime] = '<span class="calendartime">' . $dt->format('g:ia') . '</span> ' . trim($event->summary['value']); } //var_dump($event->dtstart); //var_dump($event->summary['value']); //var_dump($dt->format('r')); //var_dump($event); } } } } } }
/** * @param DBClass_friendica_calendars $calendar * @param DBClass_friendica_calendarobjects $calendarobject */ function renderCalDavEntry_data(&$calendar, &$calendarobject) { $a = get_app(); $v = new vcalendar(); $v->setConfig('unique_id', $a->get_hostname()); $v->parse($calendarobject->calendardata); $v->sort(); $eventArray = $v->selectComponents(2009, 1, 1, date("Y") + 2, 12, 30); $start_min = $end_max = ""; $allday = $summary = $vevent = $rrule = $color = $start = $end = null; $location = $description = ""; foreach ($eventArray as $yearArray) { foreach ($yearArray as $monthArray) { foreach ($monthArray as $day => $dailyEventsArray) { foreach ($dailyEventsArray as $vevent) { /** @var $vevent vevent */ $start = ""; $rrule = "NULL"; $allday = 0; $dtstart = $vevent->getProperty('X-CURRENT-DTSTART'); if (is_array($dtstart)) { $start = "'" . $dtstart[1] . "'"; if (strpos($dtstart[1], ":") === false) { $allday = 1; } } else { $dtstart = $vevent->getProperty('dtstart'); if (isset($dtstart["day"]) && $dtstart["day"] == $day) { // Mehrtägige Events nur einmal rein if (isset($dtstart["hour"])) { $start = "'" . $dtstart["year"] . "-" . $dtstart["month"] . "-" . $dtstart["day"] . " " . $dtstart["hour"] . ":" . $dtstart["minute"] . ":" . $dtstart["secont"] . "'"; } else { $start = "'" . $dtstart["year"] . "-" . $dtstart["month"] . "-" . $dtstart["day"] . " 00:00:00'"; $allday = 1; } } } $dtend = $vevent->getProperty('X-CURRENT-DTEND'); if (is_array($dtend)) { $end = "'" . $dtend[1] . "'"; if (strpos($dtend[1], ":") === false) { $allday = 1; } } else { $dtend = $vevent->getProperty('dtend'); if (isset($dtend["hour"])) { $end = "'" . $dtend["year"] . "-" . $dtend["month"] . "-" . $dtend["day"] . " " . $dtend["hour"] . ":" . $dtend["minute"] . ":" . $dtend["second"] . "'"; } else { $end = "'" . $dtend["year"] . "-" . $dtend["month"] . "-" . $dtend["day"] . " 00:00:00' - INTERVAL 1 SECOND"; $allday = 1; } } $summary = $vevent->getProperty('summary'); $description = $vevent->getProperty('description'); $location = $vevent->getProperty('location'); $rrule_prob = $vevent->getProperty('rrule'); if ($rrule_prob != null) { $rrule = $vevent->createRrule(); $rrule = "'" . dbesc($rrule) . "'"; } $color_ = $vevent->getProperty("X-ANIMEXX-COLOR"); $color = is_array($color_) ? $color_[1] : "NULL"; if ($start_min == "" || preg_replace("/[^0-9]/", "", $start) < preg_replace("/[^0-9]/", "", $start_min)) { $start_min = $start; } if ($end_max == "" || preg_replace("/[^0-9]/", "", $end) > preg_replace("/[^0-9]/", "", $start_min)) { $end_max = $end; } } } } } if ($start_min != "") { if ($allday && mb_strlen($end_max) == 12) { $x = explode("-", str_replace("'", "", $end_max)); $time = mktime(0, 0, 0, IntVal($x[1]), IntVal($x[2]), IntVal($x[0])); $end_max = date("'Y-m-d H:i:s'", $time - 1); } q("INSERT INTO %s%sjqcalendar (`uid`, `namespace`, `namespace_id`, `ical_uri`, `Subject`, `Location`, `Description`, `StartTime`, `EndTime`, `IsAllDayEvent`, `RecurringRule`, `Color`)\n\t\t\tVALUES (%d, %d, %d, '%s', '%s', '%s', '%s', %s, %s, %d, '%s', '%s')", CALDAV_SQL_DB, CALDAV_SQL_PREFIX, IntVal($calendar->uid), IntVal($calendarobject->namespace), IntVal($calendarobject->namespace_id), dbesc($calendarobject->uri), dbesc($summary), dbesc($location), dbesc(str_replace("\\n", "\n", $description)), $start_min, $end_max, IntVal($allday), dbesc($rrule), dbesc($color)); foreach ($vevent->components as $comp) { /** @var $comp calendarComponent */ $trigger = $comp->getProperty("TRIGGER"); $sql_field = $trigger["relatedStart"] ? $start : $end; $sql_op = $trigger["before"] ? "DATE_SUB" : "DATE_ADD"; $num = ""; $rel_type = ""; $rel_value = 0; if (isset($trigger["second"])) { $num = IntVal($trigger["second"]) . " SECOND"; $rel_type = "second"; $rel_value = IntVal($trigger["second"]); } if (isset($trigger["minute"])) { $num = IntVal($trigger["minute"]) . " MINUTE"; $rel_type = "minute"; $rel_value = IntVal($trigger["minute"]); } if (isset($trigger["hour"])) { $num = IntVal($trigger["hour"]) . " HOUR"; $rel_type = "hour"; $rel_value = IntVal($trigger["hour"]); } if (isset($trigger["day"])) { $num = IntVal($trigger["day"]) . " DAY"; $rel_type = "day"; $rel_value = IntVal($trigger["day"]); } if (isset($trigger["week"])) { $num = IntVal($trigger["week"]) . " WEEK"; $rel_type = "week"; $rel_value = IntVal($trigger["week"]); } if (isset($trigger["month"])) { $num = IntVal($trigger["month"]) . " MONTH"; $rel_type = "month"; $rel_value = IntVal($trigger["month"]); } if (isset($trigger["year"])) { $num = IntVal($trigger["year"]) . " YEAR"; $rel_type = "year"; $rel_value = IntVal($trigger["year"]); } if ($trigger["before"]) { $rel_value *= -1; } if ($rel_type != "") { $not_date = "{$sql_op}({$sql_field}, INTERVAL {$num})"; q("INSERT INTO %s%snotifications (`uid`, `ical_uri`, `rel_type`, `rel_value`, `alert_date`, `notified`) VALUES ('%s', '%s', '%s', '%s', %s, IF(%s < NOW(), 1, 0))", CALDAV_SQL_DB, CALDAV_SQL_PREFIX, IntVal($calendar->uid), dbesc($calendarobject->uri), dbesc($rel_type), IntVal($rel_value), $not_date, $not_date); } } } }