- $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`)
- VALUES (%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);
- }
- }
- }