$event) { if (preg_match("/^(?:!!!)(?!!)\s?(.*)/m", $event, $eventTitle)) { preg_match("/^(?:Von:)\s*([0-9]{2}:[0-9]{2}).*$/m", $event, $eventBegin); preg_match("/^(?:Bis:)\s*([0-9]{2}:[0-9]{2}).*$/m", $event, $eventEnd); preg_match("/^(?:Wo:)\s*(.*)$/m", $event, $eventLocation); preg_match("/^(?:Beschreibung:)\s*(.*)$/ms", $event, $eventDescription); $eventTitle = $eventTitle[1]; $eventBegin = $eventBegin[1]; $eventEnd = $eventEnd[1]; $eventLocation = str_replace("\\", "", $eventLocation[1]); $eventDescription = str_replace("\\", "", $eventDescription[1]); $temp = explode(".", $date); $file_content[] = "BEGIN:VEVENT\n"; if ($eventBegin && $eventEnd) { $beginn = str_replace(":", "", $eventBegin); $ende = str_replace(":", "", $eventEnd); $file_content[] = "DTSTART;TZID=".$ICalTimeZone.":".$temp[1]."T".$beginn."00\n"; $file_content[] = "DTEND;TZID=".$ICalTimeZone.":".$temp[1]."T".$ende."00\n"; } else { $nextDay = $temp[1] + 1; $file_content[] = "DTSTART;VALUE=DATE:".$temp[1]."\n"; $file_content[] = "DTEND;VALUE=DATE:".$nextDay."\n"; } if ($eventLocation) $file_content[] = "LOCATION:".$eventLocation."\n"; $title = MarkupToHTML($date, $eventTitle); $title = chop(preg_replace("/<.*?>/s", "", $title)); $file_content[] = "SUMMARY:".$title."\n"; # Jeder Termin braucht ein eindeutige ID -> diese generieren $file_content[] = "UID:".$date."-".$eventNumber."-@".$_SERVER['HTTP_HOST']."\n"; if ($eventDescription) { $infos = MarkupToHTML($date, $eventDescription); $infos = preg_replace("/<.*?>/s", "", $infos); $infos = chop($infos); $infos = preg_replace("/\n/s", "\\n", $infos); # die folgende URL mit 2 Zeilen abtrennen $infos = $infos."\\n\\n"; } else $infos = ""; $file_content[] = "DESCRIPTION:".$infos.$ScriptUrl."/".$date."\n"; $file_content[] = "END:VEVENT\n"; } } } function icseinlesen ($pagename, $ics_name, $ics_rename) { global $ICalCalendarGroup; global $UploadDir, $WorkDir, $PageStartFmt, $PageEndFmt; # Initialisierung einiger Variablen $events = array(); $eventcounter = -1; # Oeffnen der auszulesenden Datei $file_handle = fopen ($ics_name, "r") ; # Zeilenweises Auslesen while($line=fgets($file_handle)){ # Entfernen unnoetiger Zeilenumbrueche $line = trim($line); # Trennen der einzelnen Termine voneinander if ($line == "BEGIN:VEVENT"){ $eventcounter++; } # Erkennen des in der Zeile behandelten Parameters # zur Benennung der entsprechenden Array-Eintraege preg_match ("/[A-Z]*/", $line, &$parameter); # Auslesen des Wertes $content = substr ($line, stripos($line, ":")+1); # Speicherung des Wertes beim jeweiligen Parameter $events[$eventcounter][$parameter[0]] = $content; } fclose ($file_handle); # Verwerfen der Praeambel der iCal-Datei unset ($events[-1]); # Erzeugen jeweils einer Seite pro Termin foreach($events as $event){ # Generierung des Seitennnamens aus dem in DTSTART angegebenen Datum $calpage = $WorkDir."/".$ICalCalendarGroup."/".$ICalCalendarGroup.".".substr($event["DTSTART"], 0, 8); if (!file_exists ($calpage)) { # Datei existiert noch nicht, also ganz am Anfang der Datei schreiben # Einfuegen der pmwiki-Standard-Header $file_content [] = "version=pmwiki-2.2.0-beta65 ordered=1 urlencoded=1\n"; $file_content [] = "charset=UTF-8\n"; $file_content [] = "ctime=".time()."\n"; $file_content [] = "name=".$ICalCalendarGroup.".".$calpage."\n"; $file_line = '4'; $file_content [$file_line] = "text="; } else { # Datei existiert schon, also Dateiinhalt einlesen und richtige Zeile suchen $read_handle = fopen($calpage, "r"); $n = '1'; # vorhandene Wikiseite zeilenweise einlesen, Zeile mit text suchen und # Zeilennummer speichern while (!feof($read_handle)) { $buffer = fgets($read_handle); $file_content [$n] = $buffer; if (!(strpos($file_content [$n], 'text=') === false)) { $file_line = $n; } $n++; } fclose ($read_handle); # Zeilenumbrueche (und Steuerzeichen) dieser Zeile entfernen und # Abstandhalter einfuegen $file_content [$file_line] = rtrim ($file_content [$file_line], "\x00..\x1F"); $file_content [$file_line].= "----%0a%0a"; } # Seite mit Inhalt aus der ics-Datei fuellen (Zeilenumbruch (\n) in der letzten # Zeile nicht vergessen) ... $file_content [$file_line].= "!!! ".$event["SUMMARY"]."%0a%0a"; $file_content [$file_line].= "Wo: ".$event["LOCATION"]."%0a%0a"; $file_content [$file_line].= "Von: ".substr($event["DTSTART"], 9, 2).":".substr($event["DTSTART"], 11, 2)." Uhr%0a%0a"; $file_content [$file_line].= "Bis: ".substr($event["DTEND"], 9, 2).":".substr($event["DTEND"], 11, 2)." Uhr%0a%0a"; $file_content [$file_line].= "Beschreibung: ".$event["DESCRIPTION"]."%0a%0a\n"; $wiki_content = implode('', $file_content); # ... und in Datei (WikiSeite) schreiben $write_handle = fopen($calpage, "w"); fputs($write_handle, $wiki_content); fclose($write_handle); # Datei veraenderbar machen # chmod($ics_name, 0777); } }