From 301c836255b7044dae7fb392cc61f651d3171b79 Mon Sep 17 00:00:00 2001 From: OliiverHacker Date: Wed, 19 May 2021 11:48:29 +0200 Subject: [PATCH 01/48] add spalte homeoffice to zeitaufzeichnung --- system/dbupdate_3.3.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index 62beadbce..0e0d4c9cb 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -4700,6 +4700,19 @@ if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berecht } } +// ADD COLUMN homeoffice in campus.tbl_zeitaufzeichnung +if(!$result = @$db->db_query("SELECT homeoffice FROM campus.tbl_zeitaufzeichnung 1")) +{ + $qry = " + ALTER TABLE campus.tbl_zeitaufzeichnung ADD COLUMN homeoffice boolean NOT NULL DEFAULT false ; + "; + + if(!$db->db_query($qry)) + echo 'campus.tbl_zeitaufzeichnung: '.$db->db_last_error().'
'; + else + echo '
campus.tbl_zeitaufzeichnung Spalte homeoffice hinzugefügt.'; +} + // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

Pruefe Tabellen und Attribute!

'; From db1f0f5316c6611d55c77115cbb649c789401c0f Mon Sep 17 00:00:00 2001 From: OliiverHacker Date: Wed, 19 May 2021 11:57:27 +0200 Subject: [PATCH 02/48] add homeoffice checkbox --- cis/private/tools/zeitaufzeichnung.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index d009a3a10..59e6561b1 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -1444,6 +1444,17 @@ if($projekt->getProjekteMitarbeiter($user, true)) '; + //Homeoffice Checkbox + echo ' + +   + + + Homeoffice + + + + '; //Beschreibung echo ''.$p->t("global/beschreibung").''; echo ''; From 9180328ab57888be6b37b95b785fcec4ab14f918 Mon Sep 17 00:00:00 2001 From: OliiverHacker Date: Wed, 19 May 2021 13:59:44 +0200 Subject: [PATCH 03/48] save zeitaufzeichnung with homeoffice --- cis/private/tools/zeitaufzeichnung.php | 7 +++++-- include/zeitaufzeichnung.class.php | 10 +++++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index 59e6561b1..4dd1db6bb 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -131,6 +131,7 @@ $bis_datum = (isset($_REQUEST['bis_datum'])?$_REQUEST['bis_datum']:date('d.m.Y') $bis_uhrzeit = (isset($_POST['bis_uhrzeit'])?$_POST['bis_uhrzeit']:date('H:i',mktime(date('H'), date('i')+10))); $bis = $bis_datum.' '.$bis_uhrzeit; +$homeoffice = (isset($_POST['homeoffice'])?true:false); $pause_von = (isset($_POST['pause_von'])?$_POST['pause_von']:date('H:i')); $pause_bis = (isset($_POST['pause_bis'])?$_POST['pause_bis']:date('H:i')); $von_pause = $von_datum.' '.$pause_von; @@ -908,6 +909,7 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) $zeit->updatevon = $user; $zeit->projekt_kurzbz = $projekt_kurzbz; $zeit->projektphase_id = $projektphase_id; + $zeit->homeoffice = $homeoffice; $zeit->service_id = $service_id; $zeit->kunde_uid = $kunde_uid; $saveerror = 0; @@ -1072,6 +1074,7 @@ if(isset($_GET['type']) && $_GET['type']=='edit') $oe_kurzbz_2 = $zeit->oe_kurzbz_2; $projekt_kurzbz = $zeit->projekt_kurzbz; $projektphase_id = $zeit->projektphase_id; + $homeoffice = $zeit->homeoffice; $service_id = $zeit->service_id; $kunde_uid = $zeit->kunde_uid; @@ -1449,8 +1452,8 @@ if($projekt->getProjekteMitarbeiter($user, true))   - - Homeoffice + + Homeoffice diff --git a/include/zeitaufzeichnung.class.php b/include/zeitaufzeichnung.class.php index 89dc84178..48e189c32 100644 --- a/include/zeitaufzeichnung.class.php +++ b/include/zeitaufzeichnung.class.php @@ -49,6 +49,7 @@ class zeitaufzeichnung extends basis_db public $ext_id; // bigint public $service_id; // integer public $kunde_uid; // varchar(32) + public $homeoffice; // bool /** * Konstruktor @@ -104,6 +105,7 @@ class zeitaufzeichnung extends basis_db $this->ext_id = $row->ext_id; $this->service_id = $row->service_id; $this->kunde_uid = $row->kunde_uid; + $this->homeoffice = $row->homeoffice; } else { @@ -203,7 +205,7 @@ class zeitaufzeichnung extends basis_db { //Neuen Datensatz einfuegen $qry='BEGIN;INSERT INTO campus.tbl_zeitaufzeichnung (uid, aktivitaet_kurzbz, start, ende, beschreibung, - oe_kurzbz_1, oe_kurzbz_2, insertamum, insertvon, updateamum, updatevon, projekt_kurzbz, projektphase_id, service_id, kunde_uid) VALUES('. + oe_kurzbz_1, oe_kurzbz_2, insertamum, insertvon, updateamum, updatevon, projekt_kurzbz, projektphase_id, service_id, homeoffice, kunde_uid) VALUES('. $this->db_add_param($this->uid).', '. $this->db_add_param($this->aktivitaet_kurzbz).', '. $this->db_add_param($this->start).', '. @@ -218,6 +220,7 @@ class zeitaufzeichnung extends basis_db $this->db_add_param($this->projekt_kurzbz).', '. $this->db_add_param($this->projektphase_id, FHC_INTEGER).', '. $this->db_add_param($this->service_id).', '. + $this->db_add_param($this->homeoffice, FHC_BOOLEAN).', '. $this->db_add_param($this->kunde_uid).');'; } else @@ -244,6 +247,7 @@ class zeitaufzeichnung extends basis_db ' projekt_kurzbz='.$this->db_add_param($this->projekt_kurzbz).', '. ' projektphase_id='.$this->db_add_param($this->projektphase_id, FHC_INTEGER).', '. ' service_id='.$this->db_add_param($this->service_id).', '. + ' homeoffice ='.$this->db_add_param($this->homeoffice, FHC_BOOLEAN).', '. ' kunde_uid='.$this->db_add_param($this->kunde_uid).' '. 'WHERE zeitaufzeichnung_id='.$this->db_add_param($this->zeitaufzeichnung_id, FHC_INTEGER, false); } @@ -349,6 +353,7 @@ class zeitaufzeichnung extends basis_db $obj->updatevon = $row->updatevon; $obj->projekt_kurzbz = $row->projekt_kurzbz; $obj->projektphase_id = $row->projektphase_id; + $obj->homeoffice = $row->homeoffice; $obj->ext_id = $row->ext_id; $obj->service_id = $row->service_id; $obj->kunde_uid = $row->kunde_uid; @@ -430,6 +435,7 @@ class zeitaufzeichnung extends basis_db $obj->updatevon = $row->updatevon; $obj->projekt_kurzbz = $row->projekt_kurzbz; $obj->projektphase_id = $row->projektphase_id; + $obj->homeoffice = $row->homeoffice; $obj->ext_id = $row->ext_id; $obj->service_id = $row->service_id; $obj->kunde_uid = $row->kunde_uid; @@ -491,6 +497,7 @@ class zeitaufzeichnung extends basis_db $obj->updatevon = $row->updatevon; $obj->projekt_kurzbz = $row->projekt_kurzbz; $obj->projektphase_id = $row->projektphase_id; + $obj->homeoffice = $row->homeoffice; $obj->ext_id = $row->ext_id; $obj->service_id = $row->service_id; $obj->kunde_uid = $row->kunde_uid; @@ -556,6 +563,7 @@ class zeitaufzeichnung extends basis_db $obj->updatevon = $row->updatevon; $obj->projekt_kurzbz = $row->projekt_kurzbz; $obj->projektphase_id = $row->projektphase_id; + $obj->homeoffice = $row->homeoffice; $obj->ext_id = $row->ext_id; $obj->service_id = $row->service_id; $obj->kunde_uid = $row->kunde_uid; From 12a52ee79f69798beec3ef45aaf30a947ea88b53 Mon Sep 17 00:00:00 2001 From: OliiverHacker Date: Wed, 19 May 2021 14:12:25 +0200 Subject: [PATCH 04/48] csv import --- cis/private/tools/zeitaufzeichnung.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index 4dd1db6bb..e73c42ae4 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -807,6 +807,21 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) $zeit->projektphase_id = $data[7]; if (isset($data[8])) $zeit->service_id = $data[8]; + if (isset($data[9])) + { + if(strtolower($data[9]=='true')) + { + $zeit->homeoffice = true; + } + else + { + $zeit->homeoffice = false; + } + } + else + { + $zeit->homeoffice = false; + } $tag = $datum->formatDatum($data[2], $format='Y-m-d'); if(!in_array($tag, $importtage_array)) From c8309df1712cc97fcd6aba90bdaceb5d73684ccc Mon Sep 17 00:00:00 2001 From: OliiverHacker Date: Wed, 19 May 2021 14:45:33 +0200 Subject: [PATCH 05/48] display homeoffice --- cis/private/tools/zeitaufzeichnung.php | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index e73c42ae4..0ced6f466 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -1534,7 +1534,7 @@ if($projekt->getProjekteMitarbeiter($user, true)) echo ''; else echo ''; - //echo ''; + //echo ''; $za = new zeitaufzeichnung(); if(isset($_GET['filter'])) @@ -1650,6 +1650,7 @@ if($projekt->getProjekteMitarbeiter($user, true)) elseif ($tagessaldo > 18000 && $tagessaldo < 19800 && $pausesumme < $tagessaldo - 18000) $pausefehlt_str = '-- Pause fehlt oder zu kurz --'; + $tagessaldo = date('H:i', ($tagessaldo)); $colspan = ($za_simple)?6:8; echo ''; @@ -1799,6 +1800,11 @@ if($projekt->getProjekteMitarbeiter($user, true)) $style = 'style="border-top: 3px solid #8DBDD8; border-bottom: 3px solid #8DBDD8"'; if ($row->aktivitaet_kurzbz=='Pause' || $row->aktivitaet_kurzbz=='LehreExtern'|| $row->aktivitaet_kurzbz=='Ersatzruhe') $style .= ' style="color: grey;"'; + if($db->convert_html_chars($row->homeoffice)=='t') + { + $homeoffice = " - Homeoffice"; + }else + $homeoffice=""; $summe = $row->summe; $service = new service(); $service->load($row->service_id); @@ -1814,7 +1820,7 @@ if($projekt->getProjekteMitarbeiter($user, true)) { echo ' '.$db->convert_html_chars($row->oe_kurzbz_2).''; } - echo ''.$db->convert_html_chars($row->aktivitaet_kurzbz).''; + echo ''.$db->convert_html_chars($row->aktivitaet_kurzbz).($homeoffice).''; if(!$za_simple) { echo ' '.StringCut($db->convert_html_chars($service->bezeichnung),20,null,'...').' '; From 1249689813ac07e409404468ebd4acd7fd044598 Mon Sep 17 00:00:00 2001 From: OliiverHacker Date: Wed, 19 May 2021 19:59:48 +0200 Subject: [PATCH 06/48] =?UTF-8?q?Speichern=20bei=20automatischen=20Pausen?= =?UTF-8?q?=20m=C3=B6glich?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cis/private/tools/zeitaufzeichnung.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index 0ced6f466..0dc621182 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -845,6 +845,7 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) $pause->start = $ende_vorher; $pause->ende = $zeit->start; $pause->beschreibung = ''; + $pause->homeoffice = $homeoffice; if(!$pause->save()) { echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$pause->errormsg.'
'; @@ -985,6 +986,7 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) $pause->insertvon = $user; $pause->uid = $user; $pause->aktivitaet_kurzbz = 'Pause'; + $pause->homeoffice = $homeoffice; $pause->start = $datum->formatDatum($von_pause, $format='Y-m-d H:i:s'); $pause->ende = $datum->formatDatum($bis_pause, $format='Y-m-d H:i:s'); $pause->beschreibung = ''; From 531174dcb593f0e3c94eb37f0627ba92bffa4af7 Mon Sep 17 00:00:00 2001 From: manu Date: Fri, 11 Jun 2021 09:17:26 +0200 Subject: [PATCH 07/48] #13533 Button Homeoffice: Haken beim Editieren --- cis/private/tools/zeitaufzeichnung.php | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index 0dc621182..9aa978f8b 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -136,6 +136,7 @@ $pause_von = (isset($_POST['pause_von'])?$_POST['pause_von']:date('H:i')); $pause_bis = (isset($_POST['pause_bis'])?$_POST['pause_bis']:date('H:i')); $von_pause = $von_datum.' '.$pause_von; $bis_pause = $bis_datum.' '.$pause_bis; +$homeofficeChecked = ''; $beschreibung = (isset($_POST['beschreibung'])?$_POST['beschreibung']:''); $service_id = (isset($_POST['service_id'])?$_POST['service_id']:''); @@ -517,7 +518,7 @@ echo ' } return true; } - + function resetProjekt() { $("#projekt").val(""); @@ -809,7 +810,7 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) $zeit->service_id = $data[8]; if (isset($data[9])) { - if(strtolower($data[9]=='true')) + if (strtolower($data[9] == 'true')) { $zeit->homeoffice = true; } @@ -1074,13 +1075,13 @@ else echo ' '; //Laden der Daten zum aendern -if(isset($_GET['type']) && $_GET['type']=='edit') +if (isset($_GET['type']) && $_GET['type']=='edit') { $zeit = new zeitaufzeichnung(); - if($zeit->load($zeitaufzeichnung_id)) + if ($zeit->load($zeitaufzeichnung_id)) { - if($zeit->uid==$user) + if ($zeit->uid == $user) { $uid = $zeit->uid; $aktivitaet_kurzbz = $zeit->aktivitaet_kurzbz; @@ -1092,9 +1093,11 @@ if(isset($_GET['type']) && $_GET['type']=='edit') $projekt_kurzbz = $zeit->projekt_kurzbz; $projektphase_id = $zeit->projektphase_id; $homeoffice = $zeit->homeoffice; + $homeoffice[0] == 't' ? $homeofficeChecked = 'checked' : $homeofficeChecked = ''; $service_id = $zeit->service_id; $kunde_uid = $zeit->kunde_uid; + $projektphase = new projektphase(); $projektphasen = array(); @@ -1470,7 +1473,7 @@ if($projekt->getProjekteMitarbeiter($user, true))   - Homeoffice + Homeoffice From aa94110791964d4c0b1950f68aa9c5b1e47133a4 Mon Sep 17 00:00:00 2001 From: manu Date: Wed, 16 Jun 2021 13:34:31 +0200 Subject: [PATCH 08/48] 13623 Anzeige Projekt und Phasen in Editiersicht --- cis/private/tools/zeitaufzeichnung.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index 9aa978f8b..277364a33 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -223,7 +223,7 @@ echo ' @@ -1503,6 +1535,8 @@ if ($projekt->getProjekteMitarbeiter($user, true)) $von_ts = $datum->mktime_fromtimestamp($datum->formatDatum($von, $format='Y-m-d H:i:s')); $bis_ts = $datum->mktime_fromtimestamp($datum->formatDatum($bis, $format='Y-m-d H:i:s')); $diff = $bis_ts - $von_ts; + + //outputTest Manu echo ' '.$p->t("global/von").' - '.$p->t("global/bis").' @@ -1548,8 +1582,26 @@ if ($projekt->getProjekteMitarbeiter($user, true)) //Homeoffice Checkbox $verwendung = new bisverwendung(); - $verwendung->getLastAktVerwendung($user); - $bvId = $verwendung->bisverwendung_id; + + //Ok: passt + //$verwendung->getLastAktVerwendung($user); + + //geht nicht...liefert keine bisverwendung_id, Format? + //sql-statement mit '2021-08-20' funktioniert einwandfrei.. + echo $vonForm = $datum->formatDatum($von, $format='Y-m-d'); + //echo $vonForm = '2021-08-20'; + echo $user; + // echo $von_ts; + $verwendung->getVerwendungDatum($user, $vonForm); + + //gleiches Problem: liefert keine bisverwendung_id + // $now = new DateTime('today'); + // var_dump($now); + // echo $now->format('Y-m-d'); + // $verwendung->getVerwendungDatum($user, $now->format('Y-m-d')); + + echo $bvId = $verwendung->bisverwendung_id; + if ($verwendung->homeoffice) { @@ -1566,6 +1618,7 @@ if ($projekt->getProjekteMitarbeiter($user, true)) bisId: ' . $bvId . ' + '; } @@ -1573,8 +1626,12 @@ if ($projekt->getProjekteMitarbeiter($user, true)) { echo "

Homeoffice nicht erlaubt

"; echo "BisId: $bvId "; + // echo "Datum: $vonForm "; } + echo ' + Manu + '; //Beschreibung diff --git a/cis/private/tools/zeitaufzeichnung_bisverwendung.php b/cis/private/tools/zeitaufzeichnung_bisverwendung.php new file mode 100644 index 000000000..93aa814c0 --- /dev/null +++ b/cis/private/tools/zeitaufzeichnung_bisverwendung.php @@ -0,0 +1,72 @@ + + */ +/** + * Checks, if there is the possibility for homeoffice for the given bisverwendung of + * a certain date. + */ + + +require_once('../../../config/cis.config.inc.php'); +require_once('../../../include/globals.inc.php'); +require_once('../../../include/phrasen.class.php'); +require_once('../../../include/datum.class.php'); +require_once('../../../include/Excel/excel.php'); +require_once('../../../include/benutzer.class.php'); +require_once('../../../include/benutzerberechtigung.class.php'); +require_once('../../../include/mitarbeiter.class.php'); +require_once('../../../include/zeitaufzeichnung.class.php'); +require_once('../../../include/projekt.class.php'); +require_once('../../../include/bisverwendung.class.php'); + + +// if (isset($_GET['day'])) +// { +// $day = $_GET['day']; +// echo " es ist ein schöner Tag: " . $day; +// echo "
bisid: "; +// +// +// } + +// if (isset($_GET['uid'])){ +// $uid = $_GET['uid']; +// $verwendung = new bisverwendung(); +// $verwendung->getLastAktVerwendung($uid); +// echo $bvId = $verwendung->bisverwendung_id; +// } + +if ((isset($_GET['uid'])) && (isset($_GET['day']))) { + + $uid = $_GET['uid']; + //$day = $_GET['day']; + + //$day = '2021-08-15'; + $day = "2021-08-15"; + + + $verwendung = new bisverwendung(); + $verwendung->getLastAktVerwendung($uid); //haut hin + //$verwendung->getVerwendungDatum($uid, $day); //hier kommt nix + //$verwendung ->getVerwendungDatumMonat($uid, $day); + // + echo $bvId = $verwendung->bisverwendung_id; + echo "check " . $uid . " on day " . $day; + +} From 437feb2fddffdd1bd1c6eb6658258f2d52ca857a Mon Sep 17 00:00:00 2001 From: ma0068 Date: Tue, 24 Aug 2021 18:01:15 +0200 Subject: [PATCH 19/48] =?UTF-8?q?dynamische=20Anzeige=20checkbox=20homeoff?= =?UTF-8?q?ice=20auch=20bei=20=C3=84ndern?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cis/private/tools/zeitaufzeichnung.php | 113 ++++++++++-------- .../tools/zeitaufzeichnung_bisverwendung.php | 41 +++---- 2 files changed, 74 insertions(+), 80 deletions(-) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index a06b3fcca..141602e01 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -284,18 +284,19 @@ echo ' } ) - $("#von_datum").change( - function() - { - var uid = $("#uidpass").val(); - var Datum = $(this).val(); - Tag=Datum.substring(0,2); - Monat=Datum.substring(3,5); - Jahr=Datum.substring(6,10); - var day = Jahr + "-" + Monat + "-" + Tag; - checkBisverwendung(day,uid); + useCheckedDate(); - } + $("#von_datum").change( + function() + { + var uid = $("#uidpass").val(); + var Datum = $(this).val(); + Tag=Datum.substring(0,2); + Monat=Datum.substring(3,5); + Jahr=Datum.substring(6,10); + var day = Jahr + "-" + Monat + "-" + Tag; + checkBisverwendung(day,uid); + } ) function isVisible() @@ -734,6 +735,16 @@ echo ' $("#pause_bis").val(""); } + function useCheckedDate(){ + var uid = $("#uidpass").val(); + var Datum = $("#von_datum").val(); + Tag=Datum.substring(0,2); + Monat=Datum.substring(3,5); + Jahr=Datum.substring(6,10); + var checkedDay = Jahr + "-" + Monat + "-" + Tag; + checkBisverwendung(checkedDay, uid); + } + function checkBisverwendung(day, uid) { $.ajax({ @@ -742,12 +753,21 @@ echo ' day: day, uid: uid }, - success: function (daten) { - $("#outputTest").html(daten); + success: function (json) + { + if (json.length > 3) + { + $("#outputTest").html(json); + $("#homeofficeBlock").show(); + } + else + { + $("#outputTest").html(json); + $("#homeofficeBlock").hide(); + + } } }); - - } @@ -1536,7 +1556,6 @@ if ($projekt->getProjekteMitarbeiter($user, true)) $bis_ts = $datum->mktime_fromtimestamp($datum->formatDatum($bis, $format='Y-m-d H:i:s')); $diff = $bis_ts - $von_ts; - //outputTest Manu echo ' '.$p->t("global/von").' - '.$p->t("global/bis").' @@ -1580,32 +1599,28 @@ if ($projekt->getProjekteMitarbeiter($user, true)) '; - //Homeoffice Checkbox - $verwendung = new bisverwendung(); + //Homeoffice Checkbox manu + //$homeofficeErlaubt = false; - //Ok: passt - //$verwendung->getLastAktVerwendung($user); - - //geht nicht...liefert keine bisverwendung_id, Format? - //sql-statement mit '2021-08-20' funktioniert einwandfrei.. - echo $vonForm = $datum->formatDatum($von, $format='Y-m-d'); - //echo $vonForm = '2021-08-20'; - echo $user; - // echo $von_ts; - $verwendung->getVerwendungDatum($user, $vonForm); - - //gleiches Problem: liefert keine bisverwendung_id - // $now = new DateTime('today'); - // var_dump($now); - // echo $now->format('Y-m-d'); + // $verwendung = new bisverwendung(); + // + // // $now = document.getElementById("von_datum"); + // // echo $now; + // //$now = new DateTime('today'); + // $now = new DateTime('checkedDay'); // $verwendung->getVerwendungDatum($user, $now->format('Y-m-d')); - - echo $bvId = $verwendung->bisverwendung_id; - - - if ($verwendung->homeoffice) - { - $bvHo = "erlaubt"; + // $verwendungArr = array(); + // + // foreach ($verwendung->result as $v) + // if ($v->homeoffice) + // if (!in_array($v->bisverwendung_id, $verwendungArr)) + // { + // $homeofficeErlaubt = true; + // $verwendungArr[] = $v->bisverwendung_id; + // } + // + // if ($homeofficeErlaubt) + // { echo '   @@ -1614,24 +1629,16 @@ if ($projekt->getProjekteMitarbeiter($user, true)) Homeoffice
- Homeoffice: ' . $bvHo . ' - bisId: ' . $bvId . ' - '; - } +// } - else - { - echo "

Homeoffice nicht erlaubt

"; - echo "BisId: $bvId "; - // echo "Datum: $vonForm "; - } - echo ' - Manu - '; + // echo ' + // Testausgaben + // bisId: ' . $verwendungArr[0] . ' + // '; //Beschreibung diff --git a/cis/private/tools/zeitaufzeichnung_bisverwendung.php b/cis/private/tools/zeitaufzeichnung_bisverwendung.php index 93aa814c0..210d63005 100644 --- a/cis/private/tools/zeitaufzeichnung_bisverwendung.php +++ b/cis/private/tools/zeitaufzeichnung_bisverwendung.php @@ -36,37 +36,24 @@ require_once('../../../include/projekt.class.php'); require_once('../../../include/bisverwendung.class.php'); -// if (isset($_GET['day'])) -// { -// $day = $_GET['day']; -// echo " es ist ein schöner Tag: " . $day; -// echo "
bisid: "; -// -// -// } - -// if (isset($_GET['uid'])){ -// $uid = $_GET['uid']; -// $verwendung = new bisverwendung(); -// $verwendung->getLastAktVerwendung($uid); -// echo $bvId = $verwendung->bisverwendung_id; -// } - if ((isset($_GET['uid'])) && (isset($_GET['day']))) { $uid = $_GET['uid']; - //$day = $_GET['day']; - - //$day = '2021-08-15'; - $day = "2021-08-15"; - + $day = $_GET['day']; $verwendung = new bisverwendung(); - $verwendung->getLastAktVerwendung($uid); //haut hin - //$verwendung->getVerwendungDatum($uid, $day); //hier kommt nix - //$verwendung ->getVerwendungDatumMonat($uid, $day); - // - echo $bvId = $verwendung->bisverwendung_id; - echo "check " . $uid . " on day " . $day; + + $verwendung->getVerwendungDatum($uid, $day); + $verwendungArr = array(); + + foreach ($verwendung->result as $v) + if ($v->homeoffice) + if (!in_array($v->bisverwendung_id, $verwendungArr)) + { + $bvId = $v->bisverwendung_id; + $verwendungArr[] = $v->bisverwendung_id; + } + +echo json_encode($verwendungArr); } From a36909763f18cf362e582bf63c8412b587bdb57f Mon Sep 17 00:00:00 2001 From: ma0068 Date: Mon, 30 Aug 2021 14:28:30 +0200 Subject: [PATCH 20/48] Delete comments --- cis/private/tools/zeitaufzeichnung.php | 33 +------------------------- 1 file changed, 1 insertion(+), 32 deletions(-) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index 141602e01..a5084e082 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -757,12 +757,10 @@ echo ' { if (json.length > 3) { - $("#outputTest").html(json); $("#homeofficeBlock").show(); } else { - $("#outputTest").html(json); $("#homeofficeBlock").hide(); } @@ -1599,28 +1597,7 @@ if ($projekt->getProjekteMitarbeiter($user, true)) '; - //Homeoffice Checkbox manu - //$homeofficeErlaubt = false; - - // $verwendung = new bisverwendung(); - // - // // $now = document.getElementById("von_datum"); - // // echo $now; - // //$now = new DateTime('today'); - // $now = new DateTime('checkedDay'); - // $verwendung->getVerwendungDatum($user, $now->format('Y-m-d')); - // $verwendungArr = array(); - // - // foreach ($verwendung->result as $v) - // if ($v->homeoffice) - // if (!in_array($v->bisverwendung_id, $verwendungArr)) - // { - // $homeofficeErlaubt = true; - // $verwendungArr[] = $v->bisverwendung_id; - // } - // - // if ($homeofficeErlaubt) - // { + //Homeoffice Checkbox echo '   @@ -1632,14 +1609,6 @@ if ($projekt->getProjekteMitarbeiter($user, true)) '; -// } - - - // echo ' - // Testausgaben - // bisId: ' . $verwendungArr[0] . ' - // '; - //Beschreibung echo ''.$p->t("global/beschreibung").''; From 62cfa27473582d615bdeb7d17eb79220bc4ca6e9 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Thu, 2 Sep 2021 09:55:14 +0200 Subject: [PATCH 21/48] 14774 Zeiterfassung: Homeoffice im CSV Import --- cis/private/tools/zeitaufzeichnung.php | 30 ++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index a5084e082..cf3435059 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -90,7 +90,7 @@ $fieldheadings = array( 'oe1' => $p->t("zeitaufzeichnung/oe"), 'oe2' => $p->t("zeitaufzeichnung/oe").'2', 'aktivitaet' => $p->t("zeitaufzeichnung/aktivitaet"), 'service' => $p->t("zeitaufzeichnung/service"), 'start' => $p->t("zeitaufzeichnung/start"), 'ende' => $p->t("zeitaufzeichnung/ende"), 'dauer' => $p->t("zeitaufzeichnung/dauer"), 'kunde' => $p->t("zeitaufzeichnung/kunde"), 'beschreibung' => $p->t("global/beschreibung"), 'aktion' => $p->t("global/aktion"), - 'datum' => $p->t("global/datum") + 'datum' => $p->t("global/datum"),'homeoffice' => $p->t("zeitaufzeichnung/homeoffice") ); if ($rechte->isBerechtigt('basis/servicezeitaufzeichnung')) @@ -927,7 +927,25 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) { if (strtolower($data[9] == 'true')) { - $zeit->homeoffice = true; + // check, ob homeoffice gemäß Bisverwendung + $verwendung = new bisverwendung(); + $verwendung->getVerwendungDatum($data[0],$vonCSV); + + foreach ($verwendung->result as $v) + // echo "homeoffice für Tag " . $vonCSV . " ". $v->homeoffice . " " . $v->bisverwendung_id . "
"; + + if ($v->homeoffice) + { + + // echo "homeoffice erlaubt
"; + $zeit->homeoffice = true; + } + else + { + echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$p->t("zeitaufzeichnung/homeofficeNichtErlaubt", ($vonCSV)) .'
'; + + $zeit->homeoffice = false; + } } else { @@ -2091,8 +2109,8 @@ function getDataForCSV($rawdata, $fieldheadings, $za_simple = false) $datum = new datum(); $csvData = array(); //headers schreiben - $csvData[] = ($za_simple) ? array($fieldheadings['user'], $fieldheadings['datum'], $fieldheadings['start'], $fieldheadings['ende'], $fieldheadings['projekt'], $fieldheadings['ap'], $fieldheadings['oe1'], $fieldheadings['aktivitaet'], $fieldheadings['beschreibung']) - : array($fieldheadings['user'], $fieldheadings['datum'], $fieldheadings['start'], $fieldheadings['ende'], $fieldheadings['projekt'], $fieldheadings['ap'], $fieldheadings['oe1'], $fieldheadings['oe2'], $fieldheadings['aktivitaet'], $fieldheadings['service'], $fieldheadings['kunde'], $fieldheadings['beschreibung']); + $csvData[] = ($za_simple) ? array($fieldheadings['user'], $fieldheadings['datum'], $fieldheadings['start'], $fieldheadings['ende'], $fieldheadings['projekt'], $fieldheadings['ap'], $fieldheadings['oe1'], $fieldheadings['aktivitaet'], $fieldheadings['beschreibung'], $fieldheadings['homeoffice']) + : array($fieldheadings['user'], $fieldheadings['datum'], $fieldheadings['start'], $fieldheadings['ende'], $fieldheadings['projekt'], $fieldheadings['ap'], $fieldheadings['oe1'], $fieldheadings['oe2'], $fieldheadings['aktivitaet'], $fieldheadings['service'], $fieldheadings['kunde'], $fieldheadings['beschreibung'], $fieldheadings['homeoffice']); foreach ($rawdata as $zeitauf) { //Newline characters bei Beschreibung ersetzen @@ -2105,13 +2123,13 @@ function getDataForCSV($rawdata, $fieldheadings, $za_simple = false) if($za_simple) { $csvData[] = array($zeitauf->uid, $hauptdatum, $datum->formatDatum($zeitauf->start, 'H:i'), - $bisdatum, $zeitauf->projekt_kurzbz, $zeitauf->projektphase_id, $zeitauf->oe_kurzbz_1, $zeitauf->aktivitaet_kurzbz, $beschreibung); + $bisdatum, $zeitauf->projekt_kurzbz, $zeitauf->projektphase_id, $zeitauf->oe_kurzbz_1, $zeitauf->aktivitaet_kurzbz, $beschreibung, $zeitauf->homeoffice); } else { $servicebez = ($service->load($zeitauf->service_id))?$service->bezeichnung:""; $csvData[] = array($zeitauf->uid, $hauptdatum, $datum->formatDatum($zeitauf->start, 'H:i'), $bisdatum, - $zeitauf->projekt_kurzbz, $zeitauf->projektphase_id, $zeitauf->oe_kurzbz_1, $zeitauf->oe_kurzbz_2, $zeitauf->aktivitaet_kurzbz, $servicebez, $zeitauf->kunde_uid, $beschreibung); + $zeitauf->projekt_kurzbz, $zeitauf->projektphase_id, $zeitauf->oe_kurzbz_1, $zeitauf->oe_kurzbz_2, $zeitauf->aktivitaet_kurzbz, $servicebez, $zeitauf->kunde_uid, $beschreibung, $zeitauf->homeoffice); } } return $csvData; From f0c5c3acb46195de0b39bdb9b79f73a9a08fc456 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Thu, 2 Sep 2021 11:24:38 +0200 Subject: [PATCH 22/48] 14774 Zeiterfassung: Homeoffice im CSV Import --- include/bisverwendung.class.php | 109 +++++++++++++++++++++++++++--- locale/de-AT/zeitaufzeichnung.php | 2 + locale/en-US/zeitaufzeichnung.php | 2 + 3 files changed, 103 insertions(+), 10 deletions(-) diff --git a/include/bisverwendung.class.php b/include/bisverwendung.class.php index 861684c98..ca15d03de 100644 --- a/include/bisverwendung.class.php +++ b/include/bisverwendung.class.php @@ -47,6 +47,7 @@ class bisverwendung extends basis_db public $dv_art; public $inkludierte_lehre; public $zeitaufzeichnungspflichtig; + public $azgrelevant; public $homeoffice; public $ba1bez; @@ -123,6 +124,7 @@ class bisverwendung extends basis_db $this->dv_art = $row->dv_art; $this->inkludierte_lehre = $row->inkludierte_lehre; $this->zeitaufzeichnungspflichtig = $this->db_parse_bool($row->zeitaufzeichnungspflichtig); + $this->azgrelevant = $this->db_parse_bool($row->azgrelevant); $this->homeoffice = $this->db_parse_bool($row->homeoffice); return true; } @@ -179,6 +181,24 @@ class bisverwendung extends basis_db } } + + /** + * Prueft das Datum + * @param $date = string + * @return true wenn ok, sonst false + */ + static public function verifyDate($date, $strict = true) + { + $dateTime = DateTime::createFromFormat('Y-m-d', $date); + if ($strict) { + $errors = DateTime::getLastErrors(); + if (!empty($errors['warning_count'])) { + return false; + } + } + return $dateTime !== false; + } + /** * Prueft die Daten vor dem Speichern * @@ -191,6 +211,17 @@ class bisverwendung extends basis_db $this->errormsg = 'Vertragsstunden sind ungueltig'; return false; } + elseif(!$this->verifyDate($this->beginn) && !empty($this->beginn)) + { + $this->errormsg = 'Start Datum ist kein Valides Datum: '.$this->beginn; + return false; + } + elseif(!$this->verifyDate($this->ende) && !empty($this->ende)) + { + $this->errormsg = 'End Datum ist kein Valides Datum: '.$this->ende; + return false; + } + return true; } @@ -220,13 +251,29 @@ class bisverwendung extends basis_db { $zeitaufzeichnungspflichtig = 'null'; } + if(is_bool($this->azgrelevant)) + { + $azgrelevant = $this->db_add_param($this->azgrelevant, FHC_BOOLEAN); + } + else + { + $azgrelevant = 'null'; + } + if(is_bool($this->homeoffice)) + { + $homeoffice = $this->db_add_param($this->homeoffice, FHC_BOOLEAN); + } + else + { + $homeoffice = 'null'; + } if($new) { //Neuen Datensatz anlegen $qry = "BEGIN;INSERT INTO bis.tbl_bisverwendung (ba1code, ba2code, beschausmasscode, verwendung_code, mitarbeiter_uid, hauptberufcode, hauptberuflich, habilitation, beginn, ende, vertragsstunden, - updateamum, updatevon, insertamum, insertvon, dv_art, inkludierte_lehre, zeitaufzeichnungspflichtig) VALUES (". + updateamum, updatevon, insertamum, insertvon, dv_art, inkludierte_lehre, zeitaufzeichnungspflichtig, azgrelevant) VALUES (". $this->db_add_param($this->ba1code, FHC_INTEGER).', '. $this->db_add_param($this->ba2code, FHC_INTEGER).', '. $this->db_add_param($this->beschausmasscode, FHC_INTEGER).', '. @@ -244,7 +291,9 @@ class bisverwendung extends basis_db $this->db_add_param($this->insertvon).', '. $this->db_add_param($this->dv_art).','. $this->db_add_param($this->inkludierte_lehre).','. - $zeitaufzeichnungspflichtig. ');'; + $zeitaufzeichnungspflichtig.','. + $azgrelevant.','. + $homeoffice. ');'; } else @@ -268,7 +317,9 @@ class bisverwendung extends basis_db " insertvon=".$this->db_add_param($this->insertvon).",". " dv_art=".$this->db_add_param($this->dv_art).",". " inkludierte_lehre=".$this->db_add_param($this->inkludierte_lehre).",". - " zeitaufzeichnungspflichtig=". $zeitaufzeichnungspflichtig. + " zeitaufzeichnungspflichtig=". $zeitaufzeichnungspflichtig.",". + " azgrelevant =". $azgrelevant.",". + " homeoffice =". $homeoffice. " WHERE bisverwendung_id=".$this->db_add_param($this->bisverwendung_id, FHC_INTEGER); } @@ -361,8 +412,8 @@ class bisverwendung extends basis_db $obj->dv_art = $row->dv_art; $obj->inkludierte_lehre = $row->inkludierte_lehre; $obj->zeitaufzeichnungspflichtig = $this->db_parse_bool($row->zeitaufzeichnungspflichtig); + $obj->azgrelevant = $this->db_parse_bool($row->azgrelevant); $obj->homeoffice = $this->db_parse_bool($row->homeoffice); - $this->result[] = $obj; } return true; @@ -419,6 +470,7 @@ class bisverwendung extends basis_db $obj->dv_art = $row->dv_art; $obj->inkludierte_lehre = $row->inkludierte_lehre; $obj->zeitaufzeichnungspflichtig = $this->db_parse_bool($row->zeitaufzeichnungspflichtig); + $obj->azgrelevant = $this->db_parse_bool($row->azgrelevant); $obj->homeoffice = $this->db_parse_bool($row->homeoffice); $this->result[] = $obj; @@ -478,9 +530,9 @@ class bisverwendung extends basis_db $obj->dv_art = $row->dv_art; $obj->inkludierte_lehre = $row->inkludierte_lehre; $obj->zeitaufzeichnungspflichtig = $this->db_parse_bool($row->zeitaufzeichnungspflichtig); + $obj->azgrelevant = $this->db_parse_bool($row->azgrelevant); $obj->homeoffice = $this->db_parse_bool($row->homeoffice); - $this->result[] = $obj; } return true; @@ -499,14 +551,15 @@ class bisverwendung extends basis_db */ public function getLastVerwendung($uid) { - //laden des Datensatzes18.08.2021 + //laden des Datensatzes $qry = "SELECT - * + *, tbl_hauptberuf.bezeichnung as hauptberuf FROM bis.tbl_bisverwendung + LEFT JOIN bis.tbl_hauptberuf USING(hauptberufcode) WHERE mitarbeiter_uid=".$this->db_add_param($uid)." - ORDER BY ende DESC NULLS LAST,beginn DESC NULLS LAST LIMIT 1;"; + ORDER BY ende DESC NULLS FIRST,beginn DESC NULLS LAST LIMIT 1;"; if($this->db_query($qry)) { @@ -520,6 +573,7 @@ class bisverwendung extends basis_db $this->mitarbeiter_uid = $row->mitarbeiter_uid; $this->hauptberufcode = $row->hauptberufcode; $this->hauptberuflich = $this->db_parse_bool($row->hauptberuflich); + $this->hauptberuf = $row->hauptberuf; $this->habilitation = $this->db_parse_bool($row->habilitation); $this->beginn = $row->beginn; $this->ende = $row->ende; @@ -531,6 +585,8 @@ class bisverwendung extends basis_db $this->dv_art = $row->dv_art; $this->inkludierte_lehre = $row->inkludierte_lehre; $this->zeitaufzeichnungspflichtig = $this->db_parse_bool($row->zeitaufzeichnungspflichtig); + $this->azgrelevant = $this->db_parse_bool($row->azgrelevant); + $this->homeoffice = $this->db_parse_bool($row->homeoffice); } return true; } @@ -559,7 +615,7 @@ class bisverwendung extends basis_db (beginn<=now() OR beginn IS NULL) AND (ende>=now() OR ende IS NULL) - ORDER BY ende DESC NULLS LAST,beginn DESC NULLS LAST LIMIT 1;"; + ORDER BY ende DESC NULLS FIRST,beginn DESC NULLS LAST LIMIT 1;"; if($this->db_query($qry)) { @@ -583,8 +639,9 @@ class bisverwendung extends basis_db $this->vertragsstunden = $row->vertragsstunden; $this->dv_art = $row->dv_art; $this->inkludierte_lehre = $row->inkludierte_lehre; - $this->homeoffice = $this->db_parse_bool($row->homeoffice); $this->zeitaufzeichnungspflichtig = $this->db_parse_bool($row->zeitaufzeichnungspflichtig); + $this->azgrelevant = $this->db_parse_bool($row->azgrelevant); + $this->homeoffice = $this->db_parse_bool($row->homeoffice); } return true; } @@ -647,6 +704,8 @@ class bisverwendung extends basis_db $obj->dv_art = $row->dv_art; $obj->inkludierte_lehre = $row->inkludierte_lehre; $obj->zeitaufzeichnungspflichtig = $this->db_parse_bool($row->zeitaufzeichnungspflichtig); + $obj->azgrelevant = $this->db_parse_bool($row->azgrelevant); + $obj->homeoffice = $this->db_parse_bool($row->homeoffice); $this->result[] = $obj; } @@ -775,5 +834,35 @@ class bisverwendung extends basis_db return false; } } + + public function inZeitaufzeichnungspflichtigPeriod($PeriodStartDate, $PeriodEndDate) + { + $PeriodStartDateISO = date('Y-m-d', strtotime($PeriodStartDate)); + $PeriodEndDateISO = date('Y-m-d', strtotime($PeriodEndDate)); + + $beginn = date('Y-m-d', strtotime($this->beginn)); + $end = date('Y-m-d', strtotime($this->ende)); + $zp = $this->zeitaufzeichnungspflichtig; + + if ($zp) + { + if ( + (($PeriodStartDateISO >= $beginn) && (($PeriodStartDateISO <= $end) || is_null($this->ende))) + || + (($PeriodEndDateISO >= $beginn) && (($PeriodEndDateISO <= $end) || is_null($this->ende))) + ) + { + return true; + } + else + { + return false; + } + } + else + { + return false; + } + } } ?> diff --git a/locale/de-AT/zeitaufzeichnung.php b/locale/de-AT/zeitaufzeichnung.php index e0b7047da..ad9a4de0c 100644 --- a/locale/de-AT/zeitaufzeichnung.php +++ b/locale/de-AT/zeitaufzeichnung.php @@ -7,6 +7,7 @@ $this->phrasen['zeitaufzeichnung/projekt']='Projekt'; $this->phrasen['zeitaufzeichnung/projektphase']='Projektphase'; $this->phrasen['zeitaufzeichnung/keineAuswahl']='keine Auswahl'; $this->phrasen['zeitaufzeichnung/aktivitaet']='Aktivität'; +$this->phrasen['zeitaufzeichnung/homeoffice']='Homeoffice'; $this->phrasen['zeitaufzeichnung/id']='ID'; $this->phrasen['zeitaufzeichnung/user']='User'; $this->phrasen['zeitaufzeichnung/start']='Start'; @@ -63,3 +64,4 @@ $this->phrasen['zeitaufzeichnung/projektphase']='AP'; $this->phrasen['zeitaufzeichnung/pauseEinfuegen']='Pause automatisch einfügen'; $this->phrasen['zeitaufzeichnung/zeitraumZuKurz']='Zeitraum zu kurz für automatische Pause'; $this->phrasen['zeitaufzeichnung/supportAnfragen']='


