--- /dev/null
+<?php
+
+class Calendar extends DatabaseTable {
+
+ public function __construct($id=false)
+ {
+ $db = new Database(DBDRIVER, DBHOST, DAV_DBNAME, DBUSER, DBPASS);
+
+ parent::__construct('calendar_item', $id, $db, 'dav_id');
+ }
+
+ public static function pgTimestamp($timestamp)
+ {
+ if (is_string($timestamp))
+ return $timestamp;
+ elseif (is_int($timestamp))
+ return date('Y-m-d H:i:s', $timestamp);
+ elseif (is_object($timestamp) && is_a($timestamp, 'DateTime'))
+ return $timestamp->format('Y-m-d H:i:s');
+ else
+ return NULL;
+ }
+
+ public static function formatTimespan($dtstart, $dtend=false)
+ {
+ $start = new DateTime($dtstart);
+
+ if ($dtend !== false) {
+ $end = new DateTime($dtend);
+
+ if ($start->format('Y-m-d') == $end->format('Y-m-d')) {
+ if ($start->format('i') == '00' && $end->format('i') == '00')
+ return $start->format('d.m. H') . '-' . $end->format('H') . ' Uhr';
+ else
+ return $start->format('d.m. H:i') . '-' . $end->format('H:i');
+ }
+
+ if ($start->format('H:i:s') == '00:00:00' && $end->format('H:i:s') == '00:00:00') {
+ $end->sub(new DateInterval('P1D'));
+ if ($start->format('Y-m-d') == $end->format('Y-m-d'))
+ return $start->format('d.m.');
+ else
+ return $start->format('d.m.') . '-' . $end->format('d.m.');
+ }
+
+ if ($start->format('Y-m-') == $end->format('Y-m-')) {
+ return $start->format('d.m. H:i') . '-' . $end->format('d.m. H:i');
+ }
+ }
+
+ return 'timespan';
+ }
+
+ public function getYears()
+ {
+ $sql = sprintf("SELECT DISTINCT extract(year from dtstart) AS year FROM calendar_item WHERE user_no = %d ORDER BY year",
+ DAV_USER_NO);
+ return $this->db->fetchObjectList($sql);
+ }
+
+ public function getItems($from=false, $to=false)
+ {
+ $sql = sprintf("SELECT dav_id,dtstart,dtend,EXTRACT(WEEK FROM dtstart) AS kw,summary,location,description FROM calendar_item WHERE user_no = %d",
+ DAV_USER_NO);
+ if ($from)
+ $sql .= sprintf(" AND dtstart >= %s", $this->db->quote(self::pgTimestamp($from)));
+ if ($to)
+ $sql .= sprintf(" AND dtstart <= %s", $this->db->quote(self::pgTimestamp($to)));
+
+ $sql .= " ORDER BY dtstart";
+
+ return $this->db->fetchObjectList($sql);
+ }
+
+}