array( 'KalenderName' => 'USER1', // Kalender Name wie er in der Visualisierung angezeigt wird 'UserName' => '', // Benutzername in owncloud 'Password' => '', // passendes Password zum Benutzernamen 'KalenderID' => 1, // KalenderID in owncloud (in owncloud kann ein Benutzer meherere Kalender besitzen) 'EMailID' => '', ), '2' => array( 'KalenderName' => 'USER2', 'UserName' => '', 'Password' => '', 'KalenderID' => 1, 'EMailID' => '', ), '3' => array( 'KalenderName' => 'USER3', 'UserName' => '', 'Password' => '', 'KalenderID' => 1, 'EMailID' => '', ), ); /* * Definiert das Bundesland für die Feiertage * Fuer c_Property_Bundesland bitte folgende Abkuerzungen benutzen: * BW = Baden-Württemberg * BY = Bayern * BE = Berlin * BB = Brandenburg * HB = Bremen * HH = Hamburg * HE = Hessen * MV = Mecklenburg-Vorpommern * NI = Niedersachsen * NW = Nordrhein-Westfalen * RP = Rheinland-Pfalz * SL = Saarland * SN = Sachsen * ST = Sachen-Anhalt * SH = Schleswig-Holstein * TH = Thüringen */ $bland = "HH"; // Allgemeine Daten $debug = true; // Debug Ausgabe $filewrite = false; // erstellt parallel ein ungefiltertes TextFile in Kernel\media\owncloud_ID.txt $debugfilewrite = true; // Array Ausgabe zum debuggen AB V1.10 $htmlfilewrite = false; // erstellt parallel ein html File in Kernel\media\owncloud_ID.html $maxDays = 180; // Max. anzuzeigende Tage im Kalender und nächsten Termine $abfrageintervall = 1; // Abfrage Intervall in Minuten bei Email Versand MUß auf 1min stehen $visualisierung = 0; // Einzelne Kalender in 0 = einem Ordner, 1 = Kategorien, 2 = in Dummy Instanzen $visualoldtimes = true; // Sollen abgelaufene Termine von Heute angezeigt werden false = Termine nach Endzeit, werden nicht mehr angezeigt AB V1.07 //Hier den Style wählen $viewReminder = true; // (true/false) Anzeige der Erinnerung Ein/Aus /******** Farbnamen, RGB-Formatierung, Hex-Zahlen möglich *********/ $StyleText[1] = "lightgray"; // Textfarbe Datum $StyleText[2] = "gray"; // Textfarbe Wochentag $StyleText[3] = "lightblue"; // Textfarbe Termin sonstige $StyleText[4] = "red"; // Textfarbe Termin Heute $StyleText[5] = "rgba(31,50,79,0)"; // Texthintergrung Heute default: rgba(31,50,79,0) $StyleText[6] = "lightgreen"; // Textfarbe Datum wenn Feiertag $StyleText[7] = "#213245"; // Verlaufsfarbe rechts $StyleText[8] = "100%"; // Übergang rechts $StyleText[9] = "rgba(31,50,79,0)"; // Verlaufsfarbe links $StyleText[10] = "40%"; // Übergang links /*** xx-small, x-small, small, normal, large, x-large, xx-large ***/ /************** oder Angabe in pt - z.B. "12pt" *******************/ $StyleText[11] = "large"; // Textgröße Datum $StyleText[12] = "large"; // Textgröße Wochentag $StyleText[13] = "normal"; // Textgröße Eintrag $StyleText[14] = "x-large"; // Textgröße Heutiger Eintrag AB V1.07 $StyleText[20] = "font-family: Arial;"; // Style der Tabelle änderbar AB V1.08 /*****************************************************************/ /******* Für Update ab hier alles ersetzen und 1x ausführen *****/ /*****************************************************************/ /****************** Ab hier bitte nichts mehr ändern *************/ /*****************************************************************/ /* ToDo: RRULE Interval auswerten Historie: Version 1.01: - wenn der Kalender keine Einträge enhielt, kam es zu Fehlermeldungen. Version 1.03: - Einige Bugfixes ( Einträge im falschen Kalender, Fehlermeldung bei Leeren Kalendern ) - 2 neue Variablen Übermorgen und Überübermorgen. - Läuft jetzt auch auf einem Raspberry/BananaPi ! Version 1.04: - BugFix Für Wiederholungen ohne Ende Eintrag. (Wurden nicht angezeigt) - : im Beschreibung jetzt zulässig (beliebig viele) Version 1.05: - Neu: Bei Terminen mit Erinnerung können jetzt EMails verschickt werden ACHTUNG Konfig 'EmailID' muß angepasst werden. Version 1.06: - Bugfix: Alte Termine wurden nicht immer angezeigt. - Bugfix: Farben überarbeitet und funktionstüchtig gemacht - Bugfix: Erinnerung wurde bei mehrfachen Erinnerungen nicht sauber ausgewertet. Es wird NUR die erste Erinnerung genutzt. Erinnerung mit festen Termin wird ignoriert. - Neu: Feiertage werden ausgewertet und an Tagen MIT Terminen im Titel angezeigt Version 1.07: - Bugfix: Termine mit Wiederholung wurden in 'Heute' nicht angezeigt. - Bugfix: Umlaut bei Ganztägig war in IPS4 nicht korrekt - Neu: Schriftgröße für 'Heutige' Termine wählbar <$StyleText[14]> - Neu: Abgelaufene Termine in der 'Heute' Ansicht können ausgeblendet werden <$visualoldtimes> - Neu: Es können jetzt beliebig viele Erinnerungen angelegt werden. - Neu: Eine Erinnerung kann dynamisch (z.B.15min vorher oder nachher) oder statisch (absoluter Zeitpunkt) erfolgen - Neu: Dynamische Erinnerungen werden in Abhängigkeit der Terminwiederholung mitgeführt. - Neu: Alle Erinnerungen werden in Klammern ohne Datum angezeigt. - Neu: Bei jeder Erinnerung wird eine Mail verschickt, sofern Mailversand aktiviert wurde. Version 1.08: - Bugfix: Termine ohne Wiederholung wurden die Erinnerungen nicht erzeugt. - Neu: Tabellen Kopf kann ergänzt werden $StyleText[20] Muß in Konfig ergänzt werden - Neu: Die TerminTitel können über ein Userscript modifiziert werden. Dazu wird ein Userscript erstellt. Da können die Titel manipuliert werden (Ralf sein Wunsch) - Neu: Die HTML Ausgabe kann in einer Datei gespeichert werden. $htmlfilewrite Ziel: \media\owncloud_xx.html. Schon seit einigen Versionen drin. Version 1.09: - Neu: Termin Intervall wird jetzt ausgewertet. Alle xx Tage/Wochen/Monate/Jahre ist jetzt möglich Version 1.10 - Neu: Debugausgabe der Interpretieren Daten in eine Datei /media/owncloud_xx.dbg - Neu: UserEvent Durch einen Termin kann ein beliebieger Befehl in IPS ausgelöst werden. Ort muß dabei "UserEvent" heissen und in Betreff muß der entsprechende Befehl sein. z.B. HM_WriteValueBoolean(26250, "STATE", true); Es geht nur ein Befehl. Alle Befehle aus IPS sind möglich! Version 1.xx - Neu: Debugausgaben eingebunden für Symbox */ // Wochentage in Deutsch $tag[0] = "Sonntag"; $tag[1] = "Montag"; $tag[2] = "Dienstag"; $tag[3] = "Mittwoch"; $tag[4] = "Donnerstag"; $tag[5] = "Freitag"; $tag[6] = "Samstag"; if($_IPS['SENDER'] == "Execute") { //Verzeichnisse anlegen $adir = CreateCategoryByName(0, 'ACSoft', 'AC-Soft'); $cdir = CreateCategoryByName($adir, 'Cloud', 'Cloud'); $sdir = CreateCategoryByName($cdir, 'Scripte', 'Scripte'); $ddir = CreateCategoryByName($cdir, 'Data', 'Data'); // $gdir = CreateCategoryByName($cdir, 'Debug', 'Debug'); $kdir = CreateCategoryByName($cdir, 'Konfiguration', 'Konfiguration'); $vdir = CreateCategoryByName($cdir, 'Visualisierung', 'Visualisierung'); foreach ($kalender as $Nummer=>$Data) { // Update der alten Ident zur neuen $mdir = @IPS_GetObjectIDByIdent($Nummer, $ddir); if ($mdir !== false) { IPS_SetIdent($mdir, 'Kalender_'.$Nummer); } // neue Ident finden $mdir = CreateCategoryByName($ddir, 'Kalender_'.$Nummer, 'Kalender_'.$Data['KalenderName']); //Variablen anlegen $vheute = CreateVariableByName($mdir, "Heute", "Heute", 3, "~TextBox", 10); $vmorgen = CreateVariableByName($mdir, "Morgen", "Morgen", 3, "~TextBox", 20); $vuemorgen = CreateVariableByName($mdir, "UeMorgen", "ÜberMorgen", 3, "~TextBox", 22); $vueuemorgen = CreateVariableByName($mdir, "UeueMorgen", "ÜberüberMorgen", 3, "~TextBox", 24); $vheutemorgen = CreateVariableByName($mdir, "HeuteMorgen", "Heute & Morgen", 3, "", 30); $vnext = CreateVariableByName($mdir, "NaechstenTermine", "Nächsten Termine", 3, "~TextBox", 40); $vkalender = CreateVariableByName($mdir, "Kalender", "Kalender", 3, "~HTMLBox", 50); // if ($debug == true) // { // $dbgNativ = CreateVariableByName($gdir, "Kalender_".$Nummer."_Nativ", "Kalender_".$Nummer."_Nativ", 3, "~TextBox", 100 + $Nummer); // $dbgthisData = CreateVariableByName($gdir, "Kalender_".$Nummer."_thisData", "Kalender_".$Nummer."_thisData", 3, "~TextBox", 200 + $Nummer); // $dbgcalData = CreateVariableByName($gdir, "Kalender_".$Nummer."_calData", "Kalender_".$Nummer."_calData", 3, "~TextBox", 300 + $Nummer); // $dbgdbgData = CreateVariableByName($gdir, "Kalender_".$Nummer."_debugData", "Kalender_".$Nummer."_debugData", 3, "~TextBox", 400 + $Nummer); // } if ($visualisierung == 2) // Dummy { $wdir = CreateInstanceByName($vdir, 'Kalender', 'Kalender'); //Links erstellen // CreateLinkByName($wdir, 'Heute', $vheute, 10); // CreateLinkByName($wdir, 'Morgen', $vmorgen, 20); // CreateLinkByName($wdir, 'Heute & Morgen', $vheutemorgen, 30); // CreateLinkByName($wdir, 'Nächsten Termine', $vnext, 40); // Update der alten Ident zur neuen $ldir = @IPS_GetObjectIDByIdent($Nummer, $wdir); if ($ldir !== false) { IPS_SetIdent($ldir, 'Kalender_'.$Nummer); } CreateLinkByName($wdir, 'Kalender_'.$Nummer, $vkalender, 50); } else if ($visualisierung == 1){ // Kategory $wdir = CreateCategoryByName($vdir, $Data['KalenderName'], $Data['KalenderName']); //Links erstellen // CreateLinkByName($wdir, 'Heute', $vheute, 10); // CreateLinkByName($wdir, 'Morgen', $vmorgen, 20); // CreateLinkByName($wdir, 'Heute & Morgen', $vheutemorgen, 30); // CreateLinkByName($wdir, 'Nächsten Termine', $vnext, 40); // Update der alten Ident zur neuen $ldir = @IPS_GetObjectIDByIdent($Nummer, $wdir); if ($ldir !== false) { IPS_SetIdent($ldir, 'Kalender_'.$Nummer); } CreateLinkByName($wdir, 'Kalender_'.$Nummer, 'Kalender', $vkalender, 50); } else { $wdir = $vdir; //Links erstellen // CreateLinkByName($wdir, 'Heute', $vheute, 10); // CreateLinkByName($wdir, 'Morgen', $vmorgen, 20); // CreateLinkByName($wdir, 'Heute & Morgen', $vheutemorgen, 30); // CreateLinkByName($wdir, 'Nächsten Termine', $vnext, 40); // Update der alten Ident zur neuen $ldir = @IPS_GetObjectIDByIdent($Nummer, $wdir); if ($ldir !== false) { IPS_SetIdent($ldir, 'Kalender_'.$Nummer); } CreateLinkByName($wdir, 'Kalender_'.$Nummer, "Kalender ".$Data['KalenderName'], $vkalender, 50); } } // UserScripte erstellen $kscript = CreateScriptByName($sdir, "UserScripte", "UserScripte", ""); // Script verschieben IPS_SetParent($_IPS['SELF'], $sdir); IPS_SetName($_IPS['SELF'], 'Cloud Script'); // Timer erstellen CreateTimer_Profile('Cloud Timer','CloudTimer', $_IPS['SELF'], 0, 0, 0, true); } if(($_IPS['SENDER'] == "TimerEvent") || ($_IPS['SENDER'] == "Execute")) { // Kategorien finden $adir = IPS_GetObjectIDByIdent('ACSoft', 0); $cdir = IPS_GetObjectIDByIdent('Cloud', $adir); $ddir = IPS_GetObjectIDByIdent('Data', $cdir); $sdir = IPS_GetObjectIDByIdent('Scripte', $cdir); $gdir = IPS_GetObjectIDByIdent('Debug', $cdir); // UserScripte includen $kscript = IPS_GetObjectIDByIdent("UserScripte",$sdir); include "$kscript.ips.php"; foreach ($kalender as $Nummer=>$Data) { $date = ""; $heute = ""; $morgen = ""; $uemorgen = ""; $ueuemorgen = ""; $heuteumorgen = ""; $next = ""; $calcData = ""; $calDataTxt = ""; $thisData = ""; $debugData = array(""); if ($debug == true) print "*****************************************************\n\tKalender_$Nummer\n*****************************************************\n"; // { // SetValue(IPS_GetObjectIDByIdent("Kalender_".$Nummer."_Nativ",$gdir), ""); // SetValue(IPS_GetObjectIDByIdent("Kalender_".$Nummer."_thisData",$gdir), ""); // SetValue(IPS_GetObjectIDByIdent("Kalender_".$Nummer."_calData",$gdir), ""); // SetValue(IPS_GetObjectIDByIdent("Kalender_".$Nummer."_debugData",$gdir), ""); // } ReadCalendar($url, $Data['KalenderID'], $Data['UserName'], $Data['Password'], $Nummer); if ($calcData != "") { usort($calcData, 'DateCompare'); // Starte Tabellenansicht $calDataTxt = "" ."\n\t" ."\n\t\t" ."\n\t\t" ."\n\t"; $check_date = ""; $debugCount = 0; foreach($calcData as $thisData) { // Email Versand bei Erinnerungszeit foreach($thisData['ReminderDateTxt'] as $no => $reminderZeit) { if( ($Data['EMailID'] <> "") && ($reminderZeit <> "") ) if ($reminderZeit == date("d.m.Y H:i", time())) { SMTP_SendMail($Data['EMailID'], "Termin Erinnerung für ".$thisData['Bezeichnung'], " Datum: ".$thisData['DatumTxt']."\n\r Uhrzeit: ".$thisData['ZeitTxt']."\n\r Bezeichnung: ".$thisData['Bezeichnung']."\n\rBeschreibung: ".$thisData['Beschreibung']."\n\r"); } } // UserEvent ausführen if ( ($thisData['DatumTxt']." ".$thisData['ZeitTxt'] == date("d.m.Y H:i", time())) && ($thisData['UserEvent'] <> "") ) { UserEvent($thisData['UserEvent']); } // Variable Heute füllen if( ( $thisData['DatumTxt'] == date("d.m.Y", time()) && $visualoldtimes == true ) || ( $thisData['EndDatum'] >= strtotime(date("d.m.Y H:i", time())) && $thisData['EndDatum'] < strtotime(date("d.m.Y 23:59:59", time()))&& $visualoldtimes == false )) { if ($heute == "") { $heute = $thisData['ZeitTxt']." ".$thisData['Bezeichnung']; }else{ $heute = $heute.chr(13).chr(10).$thisData['ZeitTxt']." ".$thisData['Bezeichnung']; } } // Variable Morgen füllen if($thisData['DatumTxt'] == date("d.m.Y", time() + (24 * 60 * 60))) { if ($morgen == "") { $morgen = $thisData['ZeitTxt']." ".$thisData['Bezeichnung']; }else{ $morgen = $morgen.chr(13).chr(10).$thisData['ZeitTxt']." ".$thisData['Bezeichnung']; } } // Variable Übermorgen füllen if($thisData['DatumTxt'] == date("d.m.Y", time()+(2 * 24 * 60 * 60))) { if ($uemorgen == "") { $uemorgen = $thisData['ZeitTxt']." ".$thisData['Bezeichnung']; }else{ $uemorgen = $uemorgen.chr(13).chr(10).$thisData['ZeitTxt']." ".$thisData['Bezeichnung']; } } // Variable Überübermorgen füllen if($thisData['DatumTxt'] == date("d.m.Y", time()+(3 * 24 * 60 * 60))) { if ($ueuemorgen == "") { $ueuemorgen = $thisData['ZeitTxt']." ".$thisData['Bezeichnung']; }else{ $ueuemorgen = $ueuemorgen.chr(13).chr(10).$thisData['ZeitTxt']." ".$thisData['Bezeichnung']; } } // Variable Next füllen if(strtotime($thisData['DatumTxt']) >= strtotime(date("d.m.Y", time() + (2*24 * 60 * 60)))) { if ($next == "") { $next = $thisData['Bezeichnung']; }else{ $next = $next.chr(13).chr(10).$thisData['Bezeichnung']; } } // Variable "Heute & Morgen" füllen if ($heute == "") { $heuteumorgen = $morgen; } else { $heuteumorgen = $heute.chr(13).chr(10).$morgen; } // Variable Kalender füllen if(((strtotime($thisData['EndDatumTxt']) >= strtotime(date("d.m.Y", time()))) && $visualoldtimes == true ) || ($thisData['EndDatum'] >= strtotime(date("d.m.Y H:i", time())) && $visualoldtimes == false )) //date("d.m.Y", strtotime("yesterday"))) { if($check_date != "" and $thisData['DatumTxt'] != $check_date)$calDataTxt .= "\n\t\t\t
" ."\n\t\towncloud Script V 1.xx Debug" ."\n\t\t
\n\t\t\n\t"; if($thisData['DatumTxt'] != $check_date) { if ($thisData['DatumTxt'] == date("d.m.Y")) $headerTxt = "Heute:"; elseif ($thisData['DatumTxt'] == date("d.m.Y", strtotime("+1 day"))) $headerTxt = "Morgen:"; else $headerTxt = $thisData['DatumTxt']." in ".seDay($thisData['DatumTxt'],date("d.m.Y"),"dmY",".")." Tagen"; $calDataTxt .= "\n" ."\n\t\n\t\t"; $feiertag = get_Feiertag(strtotime($thisData['DatumTxt'])); if ($feiertag <> ""){ $calDataTxt .= "\n\t\t\t\t".$headerTxt." ( $feiertag )"; }else{ $calDataTxt .= "\n\t\t\t\t".$headerTxt; } $calDataTxt .= "\n\t\t\t\t\n\t\t" ."\n\t\t" ."\n\t\t\t\t".$tag[date("w", strtotime($thisData['DatumTxt']))] ."\n\t\t\t\t" ."\n\t\t" ."\n\t" ."\n\t" ."\n\t\t"; if($thisData['DatumTxt'] == date("d.m.Y")) { $calDataTxt .= "\n\t\t\t"; }else{ $calDataTxt .= "\n\t\t\t
"; } $check_date = $thisData['DatumTxt']; } $calDataTxt .= SetEintrag($thisData); if ($debugfilewrite == true) { $debugData[$debugCount] = $thisData; } if ($debug == true) { print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\tVariable: thisData #$debugCount\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"; print_r($thisData)."\n\n"; } } $debugCount++; } $calDataTxt .= "\n\t\t
" ."\n\t\t" ."\n\t" ."\n"; // Tabelle schließen // if ($debug) IPS_LogMessage("owncloud", "name: ".$Data['KalenderName'].", mdir:$mdir, kalender:".IPS_GetObjectIDByIdent("Kalender",$mdir)."\r\n"); // if ($debug) print "name: ".$Data['KalenderName'].", mdir:$mdir, kalender:".IPS_GetObjectIDByIdent("Kalender",$mdir)."\r\n"; $mdir = IPS_GetObjectIDByIdent('Kalender_'.$Nummer, $ddir); SetValue(IPS_GetObjectIDByIdent("Heute",$mdir), $heute); SetValue(IPS_GetObjectIDByIdent("Morgen",$mdir), $morgen); SetValue(IPS_GetObjectIDByIdent("UeMorgen",$mdir), $uemorgen); SetValue(IPS_GetObjectIDByIdent("UeueMorgen",$mdir), $ueuemorgen); SetValue(IPS_GetObjectIDByIdent("HeuteMorgen",$mdir), $heuteumorgen); SetValue(IPS_GetObjectIDByIdent("NaechstenTermine",$mdir), $next); SetValue(IPS_GetObjectIDByIdent("Kalender",$mdir), $calDataTxt); if ($htmlfilewrite == true) { $file_txt = IPS_GetKernelDir()."media\\owncloud_".$Data['KalenderID'].".html"; $fp = fopen($file_txt, 'wb'); fwrite($fp, $calDataTxt); fclose($fp); } if ($debugfilewrite == true) { $file_txt = IPS_GetKernelDir()."media\\owncloud_".$Data['KalenderID'].".dbg"; $fp = fopen($file_txt, 'wb'); fwrite($fp, print_r($debugData, true)); fclose($fp); } if ($debug == true) { print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\tVariable: calDataTxt\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"; print $calDataTxt."\n\n"; print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\tVariable: debugData\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"; print_r($debugData)."\n\n"; } } } } /*****************************************************************/ /*****************************************************************/ /* */ /* F u n k t i o n e n */ /* */ /*****************************************************************/ /*****************************************************************/ /*****************************************************************/ /* /* Erstellt Timer Profil, wenn noch keins vorhanden. /* Andernfalls wird der Timer gestellt. /* Rückgabe ObjectID des Timers /* /*****************************************************************/ function CreateTimer_Profile ($Name, $Ident, $ParentId, $Stunde=0, $Minute=0, $Position=0, $Status=true) { Global $abfrageintervall, $debug; $TimerId = @IPS_GetObjectIDByIdent($Ident, $ParentId); if ($TimerId === false) { $TimerId = IPS_CreateEvent(1 ); IPS_SetParent($TimerId, $ParentId); IPS_SetName($TimerId, $Name); IPS_SetIdent($TimerId, $Ident); if ( IPS_GetKernelVersion() >= "3.10"){ if (!IPS_SetEventCyclic($TimerId, 0 , 0,0,0,2,$abfrageintervall)) { Error ("IPS_SetEventCyclic failed !!!"); } if (!IPS_SetEventCyclicTimeFrom($TimerId, intval($Stunde), intval($Minute), 0)) { Error ("IPS_SetEventCyclicTimeBounds $TimerId with Time $zeit failed !!!"); } if (!IPS_SetEventCyclicDateFrom($TimerId, 0, 0, 0)) { Error ("IPS_SetEventCyclicTimeBounds $TimerId with DefaultDate failed !!!"); } }else{ if (!IPS_SetEventCyclicTimeBounds($TimerId, mktime($Stunde, $Minute, 0), 0)) { Error ("IPS_SetEventCyclicTimeBounds failed !!!"); } } IPS_SetPosition($TimerId, $Position); if ($debug) IPS_LogMessage("ownCloud", "Created Wecker Timer ".$Name."=".$TimerId); } if (!IPS_SetEventCyclic($TimerId, 0 , 0,0,0,2,$abfrageintervall)) { Error ("IPS_SetEventCyclic failed !!!"); } IPS_SetEventActive($TimerId, $Status); return $TimerId; } /*****************************************************************/ /* /* Erstellt Script, wenn noch keins vorhanden. /* Rückgabe ObjectID des Scriptes /* /*****************************************************************/ function CreateScriptByName($id, $ident, $name, $value = "\n") { Global $_IPS; $vscr = @IPS_GetObjectIDByIdent($ident, $id); if($vscr === false) { $vscr = IPS_CreateScript(0); IPS_SetParent($vscr, $id); IPS_SetName($vscr, $name); IPS_SetIdent($vscr, $ident); IPS_SetInfo($vscr, "this variable was created by script #".$_IPS['SELF']); IPS_SetScriptFile($vscr, $vscr.".ips.php"); IPS_SetScriptContent($vscr, $value); } return $vscr; } /*****************************************************************/ /* /* Erstellt Link, wenn noch keiner vorhanden ist. /* Rückgabe ObjectID des Links /* /*****************************************************************/ function CreateLinkByName($id, $ident, $name, $target, $position) { Global $_IPS; $vlnk = @IPS_GetObjectIDByIdent($ident, $id); if($vlnk === false) { $vlnk = IPS_CreateLink(); IPS_SetParent($vlnk, $id); IPS_SetName($vlnk, $name); IPS_SetIdent($vlnk, $ident); IPS_SetInfo($vlnk, "this variable was created by script #".$_IPS['SELF']); IPS_SetPosition($vlnk, $position); IPS_SetLinkTargetID($vlnk, $target); } return $vlnk; } /*****************************************************************/ /* /* Erstellt DummyInstanze, wenn nicht vorhanden. /* Rückgabe ObjectID der DummyInstanze /* /*****************************************************************/ function CreateInstanceByName($id, $ident, $name) { Global $_IPS; $vinst = @IPS_GetObjectIDByIdent($ident, $id); if($vinst === false) { $vinst = IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}"); IPS_SetParent($vinst, $id); IPS_SetName($vinst, $name); IPS_SetIdent($vinst, $ident); IPS_SetInfo($vinst, "this variable was created by script #".$_IPS['SELF']); } return $vinst; } /*****************************************************************/ /* /* Erstellt Kategory, wenn nicht vorhanden. /* Rückgabe ObjectID des Kategory /* /*****************************************************************/ function CreateCategoryByName($id, $ident, $name) { Global $_IPS; $vdir = @IPS_GetObjectIDByIdent($ident, $id); if($vdir === false) { $vdir = IPS_CreateCategory(); IPS_SetParent($vdir, $id); IPS_SetName($vdir, $name); IPS_SetIdent($vdir, $ident); IPS_SetInfo($vdir, "this variable was created by script #".$_IPS['SELF']); } return $vdir; } /*****************************************************************/ // // Erstellt Variable, wenn nicht vorhanden. // Andernfalls, wird diese aktualisiert // Rückgabe ObjectID des Variable // /*****************************************************************/ function CreateVariableByName($id, $ident, $name, $type, $profile = "", $position = 0) { Global $_IPS; $vid = @IPS_GetObjectIDByIdent($ident, $id); if($vid === false) { $vid = IPS_CreateVariable($type); IPS_SetParent($vid, $id); IPS_SetName($vid, $name); IPS_SetIdent($vid, $ident); IPS_SetPosition($vid, $position); IPS_SetInfo($vid, "this variable was created by script #".$_IPS['SELF']); if($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); } } return $vid; } /*****************************************************************/ // // Erstellt Einzelnen Eintrag im Kalender // Getrennt für Heute und restlichen Termine // // /*****************************************************************/ function SetEintrag($thisData) { global $tag, $deco, $StyleText, $viewReminder; if($thisData['ZeitTxt'] == "00:00") { if($thisData['DatumTxt'] == $thisData['EndDatumTxt']) $thisData['ZeitTxt']="Ganztägig"; else $thisData['ZeitTxt']="bis ".substr($tag[date("w", strtotime($thisData['EndDatumTxt']))],0,2).", ".$thisData['EndDatumTxt']; } $remind = ""; if ($viewReminder) { foreach($thisData['ReminderTimeTxt'] as $no => $Datum) { if (($Datum <> "") && ($no == 0)) $remind .= "(".$Datum; if (($Datum <> "") && ($no > 0)) $remind .= ", ".$Datum; if (($Datum <> "") && ($no == count($thisData['ReminderTimeTxt'])-1) ) $remind .= ") "; } } if($thisData['DatumTxt'] == date("d.m.Y")) { return "\n\t\t\t\t" ."\n\t\t\t\t\t" ."\n\t\t\t\t\t\t".$thisData['Bezeichnung'] ."\n\t\t\t\t\t\t" ."\n\t\t\t\t\t" ."\n\t\t\t\t\t" ."\n\t\t\t\t\t\t".$remind.$thisData['ZeitTxt'] ."\n\t\t\t\t\t\t" ."\n\t\t\t\t\t" ."\n\t\t\t\t"; } else { return "\n\t\t\t\t" ."\n\t\t\t\t\t" ."\n\t\t\t\t\t\t".$thisData['Bezeichnung'] ."\n\t\t\t\t\t\t" ."\n\t\t\t\t\t" ."\n\t\t\t\t\t" ."\n\t\t\t\t\t\t".$remind.$thisData['ZeitTxt'] ."\n\t\t\t\t\t\t" ."\n\t\t\t\t\t" ."\n\t\t\t\t"; } } /*****************************************************************/ // // // // // /*****************************************************************/ function seDay($begin,$end,$format,$sep) { $pos1 = strpos($format, 'd'); $pos2 = strpos($format, 'm'); $pos3 = strpos($format, 'Y'); $begin = explode($sep,$begin); $end = explode($sep,$end); $first = GregorianToJD($end[$pos2],$end[$pos1],$end[$pos3]); $second = GregorianToJD($begin[$pos2],$begin[$pos1],$begin[$pos3]); if($first > $second) return $first - $second; else return $second - $first; } /*****************************************************************/ // // Vergleicht Datum // // Rückgabe: 0 ist identisch, -1 ist A älter als B, 1 ist A jünger als B // /*****************************************************************/ function DateCompare($a, $b) { if ( $a['Datum'] == $b['Datum'] ) return 0; if ( $a['Datum'] < $b['Datum'] ) return -1; return 1; } /*****************************************************************/ // // Liest den kompletten Kalender // Sortierung in eine Variable // Auswertung jeder einzelnen Eintrages // Erzeugung der Wiederholungen in Unterroutine // /*****************************************************************/ function ReadCalendar($url, $id, $username, $password, $Nummer) { global $calcData, $debug, $filewrite; $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $url."/index.php/apps/calendar/export.php?calid=".$id); curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"); curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT,20); curl_setopt ($ch, CURLOPT_TIMEOUT, 120); curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 0); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_USERPWD, $username.':'.$password); $result = curl_exec ($ch); curl_close($ch); if(substr($result,0,15) == "BEGIN:VCALENDAR") { if ($filewrite == true) { $file_txt = IPS_GetKernelDir()."media\\owncloud_".$id.".txt"; $fp = fopen($file_txt, 'wb'); fwrite($fp, $result); fclose($fp); } if ($debug == true) print $result."\n\n"; $kalender_arr_komplett = explode("BEGIN:VEVENT", $result); //alle Datensätze durchlaufen foreach($kalender_arr_komplett as $key => $value) { $reminderCount = 0; if (($value <> "") && ($key > 0)) // Leere Einträge filtern { $sresult = explode("\r\n", $value); $startTime = ''; $endTime = ''; $reminderTime = -1; $rruleFreq = ''; $rruleCount = ''; $rruleEnd = ''; $rruleEndtxt = ''; $rruleDays = ''; $rruleMonth = ''; $rruleMonthDay = ''; $rruleIntervall = ''; $thisData = ''; $alarmData = false; $thisData['Bezeichnung'] = ''; $thisData['Beschreibung'] = ''; $thisData['Ort'] = ""; $thisData['UserEvent'] = ""; $thisData['Datum'] = ''; $thisData['ZeitTxt'] = ''; $thisData['DatumTxt'] = ''; $thisData['EndDatum'] = ''; $thisData['EndZeitTxt'] = ''; $thisData['EndDatumTxt'] = ''; $thisData['RRuleFreq'] = ''; $thisData['RRuleInterval'] = ''; $thisData['RRuleEnd'] = ''; $thisData['RRuleEndTxt'] = ''; $thisData['RRuleCount'] = ''; $thisData['RRuleDays'] = ''; $thisData['RRuleMonth'] = ''; $thisData['RRuleMonthDay'] = ''; $thisData['ReminderTime'] = array(''); $thisData['ReminderTimeTxt'] = array(''); $thisData['ReminderDateTxt'] = array(''); $thisData['ReminderTrigger'] = array(''); if ($debug) IPS_LogMessage("ownCloud", "T:$key\n"); foreach($sresult as $svalue) { if ($svalue <> "") { if ($svalue == "BEGIN:VALARM") $alarmData = true; if ($svalue == "END:VALARM") $alarmData = false; $xvalue = explode(':',$svalue); if ($xvalue[0] == "SUMMARY") { $title = ""; for($i = 1; $i < (count($xvalue) ); $i++) { if ($i > 1) $title .= ":"; $title.= $xvalue[$i]; } $thisData['Bezeichnung'] = iconv('UTF-8','ISO-8859-15',ModifyTitle($title)); } if ($xvalue[0] == "LOCATION") { $thisData['Ort'] = $xvalue[1]; } // Start Datum/Zeit filtern if (substr($xvalue[0],0,7) == "DTSTART") { if (strlen($xvalue[1]) == 8) { $startyear = substr($xvalue[1],0,4); $startmonth = substr($xvalue[1],4,2); $startday = substr($xvalue[1],6,2); $startTime = strtotime( "$startday.$startmonth.$startyear 00:00" ); } else { $startyear = substr($xvalue[1],0,4); $startmonth = substr($xvalue[1],4,2); $startday = substr($xvalue[1],6,2); $starthour = substr($xvalue[1],9,2); $startminute = substr($xvalue[1],11,2); $startTime = strtotime( "$startday.$startmonth.$startyear $starthour:$startminute" ); } } // Ende Datum/Zeit filtern if (substr($xvalue[0],0,5) == "DTEND") { if (strlen($xvalue[1]) == 8) { $endyear = substr($xvalue[1],0,4); $endmonth = substr($xvalue[1],4,2); $endday = substr($xvalue[1],6,2); $endTime = strtotime( "$endday.$endmonth.$endyear 00:00" ); } else { $endyear = substr($xvalue[1],0,4); $endmonth = substr($xvalue[1],4,2); $endday = substr($xvalue[1],6,2); $endhour = substr($xvalue[1],9,2); $endminute = substr($xvalue[1],11,2); $endTime = strtotime( "$endday.$endmonth.$endyear $endhour:$endminute" ); } } if (substr($xvalue[0],0,5) == "RRULE") { $rrule = explode(';',$xvalue[1]); foreach($rrule as $xrule) { $srule = explode('=',$xrule); if ($xrule == "FREQ=DAILY") $rruleFreq = "täglich"; if ($xrule == "FREQ=WEEKLY") $rruleFreq = "wöchentlich"; if ($xrule == "FREQ=MONTHLY") $rruleFreq = "monatlich"; if ($xrule == "FREQ=YEARLY") $rruleFreq = "jährlich"; if ($srule[0] == "COUNT") $rruleCount = $srule[1]; if ($srule[0] == "BYDAY") $rruleDays = $srule[1]; if ($srule[0] == "BYMONTH") $rruleMonth = $srule[1]; if ($srule[0] == "BYMONTHDAY") $rruleMonthDay = $srule[1]; if ($srule[0] == "INTERVAL") $thisData['RRuleInterval'] = $srule[1]; if ($srule[0] == "UNTIL") { $ryear = substr($xrule,6,4); $rmonth = substr($xrule,10,2); $rday = substr($xrule,12,2); $rhour = substr($xrule,15,2); $rminute = substr($xrule,17,2); $rruleEnd = strtotime( "$rday.$rmonth.$ryear" ); $rruleEndtxt = "$rday.$rmonth.$ryear"; } } } if ((substr($xvalue[0],0,11) == "DESCRIPTION") && ($alarmData == false)) { $thisData['Beschreibung'] = iconv('UTF-8','ISO-8859-15',$xvalue[1]); } if (substr($xvalue[0],0,8) == "LOCATION") { $thisData['Ort'] = iconv('UTF-8','ISO-8859-15',$xvalue[1]); } if (substr($xvalue[0],0,10) == "CATEGORIES") { $thisData['Kategorie'] = $xvalue[1]; } if ((substr($xvalue[0],0,7) == "TRIGGER") ) { $thisData['ReminderTrigger'][$reminderCount] = substr($xvalue[0],14).":".$xvalue[1]; $reminderCount++; } } } $thisData['Datum'] = $startTime; $thisData['ZeitTxt'] = date("H:i", $startTime); $thisData['DatumTxt'] = date("d.m.Y", $startTime); if ($endTime>0) { $thisData['EndDatum'] = $endTime; $thisData['EndZeitTxt'] = date("H:i", $endTime); $thisData['EndDatumTxt'] = date("d.m.Y", $endTime); if($thisData['ZeitTxt'] == "00:00" && $thisData['EndZeitTxt'] == "00:00") { $thisData['EndDatum'] = $endTime - 86400; $thisData['EndDatumTxt'] = date("d.m.Y", strtotime($thisData['EndDatumTxt']."-1 day")); } } else { $thisData['EndDatum'] = ''; $thisData['EndZeitTxt'] = ''; $thisData['EndDatumTxt'] = ''; } $thisData['RRuleFreq'] = $rruleFreq; $thisData['RRuleEnd'] = $rruleEnd; $thisData['RRuleEndTxt'] = $rruleEndtxt; $thisData['RRuleCount'] = $rruleCount; $thisData['RRuleDays'] = $rruleDays; $thisData['RRuleMonth'] = $rruleMonth; $thisData['RRuleMonthDay'] = $rruleMonthDay; if ($thisData['Ort'] == "UserEvent") { $thisData['UserEvent'] = substr($thisData['Beschreibung'],0,strpos($thisData['Beschreibung'],";") + 1); $thisData['UserEvent'] = str_replace("\;",";",$thisData['UserEvent']); $thisData['UserEvent'] = str_replace("\,",",",$thisData['UserEvent']); } CheckWiederholungen($thisData); } } }else{ IPS_LogMessage("ownCloud", "Keine Sinnvollen Daten von ownCloud erhalten\n\n".$result); if ($debug == true) { print "Keine Sinnvollen Daten von ownCloud erhalten\nResult:\n".$result."\nURL: ".$url."/index.php/apps/calendar/export.php?calid=".$id."\n"; print_r($ch); print "\n\n"; } } } /*****************************************************************/ // Formartiert die 3 stelligen Wochentage zu 2 stelligen // Rückgabe 2 stellig // /*****************************************************************/ function formatTag($DateItem) { $Translation = array( 'Mon' => 'MO', 'Tue' => 'TH', 'Wed' => 'WE', 'Thu' => 'TH', 'Fri' => 'FR', 'Sat' => 'SA', 'Sun' => 'SU', ); return $Translation[$DateItem]; } /*****************************************************************/ // // Prüft einen einzelnen Termin auf Wiederholungen // Wiederholt den Termin sooft bis der // Terminstart ins jetzige Zeitfenster passt // // Erinnerungszeitpunkte werden entsprechend mit geführt // /*****************************************************************/ function CheckWiederholungen($Data) { global $calcData, $maxDays; // if ($Data['Bezeichnung'] == "DebugTermin") print_r($Data); // Termin mit Enddatum begrenzte Wiederholungen if ($Data['RRuleFreq'] <> '' && $Data['RRuleEnd'] <> '' && $Data['RRuleCount'] == '') { $day = $Data['Datum']; $interval = $Data['RRuleInterval']; if($interval == "") $interval = 1; $rend = strtotime($Data['RRuleEndTxt']); while ($rend >= $day) { if (($Data['RRuleDays'] == '') || (strpos($Data['RRuleDays'],formatTag(date("D", $day))) !== false )) { $Data['DatumTxt'] = date("d.m.Y", $day); $Data['Datum'] = strtotime($Data['DatumTxt']." ".$Data['ZeitTxt']); $Data['EndDatum'] = strtotime(date("d.m.Y", $day)." ".$Data['EndZeitTxt']); $Data['EndDatumTxt'] = date("d.m.Y", $day); if (( $day >= strtotime(date("d.m.Y",time()))) && ( $Data['Datum'] <= strtotime("+$maxDays day") )) { $remindercount = 0; foreach($Data['ReminderTrigger'] as $no => $trigger) { $reminder = get_Reminder( $Data['Datum'] , $trigger ); if($reminder > 0) { $Data['ReminderTime'][$remindercount] = $reminder; $Data['ReminderTimeTxt'][$remindercount] = date("H:i", $reminder); $Data['ReminderDateTxt'][$remindercount] = date("d.m.Y H:i", $reminder); $remindercount++; } } $calcData[] = $Data; } } if ($Data['RRuleFreq'] == 'täglich') $day = strtotime("+".$interval." day",$day); if ($Data['RRuleFreq'] == 'wöchentlich') $day = strtotime("+".($interval * 7)." day",$day); if ($Data['RRuleFreq'] == 'monatlich') $day = strtotime("+".$interval." month",$day); if ($Data['RRuleFreq'] == 'jährlich') $day = strtotime("+".$interval." year",$day); } } // Termin mit Anzahl begrenzte Wiederholungen elseif ($Data['RRuleFreq'] <> '' && $Data['RRuleEnd'] == '' && $Data['RRuleCount'] <> '') { $day = $Data['Datum']; $interval = $Data['RRuleInterval']; if($interval == "") $interval = 1; $count = 0; while ($count < $Data['RRuleCount']) { if (($Data['RRuleDays'] == '') || (strpos($Data['RRuleDays'],formatTag(date("D", $day))) !== false )) { $Data['DatumTxt'] = date("d.m.Y", $day); $Data['Datum'] = strtotime($Data['DatumTxt']." ".$Data['ZeitTxt']); $Data['EndDatum'] = strtotime(date("d.m.Y", $day)." ".$Data['EndZeitTxt']); $Data['EndDatumTxt'] = date("d.m.Y", $day); if (( $day >= strtotime(date("d.m.Y",time()))) && ( $Data['Datum'] <= strtotime("+$maxDays day"))) { $remindercount = 0; foreach($Data['ReminderTrigger'] as $no => $trigger) { $reminder = get_Reminder( $Data['Datum'] , $trigger ); if($reminder > 0) { $Data['ReminderTime'][$remindercount] = $reminder; $Data['ReminderTimeTxt'][$remindercount] = date("H:i", $reminder); $Data['ReminderDateTxt'][$remindercount] = date("d.m.Y H:i", $reminder); $remindercount++; } } $calcData[] = $Data; } } if ($Data['RRuleFreq'] == 'täglich') $day = strtotime("+".$interval." day",$day); if ($Data['RRuleFreq'] == 'wöchentlich') $day = strtotime("+".($interval * 7)." day",$day); if ($Data['RRuleFreq'] == 'monatlich') $day = strtotime("+".$interval." month",$day); if ($Data['RRuleFreq'] == 'jährlich') $day = strtotime("+".$interval." year",$day); $count++; } } // Termin mit zeitlich unbegrenzte Wiederholungen elseif ($Data['RRuleFreq'] <> '' && $Data['RRuleEnd'] == '' && $Data['RRuleCount'] == '') { $day = $Data['Datum']; $interval = $Data['RRuleInterval']; if($interval == "") $interval = 1; do { if (($Data['RRuleDays'] == '') || (strpos($Data['RRuleDays'],formatTag(date("D", $day))) !== false )) { $Data['DatumTxt'] = date("d.m.Y", $day); $Data['Datum'] = strtotime($Data['DatumTxt']." ".$Data['ZeitTxt']); $Data['EndDatum'] = strtotime(date("d.m.Y", $day)." ".$Data['EndZeitTxt']); $Data['EndDatumTxt'] = date("d.m.Y", $day); //$Data['ReminderTime'][0] = strtotime($Data['DatumTxt']." ".$Data['ReminderTimeTxt'][0]); if (( $day >= strtotime(date("d.m.Y",time()))) && ( $day <= strtotime("+$maxDays day") )) { // Termin Array erzeugen $remindercount = 0; foreach($Data['ReminderTrigger'] as $no => $trigger) { $reminder = get_Reminder( $Data['Datum'] , $trigger ); if($reminder > 0) { $Data['ReminderTime'][$remindercount] = $reminder; $Data['ReminderTimeTxt'][$remindercount] = date("H:i", $reminder); $Data['ReminderDateTxt'][$remindercount] = date("d.m.Y H:i", $reminder); $remindercount++; } } $calcData[] = $Data; } } if ($Data['RRuleFreq'] == 'täglich') $day = strtotime("+".$interval." day",$day); if ($Data['RRuleFreq'] == 'wöchentlich') $day = strtotime("+".($interval * 7)." day",$day); if ($Data['RRuleFreq'] == 'monatlich') $day = strtotime("+".$interval." month",$day); if ($Data['RRuleFreq'] == 'jährlich') $day = strtotime("+".$interval." year",$day); } while ( ( $day <= strtotime(date("d.m.Y",time()))) || ( $day <= strtotime("+$maxDays day")) ); } // Termin ohne Wiederholungen else { if (( $Data['Datum'] >= strtotime(date("d.m.Y"))) && ( $Data['Datum'] <= strtotime("+$maxDays day"))) { // Termin Array erzeugen $remindercount = 0; foreach($Data['ReminderTrigger'] as $no => $trigger) { $reminder = get_Reminder( $Data['Datum'] , $trigger ); if($reminder > 0) { $Data['ReminderTime'][$remindercount] = $reminder; $Data['ReminderTimeTxt'][$remindercount] = date("H:i", $reminder); $Data['ReminderDateTxt'][$remindercount] = date("d.m.Y H:i", $reminder); $remindercount++; } } $calcData[] = $Data; } } } /*****************************************************************/ // Erinnerungszeitpunkt erzeugen // Abhängig ob festes Datum oder variables Datum // Rückgabe genauer Zeitpunkt der Erinnerung in Unix Timecoder // /*****************************************************************/ function get_Reminder($startTime, $trigger) { $reminder = 0; $xvalue = explode(":", $trigger); if ( (substr($xvalue[0],0) == "DURATION") || (count($xvalue) >= 2) ) // Variables Erinnerungsprofil Bei einigen Server fehlt das Duration!! { // Zeitintervall zerlegen $str = substr($xvalue[1],strpos($xvalue[1], 'P') + 1); $stunden = substr(strstr($str, 'T'),1); $tage = strstr($str, 'D',true); $reminderTime = 0; // Sekunden, Minuten, Stunden weise Erinnerung if (substr($stunden,strlen($stunden)-1,strlen($stunden)) == "S") { $reminderTime = substr($stunden,0,strlen($stunden)-1); } else if (substr($stunden,strlen($stunden)-1,strlen($stunden)) == "M") { $reminderTime = substr($stunden,0,strlen($stunden)-1) * 60; } else if (substr($stunden,strlen($stunden)-1,strlen($stunden)) == "H") { $reminderTime = substr($stunden,0,strlen($stunden)-1) * 60 * 60; } // Tage weise Erinnerung if ($tage <> "") { $reminderTime = $reminderTime + ( $tage * 86400 ); } // Neue exakte Erinnerungzeitpunkt erzeugen if(substr($xvalue[1],0,1) == "-") { $reminder = $startTime - $reminderTime; }else{ $reminder = $startTime + $reminderTime; } }else if (substr($xvalue[0],0) == "DATE-TIME") // fester Erinnerungszeitpunkt { $reminder = strtotime(substr($xvalue[1],6,2).".".substr($xvalue[1],4,2).".".substr($xvalue[1],0,4)." ".substr($xvalue[1],9,2).":".substr($xvalue[1],11,2)); } return $reminder; } /*****************************************************************/ // // Loste den Befehl aus der über die Variable übergeben wurde. // /*****************************************************************/ function UserEvent($value) { IPS_LogMessage("ownCloud", "UserEvent: $value"); ob_start(); eval($value); ob_get_clean(); } /*****************************************************************/ // // Prüfen ob der gewählte Tage ein Feiertag ist // Übergabe: zu prüfenden Tag // Rückgabe: true = Feiertage; false = kein Feiertag // // Routine nicht von mir aber angepasst // /*****************************************************************/ function get_Feiertag( $date ){ if ($date == "") $date = mktime(0,0,0,date("m"),date("d"),date("y")); $Fdays = getHolidays(Date('Y', $date)); $return = ""; foreach($Fdays as $value) { list($key, $value) = each($Fdays); if ($date == $value) $return = $key; } return $return; } /*****************************************************************/ // // Routine nicht von mir // /*****************************************************************/ function getEasterSundayTime($year) { $p = floor($year/100); $r = floor($year/400); $o = floor(($p*8+13)/25)-2; $w = (19*($year%19)+(13+$p-$r-$o)%30)%30; $e = ($w==29?28:$w); if ($w==28&&($year%19)>10) $e=27; $day = (2*($year%4)+4*($year%7)+6*$e+(4+$p-$r)%7)%7+22+$e; $month = ($day>31?4:3); if ($day>31) $day-=31; return mktime(0, 0, 0, $month, $day, $year); } /*****************************************************************/ // // Routine nicht von mir // /*****************************************************************/ function getHolidays($year) { Global $bland; $time = getEasterSundayTime($year); $days[""] = 0; $days["Neujahr"] = mktime(0, 0, 0, 1, 1, $year); $days["Karfreitag"] = $time-(86400*2); $days["Ostersonntag"] = $time; $days["Ostermontag"] = $time+(86400 /*[Objekt #20864 existiert nicht]*/); $days["Tag der Arbeit"] = mktime(0, 0, 0, 5, 1, $year); $days["Christi Himmelfahrt"] = $time+(86400*39); $days["Pfingstsonntag"] = $time+(86400*49); $days["Pfingstmontag"] = $time+(86400*50); $days["Tag der deutschen Einheit"] = mktime(0, 0, 0, 10, 3, $year); $days["Buß- und Bettag"] = mktime(0, 0, 0, 11, 26+(7-date('w', mktime(0, 0, 0, 11, 26, $year)))-11, $year); //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $days["1. Weihnachtsfeiertag"] = mktime(0, 0, 0, 12, 25, $year); $days["2. Weihnachtsfeiertag"] = mktime(0, 0, 0, 12, 26, $year); //******************************* // Fester $Feiertag in BW, BY, ST //******************************* if (($bland == "BW") or ($bland == "BY") or ($bland == "ST")) { $days["Heilige 3 Könige"] = mktime(0, 0, 0, 1, 6, $year); //!!!!!!!!!!!!!!!!!!!!!!! } //*************************************** // Fester $Feiertag in BB, MV, SA, ST, TH //*************************************** if (($bland == "BB") or ($bland == "MV") or ($bland == "SA") or ($bland == "ST") or ($bland == "TH")) { $days["Reformationstag"] = mktime(0, 0, 0, 10, 31, $year); //!!!!!!!!!!!!!!!!!!!!! } //*************************************** // Fester $Feiertag in BW, BY, NW, RP, SL //*************************************** if (($bland == "BW") or ($bland == "BY") or ($bland == "NW") or ($bland == "RP") or ($bland == "SL")) { $days["Allerheiligen"] = mktime(0, 0, 0, 11, 1, $year); } //******************************************* // Fester $Feiertag in BY (nicht überall), SL //******************************************* if (($bland == "BY") or ($bland == "SL")) { $days["Maria Himmelfahrt"] = mktime(0, 0, 0, 08, 15, $year); //!!!!!!!!!!!!!!!!!!!!! } //********************************************************************** // Bewegliche Feiertage BW, BY, HE, NW, RP, SL, (SA, TH nicht überall) //********************************************************************** if (($bland == "BW") or ($bland == "BY") or ($bland == "HE") or ($bland == "NW") or ($bland == "RP") or ($bland == "SL") or ($bland == "SA") or ($bland == "TH")) { $days["Fronleichnam"] = $time+(86400*60); //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! } return $days; } ?>