Supportanfragen unter
zeiterfassung@technikum-wien.at

'; +$this->phrasen['zeitaufzeichnung/homeofficeNichtErlaubt']='Homeoffice für den Tag %s nicht erlaubt'; diff --git a/locale/en-US/zeitaufzeichnung.php b/locale/en-US/zeitaufzeichnung.php index a67a35e4b..9e0b84ec1 100644 --- a/locale/en-US/zeitaufzeichnung.php +++ b/locale/en-US/zeitaufzeichnung.php @@ -7,6 +7,7 @@ $this->phrasen['zeitaufzeichnung/projekt']='Project'; $this->phrasen['zeitaufzeichnung/projektphase']='Projectphase'; $this->phrasen['zeitaufzeichnung/keineAuswahl']='no selection'; $this->phrasen['zeitaufzeichnung/aktivitaet']='Activity'; +$this->phrasen['zeitaufzeichnung/homeoffice']='Homeoffice'; $this->phrasen['zeitaufzeichnung/id']='ID'; $this->phrasen['zeitaufzeichnung/user']='User'; $this->phrasen['zeitaufzeichnung/start']='Start'; @@ -63,3 +64,4 @@ $this->phrasen['zeitaufzeichnung/projektphase']='WP'; $this->phrasen['zeitaufzeichnung/pauseEinfuegen']='insert break automatically'; $this->phrasen['zeitaufzeichnung/zeitraumZuKurz']='Timeslot too short for automatic break.'; $this->phrasen['zeitaufzeichnung/supportAnfragen']='


