Beiträge: 3
Themen: 1
Registriert seit: 26.01.2006
Hallo,
in meinem kleinen privaten Forum hat mich gerade ein Bekannter angesprochen, ob wir die Termine, die er bereits in Sunbird eingetragen hat, in unseren Forum-Kalender aufnehmen können.
Bekanntermaßen speichert Sunbird als ics, also im iCalendar-Format.
Ich habe schon hier, bei http://community.mybboard.net/, http://mods.mybboard.com/ und Google gesucht, bin jedoch leider erfolglos geblieben.
Ist hier vielleicht jemandem ein Mod oder sonst eine Möglichkeit bekannt, die iCal-Termine von Sunbird in den Kalender des MyBB-Forums zu importieren?
Wenn es da noch nichts gibt, müsste ich mir selber ein kleines Skript schreiben. Kommt das dann nur in die Tabelle mybb_events oder werden Termine oder was damit zusammenhängt noch in anderen Tabellen erwähnt?
Vielen Dank für den Support im vorraus.
Gruß hpvw
Beiträge: 18.383
Themen: 257
Registriert seit: 09.02.2005
26.01.2006, 17:32
(Dieser Beitrag wurde zuletzt bearbeitet: 26.01.2006, 17:32 von Michael.)
Hallo und willkommen,
ein solches Skript ist mir leider nicht bekannt. Termine werden in der Tabelle events, Geburtstage der Benutzer in der Tabelle users gespeichert.
Gruß,
Michael
Support erfolgt NUR im Forum!
Bitte gelöste Themen als "erledigt" markieren.
Beiträge mit mangelhafter Rechtschreibung/Grammatik werden kommentarlos gelöscht.
Beiträge: 3
Themen: 1
Registriert seit: 26.01.2006
Vielen Dank, dann muss ich nicht länger suchen.
Ich bin mittlerweile durch die PEAR-Pakete soweit, dass ich die für mich relevanten Daten extrahieren kann.
Auf meinem Server läuft PHP5 und MySQL 4.0.25. Ist dabei irgend etwas bezüglich Kollationen zu beachten, oder kann ich die ermittelten Strings direkt in die Events-Tabelle schreiben? Wenn ich das richtig überblicke liegen die Texte als iso-8859-1 vor. Wie sieht es mit Zeilenumbrüchen aus? Werden die normal als \n eingetragen? Und noch etwas: Werden die myCode-Tags im Kalender interpretiert? Schreibt man sie dann als [...] mit in die Datenbank oder müssen die vor dem Eintragen noch angepasst werden?
Gruß HPvW
PS: Ich werde da sicher keinen Mod draus machen, dafür habe ich zuviel Probleme, mich in fremde APIs einzuarbeiten. Ich könnte jedoch das Skript, was in erster Linie Quick and Dirrty ist, als Beispiel hier posten, wenn es fertig ist.
Ist es gewünscht, hier so einen "Code-Müll" zu sehen?
Beiträge: 3
Themen: 1
Registriert seit: 26.01.2006
Ich habe jetzt ein kleines Skript geschrieben. Für meine Anforderungen genügt es gerade so.
Es werden die PEAR-Pakete iCal, File und PEAR benötigt. Bitte versucht selbst, die in die richtigen Verzeichnisse zu packen. Ich habe das solange zurechtgepfuscht, bis es passte. *mit PEAR kam ich noch nie klar*
Es kann passieren, dass die PEAR-Klassen noch ein paar Fehler auswerfen, ich habe die entsprechenden Zeilen einfach auskommentiert.
Es ging dabei um Zeilen, wie z.B. Keine Ahnung, warum sie die da hingeschrieben haben.
Es tritt auch eine Fehlermeldung "Cannot get MOZILLA... property yet".
Die lässt sich vermeiden, wenn man bei Zeile 450 in Property.php den Default-Fall des Switch auskommentiert.
Überall, wo Kommentare stehen, kann bzw. muss das Skript noch für den jeweiligen Server angepasst werden.
PHP-Code: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <title>Import iCal</title> </head> <body><?php
/* Database Configuration PREFIX of the table name has to be changed in the query near line 115 */ mysql_connect("localhost" , "user" , "pass") or die(mysql_error); mysql_select_db("...") or die(mysql_error);
function format($s) { $f=str_replace('\n',"\n",$s); $f=str_replace('\,',",",$f); return $f; }
/* You need the following PEAR-Packages - iCal - File - PEAR */
require_once('File/iCal.php');
/* The Calendar File has to be on the server, here in the same directory as this file. */ $calendar = File_iCal::ReadFile('CalendarDataFile.ics',true);
echo "<pre>";
$i=0; while($calendar->getComponent($i)!==false) { $pArr=$calendar->getComponent($i)->getPropertyArray(); $i++;
$summary = ""; $location = ""; $start = ""; $end = ""; $description = ""; $categories = ""; foreach($pArr as $p){ $name=$p->getName(); if ($name=='SUMMARY') { $summary = format($p->getValue()->getValue()); } else if ($name=='LOCATION') { $location = format($p->getValue()->getValue()); } else if ($name=='DTSTART') { $start = format($p->getValue()->getValue()); } else if ($name=='DTEND') { $end = format($p->getValue()->getValue()); } else if ($name=='CATEGORIES') { $categories = format($p->getValue()->getValue()); } else if ($name=='DESCRIPTION') { $description = format($p->getValue()->getValue()); } else if ($name!='BEGIN' && $name!='UID' && $name!='STATUS' && $name!='CLASS' && $name!='END' && $name!='DUE' && $name!='COMPLETED' && $name!='DTSTAMP' && $name!='LAST-MODIFIED' ){ echo $name.": "; print_r($p->getValues()); print_r(get_class($p->getValue())); print_r(get_class_methods(get_class($p->getValue()))); echo "\n"; } } $days=array(); if (empty($end)) { $end=$start; } if (!empty($end)) { $s = mktime(0 , 0 , 0 , substr($start,4,2) , substr($start,6,2) , substr($start,0,4)); $e = mktime(0 , 0 , 0 , substr($end,4,2) , substr($end,6,2) , substr($end,0,4)); while ($s < $e) { $days[]=date("j-n-Y",$s); $s = strtotime("+1 day",$s); } } if (count($days)>0) { /* here you may change the format of the inserted description */ $content = ""; if (!empty($categories)) { $content.="[".$categories."]\n"; } if (!empty($location)) { $content.="--> ".$location."\n"; } if (!empty($description)) { $content.=$description."\n"; } $content = trim($content); echo "<b>".utf8_decode($summary)."</b>\n"; echo utf8_decode($content)."\n"; foreach($days as $d) { echo " ".$d;
/* maybe you have to change the prefix and the author id*/ $sql="insert into mybb_events set subject='".@mysql_real_escape_string(utf8_decode($summary))."', author=1, date='".$d."', description='".@mysql_real_escape_string(utf8_decode($content))."', private='no'"; if (@mysql_query($sql)) { echo " inserted\n"; } else { echo " ERROR: ".@mysql_error()."\n The Query:<b>".$sql."</b>\n"; } } echo "------------------------------------------------------------\n"; } } echo "</pre>";
?> </body> </html>
|