// PFLICHT Daten zu owncloud
$kalender = array( // Hier die einzelnen Kalender eintragen
'1' => 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",
'
/*****************************************************************/
//
// Modifiziert den TerminTitel bei Bedarf
//
/*****************************************************************/
function ModifyTitle($Titel)
{
// $Titel = str_replace("Geburtstag","Geb",$Titel);
return $Titel;
}
/*****************************************************************/
//
// Löst den Befehl aus, der über die Befehl übergeben wurde.
// Auslösung erfolgt zum Zeitpunkt des Termins.
//
/*****************************************************************/
function UserEvent($Befehl, $Titel)
{
IPS_LogMessage("ownCloud-Modul", "UserEvent: ".$Befehl." von ".$Titel);
ob_start();
eval($Befehl);
ob_get_clean();
}
/*****************************************************************/
//
// Funktion wird zum Zeitpunkt der Erinnerung ausgelöst.
// Email Versand erfolgt unabhängig davon.
//
/*****************************************************************/
function ReminderEvent($Titel)
{
IPS_LogMessage("ownCloud-Modul", "ReminderEvent: ".$Titel);
}
?>');
// 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\towncloud Script V 1.18"
."\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\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\n //Fügen Sie hier Ihren Skriptquellcode ein\n\n?>\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;
}
?>