예제 #1
0
 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);
                     }
                 }
             }
         }
     }
 }
예제 #2
0
/**
 * @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);
            }
        }
    }
}