Ferengi-Masters Terminverwaltung V2

Kann ich die Liste Terminart beliebig erweitern ?

Ich habe keine Limitation eingefügt.

Gebe einfach mal ein Feadback beim testen.
Hast Du auch schon die Erinnerungsfunktion gesehen, das war ne harte Nuss die zu proggen? Dafür muß ein extra Panel mit einem Memo erstellt werden. Das Panel ist Standard unsichtbar und sollte über der gesamten Visu liegen. Um im Erinnerungsfall überall angezeigt werden zu können.

Das Panel ist Standard unsichtbar und sollte über der gesamten Visu liegen.

was wird denn dort angezeigt ?
wie mache ich das ?

Panel erstellen … was eintragen ?

Wenn vor einem Termin z.B. 15min vorher eine Erinnerung angezeigt werden soll erscheint dieses Panel, quasi wie bei Outlook.
Mit dem grünen Haken wird in der TV folgendes Scriptteil ausgeführt:


if($IPS_COMPONENT == "erin")
{
	SetValueString($id_term_erin_anzeige, "");
    SetValueBoolean($id_term_erin_vis, false);
}

…sprich das Fenster wieder ausgeblendet.

super idee,

Panel erstellt, Memofeld rein, ok das habe ich.

was muss denn in dem Panel eingetragen werden ?

ok, ich habe das auch hinbekommen.

Allerdings wird mir das Panel (Fenster) nur in dem Tab angezeigt wo ich es erstellt habe.

Hat sich erledigt, funktioniert. :slight_smile:

Hallo Thomas,

ich habe in den letzten beiden Tagen deine Terminverwaltung in Betrieb genommen.

Ich bin total begeistert von der „Erinnerung“ und der Möglichkeit Termine nach Kategorien anzuzeigen.

Dein „sehr“ sauberer Programmierstiel macht es einem leicht den Code zu verstehen. Mein Chef hätte seine Freude an Dir. :wink:

Drei Dinge sind mir aufgefallen:

Du benutzt die Funktion „TTS_Play“. Die muss natürlich angepasst und incudiert werden.

Die Variable tab_index muss händisch angelegt und im Script angepasst werden.

Wie bereits gesagt muss die Variable „term_art_list“ als Ereignis an der Terminverwaltung eingetragen werden.

Ab Morgen ist dann die Import/Export Funktion auf der To-Do-Liste.

Nochmals besten Dank für deine tolle Arbeit. :D:D:D

Bis dann

Martin

Hallo Martin,

vielen Dank für Blumen!
Ganz ehrlich, ohne ein solches Feadback würde die Sache für mich auch schnell langweilig. Für dieses Projekt ist ein nicht unerheblicher Teil der Freizeit draufgegangen der eigentlich für meine Frau gedacht war.:smiley: Zum Glück ist der WAF in unserem Haus aber recht hoch und meine bessere Hälfte hat grooooooßes Verständnis.:wink:

Hallo Thomas,

ich habe oben noch was vergessen.

Das Konvertierungsscript klappt so nicht.

Bis dann

Martin

Ups, der erste Teil ist ja noch eine Leiche aus einem anderen Script.
Habe Deine Version gleich gelöcht, die war auch falsch.
In der V2.41b ist hoffentlich der Fehler behoben, hab sie gleich hochgeladen.
Da ist dann nur das Konvertierungstool geändert.
Danke für den Hinweiß!:wink:

Hallo Thomas,

nachdem ich nun jede menge Termine eingegeben habe und alles ausprobiert habe, kann ich sagen, Super Programm ! :slight_smile:

Eine Idee hätte ich was du noch einbauen könntest.

Prowl http://www.ip-symcon.de/forum/f53/iphone-push-notification-ip-symcon-9322/ .

Eine zusätzliche checkbox zum auswählen ob die Terminerinnerung per Push auf das Handy erfolgen soll oder nicht.

Ist aber auch nur so ein Gedanke.

Gruß Michael

Ideen sind immer gern gesehen, mal schauen was sich machen lässt.:wink:

Hallo alle zusammen,

wie versprochen als erstes der Export von der termine.txt in iCalender.


