setConfig('unique_id', $hostname); $v->setProperty('method', 'PUBLISH'); $v->setProperty("x-wr-calname", "AnimexxCal"); $v->setProperty("X-WR-CALDESC", "Animexx Calendar"); $v->setProperty("X-WR-TIMEZONE", $timezone); if ($row["adjust"]) { $start = datetime_convert('UTC', date_default_timezone_get(), $row["start"]); $finish = datetime_convert('UTC', date_default_timezone_get(), $row["finish"]); } else { $start = $row["start"]; $finish = $row["finish"]; } $allday = (strpos($start, "00:00:00") !== false && strpos($finish, "00:00:00") !== false); /* if ($allday) { $dat = Datetime::createFromFormat("Y-m-d H:i:s", $finish_tmp); $dat->sub(new DateInterval("P1D")); $finish = datetime_convert("UTC", date_default_timezone_get(), $dat->format("Y-m-d H:i:s")); var_dump($finish); } */ // 2012-06-29 - change to Friendica new event behaviour where summary is present and required, // but use desc for older events where summary wasn't present or required (but desc was) $subject = (($row["summary"]) ? $row["summary"] : substr(preg_replace("/\[[^\]]*\]/", "", $row["desc"]), 0, 100)); $description = (($row["desc"]) ? preg_replace("/\[[^\]]*\]/", "", $row["desc"]) : $row["summary"]); $vevent = dav_create_vevent(wdcal_mySql2icalTime($row["start"]), wdcal_mySql2icalTime($row["finish"]), false); $vevent->setLocation(icalendar_sanitize_string($row["location"])); $vevent->setSummary(icalendar_sanitize_string($subject)); $vevent->setDescription(icalendar_sanitize_string($description)); $v->setComponent($vevent); $ical = $v->createCalendar(); return array( "uid" => $uid, "namespace" => CALDAV_NAMESPACE_FRIENDICA_NATIVE, "namespace_id" => $namespace_id, "date" => $row["edited"], "data_uri" => "friendica-" . $namespace_id . "-" . $row["id"] . "@" . $hostname, "data_subject" => $subject, "data_location" => $row["location"], "data_description" => $description, "data_start" => $start, "data_end" => $finish, "data_allday" => $allday, "data_type" => $row["type"], "ical" => $ical, "ical_size" => strlen($ical), "ical_etag" => md5($ical), ); } /** * @static * @param int $uid * @param int $namespace_id * @param string|int $date_from * @param string|int $date_to * @throws Sabre_DAV_Exception_NotFound * @return array */ static public function getItemsByTime($uid = 0, $namespace_id = 0, $date_from = "", $date_to = "") { $uid = IntVal($uid); $namespace_id = IntVal($namespace_id); switch ($namespace_id) { case CALDAV_FRIENDICA_MINE: $sql_where = " AND cid = 0"; break; case CALDAV_FRIENDICA_CONTACTS: $sql_where = " AND cid > 0"; break; default: throw new Sabre_DAV_Exception_NotFound(); } if ($date_from != "") { if (is_numeric($date_from)) $sql_where .= " AND `finish` >= '" . date("Y-m-d H:i:s", $date_from) . "'"; else $sql_where .= " AND `finish` >= '" . dbesc($date_from) . "'"; } if ($date_to != "") { if (is_numeric($date_to)) $sql_where .= " AND `start` <= '" . date("Y-m-d H:i:s", $date_to) . "'"; else $sql_where .= " AND `start` <= '" . dbesc($date_to) . "'"; } $ret = array(); $a = get_app(); $host = $a->get_hostname(); $r = q("SELECT * FROM `event` WHERE `uid` = %d " . $sql_where . " ORDER BY `start`", $uid); foreach ($r as $row) $ret[] =self::row2array($row, $a->timezone, $host, $uid, $namespace_id); return $ret; } /** * @static * @param int $uid * @param string $uri * @throws Sabre_DAV_Exception_NotFound * @return array */ static public function getItemsByUri($uid = 0, $uri) { $x = explode("-", $uri); if ($x[0] != "friendica") throw new Sabre_DAV_Exception_NotFound(); $namespace_id = IntVal($x[1]); switch ($namespace_id) { case CALDAV_FRIENDICA_MINE: $sql_where = " AND cid = 0"; break; case CALDAV_FRIENDICA_CONTACTS: $sql_where = " AND cid > 0"; break; default: throw new Sabre_DAV_Exception_NotFound(); } $a = get_app(); $host = $a->get_hostname(); $r = q("SELECT * FROM `event` WHERE `uid` = %d AND id = %d " . $sql_where, $uid, IntVal($x[2])); if (count($r) != 1) throw new Sabre_DAV_Exception_NotFound(); $ret =self::row2array($r[0], $a->timezone, $host, $uid, $namespace_id); return $ret; } }