From 3cfc63f34b45b95cd0c6fb9f38b0eceea490c08d Mon Sep 17 00:00:00 2001 From: ma0068 Date: Fri, 1 Mar 2024 14:28:47 +0100 Subject: [PATCH] neuer Endpunkt fuer File Zeitsperren und -verfuegbarkeiten --- cis/public/ical_zeitsperren.php | 127 ++++++++++++++++++++++++++++++ config/cis.config-default.inc.php | 3 + include/zeitsperre.class.php | 70 ++++++++++++++++ 3 files changed, 200 insertions(+) create mode 100644 cis/public/ical_zeitsperren.php diff --git a/cis/public/ical_zeitsperren.php b/cis/public/ical_zeitsperren.php new file mode 100644 index 000000000..e40e82828 --- /dev/null +++ b/cis/public/ical_zeitsperren.php @@ -0,0 +1,127 @@ + + * Manuela Thamer + */ +/** + * Dieses Script liefert Zeitverfügbarkeiten und -sperren des übergebenen Parameters (uid oder OE) + * + * Aufruf: http://www.example.com/cis/public/ical_zeitsperren.php/[uid_or_oe_kurzbz] + */ +require_once('../../config/cis.config.inc.php'); +require_once('../../include/benutzer.class.php'); +require_once('../../include/zeitsperre.class.php'); +require_once('../../include/datum.class.php'); +require_once('../../include/benutzerberechtigung.class.php'); +require_once('../../include/benutzerfunktion.class.php'); + +$user = get_uid(); + +$params = mb_substr($_SERVER['PATH_INFO'],1); +$paramsArray = explode('/',$params); +$private = false; + +if ($paramsArray[0] == 'cipher_encryption') +{ + $uid = decryptData($paramsArray[1],ZEITSPERREN_CYPHER_KEY); + $private = true; +} +else +{ + $uid = $paramsArray[0]; +} + +$bn = new benutzer(); +if(!$bn->load($uid)) +{ + //check if valid Oe + $bf = new benutzerfunktion(); + if($bf->getOeFunktionen($uid, 'oezuordnung')) + { + $uidArr = array(); + + foreach($bf->result as $uid) + { + $uidArr[] = $uid->uid; + } + + if($uidArr == null) + die('User or oe_kurzbz not found'); + else + $uid = $uidArr; + } + else + die('User or oe_kurzbz invalid'); + +} + +$private = $user == $uid ? true : false; + +header("Content-Type: text/calendar; charset=UTF-8"); +header("Content-disposition: filename=".$uid."_Zeitsperren_Verfuegbarkeiten.ics"); + +echo "BEGIN:VCALENDAR\n"; +echo "VERSION:2.0\n"; +echo "PRODID:-//FH TECHNIKUM WIEN//EN\n"; +echo 'DTSTART;TZID=Europe/Vienna:',date('Ymd', mktime(0,0,0,date('m'),date('d')-5,date('Y'))),"T000000\n"; +echo 'DTEND;TZID=Europe/Vienna:',date('Ymd', mktime(0,0,0,date('m'),date('d')+30,date('Y'))),"T000000\n"; +echo "BEGIN:VTIMEZONE +TZID:Europe/Vienna +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +DTSTART:19810329T020000 +TZNAME:GMT+02:00 +TZOFFSETTO:+0200 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +DTSTART:19961027T030000 +TZNAME:GMT+01:00 +TZOFFSETTO:+0100 +END:STANDARD +END:VTIMEZONE\n"; + +//echo 'URL:',APP_ROOT,'cis/public/ical_zeitsperren.php/',$uid,"\n"; + +//Zeitsperren des Users (der User) laden +$zeitsperre = new zeitsperre(); +$zeitsperre->getZeitsperrenForIcal($uid); + +foreach ($zeitsperre->result as $z) +{ + $typ = $z->zeitsperretyp_kurzbz; + $name = trim($z->vorname . " " . $z->nachname); + $titel = $typ == 'ZVerfueg' ? "VERFUEGBAR" : "ZEITSPERRE"; + $bezeichnung = $private ? ($typ . " " . $z->bezeichnung) : $name; + $dateVon = new DateTime($z->von); + $dtstart = $dateVon->format('Ymd\THis'); + $dateBis = new DateTime($z->bis); + $dtend = $dateBis->format('Ymd\THis'); + + echo "BEGIN:VEVENT\r\n" + ."SUMMARY: ". $titel."\r\n" + ."DESCRIPTION: ". $bezeichnung."\r\n" + ."DTSTART;TZID=Europe/Vienna:".$dtstart."\r\n" + ."DTEND;TZID=Europe/Vienna:".$dtend."\r\n" + ."TRANSP:OPAQUE\r\n" + ."END:VEVENT\r\n"; +} +echo "END:VCALENDAR\r\n"; +?> \ No newline at end of file diff --git a/config/cis.config-default.inc.php b/config/cis.config-default.inc.php index b61ce9869..bc741ceb9 100644 --- a/config/cis.config-default.inc.php +++ b/config/cis.config-default.inc.php @@ -155,6 +155,9 @@ define('LVPLAN_KATEGORIE', 'StundenplanTW'); // Key zum Verschluesseln des LV-Plan Google Links define('LVPLAN_CYPHER_KEY',pack('H*', 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')); +// Key zum Verschluesseln Zeitsperren/Zeitverfügbarkeiten +define('ZEITSPERREN_CYPHER_KEY',pack('H*', 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')); + // Gibt an ob Termine aus dem Vorsemester nach der Semesterhaelfte des Folgesemesters // noch im pers. LVPan aufscheinen. // true | false diff --git a/include/zeitsperre.class.php b/include/zeitsperre.class.php index efae1c91d..66ced82d8 100644 --- a/include/zeitsperre.class.php +++ b/include/zeitsperre.class.php @@ -633,5 +633,75 @@ class zeitsperre extends basis_db return true; } + /** + * Laedt alle Zeitsperren eines Benutzers (bzw. einer OE) für Ical Export + * @param $uid bzw Array($uids) + * @param $bisgrenze wenn true werden nur die Zeitsperren des + * aktuellen Geschaeftsjahres geholt (1.9.-31.8.) + * @return true wenn ok, false im Fehlerfall + */ + public function getZeitsperrenForIcal($uid, $bisgrenze=true) + { + if(!is_array($uid)) + $uid = [$uid]; + + $qry = "SELECT + zeitsperretyp_kurzbz, + bezeichnung, + mitarbeiter_uid, + CONCAT(vondatum, ' ', std1.beginn) AS von, + CONCAT(bisdatum, ' ', std2.ende) AS bis, + vondatum, vonstunde, bisdatum, bisstunde, + p.vorname, p.nachname + FROM campus.tbl_zeitsperre zs + JOIN campus.tbl_zeitsperretyp USING (zeitsperretyp_kurzbz) + JOIN public.tbl_benutzer bn ON (bn.uid = zs.mitarbeiter_uid) + JOIN public.tbl_person p ON (bn.person_id = p.person_id) + LEFT JOIN lehre.tbl_stunde std1 ON (std1.stunde = zs.vonstunde) + LEFT JOIN lehre.tbl_stunde std2 ON (std2.stunde = zs.bisstunde) + WHERE mitarbeiter_uid in (". $this->db_implode4SQL($uid) . ")"; + + if($bisgrenze) + { + $qry.=" AND ( + (date_part('month',vondatum)>=9 AND date_part('year', vondatum)>='".(date('Y')-1)."') + OR + (date_part('month',vondatum)<9 AND date_part('year', vondatum)>='".(date('Y'))."') + )"; + } + + $qry.= " ORDER BY vondatum DESC"; + + var_dump($qry); + + if($this->db_query($qry)) + { + while($row = $this->db_fetch_object()) + { + $obj = new zeitsperre(); + + $obj->mitarbeiter_uid = $row->mitarbeiter_uid; + $obj->zeitsperretyp_kurzbz = $row->zeitsperretyp_kurzbz; + $obj->bezeichnung = $row->bezeichnung; + $obj->vondatum = $row->vondatum; + $obj->vonstunde = $row->vonstunde; + $obj->bisdatum = $row->bisdatum; + $obj->bisstunde = $row->bisstunde; + $obj->von = $row->von; + $obj->bis = $row->bis; + $obj->vorname = $row->vorname; + $obj->nachname = $row->nachname; + + $this->result[] = $obj; + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Zeitsperren für ical'; + return false; + } + } + } ?>