function export_sunbird()
{
/*=============================================
export_sunbird - Martin Heinzel - 18.03.2010
Version: 2.1

Beschreibung:
In diesem Skript werden die Termine von der Ferengi-Master Terminverwaltung
in eine Sunbird Import-Datei konvertiert.

Änderungen
----------

17.05.2010 von Version 1.0 -> 2.0

Berschreibung:

Angepasst auf Ferengi-Master Terminverwaltung V 2.40b

27.05.2010 von Version 2.0 -> 2.1

Berschreibung:

FIX: Termin-Ende -> Monatsangabe hatte drei Nullen


tt.mm.yyyy von Version x.x -> x.x

Berschreibung:

================================================*/

// Variablen Deklaration --------------------------------------

//Bitte anpassen
//------------------------------------------
//Angabe der Location
$term_location = "Bocholt";
//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 = "BEGIN:VCALENDAR"."
"."
";

//-------------------------------------------------------------

//--------------------------- Main ----------------------------
//Daten holen
//Terminarten holen
$term_art_text = GetValueString($id_term_art_text);
//Terminart zerlegen und in array
$term_art_arr = explode("|", $term_art_text);
//Termine in Variable einlesen
$termfile = file_get_contents($file_ferengi);
//nach Zeilenumbruch trennen und in array
$term_arr_komplett = explode("
", $termfile);

//alle Termine durchlaufen
foreach($term_arr_komplett as $key => $value)
{
	//Der erste Datensatz ist "1"
   if($key > 0)
	{

		//einzelnen Datensatz in Daten zerlegen
	   $term_arr = explode(",", $value);

		//Daten den Variablen zuweisen
	   $term_zeitstempel    = $term_arr[0];
   	$term_einmalig 		= $term_arr[1];
   	$term_jaerlich 		= $term_arr[2];
   	$term_mo       		= $term_arr[3];
   	$term_di       		= $term_arr[4];
   	$term_mi       		= $term_arr[5];
   	$term_do       		= $term_arr[6];
   	$term_fr       		= $term_arr[7];
   	$term_sa       		= $term_arr[8];
   	$term_so       		= $term_arr[9];
   	$term_aktiv    		= $term_arr[10];
  		$term_stunde 			= $term_arr[11];
      $term_minute 			= $term_arr[12];
  		$term_tag	 			= $term_arr[13];
      $term_monat  			= $term_arr[14];
   	$term_loe      		= $term_arr[16];
     	$term_14tag_ger	 	= $term_arr[19];
     	$term_14tag_ung	 	= $term_arr[20];
     	$term_erin			 	= $term_arr[21];
     	$term_anzei			 	= $term_arr[22];
     	$term_art			 	= $term_arr[23];
     	$term_monatlich   	= $term_arr[24];
   	$term_inhalt   		= $term_arr[25];
     	$term_trigger      	= $term_arr[26];
	  	$term_trigger_para  	= $term_arr[27];

		//Daten für Sunbird zusammenstellen

		//In der Kalenderdatei dürfen keine Umlaute existieren
   	$term_inhalt     		= str_replace("Ä", "Ae", $term_inhalt);
   	$term_inhalt     		= str_replace("ä", "ae", $term_inhalt);
   	$term_inhalt     		= str_replace("Ü", "Ue", $term_inhalt);
   	$term_inhalt     		= str_replace("ü", "ue", $term_inhalt);
   	$term_inhalt     		= str_replace("Ö", "Oe", $term_inhalt);
   	$term_inhalt     		= str_replace("ö", "oe", $term_inhalt);

		if($term_aktiv)
		{

		   //Anlegen des Events
         $Sunbird_DS_komplett = $Sunbird_DS_komplett."BEGIN:VEVENT"."
";
		   //Titel
         $Sunbird_DS_komplett = $Sunbird_DS_komplett."SUMMARY:".$term_inhalt."
";
		   //Kategorie
         $Sunbird_DS_komplett = $Sunbird_DS_komplett."CATEGORIES:".$term_art_arr[$term_art]."
";

//-------------------------------------------------------------------------------------------------

			//Einmalige Termine
			if($term_einmalig)
			{

			   //Startzeit
	         $Sunbird_DS_komplett = $Sunbird_DS_komplett."DTSTART;TZID=Europe/Berlin:".date("Y").$term_monat.$term_tag."T".$term_stunde.$term_minute."00"."
";
			   //Endzeit
	         $Sunbird_DS_komplett = $Sunbird_DS_komplett."DTEND;TZID=Europe/Berlin:".date("Y").$term_monat.$term_tag."T".$term_stunde.$term_minute."59"."
";

			}

			//Monatliche Termine
			if($term_monatlich)
			{

				//Berechnung des Monats
				//Anzahl der Tage im Monat errechnen
				$max_days = cal_days_in_month(CAL_GREGORIAN,date("n"),date("Y"));
				if($term_tag > $max_days)
				{
					$term_monat = date("n") -1;
				}
				else
				{
					$term_monat = date("n");
				}
				$term_monat = sprintf("%02s", $term_monat);

			   //Monatlicher Termin
   	      $Sunbird_DS_komplett = $Sunbird_DS_komplett."RRULE:FREQ=MONTHLY;INTERVAL=1"."
";
			   //Startzeit
	         $Sunbird_DS_komplett = $Sunbird_DS_komplett."DTSTART;TZID=Europe/Berlin:".date("Y").$term_monat.$term_tag."T".$term_stunde.$term_minute."00"."
";
			   //Endzeit
	         $Sunbird_DS_komplett = $Sunbird_DS_komplett."DTEND;TZID=Europe/Berlin:".date("Y").$term_monat.$term_tag."T".$term_stunde.$term_minute."59"."
";

			}

			//Jährliche Termine
			if($term_jaerlich)
			{

			   //Berechnung des Endtermins
   	      $term_tag_ende = $term_tag +1;
   	      $term_monat_ende = $term_monat;
				$term_jahr_start = date("Y");
				//Anzahl der Tage im Monat errechnen
				$max_days = cal_days_in_month(CAL_GREGORIAN,(int)$term_monat,date("Y"));
			   If($term_tag_ende > $max_days)
			   {
			   	$term_tag_ende = 1;
			   	$term_monat_ende = $term_monat_ende +1;
				   If($term_monat_ende > 12)
					{
						$term_monat_ende = 1;
   	            $term_jahr_start = $term_jahr_start -1;
					}
				}
				$term_tag_ende = sprintf("%02s", $term_tag_ende);
				$term_monat_ende = sprintf("%02s", $term_monat_ende);

			   //Jährlicher Termin
	         $Sunbird_DS_komplett = $Sunbird_DS_komplett."RRULE:FREQ=YEARLY;INTERVAL=1"."
";
			   //Startzeit
	         $Sunbird_DS_komplett = $Sunbird_DS_komplett."DTSTART;VALUE=DATE:".$term_jahr_start.$term_monat.$term_tag."
";
			   //Endzeit
	         $Sunbird_DS_komplett = $Sunbird_DS_komplett."DTEND;VALUE=DATE:".date("Y").$term_monat_ende.$term_tag_ende."
";
			}

			//Wöchentliche Termine 14 Tage gerade und ungerade
			if($term_mo or $term_di or $term_mi or $term_do or
				$term_fr or $term_sa or $term_so)
			{

				//Erzeugen des Wochentages von 0-6
				if($term_so) $term_weekday = 0;
				if($term_mo) $term_weekday = 1;
				if($term_di) $term_weekday = 2;
				if($term_mi) $term_weekday = 3;
				if($term_do) $term_weekday = 4;
				if($term_fr) $term_weekday = 5;
				if($term_sa) $term_weekday = 6;

				//aktueller Wochentag von 0-6
				$tag = (date("w"));
				//Wann war der Wochentag im Verhältnis zu heute?
				$diff = $term_weekday - $tag;

				If($term_14tag_ger or $term_14tag_ung)
				{

					//aktuelle Woche ist ungleich der Terminwoche
					if(($term_14tag_ger and ((date("W") % 2) != 0)) or ($term_14tag_ung and ((date("W") % 2) == 0)))
					{
                  $week_ungleich = 1;
					}
					else
					{
                  $week_ungleich = 0;
					}

					if(($week_ungleich and ($term_weekday >0) and ($tag >0)) or
						($week_ungleich and ($term_weekday ==0) and ($tag ==0)) or
						(!$week_ungleich and (($term_weekday ==0) or ($tag ==0))))
					{
						$diff = $diff -7;
					}
				}

				$diff_str = $diff.' day';
				$term_date = strtotime ($diff_str);

	   		$term_tag    = date("d",$term_date);
		   	$term_monat  = date("m",$term_date);

				If($term_14tag_ger or $term_14tag_ung)
				{
				   //14 tägiger Termin
		         $Sunbird_DS_komplett = $Sunbird_DS_komplett."RRULE:FREQ=WEEKLY;INTERVAL=2"."
";
				}
			   else
			   {
				   //Wöchentliche Termin
		         $Sunbird_DS_komplett = $Sunbird_DS_komplett."RRULE:FREQ=WEEKLY;INTERVAL=1"."
";
				}

			   //Startzeit
	         $Sunbird_DS_komplett = $Sunbird_DS_komplett."DTSTART;TZID=Europe/Berlin:".date("Y").$term_monat.$term_tag."T".$term_stunde.$term_minute."00"."
";
			   //Endzeit
	         $Sunbird_DS_komplett = $Sunbird_DS_komplett."DTEND;TZID=Europe/Berlin:".date("Y").$term_monat.$term_tag."T".$term_stunde.$term_minute."59"."
";
			}

//-------------------------------------------------------------------------------------------------

		   //Ort
         $Sunbird_DS_komplett = $Sunbird_DS_komplett."LOCATION:".$term_location."
";
		   //Beschreibung
         $Sunbird_DS_komplett = $Sunbird_DS_komplett."DESCRIPTION:".$term_trigger.",".$term_trigger_para."
";

			//Prüfen ob der Termin mit Erinnerung ist
			if($term_erin)
			{
			   //Anlegen der Erinnnerung
	         $Sunbird_DS_komplett = $Sunbird_DS_komplett."BEGIN:VALARM"."
";

				//Auswahl der Erinnerung
				Switch($term_erin)
				{
					case 1:
					   //Erinnerung 5 Min
			         $Sunbird_DS_komplett = $Sunbird_DS_komplett."TRIGGER;VALUE=DURATION:-PT5M"."
";
						break;

					case 2:
					   //Erinnerung 15 Min
			         $Sunbird_DS_komplett = $Sunbird_DS_komplett."TRIGGER;VALUE=DURATION:-PT15M"."
";
						break;

					case 3:
					   //Erinnerung 30 Min
			         $Sunbird_DS_komplett = $Sunbird_DS_komplett."TRIGGER;VALUE=DURATION:-PT30M"."
";
						break;

					case 4:
					   //Erinnerung 1 Stunde
			         $Sunbird_DS_komplett = $Sunbird_DS_komplett."TRIGGER;VALUE=DURATION:-PT1H"."
";
						break;

					case 5:
					   //Erinnerung 1 Tag
			         $Sunbird_DS_komplett = $Sunbird_DS_komplett."TRIGGER;VALUE=DURATION:-P1D"."
";
						break;

					case 6:
					   //Erinnerung 2 Tage
			         $Sunbird_DS_komplett = $Sunbird_DS_komplett."TRIGGER;VALUE=DURATION:-P2D"."
";
						break;

					case 7:
					   //Erinnerung 1 Woche
			         $Sunbird_DS_komplett = $Sunbird_DS_komplett."TRIGGER;VALUE=DURATION:-P1W"."
";
						break;

					case 8:
					   //Erinnerung 2 Wochen
			         $Sunbird_DS_komplett = $Sunbird_DS_komplett."TRIGGER;VALUE=DURATION:-P2W"."
";

				}

			   //Erinnerungstext
	         $Sunbird_DS_komplett = $Sunbird_DS_komplett."DESCRIPTION:Mozilla Alarm: ".$term_inhalt."
";
			   //Erinnerung anzeigen
	         $Sunbird_DS_komplett = $Sunbird_DS_komplett."ACTION:DISPLAY"."
";
			   //Erinnerung-ENDE
	         $Sunbird_DS_komplett = $Sunbird_DS_komplett."END:VALARM"."
";
			}

		   //Event-ENDE
         $Sunbird_DS_komplett = $Sunbird_DS_komplett."END:VEVENT"."
"."
";

		}
   }
}

$Sunbird_DS_komplett = $Sunbird_DS_komplett."END:VCALENDAR"."
";

//Ausgeben in die Importdatei von Sunbird
$handle=fopen($file_sunbird, "w");
fwrite($handle,$Sunbird_DS_komplett);
fclose($handle);

//Den Zeitstempel der Sunbird Kalender-Datei holen
$timestanp_sunbird = filemtime($file_sunbird);

//Den aktuellen Zeitstempel abspeichern
SetValueInteger($id_file_time_sunbird, $timestanp_sunbird);

//---------------------- Main Ende ----------------------------
}


An dieser Stelle muss das Script von euch angepasst werden.

//Bitte anpassen
//------------------------------------------
//Angabe der Location
$term_location = „Bocholt“;
//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“;
//------------------------------------------

Bitte startet erst mit einer iCalender „Testdatei“ damit Ihr euch bestehende Termine nicht kaputt schreibt. Also:

//Ablageort für kalender.ics Sunbird
$file_sunbird = IPS_GetKernelDir().„media\ est_kal.ics“;

o. ä.

Das Script legt bereits für den Inport (den ich noch umklimpern muss :() eine Handshake - Variable in .Termineverwaltung an.

27.05.2010 Edit: Fix am Script -> siehe Beschreibung im Script

Bis dann

Martin

hallo,

Beschäftige Dich dann ersteinmal die Terminverwaltung inkl. Dashboard Visu ans laufen zu bekommen, die Import/Exportfunktion ist der zweite Schritt.

ich will aber garkeine dashboard visu wie du sie vorschlägst. will nur die funktion nutzen um die termine anzuzeigen. termin input soll nur am thunderbird/sunbird/n97 geschehen. das dashboard soll sie nur anzeigen. deswegen schäue ich diesen riesen aufwand des termininput sheet fürs dashboard anzulegen. wie gesagt, für mich is des absolut überflüssig!

grüße

Hallo pinki,

Die Importfunktion von iCalender kommt jetzt als nächstes.
Großes Indianer-Ehrenwort! Gib mir noch ne Woche.

Bis dann

Martin

will nur die funktion nutzen um die termine anzuzeigen

Die anstehenden Termine werden in der Stringvariable $termine ausgegeben.
Die Erinnerungen in der Stringvariable $term_erin_anzeige.

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 !!!

Hallo alle zusammen,

in den nächsten Tagen ist es so weit.

Ein „Add On“ für die Ferengi-Master Terminverwaltung.

Eine Jahresübersicht mit der Anzeige aller Termine sowie eine monatliche Übersicht zum blättern.

Bis dann

Martin

Kalender_Monat.jpg

Hallo alle zusammen,

als erstes kommt der Jahreskalender für die Ferengi-Master Terminverwaltung.


function calender_year()
{
/*=============================================
calender_year - Martin Heinzel - 13.07.2010
Version: 1.0

Beschreibung:
Mit diesem Skript wird ein Jahreskalender erstellt.
Dieser Kalender enthält alle Termine aus der
Ferengi-Master Terminverwaltung in Form eines Farbumschlag.
Der aktuelle Tag wird an hand eines gesonderten Farbumschlages dargestellt.

Änderungen
----------

tt.mm.yyyy von Version x.x -> x.x

Berschreibung:

================================================*/

// Variablen Deklaration --------------------------------------

// Variablen
//--------------
$arr_Month = array('Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember');
$rawCount_Month = 0;
$year 		= date('Y');
$act_day 	= date('j');
$act_month 	= date('n');

//-------------------------------------------------------------

//--------------------------- Main ----------------------------

//Bitte anpassen
//------------------------------------------
//Hintergrundfarbe Monat
$Style_MonthHeader 	= 'bgcolor="#FF00FF"';

//Hintergrundfarbe der Kopfdaten -> Wochentage
$Style_DayHeader  	= 'bgcolor="#0000FF"';

//Hintergrundfarbe des aktuellen Tages
$Style_Today		   = 'bgcolor="#00FF00"';

//Hintergrundfarbe der Termine
$Style_Appointment   = 'bgcolor="#FF0000"';

//Hintergrundfarbe gesamt
$Style_background   	= 'background-color:#F9F1C9';
//------------------------------------------


//zusammenstellen des Kopfes
$DayHeader = '<th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Mo</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Di</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Mi</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Do</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Fr</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Sa</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">So</font></th>';

//Aussehen der Zellen
$Style_DayCell     = 'width="20" height="20" align="center"';

//erstellen des Jahreskalenders beginnend mit der Monatsaufteilung
$Jahreskalender = '<table border="0" summary="Jahreskalender" ><tr>';

//durchlaufen der einzelnen Monate
foreach($arr_Month as $key => $Month)
{
	//erstellen der Monatsansicht mit dem Monat und den Tageskopfdaten
	$Jahreskalender .='<td><table border="1" summary="Kalender '.$Month.'">
   <tr>
   	<th colspan="7" '.$Style_MonthHeader.'>'.$Month.'</th>
   </tr>
   <tr>'.$DayHeader.'</tr>';

	//berechnen des aktuellen Monats
	$month = $key+1;
	//wie viele Tage hat dieser Monat
   $total_days = date('t', mktime(0, 0, 0, $month, 1, $year));
   //an welchem Tag beginnt der Monat -> Da die Woche mit Montag beginnt muss 1 subtrahiert werden
	$day_offset = (date('w', mktime(0, 0, 0, $month, 1, $year)))-1;
	//Das Ergebnis kann negativ sein. In diesem Fall ist der Tag "Sonntag"
	if($day_offset < 0)
	{
      $day_offset = 6;
	}

	//initialisieren des Tageszählers
   $Day_Count = 1;

	//ein Kalenderblatt (ein Monat) bekommt 6 Wochenreihen
	for($week = 0; $week < 6; $week++)
	{
		$Jahreskalender .='<tr>';

		//eine Woche hat immer noch 7 Tage
		for($day = 0; $day < 7; $day++)
		{
			//Die Tage vor dem ersten müssen mit leeren Zellen aufgefüllt werden
			if($day_offset > 0)
			{
				$Jahreskalender .='<td '.$Style_DayCell.'>*</td>';
            $day_offset -= 1;
			}
			else
			{
				//ausfüllen der Tage mit Tageszahlen
				if($Day_Count <= $total_days)
				{
					//Der aktuelle Tag wird eingefärbt
					if($month == $act_month and $Day_Count == $act_day)
					{
						$Jahreskalender .='<td '.$Style_DayCell.' '.$Style_Today.'>'.($Day_Count).'</td>';
					}
					else
					{
						//Tage mit einem Termin werden eingefärbt
						if(getAppointment($Day_Count, $month, $year))
						{
							$Jahreskalender .='<td '.$Style_DayCell.' '.$Style_Appointment.'>'.($Day_Count).'</td>';
						}
						else
						{
							//alle anderen Tagen sind ohne färbung
							$Jahreskalender .='<td '.$Style_DayCell.'>'.($Day_Count).'</td>';
						}
					}
					$Day_Count += 1;
				}
				else
				{
					//alle Tage die über die maximalen Monatstage gehen werden mit leeren Zellen aufgefüllt
					$Jahreskalender .='<td '.$Style_DayCell.'>*</td>';
				}

			}
		}
		//Ende der Wochenreihe
		$Jahreskalender .='</tr>';
	}
	//Ende des Monats
	$Jahreskalender .='</table></td>';

	//aufaddieren der Monate in einer Reihe
   $rawCount_Month += 1;
   //nach 4 Monaten wird eine neue Monatsreihe begonnen
	if($rawCount_Month == 4)
	{
		$Jahreskalender .='</tr><tr>';
      $rawCount_Month = 0;
	}
}
//Beenden des Jahreskalenders
$Jahreskalender .= '</tr></table>';

//nur noch was schickes drum herum
$browser='
<html>
<head>
<style type="text/css" media="screen">
body  { '.$Style_background.';
         font-family: Arial;
      }
</style>
</head>
<body scroll="no">'
.$Jahreskalender.
'</body>
</html>';

//und ablegen
return $browser;
}

function getAppointment($aktDay, $aktMonth, $aktYear)
{
/*=============================================
getAppointment - Martin Heinzel - 12.07.2010
Version: 1.0

Beschreibung:
In diesem Skript werden die Termine von der Ferengi-Master Terminverwaltung
für einen bestimmten Tag gesucht.

Änderungen
----------

tt.mm.yyyy von Version x.x -> x.x

Berschreibung:

================================================*/

// Variablen Deklaration --------------------------------------

//Bitte anpassen
//------------------------------------------
//Ablageort für termine.txt
$filename = IPS_GetKernelDir()."media\	ermine.txt";

//------------------------------------------

//-------------------------------------------------------------

//--------------------------- Main ----------------------------

//Daten holen
$termfile 				= file_get_contents($filename); //Termine in Variable einlesen
$term_arr_komplett 	= explode("
", $termfile); // nach Zeilenumbruch trennen und in array
$erg       				= "";
$aktAppointment      = false;

foreach($term_arr_komplett as $key => $value) //alle Termine durchlaufen
{
	$term_arr = explode(",", $value); // einzelnen Datensatz in Daten zerlegen

	$term_einmalig   		= $term_arr[1];
   $term_jaerlich   		= $term_arr[2];
   $term_mo         		= $term_arr[3];
  	$term_di         		= $term_arr[4];
  	$term_mi         		= $term_arr[5];
  	$term_do         		= $term_arr[6];
  	$term_fr         		= $term_arr[7];
  	$term_sa         		= $term_arr[8];
  	$term_so         		= $term_arr[9];
  	$term_aktiv      		= $term_arr[10];
  	$term_stunde     		= $term_arr[11];
  	$term_minute     		= $term_arr[12];
  	$term_tag         	= $term_arr[13];
  	$term_monat      		= $term_arr[14];
  	$term_loe	     		= $term_arr[16];
  	$term_14tag_ger	 	= $term_arr[19];
  	$term_14tag_ung	 	= $term_arr[20];
  	$term_erin			 	= $term_arr[21];
  	$term_anzei			 	= $term_arr[22];
  	$term_art			 	= $term_arr[23];
  	$term_monatlich   	= $term_arr[24];
  	$term_inhalt     		= $term_arr[25];
  	$term_trigger    		= $term_arr[26];
  	$term_trigger_para 	= $term_arr[27];

   if($term_aktiv) //wenn aktiver Termin gefunden => prüfen
   {
	   //Timestamp von heute
     	$heute        = mktime (0,0,0,$aktMonth,$aktDay,$aktYear);
     	//Timestamp des Termins aus der for Schleife
		if($term_monatlich != 1) //kein Monatlicher Termin
		{
			$termin_dat   = mktime (0,0,0, $term_monat, $term_tag ,$aktYear);
		}
		else //Monatlicher Termin
		{
			$termin_dat   = mktime (0,0,0, $aktMonth, $term_tag, $aktYear);
		}
     	//schauen ob Termin auf heute($erg = 0) oder morgen fällt ($erg = -1)
     	$diff         = $heute-$termin_dat;
     	$erg          = $diff/((60*60)*24);
     	//heutigen Tag ermitteln
     	$tag          = (date("w", $heute));

      //wiederkehrende Wöchentliche Termine die auf heute fallen prüfen
      if ($tag == 0 and $term_so == 1 and $term_14tag_ger == 0 and $term_14tag_ung == 0 or
			 $tag == 1 and $term_mo == 1 and $term_14tag_ger == 0 and $term_14tag_ung == 0 or
  	       $tag == 2 and $term_di == 1 and $term_14tag_ger == 0 and $term_14tag_ung == 0 or
			 $tag == 3 and $term_mi == 1 and $term_14tag_ger == 0 and $term_14tag_ung == 0 or
     	    $tag == 4 and $term_do == 1 and $term_14tag_ger == 0 and $term_14tag_ung == 0 or
			 $tag == 5 and $term_fr == 1 and $term_14tag_ger == 0 and $term_14tag_ung == 0 or
        	 $tag == 6 and $term_sa == 1 and $term_14tag_ger == 0 and $term_14tag_ung == 0)
     	{
        	$erg 	 	= 0;
  	   }
      //wiederkehrende 14 Tägige Termine an geraden Wochen die auf heute fallen prüfen
      if ($tag == 0 and $term_so == 1 and $term_14tag_ger == 1 and $term_14tag_ung == 0 or
			 $tag == 1 and $term_mo == 1 and $term_14tag_ger == 1 and $term_14tag_ung == 0 or
  	       $tag == 2 and $term_di == 1 and $term_14tag_ger == 1 and $term_14tag_ung == 0 or
			 $tag == 3 and $term_mi == 1 and $term_14tag_ger == 1 and $term_14tag_ung == 0 or
     	    $tag == 4 and $term_do == 1 and $term_14tag_ger == 1 and $term_14tag_ung == 0 or
   		 $tag == 5 and $term_fr == 1 and $term_14tag_ger == 1 and $term_14tag_ung == 0 or
        	 $tag == 6 and $term_sa == 1 and $term_14tag_ger == 1 and $term_14tag_ung == 0)
     	{
			if((date("W", $heute) % 2)==0)
			{
			 	//gerade Woche
				$erg 	 	= 0;
        	}
  	   }
  	   //wiederkehrende 14 Tägige Termine an ungeraden Wochen die auf heute fallen prüfen
      if ($tag == 0 and $term_so == 1 and $term_14tag_ger == 0 and $term_14tag_ung == 1 or
			 $tag == 1 and $term_mo == 1 and $term_14tag_ger == 0 and $term_14tag_ung == 1 or
  	       $tag == 2 and $term_di == 1 and $term_14tag_ger == 0 and $term_14tag_ung == 1 or
			 $tag == 3 and $term_mi == 1 and $term_14tag_ger == 0 and $term_14tag_ung == 1 or
			 $tag == 4 and $term_do == 1 and $term_14tag_ger == 0 and $term_14tag_ung == 1 or
			 $tag == 5 and $term_fr == 1 and $term_14tag_ger == 0 and $term_14tag_ung == 1 or
        	 $tag == 6 and $term_sa == 1 and $term_14tag_ger == 0 and $term_14tag_ung == 1)
     	{
			if((date("W", $heute) % 2)!=0)
			{
				//ungerade Woche
        		$erg 	 	= 0;
         }
		}

		if($erg == 0)
		{
			$aktAppointment = true;
		}
	}
}
//---------------------- Main Ende ----------------------------
return $aktAppointment;
}


Das Skript erzeugt einen String der im Dash in einem Web Browser angezeigt werden kann.

Beispiel:


$id_Jahreskalender = 32453 /*[.Terminverwaltung\Overview_Year]*/;
$browser = calender_year();
SetValueString($id_Jahreskalender, $browser);

Die Konfiguration des Dashboards entnehmt ihr bitte dem Screenshot.

Bis dann

Martin

Hallo alle zusammen,

wie besprochen kommt hier der Monatskalender.

Als erstes das Skript:


/*=============================================
skrKalender_Monat - Martin Heinzel - 16.07.2010
Version: 1.0

Beschreibung:
Mit diesem Skript wird ein Monatskalender erstellt.
Dieser Kalender enthält alle Termine aus der
Ferengi-Master Terminverwaltung in Form eines Farbumschlag.
Der aktuelle Tag wird an hand eines gesonderten Farbumschlages dargestellt.

Das Skript wird über 3 Tasten aus dem Dashboard gesteuert.

Taste "init"   -> sichtbar machen des Monatskalenders und initialisieren auf den aktuellen Monat
Taste "vor"    -> blättern um einen Monat vor. Nach Dezember kommt Januar
Taste "vzur"   -> blättern um einen Monat nach hinten. Nach Januar kommt Dezember

Änderungen
----------

tt.mm.yyyy von Version x.x -> x.x

Berschreibung:

================================================*/

// Variablen Deklaration --------------------------------------

// ID's
//---------

$id_TV = IPS_GetObjectIDByName(".Terminverwaltung", 0);

// ID "Month-counter" zum blättern
$id_month_counter = @IPS_GetVariableIDByName("View_Month_count", $id_TV);
// wenn es die Variable noch nicht gibt -> anlegen alle Variablen in .Terminverwaltung
if($id_month_counter === false)
{
	//anlegen der Variablen "View_Month_count" als Integer
	$id_month_counter = IPS_CreateVariable(1);
   IPS_SetName($id_month_counter, "View_Month_count");
	IPS_SetParent($id_month_counter, $id_TV);
	
	//anlegen der Variablen "Overview_Month" als String
	$id_overview_month = IPS_CreateVariable(3);
   IPS_SetName($id_overview_month, "Overview_Month");
	IPS_SetParent($id_overview_month, $id_TV);

	//anlegen der Variablen "visible_view_month" als Bool
	$id_visible_view_month = IPS_CreateVariable(0);
   IPS_SetName($id_visible_view_month, "visible_view_month");
	IPS_SetParent($id_visible_view_month, $id_TV);
}
else
{
	$id_overview_month = IPS_GetVariableIDByName("Overview_Month", $id_TV);
}

$month = GetValueInteger($id_month_counter);

if (!isset($IPS_COMPONENT))     $IPS_COMPONENT    ="";

//-------------------------------------------------------------

//--------------------------- Main ----------------------------

if($IPS_COMPONENT == "init")
{
	$month 	= (integer)date('n');
	SetValueInteger($id_month_counter, $month);
}

if($IPS_COMPONENT == "vor")
{
	$month 	+= 1;
	if($month > 12)
	{
		$month = 1;
	}
	SetValueInteger($id_month_counter, $month);
}

if($IPS_COMPONENT == "zur")
{
	$month 	-= 1;
	if($month < 1)
	{
		$month = 12;
	}
	SetValueInteger($id_month_counter, $month);
}

$browser = calender_month($month);
SetValueString($id_overview_month, $browser);

//--------------------- Main ENDE ----------------------------


//--------------------- Funktionen ----------------------------

function calender_month($month)
{
/*=============================================
calender_year - Martin Heinzel - 13.07.2010
Version: 1.0

Beschreibung:
Mit diesem Skript wird ein Monatskalender erstellt.
Dieser Kalender enthält alle Termine aus der
Ferengi-Master Terminverwaltung in Form eines Farbumschlag.
Der aktuelle Tag wird an hand eines gesonderten Farbumschlages dargestellt.

Änderungen
----------

tt.mm.yyyy von Version x.x -> x.x

Berschreibung:

================================================*/

// Variablen Deklaration --------------------------------------

// Variablen
//--------------
$arr_Month = array('Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember');
$key		  = $month -1;
$year 		= date('Y');
$act_day 	= date('j');
$act_month 	= date('n');

//-------------------------------------------------------------

//--------------------------- Main ----------------------------

//Bitte anpassen
//------------------------------------------
//Hintergrundfarbe Monat
$Style_MonthHeader 	= 'bgcolor="#FF00FF"';

//Hintergrundfarbe der Kopfdaten -> Wochentage
$Style_DayHeader  	= 'bgcolor="#0000FF"';

//Hintergrundfarbe des aktuellen Tages
$Style_Today		   = 'bgcolor="#00FF00"';

//Hintergrundfarbe der Termine
$Style_Appointment   = 'bgcolor="#FF0000"';

//Hintergrundfarbe gesamt
$Style_background   	= 'background-color:#F9F1C9';
//------------------------------------------


//zusammenstellen des Kopfes
$DayHeader = '<th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Mo</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Di</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Mi</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Do</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Fr</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Sa</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">So</font></th>';

//Aussehen der Zellen
$Style_DayCell     = 'width="20" height="20" align="center"';

//erstellen der Monatsansicht mit dem Monat und den Tageskopfdaten
$Monatskalender ='<table border="1" summary="Kalender '.$arr_Month[$key].'">
<tr>
  	<th colspan="7" '.$Style_MonthHeader.'>'.$arr_Month[$key].'</th>
</tr>
<tr>'.$DayHeader.'</tr>';

//wie viele Tage hat dieser Monat
$total_days = date('t', mktime(0, 0, 0, $month, 1, $year));
//an welchem Tag beginnt der Monat -> Da die Woche mit Montag beginnt muss 1 subtrahiert werden
$day_offset = (date('w', mktime(0, 0, 0, $month, 1, $year)))-1;
//Das Ergebnis kann negativ sein. In diesem Fall ist der Tag "Sonntag"
if($day_offset < 0)
{
	$day_offset = 6;
}

//initialisieren des Tageszählers
$Day_Count = 1;

//ein Kalenderblatt (ein Monat) bekommt 6 Wochenreihen
for($week = 0; $week < 6; $week++)
{
	$Monatskalender .='<tr>';

	//eine Woche hat immer noch 7 Tage
	for($day = 0; $day < 7; $day++)
	{
		//Die Tage vor dem ersten müssen mit leeren Zellen aufgefüllt werden
		if($day_offset > 0)
		{
			$Monatskalender .='<td '.$Style_DayCell.'>*</td>';
         $day_offset -= 1;
		}
		else
		{
			//ausfüllen der Tage mit Tageszahlen
			if($Day_Count <= $total_days)
			{
				//Der aktuelle Tag wird eingefärbt
				if($month == $act_month and $Day_Count == $act_day)
				{
					$Monatskalender .='<td '.$Style_DayCell.' '.$Style_Today.'>'.($Day_Count).'</td>';
				}
				else
				{
     //Tage mit einem Termin werden eingefärbt
					if(getAppointment($Day_Count, $month, $year))
					{
						$Monatskalender .='<td '.$Style_DayCell.' '.$Style_Appointment.'>'.($Day_Count).'</td>';
					}
					else
					{
						//alle anderen Tagen sind ohne färbung
						$Monatskalender .='<td '.$Style_DayCell.'>'.($Day_Count).'</td>';
					}
				}
				$Day_Count += 1;
			}
			else
			{
				//alle Tage die über die maximalen Monatstage gehen werden mit leeren Zellen aufgefüllt
				$Monatskalender .='<td '.$Style_DayCell.'>*</td>';
			}

		}
	}
	//Ende der Wochenreihe
	$Monatskalender .='</tr>';
}
//Ende des Monats
$Monatskalender .='</table>';

//nur noch was schickes drum herum
$browser='
<html>
<head>
<style type="text/css" media="screen">
body  { '.$Style_background.';
         font-family: Arial;
      }
</style>
</head>
<body scroll="no">'
.$Monatskalender.
'</body>
</html>';

//und ablegen
return $browser;
}

function getAppointment($aktDay, $aktMonth, $aktYear)
{
/*=============================================
getAppointment - Martin Heinzel - 12.07.2010
Version: 1.0

Beschreibung:
In diesem Skript werden die Termine von der Ferengi-Master Terminverwaltung
für einen bestimmten Tag gesucht.

Änderungen
----------

tt.mm.yyyy von Version x.x -> x.x

Berschreibung:

================================================*/

// Variablen Deklaration --------------------------------------

//Bitte anpassen
//------------------------------------------
//Ablageort für termine.txt
$filename = IPS_GetKernelDir()."media\	ermine.txt";

//------------------------------------------

//-------------------------------------------------------------

//--------------------------- Main ----------------------------

//Daten holen
$termfile 				= file_get_contents($filename); //Termine in Variable einlesen
$term_arr_komplett 	= explode("
", $termfile); // nach Zeilenumbruch trennen und in array
$erg       				= "";
$aktAppointment      = false;

foreach($term_arr_komplett as $key => $value) //alle Termine durchlaufen
{
	$term_arr = explode(",", $value); // einzelnen Datensatz in Daten zerlegen

	$term_einmalig   		= $term_arr[1];
   $term_jaerlich   		= $term_arr[2];
   $term_mo         		= $term_arr[3];
  	$term_di         		= $term_arr[4];
  	$term_mi         		= $term_arr[5];
  	$term_do         		= $term_arr[6];
  	$term_fr         		= $term_arr[7];
  	$term_sa         		= $term_arr[8];
  	$term_so         		= $term_arr[9];
  	$term_aktiv      		= $term_arr[10];
  	$term_stunde     		= $term_arr[11];
  	$term_minute     		= $term_arr[12];
  	$term_tag         	= $term_arr[13];
  	$term_monat      		= $term_arr[14];
  	$term_loe	     		= $term_arr[16];
  	$term_14tag_ger	 	= $term_arr[19];
  	$term_14tag_ung	 	= $term_arr[20];
  	$term_erin			 	= $term_arr[21];
  	$term_anzei			 	= $term_arr[22];
  	$term_art			 	= $term_arr[23];
  	$term_monatlich   	= $term_arr[24];
  	$term_inhalt     		= $term_arr[25];
  	$term_trigger    		= $term_arr[26];
  	$term_trigger_para 	= $term_arr[27];

   if($term_aktiv) //wenn aktiver Termin gefunden => prüfen
   {
	   //Timestamp von heute
     	$heute        = mktime (0,0,0,$aktMonth,$aktDay,$aktYear);
     	//Timestamp des Termins aus der for Schleife
		if($term_monatlich != 1) //kein Monatlicher Termin
		{
			$termin_dat   = mktime (0,0,0, $term_monat, $term_tag ,$aktYear);
		}
		else //Monatlicher Termin
		{
			$termin_dat   = mktime (0,0,0, $aktMonth, $term_tag, $aktYear);
		}
     	//schauen ob Termin auf heute($erg = 0) oder morgen fällt ($erg = -1)
     	$diff         = $heute-$termin_dat;
     	$erg          = $diff/((60*60)*24);
     	//heutigen Tag ermitteln
     	$tag          = (date("w", $heute));

      //wiederkehrende Wöchentliche Termine die auf heute fallen prüfen
      if ($tag == 0 and $term_so == 1 and $term_14tag_ger == 0 and $term_14tag_ung == 0 or
			 $tag == 1 and $term_mo == 1 and $term_14tag_ger == 0 and $term_14tag_ung == 0 or
  	       $tag == 2 and $term_di == 1 and $term_14tag_ger == 0 and $term_14tag_ung == 0 or
			 $tag == 3 and $term_mi == 1 and $term_14tag_ger == 0 and $term_14tag_ung == 0 or
     	    $tag == 4 and $term_do == 1 and $term_14tag_ger == 0 and $term_14tag_ung == 0 or
			 $tag == 5 and $term_fr == 1 and $term_14tag_ger == 0 and $term_14tag_ung == 0 or
        	 $tag == 6 and $term_sa == 1 and $term_14tag_ger == 0 and $term_14tag_ung == 0)
     	{
        	$erg 	 	= 0;
  	   }
      //wiederkehrende 14 Tägige Termine an geraden Wochen die auf heute fallen prüfen
      if ($tag == 0 and $term_so == 1 and $term_14tag_ger == 1 and $term_14tag_ung == 0 or
			 $tag == 1 and $term_mo == 1 and $term_14tag_ger == 1 and $term_14tag_ung == 0 or
  	       $tag == 2 and $term_di == 1 and $term_14tag_ger == 1 and $term_14tag_ung == 0 or
			 $tag == 3 and $term_mi == 1 and $term_14tag_ger == 1 and $term_14tag_ung == 0 or
     	    $tag == 4 and $term_do == 1 and $term_14tag_ger == 1 and $term_14tag_ung == 0 or
   		 $tag == 5 and $term_fr == 1 and $term_14tag_ger == 1 and $term_14tag_ung == 0 or
        	 $tag == 6 and $term_sa == 1 and $term_14tag_ger == 1 and $term_14tag_ung == 0)
     	{
			if((date("W", $heute) % 2)==0)
			{
			 	//gerade Woche
				$erg 	 	= 0;
        	}
  	   }
  	   //wiederkehrende 14 Tägige Termine an ungeraden Wochen die auf heute fallen prüfen
      if ($tag == 0 and $term_so == 1 and $term_14tag_ger == 0 and $term_14tag_ung == 1 or
			 $tag == 1 and $term_mo == 1 and $term_14tag_ger == 0 and $term_14tag_ung == 1 or
  	       $tag == 2 and $term_di == 1 and $term_14tag_ger == 0 and $term_14tag_ung == 1 or
			 $tag == 3 and $term_mi == 1 and $term_14tag_ger == 0 and $term_14tag_ung == 1 or
			 $tag == 4 and $term_do == 1 and $term_14tag_ger == 0 and $term_14tag_ung == 1 or
			 $tag == 5 and $term_fr == 1 and $term_14tag_ger == 0 and $term_14tag_ung == 1 or
        	 $tag == 6 and $term_sa == 1 and $term_14tag_ger == 0 and $term_14tag_ung == 1)
     	{
			if((date("W", $heute) % 2)!=0)
			{
				//ungerade Woche
        		$erg 	 	= 0;
         }
		}

		if($erg == 0)
		{
			$aktAppointment = true;
		}
	}
}
//---------------------- Main Ende ----------------------------
return $aktAppointment;
}



Bitte alles in ein Skript kopieren und ausführen. Damit werden die benötigten Variablen angelegt.

Für die Einbindung ins Dashboard habe ich Screenshots gemacht.

Wenn noch Fragen bestehen bitte melden.

Bis dann

Martin

Kalender_Monat.jpg

Button_init.jpg

Button_zur.jpg

Besteht Interesse eine Termin mittels e-mail an die Terminverwaltung zu senden?
Ich könnte ein Interface schreiben mit welchen man mit jedem beliebigen e-mail Client von überall einen Termin an die Terminverwaltung senden kann.
Dazu würde die TV einfach den Text der e-mail parsen, dieser müßte dann natürlich ein fertiges Formular sein. So ne Idee, bei entsprechendem Zuspruch würde ich mich drübermachen.