ACHTUNG: Dieser Beitrag bezieht sich auf Version 6. In den Kommentaren findet Ihr Hinweise zur Funktion unter Owncloud 7 und 8.
Seit Owncloud 8.1 kann man diese Features über eine Alternative App bekommen, siehe: http://zeit-zu-handeln.net/2015/07/webdesign/owncloud-kalender-feeds-mit-calendar-plus/.
Mit Version 9 ist aber auch diese nicht mehr zu empfehlen. Zum aktuellen Stand dieses Features siehe meinen Kommentar vom 11.07.2016 weiter unten.
Spätestens seit der Version 5.0 eignet sich Owncloud perfekt um seine Kalender selbst zu hosten. Die Bedienung im Browser, so wie die für mich viel wichtigere Synchronisation mit Thunderbird und meinem Android-Handy via CalDAV läuft eigentlich „out of the box“. Bei Thunderbird klappt das mit dem Kalender-Addon Lightning und bei Android habe ich gute Erfahrungen mit der App CalDAV-Sync gemacht.
Nichts desto trotz gab es paar Dinge die mich am Kalender von Owncloud immer gestört haben. Zu denen gehört an oberster Stelle der Import und Export von ICAL-Feeds. Ich zeige hier auf, wie man seine cloud um diese Features nachrüsten kann.
ICAL-Feed importieren
Einzelne Kalenderdaten (*.ics, *.ical) lassen sich über die Benutzeroberfläche derzeit leicht importieren, doch das Abonnieren von ICAl-Feeds ist so nicht möglich. Abhilfe schafft ein kleines PHP-Skript, welches sich die bereits bestehende Import-Funktionalität zunutze macht und Termine aus einer Feed-Adresse einliest. Ich habe diesen Codeschnipsel im Owncloud-Forum entdeckt und ein wenig angepasst.
"sahne",
"displayname" => "Piraten Mittelfranken",
"filename" => "https://events.piratenpartei-bayern.de/events/ical/?gid[]=10&limit=&subgroups=1&start=01.01.2013&end=&submit=Generieren"
),
//Der öffentliche Feiertags-Kalender von Google
array(
"userid" => "sahne",
"displayname" => "Feiertage",
"filename" => "https://www.google.com/calendar/ical/de.german%23holiday%40group.v.calendar.google.com/public/basic.ics"
),
);
foreach($Import AS $cal)
{
//Nachsehen ob der Kalender auf der Owncloud auch existiert
try {
$stmt = OCP\DB::prepare( 'SELECT * FROM `*PREFIX*clndr_calendars` WHERE `userid` = ? AND `displayname` = ?' );
$result = $stmt->execute(array($cal["userid"], $cal["displayname"]));
$row = $result->fetchRow();
$calendar_id = $row['id'];
if (!$calendar_id) {
echo "No calendar for userid " . $cal["userid"] . " with displayname '" . $cal["displayname"] . "'";
}
} catch (Exception $e) {
echo "DB exception: " . $e;
}
// Daten aus dem Feed laden
$file = file_get_contents($cal["filename"]);
if ($file === FALSE) {
echo "Couldn't read file: ".$cal["filename"];
}
//Import durchführen
$import = new OC_Calendar_Import($file);
$import->setUserID($cal["userid"]);
$import->setTimeZone(OC_Calendar_App::$tz);
$import->setCalendarID($calendar_id);
$import->setOverwrite(true);
OC_User::setUserId($cal["userid"]);
try {
$import->import();
$count = $import->getCount();
echo "Imported ".$count." objects in Calendar ".$cal["displayname"]."(".$cal["userid"].")\n";
} catch (Exception $e) {
echo "Import failed: " . $e;
}
}
?>
Wenn man diese Datei nun als Cronjob im gewünschtem Intervall ausführen lässt hat man alle Termine immer im Blick.
ICAL-Feeds exportieren
Es gibt bisher nicht die Möglichkeit einen öffentlichen ICAL-Feed von Kalendern zu erstellen. Man kann sich zwar eingeloggt mit entsprechenden Rechten Kalender als ICAL exportieren und könnte diese URL auch anderswo importieren, jedoch müssten hierzu Benutzername und Passwort in der URL übergeben werden.
Abhilfe schafft ein Update von rysiekpl welches sich auf GitHub herunterladen lässt. Die Dateien einfach mit denen der ursprünglichen Kalender-App unter apps/calendar ersetzen und es wird die Funktionalität Kalender öffentlich zu teilen, wie man es aus anderen Bereichen der Owncloud kennt, nachgerüstet. Wer ungern an an seiner Installation rumspielt sei gesagt, dass das Update mit etwas Glück im nächsten offiziellen Release eingebaut wird.