Contact for support
zeiterfassung@technikum-wien.at

'; +$this->phrasen['zeitaufzeichnung/homeofficeNichtErlaubt']='Homeoffice for day %s not allowed'; From d3158b8ce09cca85b940b11aabebf94bf679e5d0 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Thu, 2 Sep 2021 11:31:58 +0200 Subject: [PATCH 23/48] merge dbupdate_3.3.php --- system/dbupdate_3.3.php | 155 +++++++++++++++++++++++++++++++++------- 1 file changed, 130 insertions(+), 25 deletions(-) diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index 0e0d4c9cb..02c6850be 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -212,21 +212,21 @@ if(!$result = @$db->db_query("SELECT 1 FROM public.vw_msg_vars_user LIMIT 1")) JOIN public.tbl_mitarbeiter ma ON ma.mitarbeiter_uid = b.uid WHERE ma.personalnummer > 0 );'; - + if(!$db->db_query($qry)) echo 'public.vw_msg_vars_user: '.$db->db_last_error().'
'; else echo '
public.vw_msg_vars_user view created'; - + $qry = 'GRANT SELECT ON TABLE public.vw_msg_vars_user TO web;'; - + if(!$db->db_query($qry)) echo 'public.vw_msg_vars_user: '.$db->db_last_error().'
'; else echo '
Granted privileges to web on public.vw_msg_vars_user'; - + $qry = 'GRANT SELECT ON TABLE public.vw_msg_vars_user TO vilesci;'; - + if(!$db->db_query($qry)) echo 'public.vw_msg_vars_user: '.$db->db_last_error().'
'; else @@ -4465,6 +4465,88 @@ if($result = $db->db_query("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE } } +// ADD COLUMN azgrelevant in bis.tbl_bisverwendung +if(!$result = @$db->db_query("SELECT azgrelevant FROM bis.tbl_bisverwendung LIMIT 1")) +{ + $qry = " + ALTER TABLE bis.tbl_bisverwendung ADD COLUMN azgrelevant boolean; + UPDATE bis.tbl_bisverwendung SET azgrelevant = zeitaufzeichnungspflichtig; + UPDATE bis.tbl_bisverwendung SET zeitaufzeichnungspflichtig = true WHERE ba1code=103 AND beschausmasscode!=5; + "; + + if(!$db->db_query($qry)) + echo 'bis.tbl_bisverwendung: '.$db->db_last_error().'
'; + else + echo '
bis.tbl_bisverwendung Spalte azgrelevant hinzugefügt.'; +} + +// Add new funktion type kstzuordnung for cost center assignment in public.tbl_funktion +if ($result = @$db->db_query("SELECT 1 FROM public.tbl_funktion WHERE funktion_kurzbz = 'kstzuordnung';")) +{ + if ($db->db_num_rows($result) == 0) + { + $qry = "INSERT INTO public.tbl_funktion(funktion_kurzbz, beschreibung, aktiv, fachbereich, semester) VALUES('kstzuordnung','Standardkostenstelle Zuordnung',true,false,false);"; + + if (!$db->db_query($qry)) + echo 'public.tbl_funktion '.$db->db_last_error().'
'; + else + echo '
public.tbl_funktion: Added funktion kstzuordnung
'; + } +} + +// Add column zugangstoken to tbl_projektbetreuer +if(!$result = @$db->db_query("SELECT zugangstoken FROM lehre.tbl_projektbetreuer LIMIT 1")) +{ + $qry = "ALTER TABLE lehre.tbl_projektbetreuer ADD COLUMN zugangstoken VARCHAR(32); + COMMENT ON COLUMN lehre.tbl_projektbetreuer.zugangstoken IS 'Zugangstoken zur Projektarbeitsbewertung fuer externe Betreuer'; + ALTER TABLE lehre.tbl_projektbetreuer ADD CONSTRAINT uk_tbl_projektbetreuer_zugangstoken UNIQUE (zugangstoken);"; + + if(!$db->db_query($qry)) + echo 'lehre.tbl_projektbetreuer: '.$db->db_last_error().'
'; + else + echo '
lehre.tbl_projektbetreuer: Spalte zugangstoken hinzugefuegt'; +} + +// Add column zugangstoken_gueltigbis to tbl_projektbetreuer +if(!$result = @$db->db_query("SELECT zugangstoken_gueltigbis FROM lehre.tbl_projektbetreuer LIMIT 1")) +{ + $qry = "ALTER table lehre.tbl_projektbetreuer ADD COLUMN zugangstoken_gueltigbis date; + COMMENT ON COLUMN lehre.tbl_projektbetreuer.zugangstoken_gueltigbis IS 'Gueligkeitsdatum fuer Zugangstoken zur Projektarbeitsbewertung fuer externe Betreuer';"; + + if(!$db->db_query($qry)) + echo 'lehre.tbl_projektbetreuer: '.$db->db_last_error().'
'; + else + echo '
lehre.tbl_projektbetreuer: Spalte zugangstoken_gueltigbis hinzugefuegt'; +} + +// App 'projektarbeitsbeurteilung' hinzufügen +if($result = $db->db_query("SELECT 1 FROM system.tbl_app WHERE app='projektarbeitsbeurteilung'")) +{ + if($db->db_num_rows($result)==0) + { + $qry = "INSERT INTO system.tbl_app(app) VALUES('projektarbeitsbeurteilung');"; + + if(!$db->db_query($qry)) + echo 'App: '.$db->db_last_error().'
'; + else + echo '
Neue App projektarbeitsbeurteilung in system.tbl_app hinzugefügt'; + } +} + +// UPDATE Berechtigung für lehre.tbl_projektbetreuer für web user hinzufügen +if($result = @$db->db_query("SELECT * FROM information_schema.role_table_grants WHERE table_name='tbl_projektbetreuer' AND table_schema='lehre' AND grantee='web' AND privilege_type='UPDATE'")) +{ + if($db->db_num_rows($result)==0) + { + $qry = "GRANT UPDATE ON lehre.tbl_projektbetreuer TO web;"; + + if(!$db->db_query($qry)) + echo 'Projektbetreuer Berechtigungen: '.$db->db_last_error().'
'; + else + echo '
Web User: update fuer lehre.tbl_projektbetreuer berechtigt'; + } +} + // Add column dms_id, studiensemester_kurzbz, anmerkung_student und empfehlung_anrechnung // Change genehmigt_von and begruendung_id to be NULLABLE if(!$result = @$db->db_query("SELECT dms_id FROM lehre.tbl_anrechnung")) @@ -4482,8 +4564,8 @@ if(!$result = @$db->db_query("SELECT dms_id FROM lehre.tbl_anrechnung")) ALTER TABLE lehre.tbl_anrechnung ALTER COLUMN begruendung_id DROP NOT NULL; ALTER TABLE lehre.tbl_anrechnung ALTER COLUMN insertamum SET DEFAULT NOW(); "; - - + + if(!$db->db_query($qry)) echo 'lehre.tbl_anrechnung: '.$db->db_last_error().'
'; else @@ -4558,11 +4640,11 @@ if(!$result = @$db->db_query("SELECT 1 FROM lehre.tbl_anrechnungstatus LIMIT 1;" INSERT INTO lehre.tbl_anrechnungstatus(status_kurzbz, bezeichnung_mehrsprachig) VALUES('inProgressLektor', '{\"Empfehlung angefordert\",\"recommendation requested\"}'); INSERT INTO lehre.tbl_anrechnungstatus(status_kurzbz, bezeichnung_mehrsprachig) VALUES('approved', '{\"genehmigt\",\"approved\"}'); INSERT INTO lehre.tbl_anrechnungstatus(status_kurzbz, bezeichnung_mehrsprachig) VALUES('rejected', '{\"abgelehnt\",\"rejected\"}'); - + GRANT SELECT ON lehre.tbl_anrechnungstatus TO web; GRANT SELECT, UPDATE, INSERT, DELETE ON lehre.tbl_anrechnungstatus TO vilesci; "; - + if(!$db->db_query($qry)) echo 'lehre.tbl_anrechnungstatus: '.$db->db_last_error().'
'; else @@ -4590,12 +4672,12 @@ if ($result = $db->db_query("SELECT 0 FROM pg_class WHERE relname = 'seq_anrechn NO MINVALUE CACHE 1; '; - + if(!$db->db_query($qry)) echo 'lehre.seq_anrechnungstatus_status_kurzbz '.$db->db_last_error().'
'; else echo '
Created sequence: lehre.seq_anrechnungstatus_status_kurzbz'; - + // GRANT SELECT, UPDATE ON SEQUENCE lehre.tbl_anrechnungstatus_status_kurzbz_seq to web; $qry = 'GRANT SELECT, UPDATE ON SEQUENCE lehre.seq_anrechnungstatus_status_kurzbz TO web;'; if (!$db->db_query($qry)) @@ -4623,7 +4705,7 @@ if(!$result = @$db->db_query("SELECT 1 FROM lehre.tbl_anrechnung_anrechnungstatu ALTER TABLE lehre.tbl_anrechnung_anrechnungstatus ADD CONSTRAINT pk_anrechnung_anrechnungstatus PRIMARY KEY (anrechnungstatus_id); ALTER TABLE lehre.tbl_anrechnung_anrechnungstatus ADD CONSTRAINT fk_anrechnung_anrechnungstatus_anrechnung FOREIGN KEY (anrechnung_id) REFERENCES lehre.tbl_anrechnung(anrechnung_id) ON DELETE RESTRICT ON UPDATE CASCADE; ALTER TABLE lehre.tbl_anrechnung_anrechnungstatus ADD CONSTRAINT fk_anrechnung_anrechnungstatus_anrechnungstatus FOREIGN KEY (status_kurzbz) REFERENCES lehre.tbl_anrechnungstatus (status_kurzbz) ON DELETE RESTRICT ON UPDATE CASCADE; - + CREATE SEQUENCE lehre.seq_anrechnung_anrechnungstatus_anrechnungstatus_id START WITH 1 INCREMENT BY 1 @@ -4631,14 +4713,14 @@ if(!$result = @$db->db_query("SELECT 1 FROM lehre.tbl_anrechnung_anrechnungstatu NO MINVALUE CACHE 1; ALTER TABLE lehre.tbl_anrechnung_anrechnungstatus ALTER COLUMN anrechnungstatus_id SET DEFAULT nextval('lehre.seq_anrechnung_anrechnungstatus_anrechnungstatus_id'); - + INSERT INTO lehre.tbl_anrechnung_anrechnungstatus(anrechnung_id, status_kurzbz) SELECT anrechnung_id, 'approved' as status_kurzbz FROM lehre.tbl_anrechnung WHERE genehmigt_von is not null; - + GRANT SELECT ON lehre.tbl_anrechnung_anrechnungstatus TO web; GRANT SELECT, UPDATE, INSERT, DELETE ON lehre.tbl_anrechnung_anrechnungstatus TO vilesci; GRANT SELECT, UPDATE ON lehre.seq_anrechnung_anrechnungstatus_anrechnungstatus_id TO vilesci; "; - + if(!$db->db_query($qry)) echo 'lehre.tbl_anrechnung_anrechnungstatus: '.$db->db_last_error().'
'; else @@ -4664,7 +4746,7 @@ if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berecht if($db->db_num_rows($result) == 0) { $qry = "INSERT INTO system.tbl_berechtigung(berechtigung_kurzbz, beschreibung) VALUES('student/anrechnung_beantragen', 'Anrechnung beantragen');"; - + if(!$db->db_query($qry)) echo 'system.tbl_berechtigung '.$db->db_last_error().'
'; else @@ -4678,7 +4760,7 @@ if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berecht if($db->db_num_rows($result) == 0) { $qry = "INSERT INTO system.tbl_berechtigung(berechtigung_kurzbz, beschreibung) VALUES('lehre/anrechnung_genehmigen', 'Anrechnung genehmigen');"; - + if(!$db->db_query($qry)) echo 'system.tbl_berechtigung '.$db->db_last_error().'
'; else @@ -4692,7 +4774,7 @@ if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berecht if($db->db_num_rows($result) == 0) { $qry = "INSERT INTO system.tbl_berechtigung(berechtigung_kurzbz, beschreibung) VALUES('lehre/anrechnung_empfehlen', 'Anrechnung empfehlen');"; - + if(!$db->db_query($qry)) echo 'system.tbl_berechtigung '.$db->db_last_error().'
'; else @@ -4700,7 +4782,32 @@ if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berecht } } -// ADD COLUMN homeoffice in campus.tbl_zeitaufzeichnung +// Add index to system.tbl_log +if ($result = $db->db_query("SELECT * FROM pg_class WHERE relname='idx_tbl_pruefung_student_uid'")) +{ + if ($db->db_num_rows($result) == 0) + { + $qry = "CREATE INDEX idx_tbl_pruefung_student_uid ON lehre.tbl_pruefung USING btree (student_uid)"; + + if (! $db->db_query($qry)) + echo 'Indizes: ' . $db->db_last_error() . '
'; + else + echo 'Index fuer lehre.pruefung.student_uid hinzugefuegt
'; + } +} + +// Add column homeoffice to bis.tbl_bisverwendung +if (!$result = @$db->db_query("SELECT homeoffice FROM bis.tbl_bisverwendung LIMIT 1")) +{ + $qry = "ALTER TABLE bis.tbl_bisverwendung ADD COLUMN homeoffice boolean NOT NULL DEFAULT FALSE"; + + if(!$db->db_query($qry)) + echo 'bis.tbl_bisverwendung: '.$db->db_last_error().'
'; + else + echo '
bis.tbl_bisverwendung: Spalte homeoffice hinzugefuegt'; +} + +// ADD COLUMN homeoffice to campus.tbl_zeitaufzeichnung if(!$result = @$db->db_query("SELECT homeoffice FROM campus.tbl_zeitaufzeichnung 1")) { $qry = " @@ -4730,7 +4837,7 @@ $tabellen=array( "bis.tbl_bisfunktion" => array("bisverwendung_id","studiengang_kz","sws","updateamum","updatevon","insertamum","insertvon","ext_id"), "bis.tbl_bisio" => array("bisio_id","mobilitaetsprogramm_code","nation_code","von","bis","zweck_code","student_uid","updateamum","updatevon","insertamum","insertvon","ext_id","ort","universitaet","lehreinheit_id","ects_erworben","ects_angerechnet"), "bis.tbl_bisio_zweck" => array("bisio_id","zweck_code"), - "bis.tbl_bisverwendung" => array("bisverwendung_id","ba1code","ba2code","vertragsstunden","beschausmasscode","verwendung_code","mitarbeiter_uid","hauptberufcode","hauptberuflich","habilitation","beginn","ende","updateamum","updatevon","insertamum","insertvon","ext_id","dv_art","inkludierte_lehre","zeitaufzeichnungspflichtig"), + "bis.tbl_bisverwendung" => array("bisverwendung_id","ba1code","ba2code","vertragsstunden","beschausmasscode","verwendung_code","mitarbeiter_uid","hauptberufcode","hauptberuflich","habilitation","beginn","ende","updateamum","updatevon","insertamum","insertvon","ext_id","dv_art","inkludierte_lehre","zeitaufzeichnungspflichtig","azgrelevant", "homeoffice"), "bis.tbl_bundesland" => array("bundesland_code","kurzbz","bezeichnung"), "bis.tbl_entwicklungsteam" => array("mitarbeiter_uid","studiengang_kz","besqualcode","beginn","ende","updateamum","updatevon","insertamum","insertvon","ext_id"), "bis.tbl_gemeinde" => array("gemeinde_id","plz","name","ortschaftskennziffer","ortschaftsname","bulacode","bulabez","kennziffer"), @@ -4799,7 +4906,7 @@ $tabellen=array( "campus.tbl_uebung" => array("uebung_id","gewicht","punkte","angabedatei","freigabevon","freigabebis","abgabe","beispiele","statistik","bezeichnung","positiv","defaultbemerkung","lehreinheit_id","maxstd","maxbsp","liste_id","prozent","nummer","updateamum","updatevon","insertamum","insertvon"), "campus.tbl_veranstaltung" => array("veranstaltung_id","titel","beschreibung","veranstaltungskategorie_kurzbz","inhalt","start","ende","freigabevon","freigabeamum","updateamum","updatevon","insertamum","insertvon"), "campus.tbl_veranstaltungskategorie" => array("veranstaltungskategorie_kurzbz","bezeichnung","bild","farbe"), - "campus.tbl_zeitaufzeichnung" => array("zeitaufzeichnung_id","uid","aktivitaet_kurzbz","projekt_kurzbz","start","ende","beschreibung","oe_kurzbz_1","oe_kurzbz_2","insertamum","insertvon","updateamum","updatevon","ext_id","service_id","kunde_uid","projektphase_id"), + "campus.tbl_zeitaufzeichnung" => array("zeitaufzeichnung_id","uid","aktivitaet_kurzbz","projekt_kurzbz","start","ende","beschreibung","oe_kurzbz_1","oe_kurzbz_2","insertamum","insertvon","updateamum","updatevon","ext_id","service_id","kunde_uid","projektphase_id","homeoffice"), "campus.tbl_zeitaufzeichnung_gd" => array("zeitaufzeichnung_gd_id","uid","studiensemester_kurzbz","selbstverwaltete_pause","insertamum","insertvon","updateamum","updatevon"), "campus.tbl_zeitsperre" => array("zeitsperre_id","zeitsperretyp_kurzbz","mitarbeiter_uid","bezeichnung","vondatum","vonstunde","bisdatum","bisstunde","vertretung_uid","updateamum","updatevon","insertamum","insertvon","erreichbarkeit_kurzbz","freigabeamum","freigabevon"), "campus.tbl_zeitsperretyp" => array("zeitsperretyp_kurzbz","beschreibung","farbe"), @@ -4819,10 +4926,8 @@ $tabellen=array( "lehre.tbl_abschlusspruefung" => array("abschlusspruefung_id","student_uid","vorsitz","pruefer1","pruefer2","pruefer3","abschlussbeurteilung_kurzbz","akadgrad_id","pruefungstyp_kurzbz","datum","uhrzeit","sponsion","anmerkung","updateamum","updatevon","insertamum","insertvon","ext_id","note","protokoll","endezeit","pruefungsantritt_kurzbz","freigabedatum"), "lehre.tbl_abschlusspruefung_antritt" => array("pruefungsantritt_kurzbz","bezeichnung","bezeichnung_english","sort"), "lehre.tbl_akadgrad" => array("akadgrad_id","akadgrad_kurzbz","studiengang_kz","titel","geschlecht"), - "lehre.tbl_anrechnung" => array("anrechnung_id","prestudent_id","lehrveranstaltung_id","begruendung_id","lehrveranstaltung_id_kompatibel","genehmigt_von","insertamum","insertvon","updateamum","updatevon","ext_id", "dms_id", "studiensemester_kurzbz", "anmerkung_student", "empfehlung_anrechnung"), - "lehre.tbl_anrechnung_anrechnungstatus" => array("anrechnungstatus_id", "anrechnung_id","status_kurzbz","datum", "insertamum","insertvon"), + "lehre.tbl_anrechnung" => array("anrechnung_id","prestudent_id","lehrveranstaltung_id","begruendung_id","lehrveranstaltung_id_kompatibel","genehmigt_von","insertamum","insertvon","updateamum","updatevon","ext_id"), "lehre.tbl_anrechnung_begruendung" => array("begruendung_id","bezeichnung"), - "lehre.tbl_anrechnungstatus" => array("status_kurzbz","bezeichnung_mehrsprachig"), "lehre.tbl_betreuerart" => array("betreuerart_kurzbz","beschreibung","aktiv"), "lehre.tbl_ferien" => array("bezeichnung","studiengang_kz","vondatum","bisdatum"), "lehre.tbl_lehreinheit" => array("lehreinheit_id","lehrveranstaltung_id","studiensemester_kurzbz","lehrfach_id","lehrform_kurzbz","stundenblockung","wochenrythmus","start_kw","raumtyp","raumtypalternativ","sprache","lehre","anmerkung","unr","lvnr","updateamum","updatevon","insertamum","insertvon","ext_id","lehrfach_id_old","gewicht"), @@ -4843,7 +4948,7 @@ $tabellen=array( "lehre.tbl_notenschluesselzuordnung" => array("notenschluesselzuordnung_id","notenschluessel_kurzbz","lehrveranstaltung_id","studienplan_id","oe_kurzbz","studiensemester_kurzbz"), "lehre.tbl_note" => array("note","bezeichnung","anmerkung","farbe","positiv","notenwert","aktiv","lehre","offiziell","bezeichnung_mehrsprachig","lkt_ueberschreibbar"), "lehre.tbl_projektarbeit" => array("projektarbeit_id","projekttyp_kurzbz","titel","lehreinheit_id","student_uid","firma_id","note","punkte","beginn","ende","faktor","freigegeben","gesperrtbis","stundensatz","gesamtstunden","themenbereich","anmerkung","updateamum","updatevon","insertamum","insertvon","ext_id","titel_english","seitenanzahl","abgabedatum","kontrollschlagwoerter","schlagwoerter","schlagwoerter_en","abstract", "abstract_en", "sprache","final"), - "lehre.tbl_projektbetreuer" => array("person_id","projektarbeit_id","betreuerart_kurzbz","note","faktor","name","punkte","stunden","stundensatz","updateamum","updatevon","insertamum","insertvon","ext_id","vertrag_id"), + "lehre.tbl_projektbetreuer" => array("person_id","projektarbeit_id","betreuerart_kurzbz","note","faktor","name","punkte","stunden","stundensatz","updateamum","updatevon","insertamum","insertvon","ext_id","vertrag_id", "zugangstoken", "zugangstoken_gueltigbis"), "lehre.tbl_projekttyp" => array("projekttyp_kurzbz","bezeichnung","aktiv"), "lehre.tbl_pruefung" => array("pruefung_id","lehreinheit_id","student_uid","mitarbeiter_uid","note","pruefungstyp_kurzbz","datum","anmerkung","insertamum","insertvon","updateamum","updatevon","ext_id","pruefungsanmeldung_id","vertrag_id", "punkte"), "lehre.tbl_pruefungstyp" => array("pruefungstyp_kurzbz","beschreibung","abschluss","sort"), From 30c2705b99fac4eeeb04a9567b943fa235b2506f Mon Sep 17 00:00:00 2001 From: ma0068 Date: Thu, 2 Sep 2021 11:43:43 +0200 Subject: [PATCH 24/48] fix syntax error system/dbupdate_3.3.php --- system/dbupdate_3.3.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index 02c6850be..b781e22fc 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -4808,7 +4808,7 @@ if (!$result = @$db->db_query("SELECT homeoffice FROM bis.tbl_bisverwendung LIMI } // ADD COLUMN homeoffice to campus.tbl_zeitaufzeichnung -if(!$result = @$db->db_query("SELECT homeoffice FROM campus.tbl_zeitaufzeichnung 1")) +if(!$result = @$db->db_query("SELECT homeoffice FROM campus.tbl_zeitaufzeichnung LIMIT 1")) { $qry = " ALTER TABLE campus.tbl_zeitaufzeichnung ADD COLUMN homeoffice boolean NOT NULL DEFAULT false ; From 9c84558f5fcbfce7cd0321226c01f0f03e7bbee1 Mon Sep 17 00:00:00 2001 From: Paolo Date: Tue, 7 Sep 2021 12:13:59 +0200 Subject: [PATCH 25/48] - Added requiredPermissions to the application/config/udfmasterschema.json and set them as mandatory - Removed the private method _isAllowed from application/controllers/widgets/UDF.php - Removed required permissions from views application/views/system/fas_udf.php and application/views/system/infocenter/zgvpruefungen.php - Widget views application/views/widgets/checkbox, dropdown, textarea and textfield now they print the attribute disabled - Added constant DISABLED to application/widgets/html/HTMLWidget.php - Removed private property _requiredPermissions from application/widgets/udf/UDFWidget.php - application/widgets/udf/UDFWidget.php does not check permissions anymore and does not store them anymore - Added constants PERMISSION_TYPE_READ and PERMISSION_TYPE_WRITE to application/libraries/UDFLib.php - Removed constant PERMISSION_TYPE from application/libraries/UDFLib.php - Removed public method isAllowed from application/libraries/UDFLib.php - Added private methods _readAllowed, _writeAllowed, _setRequiredPermissions and _setReadOnly to application/libraries/UDFLib.php - UDFLib->displayUDFWidget now checks if permissions are declared in the UDF JSON and if the user is allowed to read and write such UDF - UDFLib->saveUDFs now checks if the user has the permissions to write such UDF - Now the UDFs are even displayed in read only mode --- application/config/udfmasterschema.json | 16 +- application/controllers/widgets/UDF.php | 15 +- application/libraries/UDFLib.php | 267 ++++++++++++------ application/views/system/fas_udf.php | 3 +- .../views/system/infocenter/zgvpruefungen.php | 2 +- application/views/widgets/checkbox.php | 4 +- application/views/widgets/dropdown.php | 2 + application/views/widgets/textarea.php | 4 +- application/views/widgets/textfield.php | 4 +- application/widgets/html/HTMLWidget.php | 46 +-- application/widgets/udf/UDFWidget.php | 34 +-- 11 files changed, 235 insertions(+), 162 deletions(-) diff --git a/application/config/udfmasterschema.json b/application/config/udfmasterschema.json index fa06dc80d..ab3faa8c9 100644 --- a/application/config/udfmasterschema.json +++ b/application/config/udfmasterschema.json @@ -9,6 +9,13 @@ "name": { "type": "string" }, + "type": { + "type": "string", + "enum": ["checkbox", "textfield", "textarea", "date", "dropdown", "multipledropdown"] + }, + "requiredPermissions": { + "type": "array" + }, "description": { "type": "array", }, @@ -18,10 +25,6 @@ "title": { "type": "array", }, - "type": { - "type": "string", - "enum": ["checkbox", "textfield", "textarea", "date", "dropdown", "multipledropdown"] - }, "sort": { "type": "integer" }, @@ -67,5 +70,6 @@ } } }, - "required": ["type", "name"] -} \ No newline at end of file + "required": ["type", "name", "requiredPermissions"] +} + diff --git a/application/controllers/widgets/UDF.php b/application/controllers/widgets/UDF.php index 5b4c45776..3ba745a10 100644 --- a/application/controllers/widgets/UDF.php +++ b/application/controllers/widgets/UDF.php @@ -26,9 +26,6 @@ class UDF extends FHC_Controller // Loads the UDFLib with HTTP GET/POST parameters $this->_loadUDFLib(); - - // Checks if the caller is allow to use this UDF widget - $this->_isAllowed(); } //------------------------------------------------------------------------------------------------------------------ @@ -63,17 +60,6 @@ class UDF extends FHC_Controller //------------------------------------------------------------------------------------------------------------------ // Private methods - /** - * Checks if the user is allowed to use this UDFWidget - */ - private function _isAllowed() - { - if (!$this->udflib->isAllowed()) - { - $this->terminateWithJsonError('You are not allowed to access to this content'); - } - } - /** * Loads the UDFLib with the UDF_UNIQUE_ID parameter * If the parameter UDF_UNIQUE_ID is not given then the execution of the controller is terminated and @@ -105,3 +91,4 @@ class UDF extends FHC_Controller } } } + diff --git a/application/libraries/UDFLib.php b/application/libraries/UDFLib.php index f9ad7d20d..756c382dd 100644 --- a/application/libraries/UDFLib.php +++ b/application/libraries/UDFLib.php @@ -30,13 +30,14 @@ class UDFLib // ...to specify permissions that are needed to use this TableWidget const REQUIRED_PERMISSIONS_PARAMETER = 'requiredPermissions'; + const PERMISSION_TABLE_METHOD = 'UDFWidget'; // Name for fake method to be checked by the PermissionLib + const PERMISSION_TYPE_READ = 'r'; + const PERMISSION_TYPE_WRITE = 'w'; + // ...to specify the primary key name and value const PRIMARY_KEY_NAME = 'primaryKeyName'; const PRIMARY_KEY_VALUE = 'primaryKeyValue'; - const PERMISSION_TABLE_METHOD = 'UDFWidget'; // Name for fake method to be checked by the PermissionLib - const PERMISSION_TYPE = 'rw'; - // HTML components const LABEL = 'title'; const TITLE = 'description'; @@ -76,10 +77,10 @@ class UDFLib // Public methods /** - * UDFWidget - */ - public function UDFWidget($args, $htmlArgs = array()) - { + * UDFWidget + */ + public function UDFWidget($args, $htmlArgs = array()) + { if ((isset($args[self::SCHEMA_ARG_NAME]) && !isEmptyString($args[self::SCHEMA_ARG_NAME])) && (isset($args[self::TABLE_ARG_NAME]) && !isEmptyString($args[self::TABLE_ARG_NAME]))) { @@ -112,16 +113,17 @@ class UDFLib show_error(self::TABLE_ARG_NAME.' parameter is missing!'); } } - } + } - /** + /** * It renders the HTML of the UDF * * NOTE: When this method is called $widgetData contains different data from * parameter $args in the constructor */ - public function displayUDFWidget(&$widgetData) + public function displayUDFWidget(&$widgetData) { + $field = null; $schema = $widgetData[self::SCHEMA_ARG_NAME]; // schema attribute $table = $widgetData[self::TABLE_ARG_NAME]; // table attribute @@ -155,7 +157,7 @@ class UDFLib $found = false; // used to check if the field is found or not in the json schema $this->_sortJsonSchemas($jsonSchemasArray); // Sort the list of UDF by sort property - + // Loops through json schemas foreach ($jsonSchemasArray as $jsonSchema) { @@ -169,21 +171,37 @@ class UDFLib { show_error(sprintf('%s.%s: Attribute "name" not present in the json schema', $schema, $table)); } + // If the requiredPermissions property is not present then show an error + if (!isset($jsonSchema->{self::REQUIRED_PERMISSIONS_PARAMETER})) + { + show_error(sprintf('%s.%s: Attribute "requiredPermissions" not present in the json schema', $schema, $table)); + } + + // Set the required permissions for this UDF + $this->_setRequiredPermissions($jsonSchema->{self::NAME}, $jsonSchema->{self::REQUIRED_PERMISSIONS_PARAMETER}); // If a UDF is specified and is present in the json schemas list or no UDF is specified if ((isset($field) && $field == $jsonSchema->{self::NAME}) || !isset($field)) { - // Set attributes using phrases - $this->_setAttributesWithPhrases($jsonSchema, $widgetData[HTMLWidget::HTML_ARG_NAME]); + // If the user has the permissions to read this field + if ($this->_readAllowed($jsonSchema->{self::REQUIRED_PERMISSIONS_PARAMETER})) + { + // Set attributes using phrases + $this->_setAttributesWithPhrases($jsonSchema, $widgetData[HTMLWidget::HTML_ARG_NAME]); - // Set validation attributes - $this->_setValidationAttributes($jsonSchema, $widgetData[HTMLWidget::HTML_ARG_NAME]); + // Set validation attributes + $this->_setValidationAttributes($jsonSchema, $widgetData[HTMLWidget::HTML_ARG_NAME]); - // Set name and id attributes - $this->_setNameAndId($jsonSchema, $widgetData[HTMLWidget::HTML_ARG_NAME]); + // Set name and id attributes + $this->_setNameAndId($jsonSchema, $widgetData[HTMLWidget::HTML_ARG_NAME]); - // Render the HTML for this UDF - $this->_render($jsonSchema, $widgetData); + // Set if the field is in read only mode + $this->_setReadOnly($jsonSchema, $widgetData[HTMLWidget::HTML_ARG_NAME]); + + // Render the HTML for this UDF + $this->_render($jsonSchema, $widgetData); + } + // otherwise the UDF is not displayed // If a UDf is specified and it was found then stop looking through this list if (isset($field) && $field == $jsonSchema->{self::NAME}) @@ -213,7 +231,7 @@ class UDFLib show_error(sprintf('%s.%s: Does not contain "jsons" field', $schema, $table)); } } - } + } /** * Manage UDFs @@ -249,6 +267,22 @@ class UDFLib { $decodedUDFDefinition = $decodedUDFDefinitions[$i]; // Definition of a single UDF + // Checks if the requiredPermissions is available and it is a valid array or a valid string + if (isset($decodedUDFDefinition->{self::REQUIRED_PERMISSIONS_PARAMETER}) + && (!isEmptyArray($decodedUDFDefinition->{self::REQUIRED_PERMISSIONS_PARAMETER}) + || !isEmptyString($decodedUDFDefinition->{self::REQUIRED_PERMISSIONS_PARAMETER}))) + { + // Then check if the user has the permissions to write such UDF + if (!$this->_writeAllowed($decodedUDFDefinition->{self::REQUIRED_PERMISSIONS_PARAMETER})) + { + $notValidUDFsArray[] = error('Writing not allowed for UDF: '.$decodedUDFDefinition->{self::NAME}); + } + } + else + { + $notValidUDFsArray[] = error('Writing permissions not defined for UDF: '.$decodedUDFDefinition->{self::NAME}); + } + // Loops through the UDFs values that should be stored foreach ($udfsParameters as $key => $val) { @@ -468,12 +502,32 @@ class UDFLib */ public function saveUDFs($udfUniqueId, $udfs) { + $udfToBewritten = array(); // UDFs to be written into database + // Read the all session for this udf widget $session = $this->getSession(); // If session is empty then return an error if ($session == null) return error('No UDFWidget loaded'); + // Get the required permission from the session + $requiredPermissions = $session[self::REQUIRED_PERMISSIONS_PARAMETER]; + + // For each UDF that is trying to save + foreach ($udfs as $udfName => $udfValue) + { + // If the UDFs exists in the requiredPermissions array + if (array_key_exists($udfName, $requiredPermissions)) + { + // Then check if the user has the permissions to write such UDF + if ($this->_writeAllowed($requiredPermissions[$udfName])) + { + // If allowed then save the UDF name and value to be stored later into the database + $udfToBewritten[$udfName] = $udfValue; + } + } + } + // Workaround to load CI $this->_ci->load->model('system/UDF_model', 'UDFModel'); @@ -490,30 +544,56 @@ class UDFLib // Returns the result of the database update operation to save UDFs return $dbModel->update( array($session[self::PRIMARY_KEY_NAME] => $session[self::PRIMARY_KEY_VALUE]), - (array)$udfs + $udfToBewritten ); } - /** - * Checks if at least one of the permissions given as parameter (requiredPermissions) belongs - * to the authenticated user, if confirmed then is allowed to use this UDFWidget. - * If the parameter requiredPermissions is NOT given or is not present in the session, - * then NO one is allow to use this UDFWidget - * Wrapper method to permissionlib->hasAtLeastOne - */ - public function isAllowed($requiredPermissions = null) - { - $this->_ci->load->library('PermissionLib'); // Load permission library - - // Gets the required permissions from the session if they are not provided as parameter - $rq = $requiredPermissions; - if ($rq == null) $rq = $this->getSessionElement(self::REQUIRED_PERMISSIONS_PARAMETER); - - return $this->_ci->permissionlib->hasAtLeastOne($rq, self::PERMISSION_TABLE_METHOD, self::PERMISSION_TYPE); - } - // ------------------------------------------------------------------------------------------------- // Private methods + // + + /** + * Checks if at least one of the permissions given as parameter belongs to the authenticated user in read mode + * Wrapper method to permissionlib->hasAtLeastOne + */ + private function _readAllowed($requiredPermissions) + { + $this->_ci->load->library('PermissionLib'); // Load permission library + + return $this->_ci->permissionlib->hasAtLeastOne($requiredPermissions, self::PERMISSION_TABLE_METHOD, self::PERMISSION_TYPE_READ); + } + + /** + * Checks if at least one of the permissions given as parameter belongs to the authenticated user in write mode + * Wrapper method to permissionlib->hasAtLeastOne + */ + private function _writeAllowed($requiredPermissions) + { + $this->_ci->load->library('PermissionLib'); // Load permission library + + return $this->_ci->permissionlib->hasAtLeastOne($requiredPermissions, self::PERMISSION_TABLE_METHOD, self::PERMISSION_TYPE_WRITE); + } + + /** + * Set an array of required permissions for a UDF into the session + */ + private function _setRequiredPermissions($udfName, $permissions) + { + // Get the session for this UDFWidget + $session = $this->getSession(); + + // If does _not_ exist yet in the session + if (!isset($session[self::REQUIRED_PERMISSIONS_PARAMETER])) + { + $session[self::REQUIRED_PERMISSIONS_PARAMETER] = array(); + } + + // Set the required permission in the session for this UDFWidget + $session[self::REQUIRED_PERMISSIONS_PARAMETER][$udfName] = $permissions; + + // Write into the session + $this->setSession($session); + } /** * Print the block for UDFs @@ -654,20 +734,36 @@ class UDFLib return $returnArrayValidation; } - /** - * Set the name and id attribute of the HTML element - */ - private function _setNameAndId($jsonSchema, &$htmlParameters) - { + /** + * Disable the HTML element if in read only mode + */ + private function _setReadOnly($jsonSchema, &$htmlParameters) + { + // If write permissions _not_ exist then set the field as disabled + if (!$this->_writeAllowed($jsonSchema->{self::REQUIRED_PERMISSIONS_PARAMETER})) + { + $htmlParameters[HTMLWidget::DISABLED] = HTMLWidget::DISABLED; // any values is fine + } + else // otherwise restore to default + { + if (isset($htmlParameters[HTMLWidget::DISABLED])) unset($htmlParameters[HTMLWidget::DISABLED]); + } + } + + /** + * Set the name and id attribute of the HTML element + */ + private function _setNameAndId($jsonSchema, &$htmlParameters) + { $htmlParameters[HTMLWidget::HTML_ID] = $jsonSchema->{self::NAME}; $htmlParameters[HTMLWidget::HTML_NAME] = $jsonSchema->{self::NAME}; - } - - /** - * Sort the list of UDF by sort property - */ - private function _sortJsonSchemas(&$jsonSchemasArray) - { + } + + /** + * Sort the list of UDF by sort property + */ + private function _sortJsonSchemas(&$jsonSchemasArray) + { usort($jsonSchemasArray, function ($a, $b) { if (!isset($a->{self::SORT})) { @@ -684,13 +780,13 @@ class UDFLib return ($a->{self::SORT} < $b->{self::SORT}) ? -1 : 1; }); - } - - /** - * Loads the UDF description by the given schema and table - */ - private function _loadUDF($schema, $table) - { + } + + /** + * Loads the UDF description by the given schema and table + */ + private function _loadUDF($schema, $table) + { // Loads UDF model $this->_ci->load->model('system/UDF_model', 'UDFModel'); @@ -722,13 +818,13 @@ class UDFLib } return $udfResults; - } + } - /** - * Render the HTML for the UDF - */ - private function _render($jsonSchema, &$widgetData) - { + /** + * Render the HTML for the UDF + */ + private function _render($jsonSchema, &$widgetData) + { // Checkbox if ($jsonSchema->{self::TYPE} == 'checkbox') { @@ -759,11 +855,11 @@ class UDFLib { $this->_renderDropdown($jsonSchema, $widgetData, true); } - } + } - /** - * Renders a dropdown element - */ + /** + * Renders a dropdown element + */ private function _renderDropdown($jsonSchema, &$widgetData, $multiple = false) { // Selected element/s @@ -805,8 +901,8 @@ class UDFLib } /** - * Renders a textarea element - */ + * Renders a textarea element + */ private function _renderTextarea($jsonSchema, &$widgetData) { $text = null; // text value @@ -823,8 +919,8 @@ class UDFLib } /** - * Renders an input text element - */ + * Renders an input text element + */ private function _renderTextfield($jsonSchema, &$widgetData) { $text = null; // text value @@ -841,8 +937,8 @@ class UDFLib } /** - * Renders a checkbox element - */ + * Renders a checkbox element + */ private function _renderCheckbox($jsonSchema, &$widgetData) { // Set checkbox value if present in the DB @@ -861,11 +957,11 @@ class UDFLib $checkboxWidgetUDF->render(); } - /** - * Sets the attributes of the HTML element using the phrases system - */ - private function _setAttributesWithPhrases($jsonSchema, &$htmlParameters) - { + /** + * Sets the attributes of the HTML element using the phrases system + */ + private function _setAttributesWithPhrases($jsonSchema, &$htmlParameters) + { // By default set to null all the attributes $htmlParameters[HTMLWidget::LABEL] = null; $htmlParameters[HTMLWidget::TITLE] = null; @@ -933,13 +1029,13 @@ class UDFLib } } } - } + } - /** - * Sets the validation attributes of the HTML element using the configuration inside the json schema - */ - private function _setValidationAttributes($jsonSchema, &$htmlParameters) - { + /** + * Sets the validation attributes of the HTML element using the configuration inside the json schema + */ + private function _setValidationAttributes($jsonSchema, &$htmlParameters) + { // Validation attributes set by default to null $htmlParameters[HTMLWidget::REGEX] = null; $htmlParameters[HTMLWidget::REQUIRED] = null; @@ -998,3 +1094,4 @@ class UDFLib } } } + diff --git a/application/views/system/fas_udf.php b/application/views/system/fas_udf.php index 8a1200b6a..e6fa396cf 100644 --- a/application/views/system/fas_udf.php +++ b/application/views/system/fas_udf.php @@ -45,7 +45,6 @@ echo $this->udflib->UDFWidget( array( UDFLib::UDF_UNIQUE_ID => 'fasPersonUDFs', - UDFLib::REQUIRED_PERMISSIONS_PARAMETER => 'basis/person', UDFLib::SCHEMA_ARG_NAME => 'public', UDFLib::TABLE_ARG_NAME => 'tbl_person', UDFLib::PRIMARY_KEY_NAME => 'person_id', @@ -70,7 +69,6 @@ echo $this->udflib->UDFWidget( array( UDFLib::UDF_UNIQUE_ID => 'fasPrestudentUDFs', - UDFLib::REQUIRED_PERMISSIONS_PARAMETER => 'basis/person', UDFLib::SCHEMA_ARG_NAME => 'public', UDFLib::TABLE_ARG_NAME => 'tbl_prestudent', UDFLib::PRIMARY_KEY_NAME => 'prestudent_id', @@ -109,3 +107,4 @@ load->view("templates/footer"); ?> + diff --git a/application/views/system/infocenter/zgvpruefungen.php b/application/views/system/infocenter/zgvpruefungen.php index 05c94c384..2b08dada3 100644 --- a/application/views/system/infocenter/zgvpruefungen.php +++ b/application/views/system/infocenter/zgvpruefungen.php @@ -341,7 +341,6 @@ echo $this->udflib->UDFWidget( array( UDFLib::UDF_UNIQUE_ID => 'infocenterPrestudentUDFs_'.$zgvpruefung->prestudent_id, - UDFLib::REQUIRED_PERMISSIONS_PARAMETER => 'infocenter', UDFLib::SCHEMA_ARG_NAME => 'public', UDFLib::TABLE_ARG_NAME => 'tbl_prestudent', UDFLib::PRIMARY_KEY_NAME => 'prestudent_id', @@ -553,3 +552,4 @@ endforeach; // end foreach zgvpruefungen ?> + diff --git a/application/views/widgets/checkbox.php b/application/views/widgets/checkbox.php index 6debb2afd..811e3c682 100644 --- a/application/views/widgets/checkbox.php +++ b/application/views/widgets/checkbox.php @@ -24,6 +24,7 @@ + - \ No newline at end of file + + diff --git a/application/views/widgets/dropdown.php b/application/views/widgets/dropdown.php index d9faf1978..51db6d536 100644 --- a/application/views/widgets/dropdown.php +++ b/application/views/widgets/dropdown.php @@ -33,6 +33,7 @@ + > + diff --git a/application/views/widgets/textarea.php b/application/views/widgets/textarea.php index c72b52658..5346fefa8 100644 --- a/application/views/widgets/textarea.php +++ b/application/views/widgets/textarea.php @@ -29,9 +29,11 @@ + > - \ No newline at end of file + + diff --git a/application/views/widgets/textfield.php b/application/views/widgets/textfield.php index 73b1daa1b..c5ba81710 100644 --- a/application/views/widgets/textfield.php +++ b/application/views/widgets/textfield.php @@ -31,10 +31,12 @@ + value="" > - \ No newline at end of file + + diff --git a/application/widgets/html/HTMLWidget.php b/application/widgets/html/HTMLWidget.php index 9639890ea..0034edfd9 100644 --- a/application/widgets/html/HTMLWidget.php +++ b/application/widgets/html/HTMLWidget.php @@ -6,18 +6,18 @@ class HTMLWidget extends Widget { // The name of the array present in the data array given to the view that will render this widget - const HTML_ARG_NAME = 'HTML'; + const HTML_ARG_NAME = 'HTML'; const HTML_DEFAULT_VALUE = ''; // Default value of the html element - const HTML_NAME = 'name'; // HTML name attribute - const HTML_ID = 'id'; // HTML id attribute - - // External block definition - const EXTERNAL_BLOCK = 'externalBlock'; // External block name - const EXTERNAL_START_BLOCK_HTML_TAG = '
'; // External block start tag - const EXTERNAL_END_BLOCK_HTML_TAG = '
'; // External block end tag - - // HTML attributes - const LABEL = 'title'; + const HTML_NAME = 'name'; // HTML name attribute + const HTML_ID = 'id'; // HTML id attribute + + // External block definition + const EXTERNAL_BLOCK = 'externalBlock'; // External block name + const EXTERNAL_START_BLOCK_HTML_TAG = '
'; // External block start tag + const EXTERNAL_END_BLOCK_HTML_TAG = '
'; // External block end tag + + // HTML attributes + const LABEL = 'title'; const REGEX = 'regex'; const TITLE = 'description'; const REQUIRED = 'required-field'; @@ -26,11 +26,12 @@ class HTMLWidget extends Widget const MAX_LENGTH = 'max-length'; const MIN_LENGTH = 'min-length'; const PLACEHOLDER = 'placeholder'; + const DISABLED = 'disabled'; - /** - * It gets also the htmlArgs array as parameter, it will be used to set the HTML properties - */ - public function __construct($name, $args = array(), $htmlArgs = array()) + /** + * It gets also the htmlArgs array as parameter, it will be used to set the HTML properties + */ + public function __construct($name, $args = array(), $htmlArgs = array()) { parent::__construct($name, $args); @@ -38,11 +39,11 @@ class HTMLWidget extends Widget $this->_setHtmlProperties($htmlArgs); } - /** - * Initialising html properties, such as the id and name attributes of the HTML element - */ - private function _setHtmlProperties($htmlArgs) - { + /** + * Initialising html properties, such as the id and name attributes of the HTML element + */ + private function _setHtmlProperties($htmlArgs) + { // If $htmlArgs wasn't already stored in $this->_args if (!isset($this->_args[HTMLWidget::HTML_ARG_NAME])) { @@ -58,9 +59,9 @@ class HTMLWidget extends Widget $this->_args[HTMLWidget::HTML_ARG_NAME][$argName] = $argValue; } } - } + } - /** + /** * Prints an attribute name and eventually also the value extracted from $htmlArgs * Set $isValuePresent to false the value should not be displayed */ @@ -113,3 +114,4 @@ class HTMLWidget extends Widget } } } + diff --git a/application/widgets/udf/UDFWidget.php b/application/widgets/udf/UDFWidget.php index 7af3dd926..abbbab022 100644 --- a/application/widgets/udf/UDFWidget.php +++ b/application/widgets/udf/UDFWidget.php @@ -6,8 +6,6 @@ */ class UDFWidget extends HTMLWidget { - private $_requiredPermissions; // The required permissions to use this UDF widget - private $_schema; // Schema name private $_table; // Table name private $_primaryKeyName; // Primary key name @@ -26,26 +24,16 @@ class UDFWidget extends HTMLWidget $this->_initUDFWidget($args); // checks parameters and initialize properties - // Let's start if it's allowed - // NOTE: If it is NOT allowed then no data are loaded - if ($this->udflib->isAllowed($this->_requiredPermissions)) - { - $this->_startUDFWidget($args[UDFLib::UDF_UNIQUE_ID]); - } + $this->_startUDFWidget($args[UDFLib::UDF_UNIQUE_ID]); } /** * Called by the WidgetLib, it renders the HTML of the UDF */ - public function display($widgetData) + public function display($widgetData) { - // Let's start if it's allowed - // NOTE: If it is NOT allowed then no data are loaded - if ($this->_ci->udflib->isAllowed($this->_requiredPermissions)) - { - $this->_ci->udflib->displayUDFWidget($widgetData); - } - } + $this->_ci->udflib->displayUDFWidget($widgetData); + } //------------------------------------------------------------------------------------------------------------------ // Private methods @@ -60,18 +48,11 @@ class UDFWidget extends HTMLWidget // If here then everything is ok // Initialize class properties - $this->_requiredPermissions = null; $this->_schema = null; $this->_table = null; $this->_primaryKeyName = null; $this->_primaryKeyValue = null; - // Retrieved the required permissions parameter if present - if (isset($args[UDFLib::REQUIRED_PERMISSIONS_PARAMETER])) - { - $this->_requiredPermissions = $args[UDFLib::REQUIRED_PERMISSIONS_PARAMETER]; - } - // Retrieved the if (isset($args[UDFLib::SCHEMA_ARG_NAME])) { @@ -113,11 +94,6 @@ class UDFWidget extends HTMLWidget show_error('The parameter "'.UDFLib::UDF_UNIQUE_ID.'" must be specified'); } - if (!isset($args[UDFLib::REQUIRED_PERMISSIONS_PARAMETER])) - { - show_error('The parameter "'.UDFLib::REQUIRED_PERMISSIONS_PARAMETER.'" must be specified'); - } - if (!isset($args[UDFLib::SCHEMA_ARG_NAME])) { show_error('The parameter "'.UDFLib::SCHEMA_ARG_NAME.'" must be specified'); @@ -149,7 +125,6 @@ class UDFWidget extends HTMLWidget $this->udflib->setSession( array( UDFLib::UDF_UNIQUE_ID => $udfUniqueId, // table unique id - UDFLib::REQUIRED_PERMISSIONS_PARAMETER => $this->_requiredPermissions, // UDFLib::SCHEMA_ARG_NAME => $this->_schema, // UDFLib::TABLE_ARG_NAME => $this->_table, // UDFLib::PRIMARY_KEY_NAME => $this->_primaryKeyName, // @@ -158,3 +133,4 @@ class UDFWidget extends HTMLWidget ); } } + From bdc61410def72dcc403bc6e87ad0873ac832bbc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Wed, 15 Sep 2021 18:06:44 +0200 Subject: [PATCH 26/48] =?UTF-8?q?Fehlermeldung=20beim=20Import=20von=20Hom?= =?UTF-8?q?eoffice=20auf=20Orange=20ge=C3=A4ndert=20da=20die=20Daten=20ges?= =?UTF-8?q?peichert=20werden=20nur=20ohne=20Homeoffice=20Flag?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cis/private/tools/zeitaufzeichnung.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index fcb03ecab..2a1e66048 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -942,7 +942,7 @@ if(isset($_POST['save']) || isset($_POST['edit']) || isset($_POST['import'])) } else { - echo ''.$p->t("global/fehlerBeimSpeichernDerDaten").': '.$p->t("zeitaufzeichnung/homeofficeNichtErlaubt", ($vonCSV)) .'
'; + echo ''.$p->t("zeitaufzeichnung/homeofficeNichtErlaubt", ($vonCSV)) .'
'; $zeit->homeoffice = false; } From f5f3c38c5f9d57e308aeb20dc48a1da705d7a170 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Wed, 15 Sep 2021 18:20:05 +0200 Subject: [PATCH 27/48] =?UTF-8?q?Homeoffice=20wird=20nun=20beim=20Anlegen?= =?UTF-8?q?=20von=20neuen=20Datens=C3=A4tzen=20korrekt=20gespeichert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/bisverwendung.class.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/include/bisverwendung.class.php b/include/bisverwendung.class.php index ca15d03de..82bb9d94e 100644 --- a/include/bisverwendung.class.php +++ b/include/bisverwendung.class.php @@ -273,7 +273,8 @@ class bisverwendung extends basis_db //Neuen Datensatz anlegen $qry = "BEGIN;INSERT INTO bis.tbl_bisverwendung (ba1code, ba2code, beschausmasscode, verwendung_code, mitarbeiter_uid, hauptberufcode, hauptberuflich, habilitation, beginn, ende, vertragsstunden, - updateamum, updatevon, insertamum, insertvon, dv_art, inkludierte_lehre, zeitaufzeichnungspflichtig, azgrelevant) VALUES (". + updateamum, updatevon, insertamum, insertvon, dv_art, inkludierte_lehre, zeitaufzeichnungspflichtig, + azgrelevant, homeoffice) VALUES (". $this->db_add_param($this->ba1code, FHC_INTEGER).', '. $this->db_add_param($this->ba2code, FHC_INTEGER).', '. $this->db_add_param($this->beschausmasscode, FHC_INTEGER).', '. From daa78aa190577c9e0f32995082e7b5079fdf77aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Mon, 27 Sep 2021 08:05:34 +0200 Subject: [PATCH 28/48] =?UTF-8?q?Mehrfaches=20zur=C3=BCckziehen=20der=20An?= =?UTF-8?q?rechnungen=20l=C3=B6scht=20keine=20anderen=20Stati=20mehr?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../anrechnung/ApproveAnrechnungDetail.php | 90 +++++++++---------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php b/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php index d76c0d79b..8982b9970 100644 --- a/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php +++ b/application/controllers/lehre/anrechnung/ApproveAnrechnungDetail.php @@ -85,7 +85,7 @@ class approveAnrechnungDetail extends Auth_Controller // Get Anrechung data $anrechnungData = $this->anrechnunglib->getAnrechnungData($anrechnung_id); - + // Get Antrag data $antragData = $this->anrechnunglib->getAntragData( $anrechnungData->prestudent_id, @@ -98,7 +98,7 @@ class approveAnrechnungDetail extends Auth_Controller // Get Genehmigung data $genehmigungData = $this->anrechnunglib->getGenehmigungData($anrechnung_id); - + $viewData = array( 'antragData' => $antragData, 'anrechnungData' => $anrechnungData, @@ -121,13 +121,13 @@ class approveAnrechnungDetail extends Auth_Controller { return $this->outputJsonError('Fehler beim Übertragen der Daten.'); } - + // Get STGLs person data if (!$person = getData($this->PersonModel->getByUID($this->_uid))[0]) { show_error('Failed retrieving person data'); } - + // Approve Anrechnung foreach ($data as $item) { @@ -166,13 +166,13 @@ class approveAnrechnungDetail extends Auth_Controller { return $this->outputJsonError('Fehler beim Übertragen der Daten.'); } - + // Get STGLs person data if (!$person = getData($this->PersonModel->getByUID($this->_uid))[0]) { show_error('Failed retrieving person data'); } - + // Reject Anrechnung foreach ($data as $item) { @@ -210,10 +210,10 @@ class approveAnrechnungDetail extends Auth_Controller { return $this->outputJsonError('Fehler beim Übertragen der Daten.'); } - + $retval = array(); $counter = 0; - + foreach ($data as $item) { // Check if Anrechnungs-LV has lector @@ -221,18 +221,18 @@ class approveAnrechnungDetail extends Auth_Controller { // Count up LV with no lector $counter++; - + // Break, if LV has no lector break; } - + // Get full name of LV Leitung. // If LV Leitung is not present, get full name of LV lectors. $lector_arr = $this->anrechnunglib->getLectors($item['anrechnung_id']); $empfehlungsanfrage_an = !isEmptyArray($lector_arr) ? implode(', ', array_column($lector_arr, 'fullname')) : ''; - + // Request Recommendation if($this->anrechnunglib->requestRecommendation($item['anrechnung_id'])) { @@ -246,7 +246,7 @@ class approveAnrechnungDetail extends Auth_Controller ); } } - + /** * Send mails to lectors * NOTE: mails are sent at the end to ensure sending only ONE mail to each LV-Leitung or lector @@ -255,11 +255,11 @@ class approveAnrechnungDetail extends Auth_Controller if (!isEmptyArray($retval)) { self::_sendSanchoMailToLectors($retval); - + // Output json to ajax return $this->outputJsonSuccess($retval); } - + // Output json to ajax if (isEmptyArray($retval) && $counter > 0) { @@ -267,22 +267,22 @@ class approveAnrechnungDetail extends Auth_Controller "Empfehlung wurde nicht angefordert,\nDer LV sind keine LektorInnen zugeteilt." ); } - + return $this->outputJsonError($this->p->t('ui', 'errorNichtAusgefuehrt')); } - + /** * Withdraw approved / rejected Anrechnung and reset to 'inProgressDP'. */ public function withdraw() { $anrechnung_id = $this->input->post('anrechnung_id'); - + if (!is_numeric($anrechnung_id)) { $this->terminateWithJsonError($this->p->t('ui', 'errorFelderFehlen')); } - + // Delete last status approved / rejected. // If last status is 'approved', Genehmigung is resetted. $result = $this->AnrechnungModel->withdrawApprovement($anrechnung_id); @@ -291,13 +291,13 @@ class approveAnrechnungDetail extends Auth_Controller { $this->terminateWithJsonError(getError($result)); } - + // Success output to AJAX $this->outputJsonSuccess(array( 'status_bezeichnung' => $this->anrechnunglib->getLastAnrechnungstatus($anrechnung_id)) ); } - + /** * Withdraw request for reommendation and reset to 'inProgressDP'. * This is only possible if the lector has not provided a recommendation yet. @@ -305,69 +305,69 @@ class approveAnrechnungDetail extends Auth_Controller public function withdrawRequestRecommendation() { $anrechnung_id = $this->input->post('anrechnung_id'); - + if (!is_numeric($anrechnung_id)) { show_error('Wrong parameter.'); } - + // Get boolean empfehlung of given Anrechnung if (!$result = getData($this->AnrechnungModel->load($anrechnung_id))[0]) { show_error('Failed loading Anrechnung'); } - + $empfehlung = $result->empfehlung_anrechnung; - + // Get last Anrechnungstatus if (!$result = getData($this->AnrechnungModel->getLastAnrechnungstatus($anrechnung_id))[0]) { show_error('Failed loading last Anrechnungstatus'); } - + $last_status = $result->status_kurzbz; $anrechnungstatus_id = $result->anrechnungstatus_id; - + // Return if Anrechnung was not waiting for recommendation or if Anrechnung has already been recommended - if ($last_status != self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR && !is_null($empfehlung)) + if ($last_status != self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR || !is_null($empfehlung)) { return $this->outputJsonError('No recommendation to withdraw.'); } - + // Reset status to 'inProgressDP' $result = $this->AnrechnungModel->deleteAnrechnungstatus($anrechnungstatus_id); - + if (isError($result)) { return $this->outputJsonError('Could not withdraw this application.'); } - + // Success output to AJAX return $this->outputJsonSuccess(array( 'status_bezeichnung' => $this->anrechnunglib->getLastAnrechnungstatus($anrechnung_id)) ); } - + public function saveEmpfehlungsNotiz() { $anrechnung_id = $this->input->post('anrechnung_id'); $notiz_id = $this->input->post('notiz_id'); $empfehlungstext = $this->input->post('empfehlung_text'); - + // Validate data if (isEmptyString($anrechnung_id)) { $this->terminateWithJsonError($this->p->t('ui', 'systemFehler')); } - + // Save Empfehlungstext $result = self::_saveEmpfehlungsNotiz($anrechnung_id, $empfehlungstext, $notiz_id); - + if (isError($result)) { $this->terminateWithJsonError($this->p->t('ui', 'fehlerBeimSpeichern')); } - + // Output success message $this->outputJsonSuccess($this->p->t('ui', 'gespeichert')); } @@ -386,10 +386,10 @@ class approveAnrechnungDetail extends Auth_Controller // Check if user is entitled to read dms doc self::_checkIfEntitledToReadDMSDoc($dms_id); - + // Set filename to be used on downlaod $filename = $this->anrechnunglib->setFilenameOnDownload($dms_id); - + // Download file $this->dmslib->download($dms_id, $filename); } @@ -475,7 +475,7 @@ class approveAnrechnungDetail extends Auth_Controller show_error('You are not entitled to read this document'); } - + /** * Send mail to lectors asking for recommendation. (first to LV-Leitung, if not present to all lectors of lv) * @param $mail_params @@ -503,8 +503,8 @@ class approveAnrechnungDetail extends Auth_Controller * Anyway this function will receive a unique array to avoid sending more mails to one and the same lector. * **/ $lector_arr = $this->_getLectors($anrechnung_arr); - - + + // Send mail to lectors foreach ($lector_arr as $lector) @@ -594,11 +594,11 @@ class approveAnrechnungDetail extends Auth_Controller return $lector_arr; } - + private function _saveEmpfehlungsNotiz($anrechnung_id, $empfehlungstext, $notiz_id) { $this->load->model('person/Notiz_model', 'NotizModel'); - + if (!isEmptyString($notiz_id)) { return $this->NotizModel->update( @@ -610,15 +610,15 @@ class approveAnrechnungDetail extends Auth_Controller ) ); } - + return $this->NotizModel->addNotizForAnrechnung( $anrechnung_id, self::ANRECHNUNG_NOTIZTITEL_EMPFEHLUNGSNOTIZ_BY_STGL, trim($empfehlungstext), $this->_uid ); - - + + } } From 7073db5ebe7221b8f6aea3b33f3179181f1ad824 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Mon, 27 Sep 2021 09:40:26 +0200 Subject: [PATCH 29/48] Added Permission check on Loading of Zeitaufzeichnung --- cis/private/tools/zeitaufzeichnung.php | 24 ++++++------ .../tools/zeitaufzeichnung_bisverwendung.php | 38 +++++++++++++------ 2 files changed, 39 insertions(+), 23 deletions(-) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index 2a1e66048..824c0ba3c 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -287,16 +287,16 @@ echo ' useCheckedDate(); $("#von_datum").change( - function() - { - var uid = $("#uidpass").val(); - var Datum = $(this).val(); - Tag=Datum.substring(0,2); - Monat=Datum.substring(3,5); - Jahr=Datum.substring(6,10); - var day = Jahr + "-" + Monat + "-" + Tag; - checkBisverwendung(day,uid); - } + function() + { + var uid = $("#uidpass").val(); + var Datum = $(this).val(); + Tag=Datum.substring(0,2); + Monat=Datum.substring(3,5); + Jahr=Datum.substring(6,10); + var day = Jahr + "-" + Monat + "-" + Tag; + checkBisverwendung(day,uid); + } ) function isVisible() @@ -753,9 +753,9 @@ echo ' day: day, uid: uid }, - success: function (json) + success: function (result) { - if (json.length > 3) + if (result==\'true\') { $("#homeofficeBlock").show(); } diff --git a/cis/private/tools/zeitaufzeichnung_bisverwendung.php b/cis/private/tools/zeitaufzeichnung_bisverwendung.php index 210d63005..2f430ecda 100644 --- a/cis/private/tools/zeitaufzeichnung_bisverwendung.php +++ b/cis/private/tools/zeitaufzeichnung_bisverwendung.php @@ -21,8 +21,6 @@ * Checks, if there is the possibility for homeoffice for the given bisverwendung of * a certain date. */ - - require_once('../../../config/cis.config.inc.php'); require_once('../../../include/globals.inc.php'); require_once('../../../include/phrasen.class.php'); @@ -35,25 +33,43 @@ require_once('../../../include/zeitaufzeichnung.class.php'); require_once('../../../include/projekt.class.php'); require_once('../../../include/bisverwendung.class.php'); +if ((isset($_GET['uid'])) && (isset($_GET['day']))) +{ + $uid = get_uid(); -if ((isset($_GET['uid'])) && (isset($_GET['day']))) { + //Wenn User Administrator ist und UID uebergeben wurde, dann die Zeitaufzeichnung + //des uebergebenen Users anzeigen + if (isset($_GET['uid']) && $_GET['uid'] != $uid) + { + $p = new phrasen(); + $rechte = new benutzerberechtigung(); + $rechte->getBerechtigungen($uid); + + if ($rechte->isBerechtigt('admin')) + { + $uid = $_GET['uid']; + } + else + { + die($p->t('global/FuerDieseAktionBenoetigenSieAdministrationsrechte')); + } + } - $uid = $_GET['uid']; $day = $_GET['day']; $verwendung = new bisverwendung(); $verwendung->getVerwendungDatum($uid, $day); - $verwendungArr = array(); + $homeoffice = false; foreach ($verwendung->result as $v) + { if ($v->homeoffice) - if (!in_array($v->bisverwendung_id, $verwendungArr)) - { - $bvId = $v->bisverwendung_id; - $verwendungArr[] = $v->bisverwendung_id; - } + { + $homeoffice = true; + } + } -echo json_encode($verwendungArr); + echo json_encode($homeoffice); } From e1961df70f2c59a94554e9c0d190a49cc1ee2dfb Mon Sep 17 00:00:00 2001 From: Manfred Kindl Date: Tue, 28 Sep 2021 01:14:29 +0200 Subject: [PATCH 30/48] =?UTF-8?q?Attribute=20erg=C3=A4nzt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Attribute ects_gesamt_studienplan und ects_pro_semester_studienplan ergänzt, da die ects der Studienordnungen nicht mehr relevant sind --- rdf/studienblatt.xml.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rdf/studienblatt.xml.php b/rdf/studienblatt.xml.php index 0aa752637..790f351e5 100644 --- a/rdf/studienblatt.xml.php +++ b/rdf/studienblatt.xml.php @@ -154,6 +154,8 @@ foreach($uid_arr as $uid) echo "\t\t"; echo "\t\tects."]]>"; echo "\t\tregelstudiendauer!=0?$studienordnung->ects/$studienplan->regelstudiendauer:0)."]]>"; + echo "\t\tects_stpl."]]>"; + echo "\t\tregelstudiendauer!=0?$studienplan->ects_stpl/$studienplan->regelstudiendauer:0)."]]>"; echo "\t\t"; $status_aktuell = ($prestudent->getLastStatus($student->prestudent_id,null,null))?$prestudent->status_kurzbz:''; From 97862472221faf82cf67cd51c336e121d935716b Mon Sep 17 00:00:00 2001 From: Manfred Date: Wed, 29 Sep 2021 18:33:10 +0200 Subject: [PATCH 31/48] Projekttitel statt Projektkurzbz in Projektexport anzeigen --- cis/private/tools/zeitaufzeichnung.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index 2a7939e17..cca4d3bfa 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -2014,7 +2014,7 @@ function getDataForProjectOverviewCSV($user) { if (true) { - $titel = $prjp->projekt_kurzbz; + $titel = $prjp->projekttitel; $projekt_kurzbz = $prjp->projekt_kurzbz; $projekt_phase = $prjp->bezeichnung; $projekt_phase_id = $prjp->projektphase_id; From 3b5936239e754b4d1ee956b85f7c92bb061d09b2 Mon Sep 17 00:00:00 2001 From: Manfred Date: Wed, 29 Sep 2021 18:33:55 +0200 Subject: [PATCH 32/48] Projekttiel in Funktion getProjectphaseForMitarbeiter --- include/projektphase.class.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/include/projektphase.class.php b/include/projektphase.class.php index 1b0818ca0..d029ba080 100644 --- a/include/projektphase.class.php +++ b/include/projektphase.class.php @@ -688,7 +688,7 @@ public function getFortschritt($projektphase_id) $qry = " SELECT - DISTINCT tbl_projektphase.* + DISTINCT tbl_projektphase.*,tbl_projekt.titel FROM fue.tbl_projektphase JOIN fue.tbl_projekt USING (projekt_kurzbz) @@ -718,6 +718,7 @@ public function getFortschritt($projektphase_id) $obj->bezeichnung = $row->bezeichnung; $obj->typ = $row->typ; $obj->beschreibung = $row->beschreibung; + $obj->projekttitel = $row->titel; $obj->start = $row->start; $obj->ende = $row->ende; $obj->personentage = $row->personentage; From 0ead8b4c3f0eee31fbed4d6b620688d87a8e654e Mon Sep 17 00:00:00 2001 From: Manfred Date: Wed, 29 Sep 2021 18:36:16 +0200 Subject: [PATCH 33/48] Button um Personendaten zu laden --- soap/datenverbund_client.php | 71 ++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/soap/datenverbund_client.php b/soap/datenverbund_client.php index a3b0982f8..01cdddaa2 100644 --- a/soap/datenverbund_client.php +++ b/soap/datenverbund_client.php @@ -26,6 +26,8 @@ require_once('../include/basis_db.class.php'); require_once('../include/benutzerberechtigung.class.php'); require_once('../include/dvb.class.php'); require_once('../include/errorhandler.class.php'); +require_once('../include/person.class.php'); +require_once('../include/adresse.class.php'); $uid = get_uid(); $rechte = new benutzerberechtigung(); @@ -63,12 +65,80 @@ $ausstellbehoerde = filter_input(INPUT_POST, 'ausstellbehoerde'); $ausstellland = filter_input(INPUT_POST, 'ausstellland'); $dokumentnr = filter_input(INPUT_POST, 'dokumentnr'); +$getPersonData = filter_input(INPUT_POST, 'getPersonData', FILTER_VALIDATE_BOOLEAN); +$data_person_id = filter_input(INPUT_POST, 'data_person_id'); +if ($getPersonData) +{ + $person = new person($data_person_id); + $adresse = new adresse(); + $adresse->loadZustellAdresse($person->person_id); + $svnr = $person->svnr; + if ($svnr == '' && $person->ersatzkennzeichen != '') + { + $svnr = $person->ersatzkennzeichen; + } + + echo json_encode(array( + 'status'=>'ok', + 'matrikelnummer'=>$person->matr_nr, + 'nachname'=>$person->nachname, + 'vorname'=>$person->vorname, + 'geburtsdatum'=>str_replace('-','',$person->gebdatum), + 'geschlecht'=>strtoupper($person->geschlecht), + 'postleitzahl'=>$adresse->plz, + 'staat'=>$adresse->nation, + 'sozialversicherungsnummer'=>$svnr + )); + + exit(); +} + ?> Datenverbund-Client + +

Testclient für Datenverbund-Webservice

    @@ -195,6 +265,7 @@ $dokumentnr = filter_input(INPUT_POST, 'dokumentnr'); break; case 'setMatrikelnummer': + echo '

    '; printSetMatrikelnrRows(); printrow('staat', 'Staat', $staat, '1-3 Stellen Codex (zb A für Österreich)', 3); printrow('svnr', 'SVNR', $svnr); From bfa85f9caf0c34bce10ba5916bdb54f11174ba2f Mon Sep 17 00:00:00 2001 From: Manfred Date: Wed, 29 Sep 2021 18:55:46 +0200 Subject: [PATCH 34/48] Wenn Stg nicht gesetzt, wird der Ablauf ignoriert --- cis/testtool/admin/auswertung_detail.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/cis/testtool/admin/auswertung_detail.php b/cis/testtool/admin/auswertung_detail.php index 05a6143ee..775234670 100644 --- a/cis/testtool/admin/auswertung_detail.php +++ b/cis/testtool/admin/auswertung_detail.php @@ -104,9 +104,11 @@ if(isset($_GET['show'])) SELECT distinct on(tbl_frage.frage_id) *, tbl_gebiet.kurzbz as gebiet FROM - testtool.tbl_frage - JOIN testtool.tbl_ablauf USING(gebiet_id) - JOIN testtool.tbl_frage_sprache USING(frage_id) + testtool.tbl_frage "; + if($stg_kz!='') + $qry.=" JOIN testtool.tbl_ablauf USING(gebiet_id) "; + + $qry.=" JOIN testtool.tbl_frage_sprache USING(frage_id) JOIN testtool.tbl_gebiet USING(gebiet_id) WHERE demo=false"; From ae357be5388f55658c9647dd1e19616e76fc2141 Mon Sep 17 00:00:00 2001 From: Manfred Date: Wed, 29 Sep 2021 18:56:44 +0200 Subject: [PATCH 35/48] Minor BugFix variables not defined --- cis/testtool/login.php | 1470 ++++++++++++++++++++-------------------- 1 file changed, 736 insertions(+), 734 deletions(-) diff --git a/cis/testtool/login.php b/cis/testtool/login.php index b7cbc02b5..a738c0a88 100644 --- a/cis/testtool/login.php +++ b/cis/testtool/login.php @@ -1,734 +1,736 @@ -, - * Andreas Oesterreicher , - * Rudolf Hangl , - * Manfred Kindl - * Cristina Hainberger - */ - -require_once('../../config/cis.config.inc.php'); -require_once('../../config/global.config.inc.php'); -require_once('../../include/person.class.php'); -require_once('../../include/prestudent.class.php'); -require_once('../../include/pruefling.class.php'); -require_once('../../include/studiengang.class.php'); -require_once('../../include/studienplan.class.php'); -require_once('../../include/ablauf.class.php'); -require_once('../../include/reihungstest.class.php'); -require_once('../../include/sprache.class.php'); -require_once '../../include/phrasen.class.php'; -require_once '../../include/datum.class.php'; - -if (!$db = new basis_db()) - die('Fehler beim Oeffnen der Datenbankverbindung'); - -// Start session -session_start(); - -// Logout (triggered by logout button in menu.php) -if (isset($_GET['logout']) && $_GET['logout'] == true) -{ - // Unset global vars - unset($_GET['logout']); - unset($_GET['sprache_user']); - $_POST = []; - $_SESSION = []; - - // Destroy session - session_destroy(); - - echo ' - - '; -} - -$gebdatum=''; -$date = new datum(); - -$reload_menu=false; -$alertmsg = ''; - -$sg_var = new studiengang(); - -if (isset($_POST['gebdatum']) && $_POST['gebdatum']!='') -{ - $gebdatum = $date->formatDatum($_POST['gebdatum'],'Y-m-d'); -} -else - $gebdatum=''; - -if (isset($_REQUEST['prestudent'])) -{ - $ps = new prestudent($_REQUEST['prestudent']); - - $login_ok = false; - if (defined('TESTTOOL_LOGIN_BEWERBUNGSTOOL') && TESTTOOL_LOGIN_BEWERBUNGSTOOL && isset($_GET['confirmation'])) - { - if (isset($_SESSION['bewerbung/personId']) && $ps->person_id == $_SESSION['bewerbung/personId']) - { - $login_ok = true; - } - else - { - $alertmsg .= '
    Login ist nicht korrekt. - Bitte schließen Sie ihren Browser und versuchen es erneut -
    '; - } - } - elseif(!defined('TESTTOOL_LOGIN_BEWERBUNGSTOOL') || TESTTOOL_LOGIN_BEWERBUNGSTOOL == false) - { - //Geburtsdatum Pruefen - if (isset($gebdatum) && $gebdatum == $ps->gebdatum) - { - $login_ok = true; - } - else - { - $alertmsg .= '
    '.$p->t('testtool/geburtsdatumStimmtNichtUeberein').'
    '; - } - } - - if ($login_ok) - { - $reihungstest_id=''; - //Freischaltung fuer zugeteilten Reihungstest pruefen - $rt = new reihungstest(); - - // Wenns der Dummy ist dann extra laden - // An der FHTW gibt es 3 Testuser für den Camus International - $prestudent_id_dummy_student = (defined('PRESTUDENT_ID_DUMMY_STUDENT')?PRESTUDENT_ID_DUMMY_STUDENT:''); - if ($prestudent_id_dummy_student==$ps->prestudent_id || - (CAMPUS_NAME == 'FH Technikum Wien' && $ps->prestudent_id == 30891) || - (CAMPUS_NAME == 'FH Technikum Wien' && $ps->prestudent_id == 30890) || - (CAMPUS_NAME == 'FH Technikum Wien' && $ps->prestudent_id == 30889)) - { - $rt->getReihungstestPerson($ps->person_id); - if (isset($rt->result[0])) - $reihungstest_id = $rt->result[0]->reihungstest_id; - else - { - $alertmsg .= '
    '.$p->t('testtool/reihungstestKannNichtGeladenWerden').'
    '; - } - } - else - { - if ($rt->getReihungstestPersonDatum($ps->prestudent_id, date('Y-m-d'))) - { - // TODO Was ist wenn da mehrere Zurueckkommen?! - if (isset($rt->result[0])) - $reihungstest_id = $rt->result[0]->reihungstest_id; - else - { - $alertmsg .= '
    '.$p->t('testtool/reihungstestKannNichtGeladenWerden').'
    '; - } - } - else - { - echo 'Failed:'.$rt->errormsg; - } - } - if ($reihungstest_id != '' && $rt->load($reihungstest_id)) - { - if ($rt->freigeschaltet) - { - // regenerate Session ID after Login - session_regenerate_id(); - - $pruefling = new pruefling(); - if ($pruefling->getPruefling($ps->prestudent_id)) - { - $studiengang = $pruefling->studiengang_kz; - $semester = $pruefling->semester; - } - else - { - $studiengang = $ps->studiengang_kz; - $ps->getLastStatus($ps->prestudent_id); - $semester = $ps->ausbildungssemester; - } - if ($semester=='') - $semester=1; - - $_SESSION['prestudent_id']=$_REQUEST['prestudent']; - $_SESSION['studiengang_kz']=$studiengang; - $_SESSION['nachname']=$ps->nachname; - $_SESSION['vorname']=$ps->vorname; - $_SESSION['gebdatum']=$ps->gebdatum; - $stg_obj = new studiengang($studiengang); - - $_SESSION['semester']=$semester; - $_SESSION['reihungstestID'] = $reihungstest_id; - $stg_obj->getStudiengangTyp($stg_obj->typ); - - // STG und Studienplan mit der höchsten Prio ermitteln - $firstPrio_studienplan_id = ''; - $firstPrio_studiengang_kz = ''; - - // * wenn STG des eingeloggten Prestudenten vom Typ Bachelor ist, dann höchste Prio aller - // Bachelor-STG ermitteln, an denen die Person noch interessiert ist - // Wenn STG vom Typ Master, dann wird als firstPrio der STPL bzw. der STG des MasterSTG gesetzt. - if ($stg_obj->typ == 'b') - { - $ps->getActualInteressenten($_REQUEST['prestudent'], true); - } - elseif ($stg_obj->typ == 'm') - { - $ps->getActualInteressenten($_REQUEST['prestudent'], false, 'm', $studiengang); - } - - foreach($ps->result as $row) - { - if (isset($row->studiengang_kz)) - { - $firstPrio_studienplan_id = $row->studienplan_id; - break; - } - } - foreach($ps->result as $row) - { - if (isset($row->studiengang_kz)) - { - $firstPrio_studiengang_kz = $row->studiengang_kz; - break; - } - } - // Sprachvorgaben zu STG mit höchster Prio ermitteln - - // * 1. Sprache über Ablauf Vorgaben ermitteln - $ablauf = new Ablauf(); - $ablauf->getAblaufGebiete($firstPrio_studiengang_kz, $firstPrio_studienplan_id); - $rt_sprache = ''; - - if (empty($ablauf->result[0])) - { - $ablauf->getAblaufGebiete($firstPrio_studiengang_kz); - } - - if (!empty($ablauf->result[0])) - { - $rt_sprache = $ablauf->result[0]->sprache; - } - - // * 2. falls keine Sprache vorhanden -> Sprache über Studienplan ermitteln - if (empty($rt_sprache)) - { - $stpl = new Studienplan(); - $stpl->loadStudienplan($firstPrio_studienplan_id); - $rt_sprache = $stpl->sprache; - } - - // * 3. falls keine Sprache vorhanden -> Sprache über Studiengang ermitteln - if (empty($rt_sprache)) - { - $stg = new Studiengang($firstPrio_studiengang_kz); - $rt_sprache = $stg->sprache; - } - - // * 4. Sprache setzen. Falls keine Sprache vorhanden -> DEFAULT language verwenden - if (empty($rt_sprache)) - { - $_SESSION['sprache_user'] = DEFAULT_LANGUAGE; - } - else - { - $_SESSION['sprache_user'] = $rt_sprache; - } - } - else - { - $alertmsg .= '
    '.$p->t('testtool/reihungstestNichtFreigeschalten').'
    '; - } - } - else - { - $alertmsg .= '
    '.$p->t('testtool/reihungstestKannNichtGeladenWerden').'
    '; - } - } -} - -// Set language of user. -// NOTE: don't move the code in order to check first the right studies' reihungstest language -// (in case it was overruled by other STG with higher priority) - -// Start with default language on first login (before any prestudent has been selected) -$sprache_user = DEFAULT_LANGUAGE; -if (isset($_SESSION['sprache_user']) && !empty($_SESSION['sprache_user'])) -{ - // If session var already exists, overwrite language var - // (session var changes e.g. when user selects other language with language-select-menu) - $sprache_user = $_SESSION['sprache_user']; -} -elseif (isset($_SESSION['prestudent_id'])) -{ - // If session var does not exist but prestudent is known, set the session var - $_SESSION['sprache_user'] = DEFAULT_LANGUAGE; -} - -// If language is changed by language select menu, reset language variables -if (isset($_GET['sprache_user']) && !empty($_GET['sprache_user'])) -{ - $sprache_user = $_GET['sprache_user']; - $_SESSION['sprache_user'] = $_GET['sprache_user']; -} - -// NOTE: leave phrasen here, as the final users language is not defined until here -$p = new phrasen($sprache_user); - -if (isset($_SESSION['prestudent_id'])) -{ - $prestudent_id=$_SESSION['prestudent_id']; -} -else -{ - //$prestudent_id=null; - $ps=new prestudent(); - $datum=date('Y-m-d'); - // An der FHTW wird ein Bewerber nur einmal ausgegeben (1. Prio) falls es mehrere Bewerbungen gibt - /*if (CAMPUS_NAME == 'FH Technikum Wien') - { - $ps->getFirstPrioPrestudentRT($datum); - } - else*/ - { - $ps->getPrestudentRT($datum); - } -} - - -if (isset($_SESSION['prestudent_id']) && !isset($_SESSION['pruefling_id'])) -{ - $pruefling = new pruefling(); - - //wenn kein Prüfling geladen werden kann - if (!$pruefling->getPruefling($_SESSION['prestudent_id'])) - $pruefling->new = true; - else - $pruefling->new = false; - - $pruefling->studiengang_kz = $_SESSION['studiengang_kz']; - $pruefling->semester = $_SESSION['semester']; - - $pruefling->idnachweis = ''; - $pruefling->registriert = date('Y-m-d H:i:s'); - $pruefling->prestudent_id = $_SESSION['prestudent_id']; - if ($pruefling->save()) - { - $_SESSION['pruefling_id']=$pruefling->pruefling_id; - $reload_menu=true; - } -} - -if (isset($_POST['save']) && isset($_SESSION['prestudent_id'])) -{ - $pruefling = new pruefling(); - if ($_POST['pruefling_id']!='') - if (!$pruefling->load($_POST['pruefling_id'])) - die('Pruefling wurde nicht gefunden'); - else - $pruefling->new=false; - else - $pruefling->new=true; - - $pruefling->studiengang_kz = $_SESSION['studiengang_kz']; - $pruefling->idnachweis = isset($_POST['idnachweis'])?$_POST['idnachweis']:''; - $pruefling->registriert = date('Y-m-d H:i:s'); - $pruefling->prestudent_id = $_SESSION['prestudent_id']; - $pruefling->semester = $_POST['semester']; - if ($pruefling->save()) - { - $_SESSION['pruefling_id']=$pruefling->pruefling_id; - $_SESSION['semester']=$pruefling->semester; - $reload_menu=true; - } -} -?> - - - - - - - - - - - -parent.menu.location.reload();'; -?> - - - -
    - -studiengang_kz); - $pruefling = new pruefling(); - $typ = new studiengang($prestudent->studiengang_kz); - $typ->getStudiengangTyp($stg_obj->typ); - - // STG mit der höchsten Prio ermitteln - $ps = new Prestudent(); - - // * prinzipiell STG der session übernehmem - $firstPrio_studiengang_kz = $prestudent->studiengang_kz; - - // * wenn STG des eingeloggten Prestudenten vom Typ Bachelor ist, dann höchste Prio aller - // Bachelor-STG ermitteln, an denen die Person noch interessiert ist - if ($typ->typ == 'b') - { - $ps->getActualInteressenten($prestudent_id, true, 'b'); - foreach($ps->result as $row_prio) - { - if (isset($row_prio->studiengang_kz)) - { - $firstPrio_studiengang_kz = $row_prio->studiengang_kz; - $firstPrio_studienplan_id = $row_prio->studienplan_id; - break; - } - } - } - - // Sprachwahl zu STG mit höchster Prio ermitteln - $ablauf = new Ablauf(); - $sprachwahl = false; - - $ablauf->getAblaufGebiete($firstPrio_studiengang_kz, $firstPrio_studienplan_id); - - if (empty($ablauf->result[0])) - { - $ablauf->getAblaufGebiete($firstPrio_studiengang_kz); - } - - if (isset($ablauf->result[0]) - && is_bool($ablauf->result[0]->sprachwahl)) - { - $sprachwahl = $ablauf->result[0]->sprachwahl; - } - - // If language can be switched, display language select menu on the top - if ($sprachwahl) - { - $_SESSION['sprache_auswahl'] = true; - ?> - - '; - echo ' -

    '. $p->t('testtool/begruessungstext'). '


    -

    '. $p->t('testtool/anmeldedaten'). '


    - '; - - echo ' - - - - - - - - - - - - - -
    '.$p->t('zeitaufzeichnung/id').''.$_SESSION['prestudent_id'].'
    '.$p->t('global/name').''.$_SESSION['vorname'].' '.$_SESSION['nachname'].'
    '.$p->t('global/geburtsdatum').''.$date->formatDatum($_SESSION["gebdatum"],"d.m.Y").'
    - '; - echo '
    '; - echo ' -

    '. $p->t('testtool/fuerFolgendeStgAngemeldet'). '


    - - - - - - - - - - '; - - // * wenn Prestudent an 1 - n Bachelor-Studiengängen interessiert ist, dann STG anführen - if ($typ->typ == 'b') - { - $ps_arr = new Prestudent(); - $ps_arr->getActualInteressenten($prestudent_id, false, 'b'); - - if (count($ps_arr->result) > 0) - { - // Jeweils letzten Status ermitteln (ob Interessent oder Abgewiesener) - foreach ($ps_arr->result as $ps_obj) - { - $ps_tmp = new Prestudent(); - $ps_tmp->getLastStatus($ps_obj->prestudent_id); - - $ps_obj->lastStatus = $ps_tmp->status_kurzbz; // letzten Status dem result array hinzufügen - $ps_obj->status_mehrsprachig = $ps_tmp->status_mehrsprachig; - } - - // Falls Status 'Abgewiesene' vorhanden, nach hinten reihen - usort($ps_arr->result, function($a, $b){ - return strcmp($b->lastStatus, $a->lastStatus); // Order by DESC - }); - foreach ($ps_arr->result as $ps_obj) - { - echo ''; - $stg = new Studiengang($ps_obj->studiengang_kz); - - if ($ps_obj->lastStatus == "Interessent" - || $ps_obj->lastStatus == "Bewerber" - || $ps_obj->lastStatus == "Wartender" - || $ps_obj->lastStatus == "Aufgenommener") - { - echo ''; - if ($ps_obj->ausbildungssemester == '1') - { - echo ''; - } - elseif ($ps_obj->ausbildungssemester == '3') - { - echo ''; - } - } - // wenn letzter Status \'Abgewiesener\' ist, dann als solchen kennzeichnen - elseif ($ps_obj->lastStatus == "Abgewiesener") - { - echo ' - - - '; - } - echo ''; - } - } - } - // * wenn Prestudent an einem Master-Studiengang interessiert ist, dann nur den einen STG anführen - else - { - // Letzten Status für des Prestudenten einholen - $ps_master = new Prestudent(); - $ps_master->getLastStatus($prestudent_id); - echo ''; - echo ''; - } - - echo ' - -
    '. $p->t('global/studiengang'). 'Status
    '. $ps_obj->typ_bz .' '. ($sprache_user == 'English' ? $stg->english : $stg->bezeichnung). ' ('.$ps_obj->orgform_bezeichnung[$sprache_user].')'. $p->t('testtool/regulaererEinstieg'). ' (1. Semester)'. $p->t('testtool/quereinstieg'). ' (3. Semester)'. $ps_obj->typ_bz .' '. ($sprache_user == 'English' ? $stg->english : $stg->bezeichnung). ''. $ps_obj->status_mehrsprachig[$sprache_user]. '
    '. $typ->bezeichnung.' '.($sprache_user=='English'?$stg_obj->english:$stg_obj->bezeichnung).''. $ps_master->status_mehrsprachig[$sprache_user]. '
    - '; - - echo '
    '; - - if ($pruefling->getPruefling($prestudent_id)) - { - echo '
    '; - echo ''; - echo ''; - //echo ''; - //echo ''; - //echo ''; - echo '
    '.$p->t('global/semester').': 
    ID Nachweis:
    '; - echo '
    '; - echo '

    '; - echo ' -
    - '.$p->t('testtool/klickenSieAufEinTeilgebiet').' -
    - '; - if ($pruefling->pruefling_id!='') - { - $_SESSION['pruefling_id']=$pruefling->pruefling_id; - } - } - else - { - echo ''.$p->t('testtool/keinPrueflingseintragVorhanden').''; - } - echo '
    '; -} -else // LOGIN Site (vor Login) -{ - if (defined('TESTTOOL_LOGIN_BEWERBUNGSTOOL') && TESTTOOL_LOGIN_BEWERBUNGSTOOL) - { - echo '
    '; - echo '
    '.$alertmsg.'
    '; - echo $p->t('testtool/einfuehrungsText'); - - if (isset($_SESSION['bewerbung/personId'])) - { - echo ''; - echo '
    - '.$p->t('testtool/loginNoetig').'

    -
    - - - '.$p->t('testtool/confirmationText').' -

    - -
    '; - } - else - { - echo '
    - '.$p->t('testtool/loginNoetig').'

    -
    - -
    '; - } - echo ' -
    '; - echo '
    '; - } - else - { - $prestudent_id_dummy_student = (defined('PRESTUDENT_ID_DUMMY_STUDENT')?PRESTUDENT_ID_DUMMY_STUDENT:''); - echo '
    '; - - // Welcome text - echo '
    '.$alertmsg.'
    '; - echo ' -
    -
    -

    Herzlich Willkommen zum Reihungstest



    - Bitte warten Sie mit dem Login auf die Anweisung der Aufsichtsperson.

    - Wir wünschen Ihnen einen erfolgreichen Start ins Studium. -
    -
    -

    Welcome to the placement test



    - Please wait for the tutor\'s instructions before you log in.

    - We wish you a good start to your studies. -
    -
    - '; - - // Begin form - echo '
    '; - echo '
    '; - - // Name select menu - echo '
    '; - echo ''; - echo '
    '; - echo ''; - echo '
    '; // end col-xs - echo '
    '; // end form-group - - // Datepicker input - echo '
    '; - echo ''; - echo '
    '; - echo ''; - echo '
    '; // end col-xs - echo '
    '; // end form-group - - // Login button - echo ''; - - echo '
    '; // end form - - echo '
    '; // end row - echo '
    '; // end col-xs-11 - } -} - -?> -
    - - +, + * Andreas Oesterreicher , + * Rudolf Hangl , + * Manfred Kindl + * Cristina Hainberger + */ + +require_once('../../config/cis.config.inc.php'); +require_once('../../config/global.config.inc.php'); +require_once('../../include/person.class.php'); +require_once('../../include/prestudent.class.php'); +require_once('../../include/pruefling.class.php'); +require_once('../../include/studiengang.class.php'); +require_once('../../include/studienplan.class.php'); +require_once('../../include/ablauf.class.php'); +require_once('../../include/reihungstest.class.php'); +require_once('../../include/sprache.class.php'); +require_once '../../include/phrasen.class.php'; +require_once '../../include/datum.class.php'; + +if (!$db = new basis_db()) + die('Fehler beim Oeffnen der Datenbankverbindung'); + +// Start session +session_start(); + +// Logout (triggered by logout button in menu.php) +if (isset($_GET['logout']) && $_GET['logout'] == true) +{ + // Unset global vars + unset($_GET['logout']); + unset($_GET['sprache_user']); + $_POST = []; + $_SESSION = []; + + // Destroy session + session_destroy(); + + echo ' + + '; +} + +$gebdatum=''; +$date = new datum(); + +$reload_menu=false; +$alertmsg = ''; + +$sg_var = new studiengang(); + +if (isset($_POST['gebdatum']) && $_POST['gebdatum']!='') +{ + $gebdatum = $date->formatDatum($_POST['gebdatum'],'Y-m-d'); +} +else + $gebdatum=''; + +if (isset($_REQUEST['prestudent'])) +{ + $ps = new prestudent($_REQUEST['prestudent']); + + $login_ok = false; + if (defined('TESTTOOL_LOGIN_BEWERBUNGSTOOL') && TESTTOOL_LOGIN_BEWERBUNGSTOOL && isset($_GET['confirmation'])) + { + if (isset($_SESSION['bewerbung/personId']) && $ps->person_id == $_SESSION['bewerbung/personId']) + { + $login_ok = true; + } + else + { + $alertmsg .= '
    Login ist nicht korrekt. + Bitte schließen Sie ihren Browser und versuchen es erneut +
    '; + } + } + elseif(!defined('TESTTOOL_LOGIN_BEWERBUNGSTOOL') || TESTTOOL_LOGIN_BEWERBUNGSTOOL == false) + { + //Geburtsdatum Pruefen + if (isset($gebdatum) && $gebdatum == $ps->gebdatum) + { + $login_ok = true; + } + else + { + $alertmsg .= '
    '.$p->t('testtool/geburtsdatumStimmtNichtUeberein').'
    '; + } + } + + if ($login_ok) + { + $reihungstest_id=''; + //Freischaltung fuer zugeteilten Reihungstest pruefen + $rt = new reihungstest(); + + // Wenns der Dummy ist dann extra laden + // An der FHTW gibt es 3 Testuser für den Camus International + $prestudent_id_dummy_student = (defined('PRESTUDENT_ID_DUMMY_STUDENT')?PRESTUDENT_ID_DUMMY_STUDENT:''); + if ($prestudent_id_dummy_student==$ps->prestudent_id || + (CAMPUS_NAME == 'FH Technikum Wien' && $ps->prestudent_id == 30891) || + (CAMPUS_NAME == 'FH Technikum Wien' && $ps->prestudent_id == 30890) || + (CAMPUS_NAME == 'FH Technikum Wien' && $ps->prestudent_id == 30889)) + { + $rt->getReihungstestPerson($ps->person_id); + if (isset($rt->result[0])) + $reihungstest_id = $rt->result[0]->reihungstest_id; + else + { + $alertmsg .= '
    '.$p->t('testtool/reihungstestKannNichtGeladenWerden').'
    '; + } + } + else + { + if ($rt->getReihungstestPersonDatum($ps->prestudent_id, date('Y-m-d'))) + { + // TODO Was ist wenn da mehrere Zurueckkommen?! + if (isset($rt->result[0])) + $reihungstest_id = $rt->result[0]->reihungstest_id; + else + { + $alertmsg .= '
    '.$p->t('testtool/reihungstestKannNichtGeladenWerden').'
    '; + } + } + else + { + echo 'Failed:'.$rt->errormsg; + } + } + if ($reihungstest_id != '' && $rt->load($reihungstest_id)) + { + if ($rt->freigeschaltet) + { + // regenerate Session ID after Login + session_regenerate_id(); + + $pruefling = new pruefling(); + if ($pruefling->getPruefling($ps->prestudent_id)) + { + $studiengang = $pruefling->studiengang_kz; + $semester = $pruefling->semester; + } + else + { + $studiengang = $ps->studiengang_kz; + $ps->getLastStatus($ps->prestudent_id); + $semester = $ps->ausbildungssemester; + } + if ($semester=='') + $semester=1; + + $_SESSION['prestudent_id']=$_REQUEST['prestudent']; + $_SESSION['studiengang_kz']=$studiengang; + $_SESSION['nachname']=$ps->nachname; + $_SESSION['vorname']=$ps->vorname; + $_SESSION['gebdatum']=$ps->gebdatum; + $stg_obj = new studiengang($studiengang); + + $_SESSION['semester']=$semester; + $_SESSION['reihungstestID'] = $reihungstest_id; + $stg_obj->getStudiengangTyp($stg_obj->typ); + + // STG und Studienplan mit der höchsten Prio ermitteln + $firstPrio_studienplan_id = ''; + $firstPrio_studiengang_kz = ''; + + // * wenn STG des eingeloggten Prestudenten vom Typ Bachelor ist, dann höchste Prio aller + // Bachelor-STG ermitteln, an denen die Person noch interessiert ist + // Wenn STG vom Typ Master, dann wird als firstPrio der STPL bzw. der STG des MasterSTG gesetzt. + if ($stg_obj->typ == 'b') + { + $ps->getActualInteressenten($_REQUEST['prestudent'], true); + } + elseif ($stg_obj->typ == 'm') + { + $ps->getActualInteressenten($_REQUEST['prestudent'], false, 'm', $studiengang); + } + + foreach($ps->result as $row) + { + if (isset($row->studiengang_kz)) + { + $firstPrio_studienplan_id = $row->studienplan_id; + break; + } + } + foreach($ps->result as $row) + { + if (isset($row->studiengang_kz)) + { + $firstPrio_studiengang_kz = $row->studiengang_kz; + break; + } + } + // Sprachvorgaben zu STG mit höchster Prio ermitteln + + // * 1. Sprache über Ablauf Vorgaben ermitteln + $ablauf = new Ablauf(); + $ablauf->getAblaufGebiete($firstPrio_studiengang_kz, $firstPrio_studienplan_id); + $rt_sprache = ''; + + if (empty($ablauf->result[0])) + { + $ablauf->getAblaufGebiete($firstPrio_studiengang_kz); + } + + if (!empty($ablauf->result[0])) + { + $rt_sprache = $ablauf->result[0]->sprache; + } + + // * 2. falls keine Sprache vorhanden -> Sprache über Studienplan ermitteln + if (empty($rt_sprache)) + { + $stpl = new Studienplan(); + $stpl->loadStudienplan($firstPrio_studienplan_id); + $rt_sprache = $stpl->sprache; + } + + // * 3. falls keine Sprache vorhanden -> Sprache über Studiengang ermitteln + if (empty($rt_sprache)) + { + $stg = new Studiengang($firstPrio_studiengang_kz); + $rt_sprache = $stg->sprache; + } + + // * 4. Sprache setzen. Falls keine Sprache vorhanden -> DEFAULT language verwenden + if (empty($rt_sprache)) + { + $_SESSION['sprache_user'] = DEFAULT_LANGUAGE; + } + else + { + $_SESSION['sprache_user'] = $rt_sprache; + } + } + else + { + $alertmsg .= '
    '.$p->t('testtool/reihungstestNichtFreigeschalten').'
    '; + } + } + else + { + $alertmsg .= '
    '.$p->t('testtool/reihungstestKannNichtGeladenWerden').'
    '; + } + } +} + +// Set language of user. +// NOTE: don't move the code in order to check first the right studies' reihungstest language +// (in case it was overruled by other STG with higher priority) + +// Start with default language on first login (before any prestudent has been selected) +$sprache_user = DEFAULT_LANGUAGE; +if (isset($_SESSION['sprache_user']) && !empty($_SESSION['sprache_user'])) +{ + // If session var already exists, overwrite language var + // (session var changes e.g. when user selects other language with language-select-menu) + $sprache_user = $_SESSION['sprache_user']; +} +elseif (isset($_SESSION['prestudent_id'])) +{ + // If session var does not exist but prestudent is known, set the session var + $_SESSION['sprache_user'] = DEFAULT_LANGUAGE; +} + +// If language is changed by language select menu, reset language variables +if (isset($_GET['sprache_user']) && !empty($_GET['sprache_user'])) +{ + $sprache_user = $_GET['sprache_user']; + $_SESSION['sprache_user'] = $_GET['sprache_user']; +} + +// NOTE: leave phrasen here, as the final users language is not defined until here +$p = new phrasen($sprache_user); + +if (isset($_SESSION['prestudent_id'])) +{ + $prestudent_id=$_SESSION['prestudent_id']; +} +else +{ + //$prestudent_id=null; + $ps=new prestudent(); + $datum=date('Y-m-d'); + // An der FHTW wird ein Bewerber nur einmal ausgegeben (1. Prio) falls es mehrere Bewerbungen gibt + /*if (CAMPUS_NAME == 'FH Technikum Wien') + { + $ps->getFirstPrioPrestudentRT($datum); + } + else*/ + { + $ps->getPrestudentRT($datum); + } +} + + +if (isset($_SESSION['prestudent_id']) && !isset($_SESSION['pruefling_id'])) +{ + $pruefling = new pruefling(); + + //wenn kein Prüfling geladen werden kann + if (!$pruefling->getPruefling($_SESSION['prestudent_id'])) + $pruefling->new = true; + else + $pruefling->new = false; + + $pruefling->studiengang_kz = $_SESSION['studiengang_kz']; + $pruefling->semester = $_SESSION['semester']; + + $pruefling->idnachweis = ''; + $pruefling->registriert = date('Y-m-d H:i:s'); + $pruefling->prestudent_id = $_SESSION['prestudent_id']; + if ($pruefling->save()) + { + $_SESSION['pruefling_id']=$pruefling->pruefling_id; + $reload_menu=true; + } +} + +if (isset($_POST['save']) && isset($_SESSION['prestudent_id'])) +{ + $pruefling = new pruefling(); + if ($_POST['pruefling_id']!='') + if (!$pruefling->load($_POST['pruefling_id'])) + die('Pruefling wurde nicht gefunden'); + else + $pruefling->new=false; + else + $pruefling->new=true; + + $pruefling->studiengang_kz = $_SESSION['studiengang_kz']; + $pruefling->idnachweis = isset($_POST['idnachweis'])?$_POST['idnachweis']:''; + $pruefling->registriert = date('Y-m-d H:i:s'); + $pruefling->prestudent_id = $_SESSION['prestudent_id']; + $pruefling->semester = $_POST['semester']; + if ($pruefling->save()) + { + $_SESSION['pruefling_id']=$pruefling->pruefling_id; + $_SESSION['semester']=$pruefling->semester; + $reload_menu=true; + } +} +?> + + + + + + + + + + + +parent.menu.location.reload();'; +?> + + + +
    + +studiengang_kz); + $pruefling = new pruefling(); + $typ = new studiengang($prestudent->studiengang_kz); + $typ->getStudiengangTyp($stg_obj->typ); + + // STG mit der höchsten Prio ermitteln + $ps = new Prestudent(); + + // * prinzipiell STG der session übernehmem + $firstPrio_studiengang_kz = $prestudent->studiengang_kz; + + // * wenn STG des eingeloggten Prestudenten vom Typ Bachelor ist, dann höchste Prio aller + // Bachelor-STG ermitteln, an denen die Person noch interessiert ist + $firstPrio_studienplan_id = ''; + $firstPrio_studiengang_kz = ''; + if ($typ->typ == 'b') + { + $ps->getActualInteressenten($prestudent_id, true, 'b'); + foreach($ps->result as $row_prio) + { + if (isset($row_prio->studiengang_kz)) + { + $firstPrio_studiengang_kz = $row_prio->studiengang_kz; + $firstPrio_studienplan_id = $row_prio->studienplan_id; + break; + } + } + } + + // Sprachwahl zu STG mit höchster Prio ermitteln + $ablauf = new Ablauf(); + $sprachwahl = false; + + $ablauf->getAblaufGebiete($firstPrio_studiengang_kz, $firstPrio_studienplan_id); + + if (empty($ablauf->result[0])) + { + $ablauf->getAblaufGebiete($firstPrio_studiengang_kz); + } + + if (isset($ablauf->result[0]) + && is_bool($ablauf->result[0]->sprachwahl)) + { + $sprachwahl = $ablauf->result[0]->sprachwahl; + } + + // If language can be switched, display language select menu on the top + if ($sprachwahl) + { + $_SESSION['sprache_auswahl'] = true; + ?> + + '; + echo ' +

    '. $p->t('testtool/begruessungstext'). '


    +

    '. $p->t('testtool/anmeldedaten'). '


    + '; + + echo ' + + + + + + + + + + + + + +
    '.$p->t('zeitaufzeichnung/id').''.$_SESSION['prestudent_id'].'
    '.$p->t('global/name').''.$_SESSION['vorname'].' '.$_SESSION['nachname'].'
    '.$p->t('global/geburtsdatum').''.$date->formatDatum($_SESSION["gebdatum"],"d.m.Y").'
    + '; + echo '
    '; + echo ' +

    '. $p->t('testtool/fuerFolgendeStgAngemeldet'). '


    + + + + + + + + + + '; + + // * wenn Prestudent an 1 - n Bachelor-Studiengängen interessiert ist, dann STG anführen + if ($typ->typ == 'b') + { + $ps_arr = new Prestudent(); + $ps_arr->getActualInteressenten($prestudent_id, false, 'b'); + + if (count($ps_arr->result) > 0) + { + // Jeweils letzten Status ermitteln (ob Interessent oder Abgewiesener) + foreach ($ps_arr->result as $ps_obj) + { + $ps_tmp = new Prestudent(); + $ps_tmp->getLastStatus($ps_obj->prestudent_id); + + $ps_obj->lastStatus = $ps_tmp->status_kurzbz; // letzten Status dem result array hinzufügen + $ps_obj->status_mehrsprachig = $ps_tmp->status_mehrsprachig; + } + + // Falls Status 'Abgewiesene' vorhanden, nach hinten reihen + usort($ps_arr->result, function($a, $b){ + return strcmp($b->lastStatus, $a->lastStatus); // Order by DESC + }); + foreach ($ps_arr->result as $ps_obj) + { + echo ''; + $stg = new Studiengang($ps_obj->studiengang_kz); + + if ($ps_obj->lastStatus == "Interessent" + || $ps_obj->lastStatus == "Bewerber" + || $ps_obj->lastStatus == "Wartender" + || $ps_obj->lastStatus == "Aufgenommener") + { + echo ''; + if ($ps_obj->ausbildungssemester == '1') + { + echo ''; + } + elseif ($ps_obj->ausbildungssemester == '3') + { + echo ''; + } + } + // wenn letzter Status \'Abgewiesener\' ist, dann als solchen kennzeichnen + elseif ($ps_obj->lastStatus == "Abgewiesener") + { + echo ' + + + '; + } + echo ''; + } + } + } + // * wenn Prestudent an einem Master-Studiengang interessiert ist, dann nur den einen STG anführen + else + { + // Letzten Status für des Prestudenten einholen + $ps_master = new Prestudent(); + $ps_master->getLastStatus($prestudent_id); + echo ''; + echo ''; + } + + echo ' + +
    '. $p->t('global/studiengang'). 'Status
    '. $ps_obj->typ_bz .' '. ($sprache_user == 'English' ? $stg->english : $stg->bezeichnung). ' ('.$ps_obj->orgform_bezeichnung[$sprache_user].')'. $p->t('testtool/regulaererEinstieg'). ' (1. Semester)'. $p->t('testtool/quereinstieg'). ' (3. Semester)'. $ps_obj->typ_bz .' '. ($sprache_user == 'English' ? $stg->english : $stg->bezeichnung). ''. $ps_obj->status_mehrsprachig[$sprache_user]. '
    '. $typ->bezeichnung.' '.($sprache_user=='English'?$stg_obj->english:$stg_obj->bezeichnung).''. $ps_master->status_mehrsprachig[$sprache_user]. '
    + '; + + echo '
    '; + + if ($pruefling->getPruefling($prestudent_id)) + { + echo '
    '; + echo ''; + echo ''; + //echo ''; + //echo ''; + //echo ''; + echo '
    '.$p->t('global/semester').': 
    ID Nachweis:
    '; + echo '
    '; + echo '

    '; + echo ' +
    + '.$p->t('testtool/klickenSieAufEinTeilgebiet').' +
    + '; + if ($pruefling->pruefling_id!='') + { + $_SESSION['pruefling_id']=$pruefling->pruefling_id; + } + } + else + { + echo ''.$p->t('testtool/keinPrueflingseintragVorhanden').''; + } + echo '
    '; +} +else // LOGIN Site (vor Login) +{ + if (defined('TESTTOOL_LOGIN_BEWERBUNGSTOOL') && TESTTOOL_LOGIN_BEWERBUNGSTOOL) + { + echo '
    '; + echo '
    '.$alertmsg.'
    '; + echo $p->t('testtool/einfuehrungsText'); + + if (isset($_SESSION['bewerbung/personId'])) + { + echo ''; + echo '
    + '.$p->t('testtool/loginNoetig').'

    +
    + + + '.$p->t('testtool/confirmationText').' +

    + +
    '; + } + else + { + echo '
    + '.$p->t('testtool/loginNoetig').'

    +
    + +
    '; + } + echo ' +
    '; + echo '
    '; + } + else + { + $prestudent_id_dummy_student = (defined('PRESTUDENT_ID_DUMMY_STUDENT')?PRESTUDENT_ID_DUMMY_STUDENT:''); + echo '
    '; + + // Welcome text + echo '
    '.$alertmsg.'
    '; + echo ' +
    +
    +

    Herzlich Willkommen zum Reihungstest



    + Bitte warten Sie mit dem Login auf die Anweisung der Aufsichtsperson.

    + Wir wünschen Ihnen einen erfolgreichen Start ins Studium. +
    +
    +

    Welcome to the placement test



    + Please wait for the tutor\'s instructions before you log in.

    + We wish you a good start to your studies. +
    +
    + '; + + // Begin form + echo '
    '; + echo '
    '; + + // Name select menu + echo '
    '; + echo ''; + echo '
    '; + echo ''; + echo '
    '; // end col-xs + echo '
    '; // end form-group + + // Datepicker input + echo '
    '; + echo ''; + echo '
    '; + echo ''; + echo '
    '; // end col-xs + echo '
    '; // end form-group + + // Login button + echo ''; + + echo '
    '; // end form + + echo '
    '; // end row + echo '
    '; // end col-xs-11 + } +} + +?> +
    + + From 80491e4f55c3ce6e209c5fcabeb6eca00eba0460 Mon Sep 17 00:00:00 2001 From: Manfred Date: Wed, 29 Sep 2021 19:05:10 +0200 Subject: [PATCH 36/48] =?UTF-8?q?Export=20f=C3=BCr=20mehrere=20Studieng?= =?UTF-8?q?=C3=A4nge=20m=C3=B6glich?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/statistik/lvplanung.xls.php | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/content/statistik/lvplanung.xls.php b/content/statistik/lvplanung.xls.php index 6eec62f49..3b74992fa 100644 --- a/content/statistik/lvplanung.xls.php +++ b/content/statistik/lvplanung.xls.php @@ -73,8 +73,16 @@ $rechte->getBerechtigungen($user); if($studiengang_kz != '') { - if(!$rechte->isBerechtigt('assistenz', $studiengang_kz, 's')) - die($rechte->errormsg); + $studiengang_kz_arr = explode(',',$studiengang_kz); + foreach ($studiengang_kz_arr AS $kennzahl) + { + if (!is_numeric($kennzahl)) + { + die($kennzahl.' is not an iteger value'); + } + if(!$rechte->isBerechtigt('assistenz', $kennzahl, 's')) + die($rechte->errormsg); + } } elseif($oe_kurzbz!='') { @@ -162,7 +170,7 @@ JOIN lehre.tbl_lehreinheitmitarbeiter USING (lehreinheit_id) WHERE tbl_lehreinheit.studiensemester_kurzbz = ".$db->db_add_param($studiensemester_kurzbz); if($studiengang_kz!='') - $qry.=" AND tbl_lehrveranstaltung.studiengang_kz=".$db->db_add_param($studiengang_kz, FHC_INTEGER); + $qry.=" AND tbl_lehrveranstaltung.studiengang_kz IN (".$studiengang_kz.")"; if($oe_kurzbz!='') $qry.=" AND tbl_lehrveranstaltung.oe_kurzbz=".$db->db_add_param($oe_kurzbz); @@ -421,7 +429,7 @@ if($result = $db->db_query($qry)) $qry.=" AND tbl_lehrveranstaltung.oe_kurzbz=".$db->db_add_param($oe_kurzbz); if($studiengang_kz!='') - $qry.=" AND tbl_lehrveranstaltung.studiengang_kz=".$db->db_add_param($studiengang_kz, FHC_INTEGER); + $qry.=" AND tbl_lehrveranstaltung.studiengang_kz IN(".$studiengang_kz.")"; if($semester!='') $qry.=" AND tbl_lehrveranstaltung.semester=".$db->db_add_param($semester, FHC_INTEGER); From 1b07cbde72b2a01ef5e36af765e841b063356da9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Fri, 1 Oct 2021 09:42:59 +0200 Subject: [PATCH 37/48] Fixed generation of Diplomasupplement if Outgoing University includes Special chars --- rdf/diplomasupplement.xml.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rdf/diplomasupplement.xml.php b/rdf/diplomasupplement.xml.php index 14352a3c3..d55187c6c 100644 --- a/rdf/diplomasupplement.xml.php +++ b/rdf/diplomasupplement.xml.php @@ -389,7 +389,7 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml") echo "".$datum->convertISODate($row1->bis).""; echo "$row1->zweck"; echo "$row1->ort"; - echo "$row1->universitaet"; + echo "universitaet]]>"; echo ""; } echo ""; From dfc55a8f95ad83a6713cf84fe460fa3fab375ea2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Fri, 1 Oct 2021 14:20:15 +0200 Subject: [PATCH 38/48] =?UTF-8?q?Time=20Limit=20f=C3=BCr=20Statistiken=20e?= =?UTF-8?q?rh=C3=B6ht?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/statistik.class.php | 1 + 1 file changed, 1 insertion(+) diff --git a/include/statistik.class.php b/include/statistik.class.php index 12ab530fb..7d34a04a0 100644 --- a/include/statistik.class.php +++ b/include/statistik.class.php @@ -510,6 +510,7 @@ class statistik extends basis_db $this->html=''; $this->csv=''; $this->json=array(); + set_time_limit(60); if($this->sql!='') { From 226a674e7b4ae0e9247f202bff443740d5a8769f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Fri, 1 Oct 2021 15:43:40 +0200 Subject: [PATCH 39/48] Projektzeitenexport ohne Projekte im Zeitraum zeigt nun eine entsprechende Fehlermeldung statt PHP Error --- cis/private/tools/zeitaufzeichnung_projektliste.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cis/private/tools/zeitaufzeichnung_projektliste.php b/cis/private/tools/zeitaufzeichnung_projektliste.php index 4621c4a66..177f1f8aa 100644 --- a/cis/private/tools/zeitaufzeichnung_projektliste.php +++ b/cis/private/tools/zeitaufzeichnung_projektliste.php @@ -559,9 +559,11 @@ $totalworktimewidth = 13; $worktimewidth = 14; $timecolumnswidth = 2 * $daywidth + $totalworktimewidth + $worktimewidth; -if ($nrProjects < 1)//no projekts - merge all cells and write notice +if ($nrProjects < 1) //no projekts - write notice { - $projektnames[] = "Keine Projekte vorhanden"; + $worksheet =& $workbook->addWorksheet('Tabelle'); + $worksheet->setInputEncoding('utf-8'); + $worksheet->write(0,0,'Für diesen Zeitraum sind keine Projekte zugeordnet'); } foreach ($projektnames as $projektname) From 97818781b12990eba2ae4b8593ec2289a49f4291 Mon Sep 17 00:00:00 2001 From: Manfred Kindl Date: Fri, 1 Oct 2021 23:26:25 +0200 Subject: [PATCH 40/48] =?UTF-8?q?Admins=20k=C3=B6nnen=20Maximalstunden=20?= =?UTF-8?q?=C3=BCberschreiben?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Phrasenkorrektur Lektoren auf Lehrende --- content/lvplanung/lehrveranstaltungDBDML.php | 4 ++-- content/lvplanung/lehrveranstaltungoverlay.xul.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/content/lvplanung/lehrveranstaltungDBDML.php b/content/lvplanung/lehrveranstaltungDBDML.php index f764545a6..438844071 100644 --- a/content/lvplanung/lehrveranstaltungDBDML.php +++ b/content/lvplanung/lehrveranstaltungDBDML.php @@ -365,7 +365,7 @@ if(!$error) { if($row->summe>$max_stunden) { - if(!$fixangestellt) + if(!$fixangestellt && !$rechte->isBerechtigt('admin')) { if(!LehrauftragAufFirma($lem->mitarbeiter_uid)) { @@ -624,7 +624,7 @@ if(!$error) if($row_std = $db->db_fetch_object($result_std)) { //Grenze ueberschritten - if($row_std->summe>=$max_stunden) + if($row_std->summe>=$max_stunden && !$rechte->isBerechtigt('admin')) { $return = false; $error = true; diff --git a/content/lvplanung/lehrveranstaltungoverlay.xul.php b/content/lvplanung/lehrveranstaltungoverlay.xul.php index cbe9b89ec..f2cc27b2d 100644 --- a/content/lvplanung/lehrveranstaltungoverlay.xul.php +++ b/content/lvplanung/lehrveranstaltungoverlay.xul.php @@ -159,7 +159,7 @@ echo ' -