array( 'KalenderName' => 'USER1', // Kalender Name wie er in der Visualisierung angezeigt wird 'KalenderURL' => 'https://www.XXX.de/cloud//index.php/apps/calendar/export.php?calid=1'; // vollständige URL zum owncloud export 'UserName' => '', // Benutzername in owncloud 'Password' => '', // passendes Password zum Benutzernamen 'EMailID' => '', ), '2' => array( 'KalenderName' => 'USER2', 'KalenderURL' => 'https://www.XXX.de/cloud//index.php/apps/calendar/export.php?calid=1'; // vollständige URL zum owncloud export 'UserName' => '', 'Password' => '', 'EMailID' => '', ), '3' => array( 'KalenderName' => 'USER3', 'KalenderURL' => 'https://www.XXX.de/cloud//index.php/apps/calendar/export.php?calid=1'; // vollständige URL zum owncloud export 'UserName' => '', 'Password' => '', 'EMailID' => '', ), ); /* * Definiert das Bundesland für die Feiertage * Fuer c_Property_Bundesland bitte folgende Abkuerzungen benutzen: * -- = keine Auswertung * 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 = "SH"; // Allgemeine Daten $debug = false; // Debug Ausgabe $filewrite = false; // erstellt parallel ein ungefiltertes TextFile in Kernel\media\owncloud_ID.txt $debugfilewrite = false; // Array Ausgabe zum debuggen $htmlfilewrite = false; // erstellt parallel ein html File in Kernel\media\owncloud_ID.html $maxDays = 90; // Max. anzuzeigende Tage im Kalender und nächsten Termine $abfrageintervall = 1; // Abfrage Intervall in Minuten bei Email Versand MUß auf 1min stehen $visualisierung = 1; // 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(OBJECTID, "STATE", true); Es geht nur ein Befehl. Alle Befehle aus IPS sind möglich! Version 1.11 - Neu: Debugausgaben erweitert - Neu: Auswertung Feiertage kann mit -- abgeschaltet werden Version 1.12 - Neu: Bei jährlichen Wiederholungen, wird die Anzahl der Wiederholungen hinter dem Termin angezeigt. (s. i. d. R. Geburtstage) - Neu: UserEvent in externes Script verlagert - Neu: Externes Script für UserEvent und ReminderEvent. FÜR UPDATE ALTES SCRIPT LÖSCHEN! UND EINMAL AUSFÜHREN.ES WIRD EIN NEUES ANGELEGT. ÄNDERUNGEN VORHER SICHERN! - Neu: Variable nächste Termine jetzt mit Anzeige Datum und Uhrzeit - Fix: Variablen für Termine (ausser Kalender) werden auf ~TextBox gesetzt. Damit funktioniert auch der Zeilenumbruch Version 1.13 - Neu: Auch für owncloud 9 nutzbar ACHTUNG owncloud 8 Nutzer müssen Ihre Config anpassen - Change: Es muß für jeden Benutzer eine vollständige KalenderURL angegeben werden - Change: KalenderID entfernt - Change: (debug/HTML) Filewrite geändert von KalenderID zu KalenderName Version 1.14 - Änderungen eingepflegt: Quelle https://www.symcon.de/forum/threads/36394-owncloud-%28Script%29-Umstellung-auf-5-0-erfordert-%C3%84nderungen - Änderungen eingepflegt: Quelle https://www.symcon.de/forum/newreply.php?do=newreply&p=314503 Version 1.15 - In 1.14 waren die Routinen doppelt Version 1.16 - Nach update Script einmal ausführen - Alle Termine werden in reiner Textform in die Variable KalenderTXT abgespeichert. Daten können so extern besser weiterverarbeitet werden. In KalenderTXT stehen alle Termine. - Feiertage überarbeitet. Buß und Bettag nur in SN, Reformationstag in BB, HB, HH, MV, NI, SN, ST, SH, TH Version 1.17 - Danke Ralf - iconv ergänzt Version 1.18 - Synology sollte jetzt auch gehen. Wenn aber über Webseite des Synology Calendars ein Termin mit erinnerung eingestellt wird, wird die erinnerung in den Export nicht eingetragen. Somit keine Benachrichtigung etc. */ // 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'); $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", 30); $vueuemorgen = CreateVariableByName($mdir, "UeueMorgen" , "ÜberüberMorgen" , 3, "~TextBox", 40); $vheutemorgen = CreateVariableByName($mdir, "HeuteMorgen" , "Heute & Morgen" , 3, "~TextBox", 50); $vnext = CreateVariableByName($mdir, "NaechstenTermine" , "Nächsten Termine" , 3, "~TextBox", 60); $vkalender = CreateVariableByName($mdir, "Kalender" , "Kalender" , 3, "~HTMLBox", 100); $vkalendertxt = CreateVariableByName($mdir, "KalenderTXT" , "KalenderTXT" , 3, "~String", 110); // 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); CreateLinkByName($wdir, 'KalenderTXT_'.$Nummer, $vkalendertxt, 60); } 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); CreateLinkByName($wdir, 'KalenderTXT_'.$Nummer, 'KalenderTXT', $vkalendertxt, 60); } 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); CreateLinkByName($wdir, 'KalenderTXT_'.$Nummer, "KalenderTXT ".$Data['KalenderName'], $vkalendertxt, 60); } } // 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); // UserScripte includen $kscript = IPS_GetObjectIDByIdent("UserScripte",$sdir); include "$kscript.ips.php"; foreach ($kalender as $Nummer=>$Data){ $date = ""; $heute = ""; $morgen = ""; $uemorgen = ""; $ueuemorgen = ""; $heuteumorgen = ""; $next = ""; $calDataArray = array(); $calDataHTML = ""; $calDataTXT = ""; $thisData = array(); $debugData = array(); if ($debug == true){ print "*****************************************************\n\tKalender_$Nummer\n*****************************************************\n"; } ReadCalendar($Data['KalenderURL'], $Data['UserName'], $Data['Password'], $Nummer, $Data['KalenderName']); if ($calDataArray != ""){ usort($calDataArray, 'DateCompare'); // Starte Tabellenansicht $calDataHTML = "" ."\n\t" ."\n\t\t" ."\n\t\t" ."\n\t"; $check_date = ""; $debugCount = 0; foreach($calDataArray as $thisData){ // Email Versand bei Erinnerungszeit foreach($thisData['ReminderDateTxt'] as $no => $reminderZeit){ // ReminderEvent auslösen if( ($reminderZeit <> "") ){ if ($reminderZeit == date("d.m.Y H:i", time())){ ReminderEvent($thisData['Bezeichnung']); } } // Email Versand bei Erinnerungszeit if( ($Data['EMailID'] > 0) && ($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'], $thisData['Bezeichnung'] ); } // 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 )){ $jahre = ""; if ($thisData['Wiederholungen'] > 0) $jahre = " (".$thisData['Wiederholungen']."J)"; if ($heute == "") { $heute = $thisData['ZeitTxt']." ".$thisData['Bezeichnung'].$jahre; } else { $heute = $heute.chr(13).chr(10).$thisData['ZeitTxt']." ".$thisData['Bezeichnung'].$jahre; } if ($calDataTXT == "" ) { $calDataTXT = $thisData['DatumTxt']." ".$thisData['ZeitTxt']." ".$thisData['Bezeichnung'].$jahre; } else { $calDataTXT = $calDataTXT.chr(13).chr(10).$thisData['DatumTxt']." ".$thisData['ZeitTxt']." ".$thisData['Bezeichnung'].$jahre; } } // Variable Morgen füllen if($thisData['DatumTxt'] == date("d.m.Y", time() + (24 * 60 * 60))){ $jahre = ""; if ($thisData['Wiederholungen'] > 0) $jahre = " (".$thisData['Wiederholungen']."J)"; if ($morgen == "") { $morgen = $thisData['ZeitTxt']." ".$thisData['Bezeichnung'].$jahre; } else { $morgen = $morgen.chr(13).chr(10).$thisData['ZeitTxt']." ".$thisData['Bezeichnung'].$jahre; } if ($calDataTXT == "" ) { $calDataTXT = $thisData['DatumTxt']." ".$thisData['ZeitTxt']." ".$thisData['Bezeichnung'].$jahre; } else { $calDataTXT = $calDataTXT.chr(13).chr(10).$thisData['DatumTxt']." ".$thisData['ZeitTxt']." ".$thisData['Bezeichnung'].$jahre; } } // Variable Übermorgen füllen if($thisData['DatumTxt'] == date("d.m.Y", time()+(2 * 24 * 60 * 60))){ $jahre = ""; if ($thisData['Wiederholungen'] > 0) $jahre = " (".$thisData['Wiederholungen']."J)"; if ($uemorgen == ""){ $uemorgen = $thisData['ZeitTxt']." ".$thisData['Bezeichnung'].$jahre; } else{ $uemorgen = $uemorgen.chr(13).chr(10).$thisData['ZeitTxt']." ".$thisData['Bezeichnung'].$jahre; } } // Variable Überübermorgen füllen if($thisData['DatumTxt'] == date("d.m.Y", time()+(3 * 24 * 60 * 60))){ $jahre = ""; if ($thisData['Wiederholungen'] > 0) $jahre = " (".$thisData['Wiederholungen']."J)"; if ($ueuemorgen == ""){ $ueuemorgen = $thisData['ZeitTxt']." ".$thisData['Bezeichnung'].$jahre; } else{ $ueuemorgen = $ueuemorgen.chr(13).chr(10).$thisData['ZeitTxt']." ".$thisData['Bezeichnung'].$jahre; } } // Variable Next füllen if(strtotime($thisData['DatumTxt']) >= strtotime(date("d.m.Y", time() + (2*24 * 60 * 60)))){ $jahre = ""; if ($thisData['Wiederholungen'] > 0) $jahre = " (".$thisData['Wiederholungen']."J)"; if ($next == "") { $next = $thisData['DatumTxt']." ".$thisData['ZeitTxt']." ".$thisData['Bezeichnung'].$jahre; } else { $next = $next.chr(13).chr(10).$thisData['DatumTxt']." ".$thisData['ZeitTxt']." ".$thisData['Bezeichnung'].$jahre; } if ($calDataTXT == "" ) { $calDataTXT = $thisData['DatumTxt']." ".$thisData['ZeitTxt']." ".$thisData['Bezeichnung'].$jahre; } else { $calDataTXT = $calDataTXT.chr(13).chr(10).$thisData['DatumTxt']." ".$thisData['ZeitTxt']." ".$thisData['Bezeichnung'].$jahre; } } // 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 )){ if($check_date != "" and $thisData['DatumTxt'] != $check_date)$calDataHTML .= "\n\t\t\t
" ."\n\t\towncloud Script V 1.18" ."\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"; $calDataHTML .= "\n" ."\n\t\n\t\t"; $feiertag = get_Feiertag(strtotime($thisData['DatumTxt'])); if ($feiertag <> ""){ $calDataHTML .= "\n\t\t\t\t".$headerTxt." ( $feiertag )"; } else{ $calDataHTML .= "\n\t\t\t\t".$headerTxt; } $calDataHTML .= "\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")){ $calDataHTML .= "\n\t\t\t"; } else{ $calDataHTML .= "\n\t\t\t
"; } $check_date = $thisData['DatumTxt']; } $calDataHTML .= SetEintrag($thisData); if ($debugfilewrite == true){ $debugData[$debugCount] = $thisData; } if ($debug == true){ print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\tVariable: thisData #$debugCount\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"; print_r($thisData)."\n\n"; } } $debugCount++; } $calDataHTML .= "\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), $calDataHTML); SetValue(IPS_GetObjectIDByIdent("KalenderTXT",$mdir), $calDataTXT); if ($htmlfilewrite == true){ $file_txt = IPS_GetKernelDir()."media\\owncloud_".$Data['KalenderName'].".html"; $fp = fopen($file_txt, 'wb'); fwrite($fp, $calDataHTML); fclose($fp); } if ($debugfilewrite == true){ $file_txt = IPS_GetKernelDir()."media\\owncloud_".$Data['KalenderName'].".dbg"; $fp = fopen($file_txt, 'wb'); fwrite($fp, print_r($debugData, true)); fclose($fp); } if ($debug == true){ print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\tVariable: calDataTxt\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"; print $calDataHTML."\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 .= ") "; } } $jahre = ""; if ($thisData['Wiederholungen'] > 0) $jahre = " (".$thisData['Wiederholungen']."J)"; 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'].$jahre ."\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'].$jahre ."\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, $username, $password, $Nummer, $Name){ global $calDataArray, $debug, $filewrite; $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, false); 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_".$Name.".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); //print $kalender_arr_komplett[3]; //alle Datensätze durchlaufen foreach($kalender_arr_komplett as $key => $value){ // Nur zwischen Begin:EVENT und END:EVENT filtern $nvalue = substr($value, 0, strpos($value, "END:VEVENT")); $reminderCount = 0; if (($nvalue <> "") && ($key > 0)){ // Leere Einträge filtern $sresult = explode("\r\n", $nvalue); $startTime = ''; $endTime = ''; $reminderTime = -1; $rruleFreq = ''; $rruleCount = ''; $rruleEnd = ''; $rruleEndtxt = ''; $rruleDays = ''; $rruleMonth = ''; $rruleMonthDay = ''; $rruleIntervall = ''; $thisData = array(); $alarmData = false; $thisData['Bezeichnung'] = ''; $thisData['Beschreibung'] = ''; $thisData['Ort'] = ""; $thisData['UserEvent'] = ""; $thisData['Datum'] = ''; $thisData['ZeitTxt'] = ''; $thisData['DatumTxt'] = ''; $thisData['EndDatum'] = ''; $thisData['EndZeitTxt'] = ''; $thisData['EndDatumTxt'] = ''; $thisData['Wiederholungen'] = ''; $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]; } // Danke ralf $thisData['Bezeichnung'] = iconv('UTF-8//IGNORE', 'ISO-8859-15//IGNORE', 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)){ // Danke ralf $thisData['Beschreibung'] = iconv('UTF-8//IGNORE','ISO-8859-15//IGNORE',$xvalue[1]); } if (substr($xvalue[0],0,8) == "LOCATION"){ // Danke ralf $thisData['Ort'] = iconv('UTF-8//IGNORE','ISO-8859-15//IGNORE',$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."\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 $calDataArray, $maxDays; if ($Data['Bezeichnung'] == "DebugTermin") print_r($Data); // Termin mit Enddatum begrenzte Wiederholungen if ($Data['RRuleFreq'] <> '' && $Data['RRuleEnd'] <> '' && $Data['RRuleCount'] == ''){ $jahre = 0; $day = strtotime($Data['DatumTxt']); if($Data['RRuleInterval'] == "") $Data['RRuleInterval'] = 1; $interval = $Data['RRuleInterval']; $rend = $Data['RRuleEnd']; 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++; } } $calDataArray[] = $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); $jahre = $jahre + $interval; $Data['Wiederholungen'] = $jahre;} } } // Termin mit Anzahl begrenzte Wiederholungen elseif ($Data['RRuleFreq'] <> '' && $Data['RRuleEnd'] == '' && $Data['RRuleCount'] <> ''){ $jahre = 0; $day = strtotime($Data['DatumTxt']); if($Data['RRuleInterval'] == "") $Data['RRuleInterval'] = 1; $interval = $Data['RRuleInterval']; $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++; } } $calDataArray[] = $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); $jahre = $jahre + $interval; $Data['Wiederholungen'] = $jahre;} $count++; } } // Termin mit zeitlich unbegrenzte Wiederholungen elseif ($Data['RRuleFreq'] <> '' && $Data['RRuleEnd'] == '' && $Data['RRuleCount'] == ''){ $jahre = 0; $day = strtotime($Data['DatumTxt']); if($Data['RRuleInterval'] == "") $Data['RRuleInterval'] = 1; $interval = $Data['RRuleInterval']; 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++; } } $calDataArray[] = $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); $jahre = $jahre + $interval; $Data['Wiederholungen'] = $jahre;} } 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++; } } $calDataArray[] = $Data; } } if($Data['Bezeichnung'] == "DebugTermin"){ IPS_LogMessage("ownCloud-Modul", print_r($Data,true)); } } /*****************************************************************/ // 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; } /*****************************************************************/ // // 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 = ""; if ( $Fdays == "") return; foreach($Fdays as $key => $value) { list($key, $value) = myEach($Fdays); //echo "$key - $value \n"; if ($date == $value) $return = $key; } return $return; } /*****************************************************************/ // Routine /*****************************************************************/ function myEach(&$arr) { $key = key($arr); $result = ($key === null) ? false : [$key, current($arr), 'key' => $key, 'value' => current($arr)]; next($arr); return $result; } /*****************************************************************/ // // 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; /* * Definiert das Bundesland für die Feiertage * Fuer c_Property_Bundesland bitte folgende Abkuerzungen benutzen: * -- = keine Auswertung * 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 */ if ( $bland == "--") return ""; $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); $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["1. Weihnachtsfeiertag"] = mktime(0, 0, 0, 12, 25, $year); $days["2. Weihnachtsfeiertag"] = mktime(0, 0, 0, 12, 26, $year); //******************************* // Fester $Feiertag in SN //******************************* if (($bland == "SN")) { $days["Buß- und Bettag"] = mktime(0, 0, 0, 11, 26+(7-date('w', mktime(0, 0, 0, 11, 26, $year)))-11, $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, HB, HH, MV, NI, SN, ST, SH, TH //*************************************** if (($bland == "BB") or ($bland == "HB") or ($bland == "HH") or ($bland == "MV") or ($bland == "NI") or ($bland == "SN") or ($bland == "ST") or ($bland == "SH") 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, 8, 15, $year); //!!!!!!!!!!!!!!!!!!!!! } //********************************************************************** // Bewegliche Feiertage BW, BY, HE, NW, RP, SL, (SN, TH nicht überall) //********************************************************************** if (($bland == "BW") or ($bland == "BY") or ($bland == "HE") or ($bland == "NW") or ($bland == "RP") or ($bland == "SL") or ($bland == "SN") or ($bland == "TH")) { $days["Fronleichnam"] = $time+(86400*60); //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! } return $days; } ?>