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. Version 1.18a - Bugfix in formatTag. Danke ralf fürs finden. - Bugfix Beispiel URL. Danke hardlog fürs finden. */ // 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.18a" ."\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' => 'TU', '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; } ?>