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