Hallo alle zusammen,
wie versprochen der Import von iCalender in termine.txt.
!!! vorher die termine.txt sichern !!!
Als erstes das Script.
function import_sunbird()
{
/*=============================================
import_sunbird - Martin Heinzel - 24.05.2010
Version: 2.0
Beschreibung:
In diesem Skript werden die Termine von der Sunbird Terminverwaltung
in die Ferengi-Master termine.txt konvertiert.
Änderungen
----------
24.05.2010 von Version 1.0 -> 2.0
Berschreibung:
Angepasst auf Ferengi-Master Terminverwaltung V 2.40b
tt.mm.yyyy von Version x.x -> x.x
Berschreibung:
================================================*/
// Variablen Deklaration --------------------------------------
//Bitte anpassen
//------------------------------------------
//Ablageort für termine.txt Ferengi Master
$file_ferengi = IPS_GetKernelDir()."media\ ermine.txt";
//Ablageort für kalender.ics Sunbird
$file_sunbird = IPS_GetKernelDir()."media\\kalender.ics";
//------------------------------------------
// ID's
//---------
$id_TV = IPS_GetObjectIDByName(".Terminverwaltung", 0);
// ID Handshake-Variable
$id_file_time_sunbird = @IPS_GetVariableIDByName("file_time_sunbird", $id_TV);
// wenn es die Variable noch nicht gibt -> anlegen in .Terminverwaltung
if($id_file_time_sunbird === false)
{
$id_file_time_sunbird = IPS_CreateVariable(1);
IPS_SetName($id_file_time_sunbird, "file_time_sunbird");
IPS_SetParent($id_file_time_sunbird, $id_TV);
}
$id_term_art_text = IPS_GetVariableIDByName("term_art_text", $id_TV);
// Variablen
//--------------
//String für kompletten Sunbird Datensatz
$Sunbird_DS_komplett = "";
//String array für Ferengi Terminverwaltung
$term_arr_komplett = array();
$term_arr_komplett[] = "000000000,0,0,0,0,0,0,0,0,0,0,00,00,00,00,,0,,,0,0,0,0,0,0,,0,0";
//-------------------------------------------------------------
//--------------------------- Main ----------------------------
if(file_exists($file_sunbird))
{
//Den Zeitstempel der Sunbird Kalender-Datei holen
$timestanp_sunbird = filemtime($file_sunbird);
}
else
{
//Wenn die Datei nicht existiert dann ist der Zeitstempel NULL
$timestanp_sunbird = 0;
}
//Den letzten Zeitstempel holen
$old_timestanp_sunbird = GetValueInteger($id_file_time_sunbird);
//Wenn der Zeitstempel der aktuellen Datei neuer ist
if($timestanp_sunbird > $old_timestanp_sunbird)
{
//Den aktuellen Zeitstempel abspeichern
SetValueInteger($id_file_time_sunbird, $timestanp_sunbird);
//Daten holen
//Termine in Variable einlesen
$Sunbird_DS_komplett = file_get_contents($file_sunbird);
//Den kompletten Datensatz zerlegen
$Sunbird_DS_arr_komplett = explode("BEGIN:", $Sunbird_DS_komplett);
//alle Datensätze durchlaufen
foreach($Sunbird_DS_arr_komplett as $key_1 => $value_1)
{
//Ferengi Daten im Datensatz
$term_einmalig = 0;
$term_jaerlich = 0;
$term_mo = 0;
$term_di = 0;
$term_mi = 0;
$term_do = 0;
$term_fr = 0;
$term_sa = 0;
$term_so = 0;
$term_aktiv = 0;
$term_stunde = "";
$term_minute = "";
$term_tag = "";
$term_monat = "";
$term_loe = 0;
$term_14tag_ger = 0;
$term_14tag_ung = 0;
$term_erin = 0;
$term_anzei = 0;
$term_art = 0;
$term_monatlich = 0;
$term_inhalt = "";
$term_trigger = "";
$term_trigger_para = "";
$term_woche = 0;
$term_14Tage = 0;
//Der erste Datensatz ist "2"
if($key_1 > 1)
{
//einzelnen Datensatz in Daten zerlegen
$Sunbird_arr = explode("
", $value_1);
//Nur Datensätze vom Typ "VEVENT" und "VTODO" durchlaufen
if($Sunbird_arr[0] == "VEVENT" or $Sunbird_arr[0] == "VTODO")
{
//Daten von Sunbird sind immer aktiv und werden angezeigt
$term_aktiv = 1;
$term_anzei = 1;
//alle Daten durchlaufen
foreach($Sunbird_arr as $key_2 => $value_2)
{
//Daten zerlegen in Parameter und Wert
$Data_arr = explode(":", $value_2);
//Kontrolle der Parameter
Switch($Data_arr[0])
{
case "SUMMARY":
$term_inhalt = $Data_arr[1];
break;
case "CATEGORIES":
//Variable initialisieren
$cat_exist = 0;
$cat_count = 0;
//Die Kategorie von Sunbird harmonisieren
$cat_sunbird = strtolower($Data_arr[1]);
//Terminarten holen
$term_art_text = GetValueString($id_term_art_text);
//Terminart zerlegen und in array
$term_art_arr = explode("|", $term_art_text);
//Terminart prüfen
foreach($term_art_arr as $term_art_value)
{
//Die Kategorie von Ferengi-Master hamonisieren
$cat_term_art = strtolower($term_art_value);
//Kontrolle der Kategorie
if($cat_term_art === $cat_sunbird)
{
$cat_exist = 1;
$term_art = $cat_count;
}
$cat_count = $cat_count +1;
}
//wenn die Kategorie nicht vorhanden ist dann
if(!$cat_exist)
{
//Die neue Kategorie zufügen
$term_art_arr[] = $Data_arr[1];
$term_art = $cat_count;
}
//Kategorie wandeln in String
$term_art_text = implode("|", $term_art_arr);
//und ablegen
SetValueString($id_term_art_text, $term_art_text);
break;
//Wiederholender Termin
case "RRULE":
//Wiederholung zerlegen und in array
$term_rule_arr = explode(";", $Data_arr[1]);
//Termin wöchentlich und 14 Tage
if($term_rule_arr[0] == "FREQ=WEEKLY")
{
//Kontrolle des Intervall
$term_rule_count = count($term_rule_arr);
//Wenn ein Intervall vorhanden ist -> Kontrolle
if($term_rule_count > 1)
{
if($term_rule_arr[1] == "INTERVAL=2")
{
$term_14Tage = 1;
}
else
{
$term_woche = 1;
}
}
else
{
$term_woche = 1;
}
}
//Termin monatlich
if($term_rule_arr[0] == "FREQ=MONTHLY")
{
$term_monatlich = 1;
}
//Termin jährlich
if($term_rule_arr[0] == "FREQ=YEARLY")
{
$term_jaerlich = 1;
}
break;
//Zeitstempel Datum
case "DTSTART;VALUE=DATE":
$term_jahr = substr($Data_arr[1], 0, 4);
$term_monat = substr($Data_arr[1], 4, 2);
$term_tag = substr($Data_arr[1], 6, 2);
$term_stunde = "00";
$term_minute = "00";
$term_sekunde = "00";
break;
//Zeitstempel Datum und Zeit
case "DTSTART;TZID=Europe/Berlin":
$term_jahr = substr($Data_arr[1], 0, 4);
$term_monat = substr($Data_arr[1], 4, 2);
$term_tag = substr($Data_arr[1], 6, 2);
$term_stunde = substr($Data_arr[1], 9, 2);
$term_minute = substr($Data_arr[1],11, 2);
$term_sekunde = substr($Data_arr[1],13, 2);
break;
//Beschreibung
case "DESCRIPTION":
//Wert zerlegen in Trigger und Parameter
$trigger_arr = explode(",", $Data_arr[1]);
$term_trigger = substr($trigger_arr[0], 0, strlen($trigger_arr[0])-1);
$term_trigger_para = $trigger_arr[1];
}
}
//Restliche Daten generieren
//Time stamp
$term_timestamp = mktime((int)$term_stunde, (int)$term_minute, 0, (int)$term_monat, (int)$term_tag, 2000);
//Termin einmalig
if(!$term_jaerlich and !$term_monatlich and !$term_14Tage and !$term_woche)
{
$term_einmalig = 1;
$term_loe = 1;
}
//Termin wöchentlich und 14 tägig
if($term_woche or $term_14Tage)
{
$timestamp = mktime(0, 0, 0, (int)$term_monat, (int)$term_tag, (int)$term_jahr);
$tag = date("w", $timestamp);
//Kontrolle des Wochentages
Switch($tag)
{
case 0:
$term_so = 1;
break;
case 1:
$term_mo = 1;
break;
case 2:
$term_di = 1;
break;
case 3:
$term_mi = 1;
break;
case 4:
$term_do = 1;
break;
case 5:
$term_fr = 1;
break;
case 6:
$term_sa = 1;
}
//Kontrolle der Woche 14tägig gerade oder ungerade
if($term_14Tage)
{
if((date("W", $timestamp) % 2) == 0)
{
$term_14tag_ger = 1;
}
else
{
$term_14tag_ung = 1;
}
}
//wenn Wochenwert gesetzt, Datum auf 0 setzen
$term_jahr = 0;
$term_monat = 0;
$term_tag = 0;
}
//wenn monatlich gesetzt, Monat auf 0 setzen
if($term_monatlich) $term_monat = 0;
//wenn jährlich gesetzt, Zeit auf 0 setzen
if($term_jaerlich)
{
$term_stunde = 0;
$term_minute = 0;
$term_sekunde = 0;
}
//Termin array zusammenstellen
$term_arr[0] = $term_timestamp;
$term_arr[1] = $term_einmalig;
$term_arr[2] = $term_jaerlich;
$term_arr[3] = $term_mo;
$term_arr[4] = $term_di;
$term_arr[5] = $term_mi;
$term_arr[6] = $term_do;
$term_arr[7] = $term_fr;
$term_arr[8] = $term_sa;
$term_arr[9] = $term_so;
$term_arr[10] = $term_aktiv;
$term_arr[11] = sprintf("%02s", $term_stunde);
$term_arr[12] = sprintf("%02s", $term_minute);
$term_arr[13] = sprintf("%02s", $term_tag);
$term_arr[14] = sprintf("%02s", $term_monat);
$term_arr[15] = "";
$term_arr[16] = $term_loe;
$term_arr[17] = "";
$term_arr[18] = "";
$term_arr[19] = $term_14tag_ger;
$term_arr[20] = $term_14tag_ung;
$term_arr[21] = 0;
$term_arr[22] = $term_anzei;
$term_arr[23] = $term_art;
$term_arr[24] = $term_monatlich;
$term_arr[25] = $term_inhalt;
$term_arr[26] = $term_trigger;
$term_arr[27] = $term_trigger_para;
//Termin in einen String
$termin = implode(",", $term_arr);
$term_arr_komplett[] = $termin;
}
//Datensatz vom Typ "VALARM" durchlaufen
if($Sunbird_arr[0] == "VALARM")
{
//den letzten Datensatz des Array ausgeben
$termin = end($term_arr_komplett);
//wandeln in ein ARRAY
$term_arr = explode(",", $termin);
//alle Daten durchlaufen
foreach($Sunbird_arr as $key_2 => $value_2)
{
//Daten zerlegen in Parameter und Wert
$Data_arr = explode(":", $value_2);
if($Data_arr[0] == "TRIGGER;VALUE=DURATION")
{
//Auswahl der Erinnerung
Switch($Data_arr[1])
{
case "-PT5M":
//Erinnerung 5 Min
$term_arr[21] = 1;
break;
case "-PT15M":
//Erinnerung 15 Min
$term_arr[21] = 2;
break;
case "-PT30M":
//Erinnerung 30 Min
$term_arr[21] = 3;
break;
case "-PT1H":
//Erinnerung 1 Stunde
$term_arr[21] = 4;
break;
case "-P1D":
//Erinnerung 1 Tag
$term_arr[21] = 5;
break;
case "-P2D":
//Erinnerung 2 Tage
$term_arr[21] = 6;
break;
case "-P1W":
//Erinnerung 1 Woche
$term_arr[21] = 7;
break;
case "-P2W":
//Erinnerung 2 Wochen
$term_arr[21] = 8;
}
}
}
//Termin in einen String
$termin = implode(",", $term_arr);
$arr_count = count($term_arr_komplett);
$term_arr_komplett[$arr_count -1] = $termin;
}
}
}
sort($term_arr_komplett); // nach Zeit sortieren
$term_neu_komplett = implode("
", $term_arr_komplett); // in String zurück
$handle=fopen($file_ferengi, "w");
fwrite($handle,$term_neu_komplett);
fclose($handle);
}
//---------------------- Main Ende ----------------------------
}
An dieser Stelle muss das Script von euch angepasst werden.
//Bitte anpassen
//------------------------------------------
//Ablageort für termine.txt Ferengi Master
$file_ferengi = IPS_GetKernelDir().„media\ ermine.txt“;
//Ablageort für kalender.ics Sunbird
$file_sunbird = IPS_GetKernelDir().„media\kalender.ics“;
//------------------------------------------
Neue Kategorien werden automatisch importiert.
Dazu muss aber Code in der Ferengi-Master Terminverwaltung deaktiviert werden.
Vorher ca. in Zeile 188:
if(GetValueString($id_term_art_text) != $term_art_text_neu)
{
SetValueString($id_term_art_text, $term_art_text_neu);
}
Nachher:
// import_sunbird
// if(GetValueString($id_term_art_text) != $term_art_text_neu)
// {
// SetValueString($id_term_art_text, $term_art_text_neu);
// }
Erinnerungen die in der Feregie-Master Terminverwaltung nicht existieren laufen ins leere!!
Es gibt: keine, 5 min, 15 min, 30 min, 1 Stunde, 1 Tag, 2 Tage, 1 Woche, 2 Wochen
Bis dann
Martin
PS:
!!! vorher die termine.txt sichern !!!
!!! vorher die termine.txt sichern !!!
!!! vorher die termine.txt sichern !!!
!!! vorher die termine.txt sichern !!!