From 71c53296bb0c130f93127c75dda7ff47a90a0f85 Mon Sep 17 00:00:00 2001 From: Manfred Kindl Date: Wed, 16 Jan 2019 17:32:31 +0100 Subject: [PATCH 01/39] =?UTF-8?q?Spalten=20f=C3=BCr=20Verband=20und=20Grup?= =?UTF-8?q?pe=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/statistik/notenspiegel.php | 25 +++++++++++++++----- content/statistik/notenspiegel_erweitert.php | 24 +++++++++++++++---- 2 files changed, 38 insertions(+), 11 deletions(-) diff --git a/content/statistik/notenspiegel.php b/content/statistik/notenspiegel.php index 7f5cfb20f..d9cb3dca0 100644 --- a/content/statistik/notenspiegel.php +++ b/content/statistik/notenspiegel.php @@ -164,6 +164,11 @@ if($typ=='xls') $format_bold_center->setAlign('center'); $format_bold_center->setBorder(1); + $format_bold_left =& $workbook->addFormat(); + $format_bold_left->setBold(); + $format_bold_left->setAlign('left'); + $format_bold_left->setBorder(1); + $format_number =& $workbook->addFormat(); $format_number->setNumFormat('0.00'); $format_number->setBorder(1); @@ -208,9 +213,13 @@ if($typ=='xls') $maxlength[$spalte]=10; $worksheet->write($zeile,++$spalte,'Vorname', $format_bold); $maxlength[$spalte]=10; + $worksheet->write($zeile, ++$spalte, 'V', $format_bold); + $maxlength[$spalte] = 2; + $worksheet->write($zeile, ++$spalte, 'G', $format_bold); + $maxlength[$spalte] = 2; $worksheet->write($zeile,++$spalte,'Personenkennzeichen', $format_bold); - $maxlength[$spalte]=20; - $maxheaderheight=20; + $maxlength[$spalte] = 20; + $maxheaderheight = 20; while($row_lva = $db->db_fetch_object($result_lva)) { @@ -252,7 +261,9 @@ if($typ=='xls') $worksheet->write($zeile,++$spalte,$row_student->vorname, $format_bold); if($maxlength[$spalte]vorname)) $maxlength[$spalte]=strlen($row_student->vorname); - $worksheet->write($zeile,++$spalte,$row_student->matrikelnr, $format_bold); + $worksheet->write($zeile, ++$spalte, $row_student->verband, $format_bold); + $worksheet->write($zeile, ++$spalte, $row_student->gruppe, $format_bold_left); + $worksheet->write($zeile, ++$spalte,$row_student->matrikelnr, $format_bold); //Alle Zeugnisnoten des Studierenden holen $noten = array(); @@ -341,7 +352,7 @@ if($typ=='xls') } $zeile++; - $spalte=2; + $spalte = 4; $worksheet->write($zeile,$spalte,'Notendurchschnitt', $format_bold); $summe_schnitt=0; @@ -385,8 +396,10 @@ if($typ=='xls') //Zellen der 1. Zeile verbinden $worksheet->setMerge(0,0,0,$spalte); - //Hoehe der 2. Zeile anpassen damit die LVs alle sichtbar sind - $worksheet->setRow(1,$maxheaderheight*5); + //Hoehe der 2. Zeile anpassen damit die LVs alle sichtbar sind, aber nicht größer als 300 + if ($maxheaderheight * 5 > 300) + $maxheaderheight = 60; + $worksheet->setRow(1, $maxheaderheight * 5); //Ausdruck auf 1 Seite anpassen $worksheet->fitToPages(1,1); diff --git a/content/statistik/notenspiegel_erweitert.php b/content/statistik/notenspiegel_erweitert.php index 5975a89ea..acaa91611 100644 --- a/content/statistik/notenspiegel_erweitert.php +++ b/content/statistik/notenspiegel_erweitert.php @@ -236,6 +236,11 @@ if ($typ == 'xls') $format_bold_center->setBold(); $format_bold_center->setAlign('center'); $format_bold_center->setBorder(1); + + $format_bold_left =& $workbook->addFormat(); + $format_bold_left->setBold(); + $format_bold_left->setAlign('left'); + $format_bold_left->setBorder(1); $format_bold_noborder =& $workbook->addFormat(); $format_bold_noborder->setBold(); @@ -306,8 +311,13 @@ if ($typ == 'xls') $maxlength[$spalte] = 10; $worksheet->write($zeile, ++$spalte, 'Vorname', $format_bold); $maxlength[$spalte] = 10; + $worksheet->write($zeile, ++$spalte, 'V', $format_bold); + $maxlength[$spalte] = 2; + $worksheet->write($zeile, ++$spalte, 'G', $format_bold); + $maxlength[$spalte] = 2; $worksheet->write($zeile, ++$spalte, 'Personenkennzeichen', $format_bold); - $maxlength[$spalte] = 32; + $maxlength[$spalte] = 35; + $maxheaderheight = 20; while ($row_lva = $db->db_fetch_object($result_lva)) @@ -351,6 +361,8 @@ if ($typ == 'xls') $worksheet->write($zeile, ++$spalte, $row_student->vorname, $format_bold); if ($maxlength[$spalte] < strlen($row_student->vorname)) $maxlength[$spalte] = strlen($row_student->vorname); + $worksheet->write($zeile, ++$spalte, $row_student->verband, $format_bold); + $worksheet->write($zeile, ++$spalte, $row_student->gruppe, $format_bold_left); $worksheet->write($zeile, ++$spalte, $row_student->matrikelnr, $format_bold); //Alle Zeugnisnoten des Studierenden holen @@ -479,7 +491,7 @@ if ($typ == 'xls') } } $zeile++; - $spalte = 2; + $spalte = 4; $worksheet->write($zeile, $spalte, 'Notendurchschnitt', $format_bold); $summe_schnitt = 0; @@ -517,7 +529,7 @@ if ($typ == 'xls') $zeile += 5; $legendzeile = $zeile; - $startcolumn = 2; + $startcolumn = 4; //Farblegende $bezeichnungen = array(); @@ -563,7 +575,7 @@ if ($typ == 'xls') for($i = 1; $i <= $totalmergefarb; $i++) $worksheet->write($legendzeile, $startcolumn + $i, "", $format_colored_nichtzugeteilt); - $startcolumn = $currentcolumn = 9; + $startcolumn = $currentcolumn = 11; //Notenlegende //optimale Länge in kleinsten Einheiten - Notenspalten @@ -651,7 +663,9 @@ if ($typ == 'xls') for($i = 1; $i <= $spalte; $i++) $worksheet->write(0, $i, "", $format_bold_center); - //Hoehe der 2. Zeile anpassen damit die LVs alle sichtbar sind + //Hoehe der 2. Zeile anpassen damit die LVs alle sichtbar sind, aber nicht größer als 300 + if ($maxheaderheight * 5 > 300) + $maxheaderheight = 60; $worksheet->setRow(1, $maxheaderheight * 5); //Ausdruck auf 1 Seite anpassen From c4daf904f35e5c3114d4620c1908b5de79aca9a1 Mon Sep 17 00:00:00 2001 From: Manfred Kindl Date: Wed, 16 Jan 2019 19:16:08 +0100 Subject: [PATCH 02/39] =?UTF-8?q?Reihungstestverwaltung=20Rechte=20versch?= =?UTF-8?q?=C3=A4rft?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Es wird nun bei allen Aktion geprüft, ob für den betroffenen Studiengang (den Studiengang des Reihungstests) Rechte vorhanden sind --- vilesci/stammdaten/reihungstestverwaltung.php | 145 +++++++++++------- 1 file changed, 91 insertions(+), 54 deletions(-) diff --git a/vilesci/stammdaten/reihungstestverwaltung.php b/vilesci/stammdaten/reihungstestverwaltung.php index 76b1dd248..75835444a 100644 --- a/vilesci/stammdaten/reihungstestverwaltung.php +++ b/vilesci/stammdaten/reihungstestverwaltung.php @@ -970,7 +970,7 @@ if(isset($_GET['excel'])) .studienplan_listitem { background-color: lightgray; - padding: 0 5px 0 6px; + padding: 2px 5px 2px 6px; border-radius: 3px; -webkit-border-radius: 3px; -moz-border-radius: 3px; @@ -979,7 +979,7 @@ if(isset($_GET['excel'])) .ort_listitem { background-color: lightgray; - padding: 0 5px 0 6px; + padding: 2px 5px 2px 6px; border-radius: 3px; -webkit-border-radius: 3px; -moz-border-radius: 3px; @@ -1027,12 +1027,6 @@ $messageError = ''; // Speichern eines Termines if(isset($_POST['speichern']) || isset($_POST['kopieren'])) { - - if(!$rechte->isBerechtigt('lehre/reihungstest', null, 'sui')) - { - die($rechte->errormsg); - } - $reihungstest = new reihungstest(); if(isset($_POST['reihungstest_id']) && $_POST['reihungstest_id']!='' && !isset($_POST['kopieren'])) @@ -1052,6 +1046,13 @@ if(isset($_POST['speichern']) || isset($_POST['kopieren'])) $reihungstest->insertvon = $user; $reihungstest->insertamum = date('Y-m-d H:i:s'); } + + // OE über Studiengang des Reihungstests laden und Berechtigung prüfen + $stg_rechtecheck = new studiengang($reihungstest->studiengang_kz); + if(!$rechte->isBerechtigt('lehre/reihungstest', $stg_rechtecheck->oe_kurzbz, 'sui')) + { + die($rechte->errormsg); + } //Datum und Uhrzeit pruefen if($_POST['datum']!='' && !$datum_obj->checkDatum($_POST['datum'])) @@ -1089,7 +1090,7 @@ if(isset($_POST['speichern']) || isset($_POST['kopieren'])) { $reihungstest->freigeschaltet = isset($_POST['freigeschaltet']); $reihungstest->max_teilnehmer = filter_input(INPUT_POST, 'max_teilnehmer', FILTER_VALIDATE_INT); - if ($rechte->isBerechtigt('lehre/reihungstestOeffentlich', $_POST['studiengang_kz'], 'suid')) + if ($rechte->isBerechtigt('lehre/reihungstestOeffentlich', $stg_rechtecheck->oe_kurzbz, 'suid')) { $reihungstest->oeffentlich = (isset($_POST['oeffentlich']) ? true : false); } @@ -1116,7 +1117,7 @@ if(isset($_POST['speichern']) || isset($_POST['kopieren'])) $messageError .= '

Die Bezeichnung des Ortes ist ungueltig oder wurde nicht gefunden

'; else { - if($rechte->isBerechtigt('lehre/reihungstestOrt', null, 'sui')) + if($rechte->isBerechtigt('lehre/reihungstestOrt', $stg_rechtecheck->oe_kurzbz, 'sui')) { $orte_zugeteilt = new reihungstest(); $orte_zugeteilt->getOrteReihungstest($reihungstest->reihungstest_id); @@ -1281,11 +1282,6 @@ if ($reihungstest_id != '' || isset($_POST['reihungstest_id'])) if(isset($_POST['raumzuteilung_speichern'])) { - if(!$rechte->isBerechtigt('lehre/reihungstest', null, 'su')) - { - die($rechte->errormsg); - } - $raumzuteilung = new reihungstest(); if(isset($_POST['reihungstest_id']) && $_POST['reihungstest_id']!='') @@ -1295,6 +1291,14 @@ if(isset($_POST['raumzuteilung_speichern'])) { die($raumzuteilung->errormsg); } + + // OE über Studiengang des Reihungstests laden und Berechtigung prüfen + $stg_rechtecheck = new studiengang($raumzuteilung->studiengang_kz); + if(!$rechte->isBerechtigt('lehre/reihungstest', $stg_rechtecheck->oe_kurzbz, 'su')) + { + die($rechte->errormsg); + } + if (isset($_POST['checkbox'])) { $person_ids = $_POST['checkbox']; @@ -1522,13 +1526,15 @@ if(isset($_GET['type']) && $_GET['type']=='informAssistance') // Verteilt alle BewerberInnen gleichmaessig auf die Raeume if(isset($_GET['type']) && $_GET['type']=='verteilen') { - if(!$rechte->isBerechtigt('lehre/reihungstest', null, 'sui')) - { - die($rechte->errormsg); - } - if($reihungstest_id!='') { + $rt_rechtecheck = new reihungstest($reihungstest_id); + // OE über Studiengang des Reihungstests laden und Berechtigung prüfen + $stg_rechtecheck = new studiengang($rt_rechtecheck->studiengang_kz); + if(!$rechte->isBerechtigt('lehre/reihungstest', $stg_rechtecheck->oe_kurzbz, 'sui')) + { + die($rechte->errormsg); + } $errormsg=''; $qry = "SELECT person_id, @@ -1617,13 +1623,16 @@ if(isset($_GET['type']) && $_GET['type']=='verteilen') // Fuellt die Raeume aufsteigend mit BewerberInnen an if(isset($_GET['type']) && $_GET['type']=='auffuellen') { - if(!$rechte->isBerechtigt('lehre/reihungstest', null, 'sui')) - { - die($rechte->errormsg); - } - if($reihungstest_id!='') { + $rt_rechtecheck = new reihungstest($reihungstest_id); + // OE über Studiengang des Reihungstests laden und Berechtigung prüfen + $stg_rechtecheck = new studiengang($rt_rechtecheck->studiengang_kz); + if(!$rechte->isBerechtigt('lehre/reihungstest', $stg_rechtecheck->oe_kurzbz, 'sui')) + { + die($rechte->errormsg); + } + $orte = new Reihungstest(); $orte->getOrteReihungstest($reihungstest_id); @@ -1699,16 +1708,18 @@ if(isset($_GET['type']) && $_GET['type']=='auffuellen') if(isset($_POST['aufsicht']) && $_POST['aufsicht']!='' && !isset($_POST['kopieren'])) { - - if(!$rechte->isBerechtigt('lehre/reihungstest', null, 'su')) - { - die($rechte->errormsg); - } - $save_aufsicht = new reihungstest(); if(isset($_POST['reihungstest_id']) && $_POST['reihungstest_id']!='') { + $rt_rechtecheck = new reihungstest($_POST['reihungstest_id']); + // OE über Studiengang des Reihungstests laden und Berechtigung prüfen + $stg_rechtecheck = new studiengang($rt_rechtecheck->studiengang_kz); + if(!$rechte->isBerechtigt('lehre/reihungstest', $stg_rechtecheck->oe_kurzbz, 'su')) + { + die($rechte->errormsg); + } + //Reihungstest laden if(!$save_aufsicht->load($_POST['reihungstest_id'])) { @@ -1745,13 +1756,16 @@ if(isset($_POST['aufsicht']) && $_POST['aufsicht']!='' && !isset($_POST['kopiere if(isset($_POST['delete_ort'])) { - if(!$rechte->isBerechtigt('lehre/reihungstestOrt', null, 'suid')) - { - die($rechte->errormsg); - } - if(isset($_POST['reihungstest_id']) && $_POST['reihungstest_id']!='') { + $rt_rechtecheck = new reihungstest($_POST['reihungstest_id']); + // OE über Studiengang des Reihungstests laden und Berechtigung prüfen + $stg_rechtecheck = new studiengang($rt_rechtecheck->studiengang_kz); + if(!$rechte->isBerechtigt('lehre/reihungstestOrt', $stg_rechtecheck->oe_kurzbz, 'suid')) + { + die($rechte->errormsg); + } + $delete_ort = new reihungstest(); $delete_ort->getPersonReihungstestOrt($_POST['reihungstest_id'], $_POST['delete_ort']); @@ -2067,6 +2081,7 @@ $studienplaene_list = implode(',', array_keys($studienplaene_arr)); '; } + $stg_rechtecheck = new studiengang($reihungstest->studiengang_kz); if($neu) { echo ''; @@ -2123,9 +2138,17 @@ $studienplaene_list = implode(',', array_keys($studienplaene_arr)); { //echo ''; echo ''; + if ($rechte->isBerechtigt('lehre/reihungstest', $stg_rechtecheck->oe_kurzbz, 'sui')) + { + echo ''; + echo ''; + echo ''; + } + else + { + echo 'Keine Berechtigung zum Zuteilen von Studienplänen'; + } + echo ''; echo ''; foreach ($studienplaene->result AS $row) @@ -2135,7 +2158,10 @@ $studienplaene_list = implode(',', array_keys($studienplaene_arr)); echo ''; echo ''; - echo ''; + if ($rechte->isBerechtigt('lehre/reihungstest', $stg_rechtecheck->oe_kurzbz, 'suid')) + { + echo ''; + } echo ''; } //echo '
'; - echo ''; - echo ''; - echo '
 '.$studienplan->bezeichnung.' ('.$studienplan->studienplan_id.')
'; @@ -2149,7 +2175,8 @@ $studienplaene_list = implode(',', array_keys($studienplaene_arr)); { echo 'Ort'; //echo ''; - if ($rechte->isBerechtigt('lehre/reihungstestOrt', null, 'sui')) + + if ($rechte->isBerechtigt('lehre/reihungstestOrt', $stg_rechtecheck->oe_kurzbz, 'sui')) { echo ''; echo ''; @@ -2157,7 +2184,7 @@ $studienplaene_list = implode(',', array_keys($studienplaene_arr)); } else { - echo 'Keine Berechtigung zum zuteilen von Räumen'; + echo 'Keine Berechtigung zum Zuteilen von Räumen'; } $orte = new Reihungstest(); $orte->getOrteReihungstest($reihungstest->reihungstest_id); @@ -2175,9 +2202,14 @@ $studienplaene_list = implode(',', array_keys($studienplaene_arr)); if(defined('REIHUNGSTEST_ARBEITSPLAETZE_SCHWUND') && REIHUNGSTEST_ARBEITSPLAETZE_SCHWUND > 0) echo '*'; echo ')'; - echo ' '; - if ($rechte->isBerechtigt('lehre/reihungstestOrt', null, 'suid')) + if ($rechte->isBerechtigt('lehre/reihungstestOrt', $stg_rechtecheck->oe_kurzbz, 'sui')) + { + echo ' '; + } + if ($rechte->isBerechtigt('lehre/reihungstestOrt', $stg_rechtecheck->oe_kurzbz, 'suid')) + { echo ''; + } echo ''; $arbeitsplaetze_sum = $arbeitsplaetze_sum + $orte_array[$row->ort_kurzbz]; } @@ -2227,7 +2259,7 @@ $studienplaene_list = implode(',', array_keys($studienplaene_arr)); ?> - isBerechtigt('lehre/reihungstestOeffentlich', $reihungstest->studiengang_kz, 'suid') ? '' : 'style="display:none"') ?>> + isBerechtigt('lehre/reihungstestOeffentlich', $stg_rechtecheck->oe_kurzbz, 'suid') ? '' : 'style="display:none"') ?>> Öffentlich oeffentlich ? 'checked="checked"' : '' ?>> @@ -2245,19 +2277,24 @@ $studienplaene_list = implode(',', array_keys($studienplaene_arr));   - - - Kopie erstellen'; - - if($rechte->isBerechtigt('lehre/reihungstest', null, 'suid')) + { + if($rechte->isBerechtigt('lehre/reihungstest', $stg_rechtecheck->oe_kurzbz, 'sui')) + { + echo ''; + echo ''; + } + } + else + { + echo ''; + } + + if($rechte->isBerechtigt('lehre/reihungstest', $stg_rechtecheck->oe_kurzbz, 'suid')) { $anzahl_teilnehmer = new reihungstest(); $anzahl_teilnehmer = $anzahl_teilnehmer->getTeilnehmerAnzahl($reihungstest_id); From 42768d7c9215dddbaa7fe5e3cb834a0cd97bcc4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Tue, 22 Jan 2019 14:51:53 +0100 Subject: [PATCH 03/39] Changed Version Number --- locale/de-AT/fas.dtd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locale/de-AT/fas.dtd b/locale/de-AT/fas.dtd index 229bd92af..cad80671f 100644 --- a/locale/de-AT/fas.dtd +++ b/locale/de-AT/fas.dtd @@ -1,5 +1,5 @@ - + From 631ef93d6b3a26e3ac592ee6600893f369938b25 Mon Sep 17 00:00:00 2001 From: alex Date: Tue, 22 Jan 2019 17:45:34 +0100 Subject: [PATCH 04/39] Infocenter: - even if a prestudent is already freigegeben for a studiengang, and if Quereinstieg, "shorter" Quereinstiegsinfomessage is sent when zum RT freigegeben - message sending: replaced ugly html parsing for check if already freigegeben with AJAX call --- .../system/infocenter/InfoCenter.php | 12 ++ .../views/system/infocenter/zgvpruefungen.php | 3 - public/js/infocenter/infocenterDetails.js | 124 ++++++++++++------ 3 files changed, 98 insertions(+), 41 deletions(-) diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index 65a6aec07..4c71da84a 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -78,6 +78,7 @@ class InfoCenter extends Auth_Controller 'showDetails' => 'infocenter:r', 'unlockPerson' => 'infocenter:rw', 'saveFormalGeprueft' => 'infocenter:rw', + 'getPrestudentData' => 'infocenter:r', 'getLastPrestudentWithZgvJson' => 'infocenter:r', 'getZgvInfoForPrestudent' => 'infocenter:r', 'saveBewPriorisierung' => 'infocenter:rw', @@ -263,6 +264,17 @@ class InfoCenter extends Auth_Controller $this->output->set_content_type('application/json')->set_output(json_encode($json)); } + /** + * Gets prestudent data for a person in json format + * @param $person_id + */ + public function getPrestudentData($person_id) + { + $prestudentdata = $this->_loadPrestudentData($person_id); + + $this->output->set_content_type('application/json')->set_output(json_encode($prestudentdata['zgvpruefungen'])); + } + /** * Gets prestudent that was last modified in json format, for ZGV übernehmen * @param $person_id diff --git a/application/views/system/infocenter/zgvpruefungen.php b/application/views/system/infocenter/zgvpruefungen.php index a26c94177..4f4037f43 100644 --- a/application/views/system/infocenter/zgvpruefungen.php +++ b/application/views/system/infocenter/zgvpruefungen.php @@ -98,9 +98,6 @@
- -
diff --git a/public/js/infocenter/infocenterDetails.js b/public/js/infocenter/infocenterDetails.js index 5a1fd7653..252647a71 100644 --- a/public/js/infocenter/infocenterDetails.js +++ b/public/js/infocenter/infocenterDetails.js @@ -4,6 +4,7 @@ const CALLED_PATH = FHC_JS_DATA_STORAGE_OBJECT.called_path; const CONTROLLER_URL = BASE_URL + "/"+CALLED_PATH; const RTFREIGABE_MESSAGE_VORLAGE = "InfocenterRTfreigegeben"; const RTFREIGABE_MESSAGE_VORLAGE_QUER = "InfocenterRTfreigegQuer"; +const RTFREIGABE_MESSAGE_VORLAGE_QUER_KURZ = "InfocenterRTfreigegQuerKurz"; const STGFREIGABE_MESSAGE_VORLAGE = "InfocenterSTGfreigegeben"; /** @@ -277,6 +278,9 @@ var InfocenterDetails = { { FHC_AjaxClient.showVeil(); InfocenterDetails.initFrgMessageSend(data.retval.prestudent_id, rtfreigabe); + InfocenterDetails._refreshZgv(); + FHC_AjaxClient.hideVeil(); + InfocenterDetails._refreshLog(); } else if (data.error === 2 && parseInt(data.retval.prestudent_id, 10)) { @@ -460,48 +464,98 @@ var InfocenterDetails = { } ); }, + getPrestudentData: function(personid, callback) + { + FHC_AjaxClient.ajaxCallGet( + CALLED_PATH + "/getPrestudentData/"+encodeURIComponent(personid), + null, + { + successCallback: callback, + veilTimeout: 0 + } + ); + }, initFrgMessageSend: function(prestudentid, rtfreigabe) { - var callback = function () + var callback = function (data) { + if (data == null) + return; + // check if a prestudent in same semester is already freigegeben - then not send message again var freigegeben = false; - var prestudentids = $(".prestudentidinput"); + var receiverPrestudentstatus = null; - if (prestudentids.length > 1) + //get prestudentstatus of message receiver + for(var i = 0; i < data.length; i++) { - prestudentids.each(function() - { - var id = $(this).val(); - - if (parseInt(id) !== parseInt(prestudentid)) - { - if ($("#studiensemester_"+id).val() === $("#studiensemester_"+prestudentid).val() && $("#isfreigegeben_"+id).val() === "1") - { - freigegeben = true; - return false; - } - } - } - ); + if (data[i].prestudentstatus.prestudent_id === prestudentid) + { + receiverPrestudentstatus = data[i].prestudentstatus; + break; + } } + if (receiverPrestudentstatus == null) + return; + + //check other prestudentstati wether already freigegeben + for(var j = 0; j < data.length; j++) + { + var prestudent = data[j]; + var prestudentstatus = prestudent.prestudentstatus; + var id = prestudentstatus.prestudent_id; + + if (id !== prestudentid) + { + if (receiverPrestudentstatus.studiensemester_kurzbz === prestudentstatus.studiensemester_kurzbz + && prestudentstatus.bestaetigtam !== null && prestudentstatus.status_kurzbz === "Interessent" + && prestudent.studiengangtyp === "b") + { + freigegeben = true; + break; + } + } + } + + var ausbildungssemester = receiverPrestudentstatus.ausbildungssemester; + var studiengangbezeichnung = receiverPrestudentstatus.studiengangbezeichnung; + var studiengangbezeichnung_englisch = receiverPrestudentstatus.studiengangbezeichnung_englisch; + var msgvars = {}; + if (freigegeben) { InfocenterDetails._refreshLog(); + //if already freigegeben, still send (shorter) message if Quereinsteiger + if (ausbildungssemester > 1) + { + msgvars = { + 'ausbildungssemester': ausbildungssemester, + 'studiengangbezeichnung': studiengangbezeichnung, + 'studiengangbezeichnung_englisch': studiengangbezeichnung_englisch + }; + InfocenterDetails.sendFreigabeMessage(prestudentid, RTFREIGABE_MESSAGE_VORLAGE_QUER_KURZ, msgvars); + } } else { - var ausbildungssem = $("#ausbildungssem_" + prestudentid).val(); var vorlage_kurzbz = null; - var msgvars = {}; if (rtfreigabe) { - vorlage_kurzbz = isNaN(ausbildungssem) || parseInt(ausbildungssem) === 1 ? RTFREIGABE_MESSAGE_VORLAGE : RTFREIGABE_MESSAGE_VORLAGE_QUER; - msgvars = { - 'rtlink': FHC_JS_DATA_STORAGE_OBJECT.app_root + 'addons/bewerbung/cis/registration.php?active=aufnahme', - 'ausbildungssemester': ausbildungssem + if (ausbildungssemester > 1) + { + vorlage_kurzbz = RTFREIGABE_MESSAGE_VORLAGE_QUER; + msgvars = { + /*'rtlink': FHC_JS_DATA_STORAGE_OBJECT.app_root + 'addons/bewerbung/cis/registration.php?active=aufnahme',*/ + 'ausbildungssemester': ausbildungssemester, + 'studiengangbezeichnung': studiengangbezeichnung, + 'studiengangbezeichnung_englisch': studiengangbezeichnung_englisch + } + } + else + { + vorlage_kurzbz = RTFREIGABE_MESSAGE_VORLAGE; } } else @@ -510,18 +564,16 @@ var InfocenterDetails = { } InfocenterDetails.sendFreigabeMessage(prestudentid, vorlage_kurzbz, msgvars); } - FHC_AjaxClient.hideVeil(); }; - InfocenterDetails._refreshZgv( - false, - //send message only after refresh to have current Ausbildungssemester - callback - ); + var personid = $("#hiddenpersonid").val(); + + InfocenterDetails.getPrestudentData( + personid, callback + ) }, sendFreigabeMessage: function(prestudentid, vorlage_kurzbz, msgvars) { - FHC_AjaxClient.ajaxCallPost( 'system/Messages/sendJson', { @@ -668,7 +720,7 @@ var InfocenterDetails = { $(".freigabeModal").modal("hide"); var prestudent_id = this.id.substr(this.id.indexOf("_") + 1); var data = {"prestudent_id": prestudent_id}; - InfocenterDetails.saveFreigabe(data, true); + InfocenterDetails.saveFreigabe(data, true);//Reihungstestfreigabe } ); @@ -678,17 +730,17 @@ var InfocenterDetails = { var prestudent_id = this.id.substr(this.id.indexOf("_") + 1); var statusgrund_id = $("#frgstatusgrselect_" + prestudent_id + " select[name=frgstatusgrund]").val(); var data = {"prestudent_id": prestudent_id, "statusgrund_id": statusgrund_id}; - InfocenterDetails.saveFreigabe(data); + InfocenterDetails.saveFreigabe(data);//Studiengangfreigabe } ) }, - _refreshZgv: function(preserveCollapseState, callback) + _refreshZgv: function(preserveCollapseState) { var personid = $("#hiddenpersonid").val(); var collapsed = {}; - //save if panel is collapsed to preserve collapse state + //check if panel is collapsed to preserve collapse state if (preserveCollapseState) { $("#zgvpruefungen").find(".panel-collapse").each( @@ -715,10 +767,6 @@ var InfocenterDetails = { $("#"+i).addClass("in"); } } - - // variable callback executed after refresh - if (callback) - callback(); } ); }, From cf347c42f2da89096ceef451a74a8adeb4169706 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Tue, 29 Jan 2019 08:18:06 +0100 Subject: [PATCH 05/39] =?UTF-8?q?Beim=20automatischen=20Erstellen=20von=20?= =?UTF-8?q?Pr=C3=BCfungsterminen=20nach=20der=20Noteneintragung=20im=20FAS?= =?UTF-8?q?=20wird=20Lehreinheit=20jetzt=20korrekt=20ermittelt.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/student/studentDBDML.php | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/content/student/studentDBDML.php b/content/student/studentDBDML.php index 6fdbd7306..02fa0deab 100644 --- a/content/student/studentDBDML.php +++ b/content/student/studentDBDML.php @@ -176,10 +176,17 @@ function NotePruefungAnlegen($studiensemester_kurzbz, $student_uid, $lehrveranst // Lehreinheit ermitteln $error = false; - $qry = "SELECT lehreinheit_id FROM campus.vw_student_lehrveranstaltung " - . "WHERE uid=".$db->db_add_param($student_uid)." AND lehrveranstaltung_id=".$db->db_add_param($lehrveranstaltung_id)." " - . "ORDER BY lehreinheit_id ASC " - . "LIMIT 1"; + $qry = " + SELECT + lehreinheit_id + FROM + campus.vw_student_lehrveranstaltung + WHERE + uid=".$db->db_add_param($student_uid)." + AND lehrveranstaltung_id=".$db->db_add_param($lehrveranstaltung_id)." + AND studiensemester_kurzbz=".$db->db_add_param($studiensemester_kurzbz)." + ORDER BY lehreinheit_id ASC + LIMIT 1"; if($result = $db->db_query($qry)) { @@ -1209,7 +1216,7 @@ if(!$error) $rolle->bestaetigtam = $_POST['bestaetigtam']; if($_POST['bestaetigtam']=='') $rolle->bestaetigtvon = null; - + $rolle->bewerbung_abgeschicktamum = $_POST['bewerbung_abgeschicktamum']; $rolle->orgform_kurzbz = $_POST['orgform_kurzbz']; $rolle->studienplan_id = $_POST['studienplan_id']; From ca303c7c4ae996de1c72b33a164cb8f82ab7d177 Mon Sep 17 00:00:00 2001 From: Manfred Kindl Date: Thu, 31 Jan 2019 16:02:18 +0100 Subject: [PATCH 06/39] Mailverteiler Personenliste mit Filter erweitert MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In der Personenliste der Mailverteiler kann nun mit Filtern die Liste eingeschränkt werden. Diesen Personen kann man dann direkt ein Mail schreiben (mit dem eigenen Mailclient) --- cis/private/pers_in_grp.php | 161 +++++++++++++++++++++++++++++++----- cis/private/stud_in_grp.php | 139 +++++++++++++++++++++++++++---- 2 files changed, 266 insertions(+), 34 deletions(-) diff --git a/cis/private/pers_in_grp.php b/cis/private/pers_in_grp.php index b44b8db0d..8c3fea036 100644 --- a/cis/private/pers_in_grp.php +++ b/cis/private/pers_in_grp.php @@ -50,35 +50,142 @@ echo ' - - - - - - - - + '; + + include('../../include/meta/jquery.php'); + include('../../include/meta/jquery-tablesorter.php'); + +?> + - ' . $p->t('mailverteiler/personenImVerteiler') . ' + +' . $p->t('mailverteiler/personenImVerteiler') . ' '; $qry = "SELECT - uid, vorname, nachname + uid, vorname, nachname, geschlecht, fixangestellt FROM campus.vw_benutzer JOIN tbl_benutzergruppe USING (uid) + LEFT JOIN + public.tbl_mitarbeiter ON (uid = mitarbeiter_uid) WHERE gruppe_kurzbz=".$db->db_add_param($gruppe_kurzbz); @@ -96,16 +203,29 @@ $qry = "SELECT $qry .= " ORDER BY nachname, vorname"; + +echo '

'.$p->t('mailverteiler/anleitungstextMailPersInGroup').'

'; +echo '' . $p->t('mailverteiler/mailAnAlleSenden') . ''; + if ($result = $db->db_query($qry)) { - echo '

' . $row = $db->db_num_rows($result) . ' ' . $p->t('mailverteiler/personen'); + echo '

' . $row = $db->db_num_rows($result) . ' ' . $p->t('mailverteiler/personen') . '

'; } -echo ' +echo ' +
+ + + '; @@ -113,11 +233,14 @@ if ($result = $db->db_query($qry)) { while ($row = $db->db_fetch_object($result)) { - echo ""; - echo " "; - echo " "; - echo " "; - echo ""; + echo ''; + echo ' '; + echo ' '; + echo ' '; + echo ' '; + echo ' '; + echo ' '; + echo ''; } } echo ' diff --git a/cis/private/stud_in_grp.php b/cis/private/stud_in_grp.php index 8854ebc11..95caee3d5 100644 --- a/cis/private/stud_in_grp.php +++ b/cis/private/stud_in_grp.php @@ -32,26 +32,124 @@ echo ' - - - - - - - - - + +'.$p->t('mailverteiler/personenImVerteiler').''; @@ -64,7 +162,7 @@ if (!isset($_GET['kz'])) if (isset($_GET['all'])) { $qry = "SELECT - vorname, nachname, uid + vorname, nachname, uid, geschlecht FROM campus.vw_student WHERE @@ -95,16 +193,25 @@ else $qry.= ' ORDER BY nachname, vorname'; } +echo '

'.$p->t('mailverteiler/anleitungstextMailPersInGroup').'

'; +echo '' . $p->t('mailverteiler/mailAnAlleSenden') . ''; if ($result = $db->db_query($qry)) { - echo '

'.$row=$db->db_num_rows($result).' '.$p->t('mailverteiler/personen'); + echo '

'.$row=$db->db_num_rows($result).' '.$p->t('mailverteiler/personen').'

'; } echo '
+ +    + + + ' . $p->t('global/nachname') . ' ' . $p->t('global/vorname') . '' . $p->t('global/geschlecht') . '' . $p->t('global/fixangestellt') . ' ' . $p->t('global/mail') . '
$row->nachname$row->vorname$row->uid@" . DOMAIN . "
'.$row->nachname.''.$row->vorname.''.strtoupper($row->geschlecht).''.($row->fixangestellt != '' ? ($row->fixangestellt == 't' ? 'Ja' : 'Nein') :'-').''.$row->uid .'@' . DOMAIN . '
+ + '; @@ -114,9 +221,11 @@ if ($result = $db->db_query($qry)) while ($row = $db->db_fetch_object($result)) { echo ""; + echo ' '; echo " "; echo " "; - echo " "; + echo ' '; + echo ' '; echo ""; } } From ebe174992d1ae1d75c1328f5621c744261d7b18b Mon Sep 17 00:00:00 2001 From: Manfred Kindl Date: Thu, 31 Jan 2019 16:03:13 +0100 Subject: [PATCH 07/39] Relative Priorisierung in Excel-Export --- content/statistik/studentenexportextended.xls.php | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/content/statistik/studentenexportextended.xls.php b/content/statistik/studentenexportextended.xls.php index 1743380f3..094132394 100644 --- a/content/statistik/studentenexportextended.xls.php +++ b/content/statistik/studentenexportextended.xls.php @@ -260,6 +260,8 @@ function draw_content($row) $prestudent->getLastStatus($row->prestudent_id); $status = $prestudent->status_kurzbz; $orgform = $prestudent->orgform_kurzbz; + $prio_relativ = new prestudent(); + $prio_relativ = $prio_relativ->getRelativePriorisierungFromAbsolut($row->prestudent_id, $row->priorisierung); $i = 0; @@ -647,10 +649,11 @@ function draw_content($row) $worksheet->write($zeile, $i, $row->rt_gesamtpunkte); $i++; - //RT_Gesamtpunkte - if (mb_strlen($row->priorisierung) > $maxlength[$i]) - $maxlength[$i] = mb_strlen($row->priorisierung); - $worksheet->write($zeile, $i, $row->priorisierung); + //Priorisierung + $prio = $prio_relativ.' ('.$row->priorisierung.')'; + if (mb_strlen($prio) > $maxlength[$i]) + $maxlength[$i] = mb_strlen($prio); + $worksheet->write($zeile, $i, $prio); $i++; // UDF From a0c5a42aed7dfc57fefb55fcf894e5afdfec8d83 Mon Sep 17 00:00:00 2001 From: Manfred Kindl Date: Thu, 31 Jan 2019 16:15:37 +0100 Subject: [PATCH 08/39] =?UTF-8?q?Liste=20der=20Betreuerarten=20=C3=BCberar?= =?UTF-8?q?beitet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Inaktive Betreuerarten werden durchgestrichen - Automatische Auswahl der Betreuerart nach Projektarbeitstyp --- cis/private/lehre/abgabe_student.php | 6 ++- content/student/studentprojektarbeit.js.php | 18 +++++-- .../studentprojektarbeitoverlay.xul.php | 46 +++++++++++----- rdf/betreuerart.rdf.php | 3 +- rdf/projekttyp.rdf.php | 3 +- system/dbupdate_3.3.php | 54 ++++++++++++++++--- 6 files changed, 105 insertions(+), 25 deletions(-) diff --git a/cis/private/lehre/abgabe_student.php b/cis/private/lehre/abgabe_student.php index 5935ad69c..963a11301 100644 --- a/cis/private/lehre/abgabe_student.php +++ b/cis/private/lehre/abgabe_student.php @@ -109,7 +109,11 @@ $sql_query = "SELECT (SELECT nachname FROM public.tbl_person WHERE person_id=tb LEFT JOIN public.tbl_studiengang USING(studiengang_kz) LEFT JOIN lehre.tbl_projekttyp USING (projekttyp_kurzbz) WHERE (projekttyp_kurzbz='Bachelor' OR projekttyp_kurzbz='Diplom') - AND (tbl_projektbetreuer.betreuerart_kurzbz='Betreuer' OR tbl_projektbetreuer.betreuerart_kurzbz='Begutachter' OR tbl_projektbetreuer.betreuerart_kurzbz='Erstbetreuer' OR tbl_projektbetreuer.betreuerart_kurzbz='Erstbegutachter') + AND (tbl_projektbetreuer.betreuerart_kurzbz='Betreuer' + OR tbl_projektbetreuer.betreuerart_kurzbz='Begutachter' + OR tbl_projektbetreuer.betreuerart_kurzbz='Erstbetreuer' + OR tbl_projektbetreuer.betreuerart_kurzbz='Erstbegutachter' + OR tbl_projektbetreuer.betreuerart_kurzbz='Zweitbegutachter') AND tbl_projektarbeit.student_uid=".$db->db_add_param($uid)." AND public.tbl_benutzer.aktiv AND lehre.tbl_projektarbeit.note IS NULL diff --git a/content/student/studentprojektarbeit.js.php b/content/student/studentprojektarbeit.js.php index 2c9e4f8b0..9187cb2ce 100644 --- a/content/student/studentprojektarbeit.js.php +++ b/content/student/studentprojektarbeit.js.php @@ -279,7 +279,7 @@ function StudentProjektarbeitTreeSelectID() //In der globalen Variable ist die zu selektierende Eintrag gespeichert if(StudentProjektarbeitSelectID!=null) { - for(var i=0;i'; @@ -437,14 +447,24 @@ echo ''; diff --git a/rdf/betreuerart.rdf.php b/rdf/betreuerart.rdf.php index 484b77ca7..b32f025ba 100644 --- a/rdf/betreuerart.rdf.php +++ b/rdf/betreuerart.rdf.php @@ -24,7 +24,7 @@ require_once('../include/basis_db.class.php'); $oRdf = new rdf('BETREUERART','http://www.technikum-wien.at/betreuerart'); $oRdf->sendHeader(); -$qry = "SELECT * FROM lehre.tbl_betreuerart ORDER BY betreuerart_kurzbz"; +$qry = "SELECT * FROM lehre.tbl_betreuerart ORDER BY aktiv DESC, beschreibung"; $db = new basis_db(); if($db->db_query($qry)) { @@ -34,6 +34,7 @@ if($db->db_query($qry)) //$oRdf->obj[$i]->setAttribut('id',$row->betreuerart_kurzbz,false); $oRdf->obj[$i]->setAttribut('betreuerart_kurzbz',$row->betreuerart_kurzbz,true); $oRdf->obj[$i]->setAttribut('beschreibung',$row->beschreibung,true); + $oRdf->obj[$i]->setAttribut('aktiv',($db->db_parse_bool($row->aktiv)?'true':'false'),true); $oRdf->addSequence($row->betreuerart_kurzbz); } diff --git a/rdf/projekttyp.rdf.php b/rdf/projekttyp.rdf.php index 36ef352bd..2713a84c9 100644 --- a/rdf/projekttyp.rdf.php +++ b/rdf/projekttyp.rdf.php @@ -44,7 +44,7 @@ echo ' '; //Daten holen -$qry = 'SELECT * FROM lehre.tbl_projekttyp ORDER BY bezeichnung'; +$qry = 'SELECT * FROM lehre.tbl_projekttyp ORDER BY aktiv DESC, bezeichnung'; $db = new basis_db(); if($db->db_query($qry)) @@ -56,6 +56,7 @@ if($db->db_query($qry)) projekttyp_kurzbz.']]> bezeichnung.']]> + db_parse_bool($row->aktiv)?'true':'false').']]> '; } diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index 1e43969e9..f66bf9937 100755 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -2513,11 +2513,45 @@ if($result = $db->db_query("SELECT 1 FROM system.tbl_app WHERE app='reihungstest } } +// Spalte aktiv für tbl_betreuerart +if(!$result = @$db->db_query("SELECT aktiv FROM lehre.tbl_betreuerart LIMIT 1")) +{ + $qry = "ALTER TABLE lehre.tbl_betreuerart ADD COLUMN aktiv boolean NOT NULL DEFAULT TRUE;"; + + if(!$db->db_query($qry)) + echo 'lehre.tbl_betreuerart: '.$db->db_last_error().'
'; + else + echo '
lehre.tbl_betreuerart: Spalte aktiv hinzugefuegt'; +} + +// Spalte aktiv für tbl_projekttyp +if(!$result = @$db->db_query("SELECT aktiv FROM lehre.tbl_projekttyp LIMIT 1")) +{ + $qry = "ALTER TABLE lehre.tbl_projekttyp ADD COLUMN aktiv boolean NOT NULL DEFAULT TRUE;"; + + if(!$db->db_query($qry)) + echo 'lehre.tbl_projekttyp: '.$db->db_last_error().'
'; + else + echo '
lehre.tbl_projekttyp: Spalte aktiv hinzugefuegt'; +} + +// Remove NOT NULL constraint on aufmerksamdurch_kurzbz on public.tbl_prestudent +if($result = @$db->db_query("SELECT is_nullable FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'public' AND TABLE_NAME = 'tbl_prestudent' AND COLUMN_NAME = 'aufmerksamdurch_kurzbz' AND is_nullable = 'NO'")) +{ + if($db->db_num_rows($result) > 0) + { + $qry = "ALTER TABLE public.tbl_prestudent ALTER COLUMN aufmerksamdurch_kurzbz DROP NOT NULL;"; + + if(!$db->db_query($qry)) + echo 'public.tbl_prestudent '.$db->db_last_error().'
'; + else + echo '
Removed NOT NULL constraint on "aufmerksamdurch_kurzbz" from public.tbl_prestudent
'; + } +} + // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

Pruefe Tabellen und Attribute!

'; -echo '


'; - $tabellen=array( "bis.tbl_bisorgform" => array("bisorgform_kurzbz","code","bezeichnung"), "bis.tbl_archiv" => array("archiv_id","studiensemester_kurzbz","meldung","html","studiengang_kz","insertamum","insertvon","typ"), @@ -2616,7 +2650,7 @@ $tabellen=array( "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"), "lehre.tbl_anrechnung_begruendung" => array("begruendung_id","bezeichnung"), - "lehre.tbl_betreuerart" => array("betreuerart_kurzbz","beschreibung"), + "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"), "lehre.tbl_lehreinheitgruppe" => array("lehreinheitgruppe_id","lehreinheit_id","studiengang_kz","semester","verband","gruppe","gruppe_kurzbz","updateamum","updatevon","insertamum","insertvon","ext_id"), @@ -2637,7 +2671,7 @@ $tabellen=array( "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_projekttyp" => array("projekttyp_kurzbz","bezeichnung"), + "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"), "lehre.tbl_studienordnung" => array("studienordnung_id","studiengang_kz","version","gueltigvon","gueltigbis","bezeichnung","ects","studiengangbezeichnung","studiengangbezeichnung_englisch","studiengangkurzbzlang","akadgrad_id","insertamum","insertvon","updateamum","updatevon","ext_id", "status_kurzbz", "standort_id"), @@ -2803,6 +2837,7 @@ $tabellen=array( $tabs=array_keys($tabellen); //print_r($tabs); $i=0; +$errors = 0; foreach ($tabellen AS $attribute) { $sql_attr=''; @@ -2811,12 +2846,19 @@ foreach ($tabellen AS $attribute) $sql_attr=substr($sql_attr, 0, -1); if (!@$db->db_query('SELECT '.$sql_attr.' FROM '.$tabs[$i].' LIMIT 1;')) + { echo '
'.$tabs[$i].': '.$db->db_last_error().'
'; - else - echo $tabs[$i].': OK - '; + $errors++; + } + /*else + echo $tabs[$i].': OK - ';*/ flush(); $i++; } +if ($errors == 0) +{ + echo 'Keine Fehler aufgetreten'; +} echo '

Gegenpruefung!

'; $error=false; From 60d45a0239714487a95e0e7d46e49b508d205f43 Mon Sep 17 00:00:00 2001 From: Manfred Kindl Date: Thu, 31 Jan 2019 16:18:22 +0100 Subject: [PATCH 09/39] Relative Priorisierung in FAS --- content/student/studentenoverlay.xul.php | 12 ++--- include/prestudent.class.php | 58 ++++++++++++++++++++++++ rdf/student.rdf.php | 7 ++- 3 files changed, 69 insertions(+), 8 deletions(-) diff --git a/content/student/studentenoverlay.xul.php b/content/student/studentenoverlay.xul.php index b509b2711..0a6f4f076 100644 --- a/content/student/studentenoverlay.xul.php +++ b/content/student/studentenoverlay.xul.php @@ -365,14 +365,14 @@ else class="sortDirectionIndicator" sort="rdf:http://www.technikum-wien.at/student/rdf#aufnahmegruppe_kurzbz" onclick="StudentTreeSort()"/> -
'; echo ''; echo ''; - if($rechte->isBerechtigt('admin')) + //if($rechte->isBerechtigt('admin')) echo ''; echo ''; echo ''; From be3375039ec737bd6f1133a7f3a388654d165e99 Mon Sep 17 00:00:00 2001 From: Manfred Kindl Date: Thu, 31 Jan 2019 16:58:57 +0100 Subject: [PATCH 18/39] Studenten Anlegen-Formular - Zugangscode wird nach dem Prinzip des Bewerbungstools generiert - Studiengangsdropdown mit Langbezeichnung --- .../personen/import/interessentenimport.php | 52 +++++++++++++++---- 1 file changed, 41 insertions(+), 11 deletions(-) diff --git a/vilesci/personen/import/interessentenimport.php b/vilesci/personen/import/interessentenimport.php index 620185823..8a597c70d 100644 --- a/vilesci/personen/import/interessentenimport.php +++ b/vilesci/personen/import/interessentenimport.php @@ -38,6 +38,7 @@ require_once('../../../include/student.class.php'); require_once('../../../include/lehrverband.class.php'); require_once('../../../include/nation.class.php'); require_once('../../../include/studienplan.class.php'); +require_once('../../../include/organisationsform.class.php'); $db = new basis_db(); $user=get_uid(); @@ -582,7 +583,15 @@ if($studiensemester_kurzbz == '') } else { - $studiensemester_kurzbz = $stsem->getaktorNext(); + if(date('m')=='9') + { + $studiensemester_kurzbz = $stsem->getaktorNext(); + } + else + { + $stsem->getNextStudiensemester('WS'); + $studiensemester_kurzbz = $stsem->studiensemester_kurzbz; + } } } @@ -670,6 +679,8 @@ if(isset($_POST['save'])) } else { + $zugangscode = substr(md5(openssl_random_pseudo_bytes(20)), 0, 15); + $person->new = true; $person->anrede = $anrede; $person->titelpre = $titel; @@ -684,7 +695,7 @@ if(isset($_POST['save'])) $person->aktiv = true; $person->insertamum = date('Y-m-d H:i:s'); $person->insertvon = $user; - $person->zugangscode= uniqid(); + $person->zugangscode= $zugangscode; if($person->save()) { $error=false; @@ -1124,18 +1135,34 @@ echo ''; echo ''; echo ''; echo ''; echo ''; -echo ''; echo "\n"; echo ' + title="text) ? html_escape($notiz->text) : '' ?>" style="cursor: pointer"> - + diff --git a/public/js/infocenter/infocenterDetails.js b/public/js/infocenter/infocenterDetails.js index ea21764da..5a1fd7653 100644 --- a/public/js/infocenter/infocenterDetails.js +++ b/public/js/infocenter/infocenterDetails.js @@ -45,10 +45,12 @@ $(document).ready(function () $("#notizform").on("submit", function (e) { e.preventDefault(); - var notizId = $("#notizform :input[name='hiddenNotizId']").val(); + var notizid = $("#notizform :input[name='hiddenNotizId']").val(); var formdata = $(this).serializeArray(); var data = {}; + data.person_id = personid; + for (var i = 0; i < formdata.length; i++) { data[formdata[i].name] = formdata[i].value; @@ -56,9 +58,9 @@ $(document).ready(function () $("#notizmsg").empty(); - if (notizId !== '') + if (notizid !== '') { - InfocenterDetails.updateNotiz(notizId, personid, data); + InfocenterDetails.updateNotiz(notizid, data); } else { @@ -72,16 +74,9 @@ $(document).ready(function () { $("#notizmsg").empty(); - var notizId = $(this).find("td:eq(3)").html(); - var notizTitle = $(this).find("td:eq(1)").text(); - var notizContent = this.title; + var notizid = $(this).find("td.hiddennotizid").html(); - $("#notizform label:first").text(FHC_PhrasesLib.t('infocenter', 'notizAendern')).css("color", "red"); - $("#notizform :input[type='reset']").css("display", "inline-block"); - - $("#notizform :input[name='hiddenNotizId']").val(notizId); - $("#notizform :input[name='notiztitel']").val(notizTitle); - $("#notizform :input[name='notiz']").val(notizContent); + InfocenterDetails.getNotiz(notizid); } ); @@ -119,7 +114,7 @@ $(document).ready(function () var InfocenterDetails = { genericSaveError: function() { - FHC_DialogLib.alertError("error when saving"); + alert("error when saving"); }, openZgvInfoForPrestudent: function(prestudent_id) { @@ -174,11 +169,14 @@ var InfocenterDetails = { data, { successCallback: function(data, textStatus, jqXHR) { - if (data !== true) + if (data === true) { - FHC_DialogLib.alertError("error when saving ZGV prio"); + InfocenterDetails._refreshZgv(true); + } + else + { + alert("error when saving zgv Prio"); } - InfocenterDetails._refreshZgv(true); } } ); @@ -261,7 +259,7 @@ var InfocenterDetails = { } else { - FHC_DialogLib.alertError("error when saving Absage"); + alert("error when saving Absage"); } } } @@ -282,18 +280,51 @@ var InfocenterDetails = { } else if (data.error === 2 && parseInt(data.retval.prestudent_id, 10)) { - FHC_DialogLib.alertError("error when setting accepted documents"); + alert("error when setting accepted documents"); InfocenterDetails._refreshZgv(); InfocenterDetails._refreshLog(); } else { - FHC_DialogLib.alertError("error when saving Freigabe"); + alert("error when saving Freigabe"); } } } ); }, + getNotiz: function(notiz_id) + { + FHC_AjaxClient.ajaxCallGet( + CALLED_PATH + '/getNotiz', + { + "notiz_id": notiz_id + }, + { + successCallback: function(data, textStatus, jqXHR) { + if (FHC_AjaxClient.hasData(data)) + { + var notiz = data.retval[0]; + + $("#notizform label:first").text(FHC_PhrasesLib.t('infocenter', 'notizAendern')).css("color", "red"); + $("#notizform :input[type='reset']").css("display", "inline-block"); + + $("#notizform :input[name='hiddenNotizId']").val(notiz_id); + $("#notizform :input[name='notiztitel']").val(notiz.titel); + $("#notizform :input[name='notiz']").val(notiz.text); + } + else + { + InfocenterDetails._notizError('fehlerBeimLesen'); + } + }, + errorCallback: function() + { + InfocenterDetails._notizError('fehlerBeimLesen'); + }, + veilTimeout: 0 + } + ); + }, saveNotiz: function(personid, data) { FHC_AjaxClient.ajaxCallPost( @@ -308,18 +339,21 @@ var InfocenterDetails = { } else { - InfocenterDetails._errorSaveNotiz(); + InfocenterDetails._notizError('fehlerBeimSpeichern'); } }, - errorCallback: InfocenterDetails._errorSaveNotiz, + errorCallback: function() + { + InfocenterDetails._notizError('fehlerBeimSpeichern'); + }, veilTimeout: 0 } ); }, - updateNotiz: function(notizId, personId, data) + updateNotiz: function(notizid, data) { FHC_AjaxClient.ajaxCallPost( - CALLED_PATH + '/updateNotiz/' + encodeURIComponent(notizId) + "/" + encodeURIComponent(personId), + CALLED_PATH + '/updateNotiz/' + encodeURIComponent(notizid), data, { successCallback: function(data, textStatus, jqXHR) { @@ -331,10 +365,13 @@ var InfocenterDetails = { } else { - InfocenterDetails._errorSaveNotiz(); + InfocenterDetails._notizError('fehlerBeimSpeichern'); } }, - errorCallback: InfocenterDetails._errorSaveNotiz, + errorCallback: function() + { + InfocenterDetails._notizError('fehlerBeimSpeichern'); + }, veilTimeout: 0 } ); @@ -812,8 +849,8 @@ var InfocenterDetails = { $("#notizform label:first").text(FHC_PhrasesLib.t('infocenter', 'notizHinzufuegen')).css("color", "black"); $("#notizform :input[type='reset']").css("display", "none"); }, - _errorSaveNotiz: function() + _notizError: function(phrasename) { - $("#notizmsg").text(FHC_PhrasesLib.t('ui', 'fehlerBeimSpeichern')); + $("#notizmsg").text(FHC_PhrasesLib.t('ui', phrasename)); } }; diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 5bbef50b2..4f9d885d0 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -1394,6 +1394,26 @@ $phrases = array( ) ) ), + array( + 'app' => 'core', + 'category' => 'ui', + 'phrase' => 'fehlerBeimLesen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Fehler beim Lesen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Error on Reading', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'core', 'category' => 'ui', From c839e8e4a141eedb9fa5f1d52d0f932498bf473e Mon Sep 17 00:00:00 2001 From: Paolo Date: Tue, 5 Feb 2019 10:34:36 +0100 Subject: [PATCH 25/39] - Added personid param for adding notiz - Changed filesystem permissions --- .../organisation/reihungstest/ReihungstestUebersichtData.php | 0 application/views/system/infocenter/infocenterData.php | 0 application/views/system/infocenter/infocenterDetails.php | 0 application/views/system/infocenter/infocenterFreigegeben.php | 0 application/views/system/infocenter/infocenterFreigegebenData.php | 0 .../system/infocenter/infocenterReihungstestAbsolviertData.php | 0 application/views/system/infocenter/stammdaten.php | 0 application/views/templates/FHC-Header.php | 0 cis/private/coodle/termin.php | 0 cis/private/info/service_uebersicht.php | 0 cis/private/profile/index.php | 0 cis/private/profile/zeitsperre_resturlaub.php | 0 cis/private/tools/zeitaufzeichnung.php | 0 include/kontakt.class.php | 0 include/service.class.php | 0 include/zeitaufzeichnung.class.php | 0 include/zeitsperre.class.php | 0 locale/de-AT/profil.php | 0 locale/de-AT/services.php | 0 locale/de-AT/zeitaufzeichnung.php | 0 locale/de-AT/zeitsperre.php | 0 locale/en-US/profil.php | 0 locale/en-US/zeitaufzeichnung.php | 0 locale/en-US/zeitsperre.php | 0 system/dbupdate_3.3.php | 0 system/filtersupdate.php | 0 vilesci/personen/leistungsstipendium.php | 0 vilesci/stammdaten/service_uebersicht.php | 0 28 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 application/views/organisation/reihungstest/ReihungstestUebersichtData.php mode change 100755 => 100644 application/views/system/infocenter/infocenterData.php mode change 100755 => 100644 application/views/system/infocenter/infocenterDetails.php mode change 100755 => 100644 application/views/system/infocenter/infocenterFreigegeben.php mode change 100755 => 100644 application/views/system/infocenter/infocenterFreigegebenData.php mode change 100755 => 100644 application/views/system/infocenter/infocenterReihungstestAbsolviertData.php mode change 100755 => 100644 application/views/system/infocenter/stammdaten.php mode change 100755 => 100644 application/views/templates/FHC-Header.php mode change 100755 => 100644 cis/private/coodle/termin.php mode change 100755 => 100644 cis/private/info/service_uebersicht.php mode change 100755 => 100644 cis/private/profile/index.php mode change 100755 => 100644 cis/private/profile/zeitsperre_resturlaub.php mode change 100755 => 100644 cis/private/tools/zeitaufzeichnung.php mode change 100755 => 100644 include/kontakt.class.php mode change 100755 => 100644 include/service.class.php mode change 100755 => 100644 include/zeitaufzeichnung.class.php mode change 100755 => 100644 include/zeitsperre.class.php mode change 100755 => 100644 locale/de-AT/profil.php mode change 100755 => 100644 locale/de-AT/services.php mode change 100755 => 100644 locale/de-AT/zeitaufzeichnung.php mode change 100755 => 100644 locale/de-AT/zeitsperre.php mode change 100755 => 100644 locale/en-US/profil.php mode change 100755 => 100644 locale/en-US/zeitaufzeichnung.php mode change 100755 => 100644 locale/en-US/zeitsperre.php mode change 100755 => 100644 system/dbupdate_3.3.php mode change 100755 => 100644 system/filtersupdate.php mode change 100755 => 100644 vilesci/personen/leistungsstipendium.php mode change 100755 => 100644 vilesci/stammdaten/service_uebersicht.php diff --git a/application/views/organisation/reihungstest/ReihungstestUebersichtData.php b/application/views/organisation/reihungstest/ReihungstestUebersichtData.php old mode 100755 new mode 100644 diff --git a/application/views/system/infocenter/infocenterData.php b/application/views/system/infocenter/infocenterData.php old mode 100755 new mode 100644 diff --git a/application/views/system/infocenter/infocenterDetails.php b/application/views/system/infocenter/infocenterDetails.php old mode 100755 new mode 100644 diff --git a/application/views/system/infocenter/infocenterFreigegeben.php b/application/views/system/infocenter/infocenterFreigegeben.php old mode 100755 new mode 100644 diff --git a/application/views/system/infocenter/infocenterFreigegebenData.php b/application/views/system/infocenter/infocenterFreigegebenData.php old mode 100755 new mode 100644 diff --git a/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php b/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php old mode 100755 new mode 100644 diff --git a/application/views/system/infocenter/stammdaten.php b/application/views/system/infocenter/stammdaten.php old mode 100755 new mode 100644 diff --git a/application/views/templates/FHC-Header.php b/application/views/templates/FHC-Header.php old mode 100755 new mode 100644 diff --git a/cis/private/coodle/termin.php b/cis/private/coodle/termin.php old mode 100755 new mode 100644 diff --git a/cis/private/info/service_uebersicht.php b/cis/private/info/service_uebersicht.php old mode 100755 new mode 100644 diff --git a/cis/private/profile/index.php b/cis/private/profile/index.php old mode 100755 new mode 100644 diff --git a/cis/private/profile/zeitsperre_resturlaub.php b/cis/private/profile/zeitsperre_resturlaub.php old mode 100755 new mode 100644 diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php old mode 100755 new mode 100644 diff --git a/include/kontakt.class.php b/include/kontakt.class.php old mode 100755 new mode 100644 diff --git a/include/service.class.php b/include/service.class.php old mode 100755 new mode 100644 diff --git a/include/zeitaufzeichnung.class.php b/include/zeitaufzeichnung.class.php old mode 100755 new mode 100644 diff --git a/include/zeitsperre.class.php b/include/zeitsperre.class.php old mode 100755 new mode 100644 diff --git a/locale/de-AT/profil.php b/locale/de-AT/profil.php old mode 100755 new mode 100644 diff --git a/locale/de-AT/services.php b/locale/de-AT/services.php old mode 100755 new mode 100644 diff --git a/locale/de-AT/zeitaufzeichnung.php b/locale/de-AT/zeitaufzeichnung.php old mode 100755 new mode 100644 diff --git a/locale/de-AT/zeitsperre.php b/locale/de-AT/zeitsperre.php old mode 100755 new mode 100644 diff --git a/locale/en-US/profil.php b/locale/en-US/profil.php old mode 100755 new mode 100644 diff --git a/locale/en-US/zeitaufzeichnung.php b/locale/en-US/zeitaufzeichnung.php old mode 100755 new mode 100644 diff --git a/locale/en-US/zeitsperre.php b/locale/en-US/zeitsperre.php old mode 100755 new mode 100644 diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php old mode 100755 new mode 100644 diff --git a/system/filtersupdate.php b/system/filtersupdate.php old mode 100755 new mode 100644 diff --git a/vilesci/personen/leistungsstipendium.php b/vilesci/personen/leistungsstipendium.php old mode 100755 new mode 100644 diff --git a/vilesci/stammdaten/service_uebersicht.php b/vilesci/stammdaten/service_uebersicht.php old mode 100755 new mode 100644 From b58475d6c5d0c23c1cd0c63114faa49abfc546d0 Mon Sep 17 00:00:00 2001 From: Paolo Date: Tue, 5 Feb 2019 10:38:22 +0100 Subject: [PATCH 26/39] - FilterWidget can represents the retrieved data with tablesorter or pivotUI - Added new constants to FiltersLib - Added new parameter pivotui to FHC-Header to load JS and CSS for pivotUI - Renamed constat WIDGET_URL_TABLE_DATASET to WIDGET_URL_DATASET_TABLESORTER in FilterWidget - Added new constat WIDGET_URL_DATASET_PIVOTUI to FilterWidget - Added new private properties _datasetRepresentation and _datasetRepresentationOptions to FilterWidget - Renamed FilterWidget->loadViewTableDataset to loadViewDataset - FilterWidget->loadViewDataset loads tablesorter or pivotUI view depending on the value of property _datasetRepresentation - FilterWidget accepts two new parameter: datasetRepresentation and datasetRepOptions - datasetRepresentation is required - FilterWidget stores in session the _datasetRepresentation and _datasetRepresentationOptions properties - Adapted view views/widgets/filter/filter to use loadViewDataset - All views using FilterWidget have been adapted to use the required parameter datasetRepresentation - Added new constats DATASET_REP_TABLESORTER and DATASET_REP_PIVOTUI to public/js/FilterWidget.js - Added new private property _datasetRepresentation to FHC_FilterWidget in public/js/FilterWidget.js - Based on property _datasetRepresentation FilterWidget.js will represent the FilterWidget data with tablesorter or pivotUI - Added new private method _renderDataset to FHC_FilterWidget in public/js/FilterWidget.js - Renamed method _renderTableDataset to _renderDatasetTablesorter in FHC_FilterWidget in public/js/FilterWidget.js - Added new method _renderDatasetPivotUI to FHC_FilterWidget in public/js/FilterWidget.js - Added bew method _setDatasetRepresentation to FHC_FilterWidget in public/js/FilterWidget.js --- application/libraries/FiltersLib.php | 10 ++ .../ReihungstestUebersichtData.php | 1 + application/views/person/bpk/bpkData.php | 1 + .../system/infocenter/infocenterData.php | 1 + .../infocenter/infocenterFreigegebenData.php | 1 + .../infocenterReihungstestAbsolviertData.php | 1 + application/views/templates/FHC-Header.php | 20 ++- application/views/widgets/filter/filter.php | 2 +- .../views/widgets/filter/pivotUIDataset.php | 1 + application/widgets/FilterWidget.php | 66 ++++++-- public/js/FilterWidget.js | 153 ++++++++++++++++-- 11 files changed, 229 insertions(+), 28 deletions(-) create mode 100644 application/views/widgets/filter/pivotUIDataset.php diff --git a/application/libraries/FiltersLib.php b/application/libraries/FiltersLib.php index 48f6c413a..3b719b5f3 100644 --- a/application/libraries/FiltersLib.php +++ b/application/libraries/FiltersLib.php @@ -20,6 +20,8 @@ class FiltersLib const SESSION_DATASET = 'dataset'; const SESSION_ROW_NUMBER = 'rowNumber'; const SESSION_RELOAD_DATASET = 'reloadDataset'; + const SESSION_DATASET_REPRESENTATION = 'datasetRepresentation'; + const SESSION_DATASET_REP_OPTIONS = 'datasetRepresentationOptions'; // Alias for the dynamic table used to retrive the dataset const DATASET_TABLE_ALIAS = 'datasetFilterTable'; @@ -55,6 +57,14 @@ class FiltersLib const CUSTOM_MENU = 'customMenu'; // ...to specify if the menu for this filter is custom (true) or not (false) + // ...to specify how to represent the dataset (ex: tablesorter, pivotUI, ...) + const DATASET_REPRESENTATION = 'datasetRepresentation'; + const DATASET_REP_OPTIONS = 'datasetRepOptions'; + + // Different dataset representations + const DATASET_REP_TABLESORTER = 'tablesorter'; + const DATASET_REP_PIVOTUI = 'pivotUI'; + // Filter operations values const OP_EQUAL = 'equal'; const OP_NOT_EQUAL = 'nequal'; diff --git a/application/views/organisation/reihungstest/ReihungstestUebersichtData.php b/application/views/organisation/reihungstest/ReihungstestUebersichtData.php index 158a46e3b..719370ab3 100644 --- a/application/views/organisation/reihungstest/ReihungstestUebersichtData.php +++ b/application/views/organisation/reihungstest/ReihungstestUebersichtData.php @@ -111,6 +111,7 @@ ) data ", 'requiredPermissions' => 'infocenter', + 'datasetRepresentation' => 'tablesorter', 'additionalColumns' => array('Details'), 'columnsAliases' => array( 'ReihungstestID', diff --git a/application/views/person/bpk/bpkData.php b/application/views/person/bpk/bpkData.php index f7bf75b50..7e375030f 100644 --- a/application/views/person/bpk/bpkData.php +++ b/application/views/person/bpk/bpkData.php @@ -13,6 +13,7 @@ person_id=tbl_person.person_id AND tbl_benutzer.aktiv=true) ', 'requiredPermissions' => 'admin', + 'datasetRepresentation' => 'tablesorter', 'additionalColumns' => array('Details'), 'columnsAliases' => array( 'PersonID', diff --git a/application/views/system/infocenter/infocenterData.php b/application/views/system/infocenter/infocenterData.php index 8922de4c0..9baac9ea6 100644 --- a/application/views/system/infocenter/infocenterData.php +++ b/application/views/system/infocenter/infocenterData.php @@ -232,6 +232,7 @@ 'filterKurzbz' => 'InfoCenterSentApplicationAll', 'filter_id' => $this->input->get('filter_id'), 'requiredPermissions' => 'infocenter', + 'datasetRepresentation' => 'tablesorter', 'customMenu' => true, 'checkboxes' => 'PersonId', 'additionalColumns' => array('Details'), diff --git a/application/views/system/infocenter/infocenterFreigegebenData.php b/application/views/system/infocenter/infocenterFreigegebenData.php index 02981a6c6..b3ee8c9e5 100644 --- a/application/views/system/infocenter/infocenterFreigegebenData.php +++ b/application/views/system/infocenter/infocenterFreigegebenData.php @@ -192,6 +192,7 @@ 'datasetName' => 'freigegeben', 'filter_id' => $this->input->get('filter_id'), 'requiredPermissions' => 'infocenter', + 'datasetRepresentation' => 'tablesorter', 'checkboxes' => 'PersonId', 'additionalColumns' => array('Details'), 'columnsAliases' => array( diff --git a/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php b/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php index 63a2d906c..2a976771b 100644 --- a/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php +++ b/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php @@ -186,6 +186,7 @@ 'datasetName' => 'reihungstestAbsolviert', 'filter_id' => $this->input->get('filter_id'), 'requiredPermissions' => 'infocenter', + 'datasetRepresentation' => 'tablesorter', 'checkboxes' => 'PersonId', 'additionalColumns' => array('Details'), 'columnsAliases' => array( diff --git a/application/views/templates/FHC-Header.php b/application/views/templates/FHC-Header.php index f58c1e870..785ac0184 100644 --- a/application/views/templates/FHC-Header.php +++ b/application/views/templates/FHC-Header.php @@ -16,7 +16,6 @@ // By default set the parameters to false $addons = isset($addons) ? $addons : false; - $dialoglib = isset($dialoglib) ? $dialoglib : false; $ajaxlib = isset($ajaxlib) ? $ajaxlib : false; $bootstrap = isset($bootstrap) ? $bootstrap : false; $filterwidget = isset($filterwidget) ? $filterwidget : false; @@ -27,6 +26,7 @@ $navigationwidget = isset($navigationwidget) ? $navigationwidget : false; $sbadmintemplate = isset($sbadmintemplate) ? $sbadmintemplate : false; $tablesorter = isset($tablesorter) ? $tablesorter : false; + $pivotui = isset($pivotui) ? $pivotui : false; $tinymce = isset($tinymce) ? $tinymce : false; ?> @@ -61,6 +61,12 @@ generateCSSsInclude('vendor/mottie/tablesorter/dist/css/jquery.tablesorter.pager.min.css'); } + // PivotUI CSS + if ($pivotui === true) + { + generateCSSsInclude('vendor/nicolaskruchten/pivottable/dist/pivot.min.css'); + } + // SB Admin 2 template CSS if ($sbadmintemplate === true) { @@ -74,9 +80,6 @@ // -------------------------------------------------------------------------------------------------------- // From public folder - // DialogLib CSS - if ($dialoglib === true) generateCSSsInclude('public/css/DialogLib.css'); - // AjaxLib CSS if ($ajaxlib === true) generateCSSsInclude('public/css/AjaxLib.css'); @@ -125,6 +128,12 @@ generateJSsInclude('vendor/mottie/tablesorter/dist/js/extras/jquery.tablesorter.pager.min.js'); } + // PivotUI CSS + if ($pivotui === true) + { + generateJSsInclude('vendor/nicolaskruchten/pivottable/dist/pivot.min.js'); + } + // Tinymce JS if ($tinymce === true) generateJSsInclude('vendor/tinymce/tinymce/tinymce.min.js'); @@ -143,9 +152,6 @@ // -------------------------------------------------------------------------------------------------------- // From public folder - // DialogLib JS - if ($dialoglib === true) generateJSsInclude('public/js/DialogLib.js'); - // AjaxLib JS // NOTE: must be called before including others JS libraries that use it if ($ajaxlib === true) generateJSsInclude('public/js/AjaxLib.js'); diff --git a/application/views/widgets/filter/filter.php b/application/views/widgets/filter/filter.php index bae5110e9..dc20e58b6 100644 --- a/application/views/widgets/filter/filter.php +++ b/application/views/widgets/filter/filter.php @@ -46,7 +46,7 @@
- +
diff --git a/application/views/widgets/filter/pivotUIDataset.php b/application/views/widgets/filter/pivotUIDataset.php new file mode 100644 index 000000000..570f41ae0 --- /dev/null +++ b/application/views/widgets/filter/pivotUIDataset.php @@ -0,0 +1 @@ +
diff --git a/application/widgets/FilterWidget.php b/application/widgets/FilterWidget.php index 1ae29cb42..86e954e93 100644 --- a/application/widgets/FilterWidget.php +++ b/application/widgets/FilterWidget.php @@ -8,7 +8,8 @@ class FilterWidget extends Widget // Paths of the views const WIDGET_URL_FILTER = 'widgets/filter/filter'; const WIDGET_URL_SELECT_FIELDS = 'widgets/filter/selectFields'; - const WIDGET_URL_TABLE_DATASET = 'widgets/filter/tableDataset'; + const WIDGET_URL_DATASET_TABLESORTER = 'widgets/filter/tableDataset'; + const WIDGET_URL_DATASET_PIVOTUI = 'widgets/filter/pivotUIDataset'; const WIDGET_URL_SELECT_FILTERS = 'widgets/filter/selectFilters'; const WIDGET_URL_SAVE_FILTER = 'widgets/filter/saveFilter'; @@ -45,6 +46,9 @@ class FilterWidget extends Widget private $_customMenu; // if true then method _setFilterMenu is NOT called + private $_datasetRepresentation; // dataset representation (ex: tablesorter, pivotUI, ...) + private $_datasetRepresentationOptions; // dataset representation options for tablesorter, pivotUI, ... + private static $_FilterWidgetInstance; // static property that contains the instance of itself /** @@ -119,11 +123,19 @@ class FilterWidget extends Widget } /** - * Loads the view related to the table dataset + * Loads the view related to the dataset, here is decided how to represent the dataset (ex: tablesorter, pivotUI, ...) */ - public static function loadViewTableDataset() + public static function loadViewDataset() { - self::_loadView(self::WIDGET_URL_TABLE_DATASET); + if (self::$_FilterWidgetInstance->_datasetRepresentation == FiltersLib::DATASET_REP_TABLESORTER) + { + self::_loadView(self::WIDGET_URL_DATASET_TABLESORTER); + } + + if (self::$_FilterWidgetInstance->_datasetRepresentation == FiltersLib::DATASET_REP_PIVOTUI) + { + self::_loadView(self::WIDGET_URL_DATASET_PIVOTUI); + } } //------------------------------------------------------------------------------------------------------------------ @@ -153,6 +165,8 @@ class FilterWidget extends Widget $this->_hideHeader = null; $this->_hideSave = null; $this->_customMenu = null; + $this->_datasetRepresentation = null; + $this->_datasetRepresentationOptions = null; // Retrived the required permissions parameter if present if (isset($args[FiltersLib::REQUIRED_PERMISSIONS_PARAMETER])) @@ -234,10 +248,25 @@ class FilterWidget extends Widget $this->_hideSave = $args[FiltersLib::HIDE_SAVE]; } + // If a custom menu is set if (isset($args[FiltersLib::CUSTOM_MENU]) && is_bool($args[FiltersLib::CUSTOM_MENU])) { $this->_customMenu = $args[FiltersLib::CUSTOM_MENU]; } + + // To specify how to represent the dataset (ex: tablesorter, pivotUI, ...) + if (isset($args[FiltersLib::DATASET_REPRESENTATION]) + && ($args[FiltersLib::DATASET_REPRESENTATION] == FiltersLib::DATASET_REP_TABLESORTER + || $args[FiltersLib::DATASET_REPRESENTATION] == FiltersLib::DATASET_REP_PIVOTUI)) + { + $this->_datasetRepresentation = $args[FiltersLib::DATASET_REPRESENTATION]; + } + + // To specify options for the dataset representation (ex: tablesorter, pivotUI, ...) + if (isset($args[FiltersLib::DATASET_REP_OPTIONS]) && !isEmptyString($args[FiltersLib::DATASET_REP_OPTIONS])) + { + $this->_datasetRepresentationOptions = $args[FiltersLib::DATASET_REP_OPTIONS]; + } } /** @@ -247,7 +276,7 @@ class FilterWidget extends Widget { if (!is_array($args) || (is_array($args) && count($args) == 0)) { - show_error('Second parameter of the widget call must be a not empty associative array'); + show_error('Second parameter of the widget call must be a NOT empty associative array'); } else { @@ -259,12 +288,25 @@ class FilterWidget extends Widget FiltersLib::FILTER_ID.'" must be specified' ); } - else + + if (!isset($args[FiltersLib::QUERY_PARAMETER])) { - if (!isset($args[FiltersLib::QUERY_PARAMETER])) - { - show_error('The parameters "'.FiltersLib::QUERY_PARAMETER.'" must be specified'); - } + show_error('The parameters "'.FiltersLib::QUERY_PARAMETER.'" must be specified'); + } + + if (!isset($args[FiltersLib::DATASET_REPRESENTATION])) + { + show_error('The parameter "'.FiltersLib::DATASET_REPRESENTATION.'" must be specified'); + } + + if (isset($args[FiltersLib::DATASET_REPRESENTATION]) + && $args[FiltersLib::DATASET_REPRESENTATION] != FiltersLib::DATASET_REP_TABLESORTER + && $args[FiltersLib::DATASET_REPRESENTATION] != FiltersLib::DATASET_REP_PIVOTUI) + { + show_error( + 'The parameter "'.FiltersLib::DATASET_REPRESENTATION. + '" must be IN ("'.FiltersLib::DATASET_REP_TABLESORTER.'", "'.FiltersLib::DATASET_REP_PIVOTUI.'")' + ); } } } @@ -370,7 +412,9 @@ class FilterWidget extends Widget FiltersLib::SESSION_METADATA => $this->FiltersModel->getExecutedQueryMetaData(), // the metadata of the dataset FiltersLib::SESSION_ROW_NUMBER => count($dataset->retval), // the number of loaded rows by this filter FiltersLib::SESSION_DATASET => $dataset->retval, // the entire dataset - FiltersLib::SESSION_RELOAD_DATASET => false // if the dataset must be reloaded, not needed the first time + FiltersLib::SESSION_RELOAD_DATASET => false, // if the dataset must be reloaded, not needed the first time + FiltersLib::SESSION_DATASET_REPRESENTATION => $this->_datasetRepresentation, // the choosen dataset representation + FiltersLib::SESSION_DATASET_REP_OPTIONS => $this->_datasetRepresentationOptions // the choosen dataset representation options ) ); } diff --git a/public/js/FilterWidget.js b/public/js/FilterWidget.js index 18082b96d..0f1889486 100644 --- a/public/js/FilterWidget.js +++ b/public/js/FilterWidget.js @@ -63,10 +63,23 @@ function sideMenuHook() }); } +//-------------------------------------------------------------------------------------------------------------------- +// Constants + +// Success +const DATASET_REP_TABLESORTER = "tablesorter"; +const DATASET_REP_PIVOTUI = "pivotUI"; + /** * FHC_FilterWidget this object is used to render the GUI of a filter widget and to operate with it */ var FHC_FilterWidget = { + + //------------------------------------------------------------------------------------------------------------------ + // Properties + + _datasetRepresentation: null, // + //------------------------------------------------------------------------------------------------------------------ // Public methods @@ -138,8 +151,19 @@ var FHC_FilterWidget = { $("#addField").html(""); $("#appliedFilters").html(""); $("#addFilter").html(""); - $("#filterTableDataset > thead > tr").html(""); - $("#filterTableDataset > tbody").html(""); + + // If the choosen dataset representation is tablesorter + if (FHC_FilterWidget._datasetRepresentation == DATASET_REP_TABLESORTER) + { + $("#filterTableDataset > thead > tr").html(""); + $("#filterTableDataset > tbody").html(""); + } + + // If the choosen dataset representation is pivotUI + if (FHC_FilterWidget._datasetRepresentation == DATASET_REP_PIVOTUI) + { + $("#filterPivotUI").html(""); + } }, /** @@ -155,6 +179,7 @@ var FHC_FilterWidget = { }, { successCallback: function(data, textStatus, jqXHR) { + if (FHC_AjaxClient.hasData(data)) { if (typeof renderFunction == "function") @@ -180,6 +205,9 @@ var FHC_FilterWidget = { _renderFilterWidget: function(data) { FHC_FilterWidget._initSessionStorage(); // initialize the session storage + + FHC_FilterWidget._setDatasetRepresentation(data); // set what type of dataset representation was choosen + FHC_FilterWidget._turnOffEvents(); // turns all the events off FHC_FilterWidget._resetGUI(); // Reset the entire GUI @@ -189,7 +217,7 @@ var FHC_FilterWidget = { FHC_FilterWidget._renderDropDownFields(data); // render the fields drop-down FHC_FilterWidget._renderAppliedFilters(data); // render the GUI for the applied filters FHC_FilterWidget._renderDropDownFilters(data); // render the filters drop-down - FHC_FilterWidget._renderTableDataset(data); // render the table GUI + FHC_FilterWidget._renderDataset(data); FHC_FilterWidget._turnOnEvents(); // turns all the events off }, @@ -230,7 +258,12 @@ var FHC_FilterWidget = { $("#addFilter").off("change"); $("#applyFilter").off("click"); $("#saveCustomFilterButton").off("click"); - FHC_FilterWidget._disableTableSorter(); + + // If the choosen dataset representation is tablesorter + if (FHC_FilterWidget._datasetRepresentation == DATASET_REP_TABLESORTER) + { + FHC_FilterWidget._disableTableSorter(); // disable the tablesorter + } }, /** @@ -249,7 +282,12 @@ var FHC_FilterWidget = { $("#addFilter").change(FHC_FilterWidget._addFilterEvent); // Click event on the applied filters drop-down to add a new filter to the dataset $("#applyFilter").click(FHC_FilterWidget._applyFilterEvent); // Click event on the applied filters drop-down to apply filters to the dataset $("#saveCustomFilterButton").click(FHC_FilterWidget._saveCustomFilterButtonEvent); // Click evento to for the save custom filter button - FHC_FilterWidget._enableTableSorter(); // enable the tablesorter + + // If the choosen dataset representation is tablesorter + if (FHC_FilterWidget._datasetRepresentation == DATASET_REP_TABLESORTER) + { + FHC_FilterWidget._enableTableSorter(); // enable the tablesorter + } }, /** @@ -761,11 +799,26 @@ var FHC_FilterWidget = { return html; }, + _renderDataset: function(data) { + + // If the choosen dataset representation is tablesorter then... + if (FHC_FilterWidget._datasetRepresentation == DATASET_REP_TABLESORTER) + { + FHC_FilterWidget._renderDatasetTablesorter(data); // ...render the tablesorter GUI + } + + // If the choosen dataset representation is pivotUI then... + if (FHC_FilterWidget._datasetRepresentation == DATASET_REP_PIVOTUI) + { + FHC_FilterWidget._renderDatasetPivotUI(data); // ...render the pivotUI GUI + } + }, + /** - * Renders the table for the FilterWidget + * Renders the tablesorter for the FilterWidget * The data to be displayed are retrived from the parameter data */ - _renderTableDataset: function(data) { + _renderDatasetTablesorter: function(data) { if (data.hasOwnProperty("checkboxes") && data.checkboxes!=null && data.checkboxes.trim() != "") { @@ -823,7 +876,6 @@ var FHC_FilterWidget = { { strHtml += "
"; } - }); } @@ -853,7 +905,7 @@ var FHC_FilterWidget = { } }); - // reset filter storage if there is a filter id in url TODO: find better solution + // Reset filter storage if there is a filter id in url TODO: find better solution var filter_id = FHC_AjaxClient.getUrlParameter("filter_id"); if (typeof filter_id !== "undefined") FHC_FilterWidget._cleanTablesorterLocalStorage(); @@ -869,6 +921,78 @@ var FHC_FilterWidget = { $("#filterTableDataset").trigger("disable"); }, + /** + * Renders the pivotUI for the FilterWidget + * The data to be displayed are retrived from the parameter data + */ + _renderDatasetPivotUI: function(data) { + + var options = {}; // eventually contains options fot the pivotUI + + // Checks if options were given + if (data.hasOwnProperty("datasetRepresentationOptions") && data.datasetRepresentationOptions != "") + { + var tmpOptions = eval("(" + data.datasetRepresentationOptions + ")"); // and converts them from string to javascript code + + // If it is an object then can be used + if (typeof tmpOptions == "object") + { + options = tmpOptions; + } + } + + // Manipulation for the representation! + var arrayFieldsToDisplay = FHC_FilterWidget._getFieldsToDisplay(data); + + // If there are fields to be displayed... + if (arrayFieldsToDisplay.length > 0) + { + // ...if there are data to be displayed... + if (data.hasOwnProperty("dataset") && $.isArray(data.dataset)) + { + // Build the array of objects used by pivotUI and store it in pivotUIData + var pivotUIData = []; + + // Loops through data + for (var i = 0; i < data.dataset.length; i++) + { + var record = data.dataset[i]; // Single record + var tmpObj = {}; // New object that represents a record + + // Loops through columns of a record + $.each(arrayFieldsToDisplay, function(i, fieldToDisplay) { + + if (record.hasOwnProperty(data.selectedFields[i])) + { + tmpObj[fieldToDisplay] = record[data.selectedFields[i]]; // Add data with the column alias + } + }); + + // If additional columns are present... + if (data.additionalColumns != null && $.isArray(data.additionalColumns)) + { + // ...loops through them + $.each(data.additionalColumns, function(i, additionalColumn) { + + if (record.hasOwnProperty(additionalColumn)) + { + tmpObj[additionalColumn] = record[additionalColumn]; // Add the additional column + } + }); + } + + pivotUIData.push(tmpObj); // Add tmpObj to pivotUIData + } + + // Renders the pivotUI + $("#filterPivotUI").pivotUI( + pivotUIData, + options + ); + } + } + }, + /** * Retrives the fields to be displayed from the data parameter, if aliases are present then they are used */ @@ -906,6 +1030,17 @@ var FHC_FilterWidget = { _cleanTablesorterLocalStorage: function() { $("#filterTableDataset").trigger("filterResetSaved"); + }, + + /** + * Set what type of dataset representation was choosen + */ + _setDatasetRepresentation: function(data) { + + if (data.hasOwnProperty("datasetRepresentation")) + { + FHC_FilterWidget._datasetRepresentation = data.datasetRepresentation; + } } }; From 437912163728b622c5a49ddc56caf3b05e1c8ca0 Mon Sep 17 00:00:00 2001 From: Paolo Date: Tue, 5 Feb 2019 10:40:39 +0100 Subject: [PATCH 27/39] - Added hasSequence in models to avoid sequenceerrors - Added getByDate, generateMatrikelnummer methods --- application/models/crm/Student_model.php | 36 ++++++++++++++++++- .../education/Studentlehrverband_model.php | 1 + .../organisation/Studiensemester_model.php | 22 ++++++++++++ application/models/person/Benutzer_model.php | 3 +- 4 files changed, 60 insertions(+), 2 deletions(-) diff --git a/application/models/crm/Student_model.php b/application/models/crm/Student_model.php index 75390b466..0d03fd50f 100644 --- a/application/models/crm/Student_model.php +++ b/application/models/crm/Student_model.php @@ -9,6 +9,40 @@ class Student_model extends DB_Model { parent::__construct(); $this->dbTable = 'public.tbl_student'; - $this->pk = 'student_uid'; + $this->pk = array('student_uid'); + $this->hasSequence = false; + } + + // **** +// * Generiert die Matrikelnummer +// * FORMAT: 0710254001 +// * 07 = Jahr +// * 1/2/0 = WS/SS/incoming +// * 0254 = Studiengangskennzahl vierstellig +// * 001 = Laufende Nummer +// **** + public function generateMatrikelnummer($studiengang_kz, $studiensemester_kurzbz) + { + $jahr = mb_substr($studiensemester_kurzbz, 4); + $sem = mb_substr($studiensemester_kurzbz, 0, 2); + if ($sem == 'SS') + $jahr = $jahr - 1; + $art = 0; + + $matrikelnummer = sprintf("%02d", $jahr).$art.sprintf("%04d", $studiengang_kz); + + $qry = "SELECT matrikelnr FROM public.tbl_student WHERE matrikelnr LIKE ? ORDER BY matrikelnr DESC LIMIT 1"; + + $matrikelnrres = $this->execQuery($qry, array($matrikelnummer.'%')); + + if (hasData($matrikelnrres)) + { + $max = mb_substr($matrikelnrres->retval[0]->matrikelnr, 7); + } + else + $max = 0; + + $max += 1; + return $matrikelnummer.sprintf("%03d", $max); } } diff --git a/application/models/education/Studentlehrverband_model.php b/application/models/education/Studentlehrverband_model.php index 3f8a0e14a..765429396 100644 --- a/application/models/education/Studentlehrverband_model.php +++ b/application/models/education/Studentlehrverband_model.php @@ -10,5 +10,6 @@ class Studentlehrverband_model extends DB_Model parent::__construct(); $this->dbTable = 'public.tbl_studentlehrverband'; $this->pk = array('studiensemester_kurzbz', 'student_uid'); + $this->hasSequence = false; } } diff --git a/application/models/organisation/Studiensemester_model.php b/application/models/organisation/Studiensemester_model.php index 300e13805..ff48708dd 100644 --- a/application/models/organisation/Studiensemester_model.php +++ b/application/models/organisation/Studiensemester_model.php @@ -119,4 +119,26 @@ class Studiensemester_model extends DB_Model return $this->execQuery($query, array($studiensemester_kurzbz, $studiengang_kz)); } + + /** + * Gets all Studiensemester between two dates + * @param $from + * @param $to + * @return array|null + */ + public function getByDate($from, $to) + { + if (date_format(date_create($from), 'Y-m-d') > (date_format(date_create($to), 'Y-m-d'))) + return success(array()); + + $query = "SELECT * + FROM public.tbl_studiensemester + WHERE + (ende > ?::date AND start < ?::date) + OR start = ?::date + OR ende = ?::date + ORDER BY start DESC"; + + return $this->execQuery($query, array($from, $to, $from, $to)); + } } diff --git a/application/models/person/Benutzer_model.php b/application/models/person/Benutzer_model.php index 221688c21..46e5bdb98 100644 --- a/application/models/person/Benutzer_model.php +++ b/application/models/person/Benutzer_model.php @@ -9,7 +9,8 @@ class Benutzer_model extends DB_Model { parent::__construct(); $this->dbTable = 'public.tbl_benutzer'; - $this->pk = 'uid'; + $this->pk = array('uid'); + $this->hasSequence = false; } public function getFromPersonId($person_id) From 915f83c7be04bf4b22c4b1a5f2b2af4474df4a58 Mon Sep 17 00:00:00 2001 From: Paolo Date: Tue, 5 Feb 2019 10:42:19 +0100 Subject: [PATCH 28/39] Add person.matr_nr to output --- include/zeitaufzeichnung.class.php | 16 +- rdf/lehrveranstaltungszeugnis_ktu.rdf.php | 3 +- zeitaufzeichnung.class.php | 800 ---------------------- 3 files changed, 12 insertions(+), 807 deletions(-) delete mode 100644 zeitaufzeichnung.class.php diff --git a/include/zeitaufzeichnung.class.php b/include/zeitaufzeichnung.class.php index 486f06db8..509444d39 100644 --- a/include/zeitaufzeichnung.class.php +++ b/include/zeitaufzeichnung.class.php @@ -135,15 +135,19 @@ class zeitaufzeichnung extends basis_db return false; // check ob identischer eintrag existiert - $check_qry = 'SELECT count(*) from campus.tbl_zeitaufzeichnung where uid='.$this->db_add_param($this->uid).' and start = '.$this->db_add_param($this->start).' and ende = '.$this->db_add_param($this->ende); - if($this->db_query($check_qry) && $this->new) + // DienstreiseMT-Einträge sind hier ausgenommen da eintägige Dienstreisen mit der identen Arbeitszeit eingetragen werden könnten + if ($this->aktivitaet_kurzbz != 'DienstreiseMT') { - if($row = $this->db_fetch_object()) + $check_qry = 'SELECT count(*) from campus.tbl_zeitaufzeichnung where uid='.$this->db_add_param($this->uid).' and aktivitaet_kurzbz != \'DienstreiseMT\' and start = '.$this->db_add_param($this->start).' and ende = '.$this->db_add_param($this->ende); + if($this->db_query($check_qry) && $this->new) { - if ($row->count) + if($row = $this->db_fetch_object()) { - $this->errormsg = 'Identischer Eintrag existiert!'; - return false; + if ($row->count) + { + $this->errormsg = 'Identischer Eintrag existiert!'; + return false; + } } } } diff --git a/rdf/lehrveranstaltungszeugnis_ktu.rdf.php b/rdf/lehrveranstaltungszeugnis_ktu.rdf.php index 23f379984..e065925e7 100644 --- a/rdf/lehrveranstaltungszeugnis_ktu.rdf.php +++ b/rdf/lehrveranstaltungszeugnis_ktu.rdf.php @@ -234,7 +234,7 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml") $pruefer_name = trim($pruefer->titelpre.' '.$pruefer->vorname.' '.$pruefer->nachname.' '.$pruefer->titelpost); } - $query = "SELECT tbl_student.matrikelnr, tbl_student.studiengang_kz, tbl_studiengang.typ, tbl_studiengang.bezeichnung, tbl_person.vorname, tbl_person.nachname,tbl_person.gebdatum,tbl_person.titelpre, tbl_person.titelpost, tbl_person.geschlecht FROM tbl_person, tbl_student, tbl_studiengang, tbl_benutzer WHERE tbl_student.studiengang_kz = tbl_studiengang.studiengang_kz and tbl_student.student_uid = tbl_benutzer.uid and tbl_benutzer.person_id = tbl_person.person_id and tbl_student.student_uid = '".$uid_arr[$i]."'"; + $query = "SELECT tbl_student.matrikelnr, tbl_student.studiengang_kz, tbl_studiengang.typ, tbl_studiengang.bezeichnung, tbl_person.vorname, tbl_person.nachname,tbl_person.gebdatum,tbl_person.titelpre, tbl_person.titelpost, tbl_person.geschlecht, tbl_person.matr_nr FROM tbl_person, tbl_student, tbl_studiengang, tbl_benutzer WHERE tbl_student.studiengang_kz = tbl_studiengang.studiengang_kz and tbl_student.student_uid = tbl_benutzer.uid and tbl_benutzer.person_id = tbl_person.person_id and tbl_student.student_uid = '".$uid_arr[$i]."'"; if($db->db_query($query)) { @@ -275,6 +275,7 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml") $xml .= "\n ".$gebdatum.""; $xml .= "\n ".$row->geschlecht.""; $xml .= "\n ".$row->matrikelnr.""; + $xml .= "\n ".$row->matr_nr.""; $xml .= "\n ".$stgl.""; $datum_aktuell = date('d.m.Y'); $xml .= "\n Wien, am ".$datum_aktuell.""; diff --git a/zeitaufzeichnung.class.php b/zeitaufzeichnung.class.php deleted file mode 100644 index 509444d39..000000000 --- a/zeitaufzeichnung.class.php +++ /dev/null @@ -1,800 +0,0 @@ -, - * Andreas Oesterreicher and - * Rudolf Hangl . - */ -/** - * Klasse Zeitaufzeichnung - * @create 06-11-2007 - */ -require_once(dirname(__FILE__).'/basis_db.class.php'); - -class zeitaufzeichnung extends basis_db -{ - public $new; // boolean - public $result = array(); // zeitaufzeichnung Objekt - public $done=false; // boolean - - //Tabellenspalten - public $zeitaufzeichnung_id; // serial - public $uid; // varchar(16) - public $aktivitaet_kurzbz; // varchar(16) - public $start; // timestamp - public $ende; // timestamp - public $beschreibung; // varchar(256) - public $oe_kurzbz_1; // varchar(32) ehemals studiengangs_kz - public $oe_kurzbz_2; // varchar(32) ehemals fachbereich_kurzbz - public $insertamum; // timestamp - public $insertvon; // varchar(16) - public $updateamum; // timestamp - public $updatevon; // varchar(16) - public $projekt_kurzbz; // varchar(16) - public $ext_id; // bigint - public $service_id; // integer - public $kunde_uid; // varchar(32) - - /** - * Konstruktor - * @param $zeitaufzeichnung_id ID der Zeitaufzeichnung die geladen werden soll (Default=null) - */ - public function __construct($zeitaufzeichnung_id=null) - { - parent::__construct(); - - if($zeitaufzeichnung_id != null) - $this->load($zeitaufzeichnung_id); - } - - /** - * Laedt die Zeitaufzeichnung mit der ID $zeitaufzeichnung_id - * @param $adress_id ID der zu ladenden Adresse - * @return true wenn ok, false im Fehlerfall - */ - public function load($zeitaufzeichnung_id) - { - //Pruefen ob zeitaufzeichnung_id eine gueltige Zahl ist - if(!is_numeric($zeitaufzeichnung_id) || $zeitaufzeichnung_id == '') - { - $this->errormsg = 'Zeitaufzeichnung_id muss eine Zahl sein'; - return false; - } - - //Daten aus der Datenbank lesen - $qry = "SELECT * FROM campus.tbl_zeitaufzeichnung WHERE zeitaufzeichnung_id=".$this->db_add_param($zeitaufzeichnung_id, FHC_INTEGER); - - if(!$this->db_query($qry)) - { - $this->errormsg = 'Fehler bei einer Datenbankabfrage'; - return false; - } - - if($row = $this->db_fetch_object()) - { - $this->zeitaufzeichnung_id = $row->zeitaufzeichnung_id; - $this->uid = $row->uid; - $this->aktivitaet_kurzbz = $row->aktivitaet_kurzbz; - $this->start = $row->start; - $this->ende = $row->ende; - $this->beschreibung = $row->beschreibung; - $this->oe_kurzbz_1 = $row->oe_kurzbz_1; - $this->oe_kurzbz_2 = $row->oe_kurzbz_2; - $this->insertamum = $row->insertamum; - $this->insertvon = $row->insertvon; - $this->updateamum = $row->updateamum; - $this->updatevon = $row->updatevon; - $this->projekt_kurzbz = $row->projekt_kurzbz; - $this->ext_id = $row->ext_id; - $this->service_id = $row->service_id; - $this->kunde_uid = $row->kunde_uid; - } - else - { - $this->errormsg = 'Es ist kein Datensatz mit dieser ID vorhanden'; - return false; - } - - return true; - } - - /** - * Prueft die Variablen auf Gueltigkeit - * @return true wenn ok, false im Fehlerfall - */ - protected function validate() - { - $this->errormsg = ''; - return true; - } - - /** - * Speichert den aktuellen Datensatz in die Datenbank - * Wenn $neu auf true gesetzt ist wird ein neuer Datensatz angelegt - * andernfalls wird der Datensatz mit der ID in $adresse_id aktualisiert - * @return true wenn ok, false im Fehlerfall - */ - public function save() - { - //Variablen pruefen - if(!$this->validate()) - return false; - - // check ob identischer eintrag existiert - // DienstreiseMT-Einträge sind hier ausgenommen da eintägige Dienstreisen mit der identen Arbeitszeit eingetragen werden könnten - if ($this->aktivitaet_kurzbz != 'DienstreiseMT') - { - $check_qry = 'SELECT count(*) from campus.tbl_zeitaufzeichnung where uid='.$this->db_add_param($this->uid).' and aktivitaet_kurzbz != \'DienstreiseMT\' and start = '.$this->db_add_param($this->start).' and ende = '.$this->db_add_param($this->ende); - if($this->db_query($check_qry) && $this->new) - { - if($row = $this->db_fetch_object()) - { - if ($row->count) - { - $this->errormsg = 'Identischer Eintrag existiert!'; - return false; - } - } - } - } - - // ER - Checks - if ($this->aktivitaet_kurzbz == 'Ersatzruhe') - { - $check_qry = "SELECT count(*) from campus.tbl_zeitaufzeichnung where uid=".$this->db_add_param($this->uid)." and (start < ".$this->db_add_param($this->ende)." and ende > ".$this->db_add_param($this->start).")"; - if ($this->zeitaufzeichnung_id) - $check_qry .= " and zeitaufzeichnung_id != ".$this->db_add_param($this->zeitaufzeichnung_id); - if($this->db_query($check_qry)) - { - if($row = $this->db_fetch_object()) - { - if ($row->count) - { - $this->errormsg = 'Ersatzruhe darf nicht Überlappen!'; - return false; - } - } - } - } - if ($this->aktivitaet_kurzbz != 'Ersatzruhe') - { - $check_qry = "SELECT count(*) from campus.tbl_zeitaufzeichnung where uid=".$this->db_add_param($this->uid)." and aktivitaet_kurzbz = 'Ersatzruhe' and (start < ".$this->db_add_param($this->ende)." and ende > ".$this->db_add_param($this->start).")"; - if($this->db_query($check_qry)) - { - if($row = $this->db_fetch_object()) - { - if ($row->count) - { - $this->errormsg = 'Eintrag darf nicht mit Ersatzruhe Überlappen!'; - return false; - } - } - } - } - - if($this->new) - { - //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, service_id, kunde_uid) VALUES('. - $this->db_add_param($this->uid).', '. - $this->db_add_param($this->aktivitaet_kurzbz).', '. - $this->db_add_param($this->start).', '. - $this->db_add_param($this->ende).', '. - $this->db_add_param($this->beschreibung).', '. - $this->db_add_param($this->oe_kurzbz_1).', '. - $this->db_add_param($this->oe_kurzbz_2).','. - $this->db_add_param($this->insertamum).', '. - $this->db_add_param($this->insertvon).', '. - $this->db_add_param($this->updateamum).', '. - $this->db_add_param($this->updatevon).', '. - $this->db_add_param($this->projekt_kurzbz).', '. - $this->db_add_param($this->service_id).', '. - $this->db_add_param($this->kunde_uid).');'; - } - else - { - //Updaten des bestehenden Datensatzes - - //Pruefen ob zeitaufzeichnung_id eine gueltige Zahl ist - if(!is_numeric($this->zeitaufzeichnung_id)) - { - $this->errormsg = 'zeitaufzeichnung_id muss eine gueltige Zahl sein'; - return false; - } - - $qry='UPDATE campus.tbl_zeitaufzeichnung SET'. - ' uid='.$this->db_add_param($this->uid).', '. - ' aktivitaet_kurzbz='.$this->db_add_param($this->aktivitaet_kurzbz).', '. - ' start='.$this->db_add_param($this->start).', '. - ' ende='.$this->db_add_param($this->ende).', '. - ' beschreibung='.$this->db_add_param($this->beschreibung).', '. - ' oe_kurzbz_1='.$this->db_add_param($this->oe_kurzbz_1).', '. - ' oe_kurzbz_2='.$this->db_add_param($this->oe_kurzbz_2).', '. - ' updateamum='.$this->db_add_param($this->updateamum).', '. - ' updatevon='.$this->db_add_param($this->updatevon).', '. - ' projekt_kurzbz='.$this->db_add_param($this->projekt_kurzbz).', '. - ' service_id='.$this->db_add_param($this->service_id).', '. - ' kunde_uid='.$this->db_add_param($this->kunde_uid).' '. - 'WHERE zeitaufzeichnung_id='.$this->db_add_param($this->zeitaufzeichnung_id, FHC_INTEGER, false); - } - - if($this->db_query($qry)) - { - if($this->new) - { - //naechste ID aus der Sequence holen - $qry="SELECT currval('campus.tbl_zeitaufzeichnung_zeitaufzeichnung_id_seq') as id;"; - if($this->db_query($qry)) - { - if($row = $this->db_fetch_object()) - { - $this->zeitaufzeichnung_id = $row->id; - $this->db_query('COMMIT'); - return true; - } - else - { - $this->db_query('ROLLBACK'); - $this->errormsg = "Fehler beim Auslesen der Sequence"; - return false; - } - } - else - { - $this->db_query('ROLLBACK'); - $this->errormsg = 'Fehler beim Auslesen der Sequence'; - return false; - } - } - } - else - { - $this->errormsg = 'Fehler beim Speichern'; - return false; - } - return true; - } - - /** - * Loescht den Datenensatz mit der ID die uebergeben wird - * @param $zeitaufzeichnnung_id ID die geloescht werden soll - * @return true wenn ok, false im Fehlerfall - */ - public function delete($zeitaufzeichnung_id) - { - //Pruefen ob zeitaufzeichnung_id eine gueltige Zahl ist - if(!is_numeric($zeitaufzeichnung_id) || $zeitaufzeichnung_id == '') - { - $this->errormsg = 'zeitaufzeichnung_id muss eine gueltige Zahl sein'; - return false; - } - - //loeschen des Datensatzes - $qry="DELETE FROM campus.tbl_zeitaufzeichnung WHERE zeitaufzeichnung_id=".$this->db_add_param($zeitaufzeichnung_id, FHC_INTEGER, false); - - if($this->db_query($qry)) - { - return true; - } - else - { - $this->errormsg = 'Fehler beim Loeschen der Daten'; - return false; - } - } - - /** - * Laedt die Datensaetze eines Projektes - * @param $projekt_kurzbz - */ - public function getListeProjekt($projekt_kurzbz) - { - $where = 'projekt_kurzbz='.$this->db_add_param($projekt_kurzbz); - - $qry = "SELECT - *, to_char ((ende-start),'HH24:MI') as diff, - (SELECT (to_char(sum(ende-start),'DD')::integer)*24+to_char(sum(ende-start),'HH24')::integer || ':' || to_char(sum(ende-start),'MI') - FROM campus.tbl_zeitaufzeichnung - WHERE $where ) as summe - FROM campus.tbl_zeitaufzeichnung WHERE $where - ORDER BY start DESC"; - - if($result = $this->db_query($qry)) - { - while($row = $this->db_fetch_object($result)) - { - $obj = new zeitaufzeichnung(); - - $obj->zeitaufzeichnung_id = $row->zeitaufzeichnung_id; - $obj->uid = $row->uid; - $obj->aktivitaet_kurzbz = $row->aktivitaet_kurzbz; - $obj->start = $row->start; - $obj->ende = $row->ende; - $obj->beschreibung = $row->beschreibung; - $obj->oe_kurzbz_1 = $row->oe_kurzbz_1; - $obj->oe_kurzbz_2 = $row->oe_kurzbz_2; - $obj->insertamum = $row->insertamum; - $obj->insertvon = $row->insertvon; - $obj->updateamum = $row->updateamum; - $obj->updatevon = $row->updatevon; - $obj->projekt_kurzbz = $row->projekt_kurzbz; - $obj->ext_id = $row->ext_id; - $obj->service_id = $row->service_id; - $obj->kunde_uid = $row->kunde_uid; - $obj->summe = $row->summe; - $obj->diff = $row->diff; - - $this->result[] = $obj; - } - return true; - } - else - { - $this->errormsg = 'Fehler beim Laden der Daten'; - return false; - } - } - - - /** - * Laedt die Zeitaufzeichnungen eines Users in einer festgelegten Zeitspanne - * @param $user - * @param $from startdatum als String in Form Y-m-d - * @param $to enddatum als String in Form Y-m-d - * @param $excluded_activities zu ignorierende Aktivitätstypen - * @return bool - */ - public function getListeUserFromTo($user, $from = null, $to = null, $excluded_activities = null) - { - $where = "uid=".$this->db_add_param($user); - - //standard wenn kein Datum gegeben - letzter Monat - if(empty($from) && empty($to)) - { - $from = date('Y-m-d', strtotime('first day of previous month')); - $to = date('Y-m-d', strtotime('last day of previous month')); - } - else if(empty($to))//standard wenn ein Datum gegeben - datum +/- 40 tage - $to = date('Y-m-d', strtotime($from. ' + 40 days')); - else if(empty($from)) - $from = date('Y-m-d', strtotime($to. ' - 40 days')); - - //zusätzlicher Tag - SQL rechnet letzten Tag nicht hinein - $to = date('Y-m-d', strtotime($to. ' + 1 days')); - - $where.= " AND ((start >= ".$this->db_add_param($from)."::DATE AND start <= ".$this->db_add_param($to)."::DATE) - OR (ende >= ".$this->db_add_param($from)."::DATE AND ende <= ".$this->db_add_param($to)."::DATE))"; - - if (!empty($excluded_activities)) - { - $exactstring = is_array($excluded_activities) ? $this->db_implode4SQL($excluded_activities) : $this->db_add_param($excluded_activities); - $where .= " AND (aktivitaet_kurzbz NOT IN (" . $exactstring . ") OR aktivitaet_kurzbz IS NULL)"; - } - - $qry = "SELECT - *, to_char ((ende-start),'HH24:MI') as diff, - (SELECT (to_char(sum(ende-start),'DD')::integer)*24+to_char(sum(ende-start),'HH24')::integer || ':' || to_char(sum(ende-start),'MI') - FROM campus.tbl_zeitaufzeichnung - WHERE $where ) as summe - FROM campus.tbl_zeitaufzeichnung WHERE $where - ORDER BY start DESC"; - - if($result = $this->db_query($qry)) - { - while($row = $this->db_fetch_object($result)) - { - $obj = new zeitaufzeichnung(); - - $obj->zeitaufzeichnung_id = $row->zeitaufzeichnung_id; - $obj->uid = $row->uid; - $obj->aktivitaet_kurzbz = $row->aktivitaet_kurzbz; - $obj->start = $row->start; - $obj->ende = $row->ende; - $obj->beschreibung = $row->beschreibung; - $obj->oe_kurzbz_1 = $row->oe_kurzbz_1; - $obj->oe_kurzbz_2 = $row->oe_kurzbz_2; - $obj->insertamum = $row->insertamum; - $obj->insertvon = $row->insertvon; - $obj->updateamum = $row->updateamum; - $obj->updatevon = $row->updatevon; - $obj->projekt_kurzbz = $row->projekt_kurzbz; - $obj->ext_id = $row->ext_id; - $obj->service_id = $row->service_id; - $obj->kunde_uid = $row->kunde_uid; - $obj->summe = $row->summe; - $obj->diff = $row->diff; - $obj->datum = $row->start; - - $this->result[] = $obj; - } - return true; - } - else - { - $this->errormsg = 'Fehler beim Laden der Daten'; - return false; - } - } - - /** - * Laedt die Zeitaufzeichnungen eines Users. Default: Die letzten 40 Tage - * @param string $user - * @param integer $days default: 40 Tage - */ - public function getListeUser($user, $days='40') - { - $where = "uid=".$this->db_add_param($user); - if ($days!='') - $where.= " AND ende>(now() - INTERVAL '".$days." days')"; - - $qry = "SELECT - *, to_char ((ende-start),'HH24:MI') as diff, - (SELECT (to_char(sum(ende-start),'DD')::integer)*24+to_char(sum(ende-start),'HH24')::integer || ':' || to_char(sum(ende-start),'MI') - FROM campus.tbl_zeitaufzeichnung - WHERE $where ) as summe - FROM campus.tbl_zeitaufzeichnung WHERE $where - ORDER BY start DESC"; - - if($result = $this->db_query($qry)) - { - while($row = $this->db_fetch_object($result)) - { - $obj = new zeitaufzeichnung(); - - $obj->zeitaufzeichnung_id = $row->zeitaufzeichnung_id; - $obj->uid = $row->uid; - $obj->aktivitaet_kurzbz = $row->aktivitaet_kurzbz; - $obj->start = $row->start; - $obj->ende = $row->ende; - $obj->beschreibung = $row->beschreibung; - $obj->oe_kurzbz_1 = $row->oe_kurzbz_1; - $obj->oe_kurzbz_2 = $row->oe_kurzbz_2; - $obj->insertamum = $row->insertamum; - $obj->insertvon = $row->insertvon; - $obj->updateamum = $row->updateamum; - $obj->updatevon = $row->updatevon; - $obj->projekt_kurzbz = $row->projekt_kurzbz; - $obj->ext_id = $row->ext_id; - $obj->service_id = $row->service_id; - $obj->kunde_uid = $row->kunde_uid; - $obj->summe = $row->summe; - $obj->diff = $row->diff; - $obj->datum = $row->start; - - $this->result[] = $obj; - } - return true; - } - else - { - $this->errormsg = 'Fehler beim Laden der Daten'; - return false; - } - } - - /** - * Laedt die Zeitaufzeichnungen eines Users aufgefüllt mit lehren Tagen. - * Default: Die letzten 40 Tage - * @param string $user - * @param integer $days deafult: 40 Tage - */ - public function getListeUserFull($user, $days='40') - { - $where = "uid=".$this->db_add_param($user); - if ($days!='') - $where.= " AND ende>(now() - INTERVAL '".$days." days')"; - $where_join = "and (z.aktivitaet_kurzbz != 'DienstreiseMT' or z.aktivitaet_kurzbz is null) and z.uid=".$this->db_add_param($user); - if ($days!='') - $where_join.= " AND z.ende>(now() - INTERVAL '".$days." days')"; - if ($days=='') - $max_anz = 180; - else - $max_anz = $days; - $qry = "SELECT - d.dates, z.*, to_char ((z.ende-z.start),'HH24:MI') as diff, - (SELECT (to_char(sum(ende-start),'DD')::integer)*24+to_char(sum(ende-start),'HH24')::integer || ':' || to_char(sum(ende-start),'MI') - FROM campus.tbl_zeitaufzeichnung - WHERE $where) as summe - FROM campus.tbl_zeitaufzeichnung z - right join (select current_date - s.a as dates from generate_series(0,$max_anz,1) as s(a)) d on date(z.ende) = d.dates $where_join order by d.dates desc, z.start desc - "; - - if($result = $this->db_query($qry)) - { - while($row = $this->db_fetch_object($result)) - { - $obj = new zeitaufzeichnung(); - - $obj->zeitaufzeichnung_id = $row->zeitaufzeichnung_id; - $obj->uid = $row->uid; - $obj->aktivitaet_kurzbz = $row->aktivitaet_kurzbz; - $obj->start = $row->start; - $obj->ende = $row->ende; - $obj->beschreibung = $row->beschreibung; - $obj->oe_kurzbz_1 = $row->oe_kurzbz_1; - $obj->oe_kurzbz_2 = $row->oe_kurzbz_2; - $obj->insertamum = $row->insertamum; - $obj->insertvon = $row->insertvon; - $obj->updateamum = $row->updateamum; - $obj->updatevon = $row->updatevon; - $obj->projekt_kurzbz = $row->projekt_kurzbz; - $obj->ext_id = $row->ext_id; - $obj->service_id = $row->service_id; - $obj->kunde_uid = $row->kunde_uid; - $obj->summe = $row->summe; - $obj->diff = $row->diff; - $obj->datum = $row->dates; - - $this->result[] = $obj; - } - return true; - } - else - { - $this->errormsg = 'Fehler beim Laden der Daten'; - return false; - } - } - - /** - * Laedt die Zeitaufzeichnungen eines Users aufgefüllt mit lehren Tagen. - * Default: Die letzten 40 Tage - * @param string $user - * @param integer $days deafult: 40 Tage - */ - public function getDienstreisenUser($user, $days='40') - { - $where = "uid=".$this->db_add_param($user); - if ($days!='') - $where.= " AND ende>(now() - INTERVAL '".$days." days')"; - $where .= " AND aktivitaet_kurzbz = 'DienstreiseMT'"; - $qry = "SELECT - zeitaufzeichnung_id, start::date as starttag, TO_CHAR(start, 'HH24:MI') as startzeit, ende::date as endtag, TO_CHAR(ende, 'HH24:MI') as endzeit - FROM campus.tbl_zeitaufzeichnung - where $where - ORDER BY ende DESC - "; - - if($result = $this->db_query($qry)) - { - $dr_arr = array(); - while($row = $this->db_fetch_object($result)) - { - if (array_key_exists($row->starttag, $dr_arr)) - { - $dr_arr[$row->starttag]['start'] = $row->startzeit; - $dr_arr[$row->starttag]['id'] = $row->zeitaufzeichnung_id; - } - else - { - $dr_arr[$row->starttag] = array(); - $dr_arr[$row->starttag]['start'] = $row->startzeit; - $dr_arr[$row->starttag]['id'] = $row->zeitaufzeichnung_id; - } - if (array_key_exists($row->endtag, $dr_arr)) - { - $dr_arr[$row->endtag]['ende'] = $row->endzeit; - $dr_arr[$row->endtag]['id'] = $row->zeitaufzeichnung_id; - } - else - { - $dr_arr[$row->endtag] = array(); - $dr_arr[$row->endtag]['ende'] = $row->endzeit; - $dr_arr[$row->endtag]['id'] = $row->zeitaufzeichnung_id; - } - - $this->result = $dr_arr; - } - return true; - } - else - { - $this->errormsg = 'Fehler beim Laden der Daten'; - return false; - } - } - - /** - * Löscht sämtliche Einträge eines Users für einen Tag - * @param string $user - * @param string $tag Y-m-d - */ - public function deleteEntriesForUser($user, $tag) - { - $where = "uid=".$this->db_add_param($user); - - $qry = "delete from campus.tbl_zeitaufzeichnung where $where and date_trunc('day', start) = '$tag'"; - if($result = $this->db_query($qry)) - { - return true; - } - else - { - $this->errormsg = 'Fehler beim Laden der Daten'; - return false; - } - } - - /** - * Löscht Pauseneinträge eines Users für einen Tag, die außerhalb der Arbeitszeit liegen - * Löscht Pauseneinträge an Tagen ohne Arbeitszeit - * @param string $user - * @param string $tag Y-m-d - */ - public function cleanPausenForUser($user, $tag) - { - $where = "uid=".$this->db_add_param($user); - - $qry = " - delete from campus.tbl_zeitaufzeichnung where aktivitaet_kurzbz = 'Pause' and start::date = '$tag' and $where and -( -start::time >= -(SELECT max(ende::time) as endzeit from campus.tbl_zeitaufzeichnung where $where and start::date = '$tag' AND (aktivitaet_kurzbz != 'LehreExtern' or aktivitaet_kurzbz is null ) and aktivitaet_kurzbz != 'Pause') -or -ende::time<= -(SELECT min(start::time) as startzeit from campus.tbl_zeitaufzeichnung where $where and start::date = '$tag' AND (aktivitaet_kurzbz != 'LehreExtern' or aktivitaet_kurzbz is null ) and aktivitaet_kurzbz != 'Pause') -or not exists -(select 1 from campus.tbl_zeitaufzeichnung where aktivitaet_kurzbz != 'LehreExtern' and aktivitaet_kurzbz != 'Pause' and start::date = '$tag' and $where ) -) - "; - - if($result = $this->db_query($qry)) - { - return true; - } - else - { - $this->errormsg = 'Fehler beim Laden der Daten'; - return false; - } - } - - /** - * Holt alle ZA-Einträge Typ LehreIntern und LehreExtern eines Users - * für das laufende Studienjahr und gibt die Summen in einem Array zurück - * @param string $user - * @return Array mit Key: LehreIntern, LehreExtern, LehreAuftraege, LehreInkludiert - */ - public function getLehreForUser($user,$sem) - { - $where = "uid=".$this->db_add_param($user); - $where_sem = "studiensemester_kurzbz=".$this->db_add_param($sem); - $lehre_arr = array("LehreIntern"=>0, "LehreExtern"=>0, "LehreAuftraege"=>0); - - $qry = " - select sum(extract(epoch from ende-start))/3600 as lehre, aktivitaet_kurzbz from campus.tbl_zeitaufzeichnung where $where and aktivitaet_kurzbz in ('LehreIntern', 'LehreExtern') and start > (select start from public.tbl_studiensemester where $where_sem) group by aktivitaet_kurzbz - "; - - if($result = $this->db_query($qry)) - { - - while($row = $this->db_fetch_object($result)) - { - $lehre_arr[$row->aktivitaet_kurzbz] = round($row->lehre,2); - } - } - else - { - return false; - } - $where = "mitarbeiter_uid=".$this->db_add_param($user); - $where_sem = "l.studiensemester_kurzbz=".$this->db_add_param($sem); - - $qry = " - SELECT sum(semstunden) AS stunden - FROM - ( - SELECT sum(m.semesterstunden) AS semstunden - FROM - lehre.tbl_lehreinheitmitarbeiter m, - lehre.tbl_lehreinheit l - JOIN - lehre.tbl_lehrveranstaltung lv using (lehrveranstaltung_id) - JOIN - public.tbl_studiengang s using (studiengang_kz) - WHERE - $where AND - $where_sem AND - l.lehreinheit_id = m.lehreinheit_id AND - m.stundensatz * m.semesterstunden > 0 AND - s.typ not in ('l') AND - lv.studiengang_kz > 0 - UNION - SELECT sum(pb.stunden) AS semstunden - FROM - lehre.tbl_projektarbeit pa, - lehre.tbl_projektbetreuer pb, - public.tbl_benutzer b, - lehre.tbl_lehreinheit l - JOIN - lehre.tbl_lehrveranstaltung lv using (lehrveranstaltung_id) - JOIN - public.tbl_studiengang s using (studiengang_kz) - - WHERE - pa.lehreinheit_id = l.lehreinheit_id AND - pb.projektarbeit_id = pa.projektarbeit_id AND - pb.person_id = b.person_id AND - b.uid = ".$this->db_add_param($user)." AND - pb.stunden * pb.stundensatz > 0 AND - s.typ not in ('l') AND - lv.studiengang_kz > 0 AND - $where_sem - ) AS semstunden - "; - - if($result = $this->db_query($qry)) - { - - while($row = $this->db_fetch_object($result)) - { - $lehre_arr["LehreAuftraege"] = round($row->stunden); - } - } - else - { - return false; - } - - return $lehre_arr; - } - - /** - * Holt das Datum bis zu dem die Eintragung für einen bestimmten User gesperrt ist - * @param string $user - * @return string $tag Y-m-d or false - */ - - public function getEintragungGesperrtBisForUser($user) - { - //check if addon casetime is installed - $qrytable = " - SELECT EXISTS( - SELECT 1 - FROM information_schema.tables - WHERE - table_schema = 'addon' AND - table_name = 'tbl_casetime_timesheet' - ); - "; - - $res = $this->db_query($qrytable); - if ($this->db_fetch_row($res)[0] == 't') - { - //check if sent timesheets for the UID exist - $where = "uid=".$this->db_add_param($user); - - $qry = "select max(datum) from addon.tbl_casetime_timesheet where ".$where." and abgeschicktamum is not null"; - - if($result = $this->db_query($qry)) - { - $datum = $this->db_fetch_object($result); - return $datum->max; - } - else - { - return false; - } - } - else - { - return false; - } - } -} -?> From 57461473aa937e8bd315e15426732120d9aafeef Mon Sep 17 00:00:00 2001 From: Paolo Date: Tue, 5 Feb 2019 10:43:25 +0100 Subject: [PATCH 29/39] =?UTF-8?q?Neue=20Studienpl=C3=A4ne=20werden=20autom?= =?UTF-8?q?atisch=20zu=20Reihungstests=20hinzugef=C3=BCgt=20zu=20denen=20d?= =?UTF-8?q?er=20alte=20Studienplan=20zugeteilt=20war=20sofern=20die=20G?= =?UTF-8?q?=C3=BCltigkeit=20passt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controllers/jobs/Prestudentstatus.php | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/application/controllers/jobs/Prestudentstatus.php b/application/controllers/jobs/Prestudentstatus.php index 7d2b01b38..3f8a0e903 100644 --- a/application/controllers/jobs/Prestudentstatus.php +++ b/application/controllers/jobs/Prestudentstatus.php @@ -114,6 +114,11 @@ class Prestudentstatus extends FHC_Controller $row_status->person_id, $row_status->studienplan_id, $studienplan->retval[0]->studienplan_id); + + $this->correctReihungstestStudienplan( + $row_status->studiensemester_kurzbz, + $row_status->studienplan_id, + $studienplan->retval[0]->studienplan_id); } } } @@ -188,4 +193,49 @@ class Prestudentstatus extends FHC_Controller } } } + + /** + * When a degree Programm gets a new Studyplan the Placementtests are updated and the + * new studyplan is added + * @param $studiensemester Studiensemester_kurzbz. + * @param $studienplan_id_old Id of the old studyplan + * @param $studienplan_id id of the new studyplan + */ + private function correctReihungstestStudienplan($studiensemester, $studienplan_id_old, $studienplan_id) + { + $this->load->model('crm/RtStudienplan_model', 'RtStudienplanModel'); + + $this->RtStudienplanModel->resetQuery(); + // Correct also Assignments to Placement test + $this->RtStudienplanModel->addJoin( + 'public.tbl_reihungstest', + 'tbl_reihungstest.reihungstest_id = tbl_rt_studienplan.reihungstest_id' + ); + + $rt = $this->RtStudienplanModel->loadWhere(array( + "studienplan_id" => $studienplan_id_old, + "tbl_reihungstest.studiensemester_kurzbz" => $studiensemester + )); + + if(hasData($rt)) + { + foreach($rt->retval as $row_rt) + { + // Add new Studyplan to RtStudienplan if missing + $rt_studienplan = $this->RtStudienplanModel->loadWhere(array( + "reihungstest_id" => $row_rt->reihungstest_id, + "studienplan_id" => $studienplan_id + )); + + if(!hasData($rt_studienplan)) + { + echo "Adding StudienplanId: $studienplan_id to ReihungstestId: $row_rt->reihungstest_id"; + $this->RtStudienplanModel->insert(array( + "reihungstest_id" => $row_rt->reihungstest_id, + "studienplan_id" => $studienplan_id + )); + } + } + } + } } From 610249979404d3c0e4b6164468b8e35812c2285a Mon Sep 17 00:00:00 2001 From: Paolo Date: Tue, 5 Feb 2019 10:46:01 +0100 Subject: [PATCH 30/39] Cleanup deprecated Escaping function --- cis/private/info/telefonverzeichnis.php | 89 +++----- .../lehre/abgabe_lektor_terminuebersicht.php | 17 +- .../lehre/anwesenheitsliste_bilder.html.php | 206 ------------------ cis/private/profile/lva_liste.php | 16 +- cis/private/profile/urlaubsfreigabe.php | 2 +- cis/private/profile/urlaubstool.php | 10 +- cis/private/tools/projektabgabe.php | 32 ++- .../tools/projektabgabe_autocomplete.php | 56 +++-- vilesci/personen/zeitwunsch.php | 5 +- 9 files changed, 106 insertions(+), 327 deletions(-) delete mode 100644 cis/private/lehre/anwesenheitsliste_bilder.html.php diff --git a/cis/private/info/telefonverzeichnis.php b/cis/private/info/telefonverzeichnis.php index 8e90a8179..fe276b85b 100644 --- a/cis/private/info/telefonverzeichnis.php +++ b/cis/private/info/telefonverzeichnis.php @@ -28,20 +28,20 @@ require_once('../../../include/functions.inc.php'); require_once('../../../include/basis_db.class.php'); require_once('../../../include/phrasen.class.php'); require_once('../../../include/person.class.php'); - -$sprache = getSprache(); + +$sprache = getSprache(); $p=new phrasen($sprache); if (isset($_GET['zeilenhoehe']) && is_numeric($_GET['zeilenhoehe'])) $zeilenhoehe = $_GET['zeilenhoehe']; else $zeilenhoehe = 28; - + if (isset($_GET['gruppiert']) && ($_GET['gruppiert']=='on')) $gruppiert = true; else $gruppiert = false; - + if (isset($_GET['gst_extra']) && ($_GET['gst_extra']=='on')) $gst_extra = true; else @@ -56,14 +56,12 @@ if (!$user=get_uid()) if(check_lektor($user)) $is_lector=true; else - $is_lector=false; + $is_lector=false; -?> - +?> - + @@ -79,13 +77,13 @@ if(check_lektor($user)) { window.location.reload(); } - $(document).ready(function() - { + $(document).ready(function() + { $("#t1").tablesorter( { sortList: [[0,0]], widgets: ["zebra"] - }); + }); $("#t2").tablesorter( { sortList: [[0,0]], @@ -120,12 +118,12 @@ if(check_lektor($user)) { sortList: [[0,0]], widgets: ["zebra"] - }); + }); $("#t11").tablesorter( { sortList: [[0,0]], widgets: ["zebra"] - }); + }); }); --> @@ -134,11 +132,11 @@ td,th { font-size: 18px; } -@media print +@media print { #nachname,#vorname,#durchwahl,#raum,#person { - background-image: none; + background-image: none; padding-left: 3px; } #formular @@ -156,7 +154,7 @@ td,th Zeilenhöhe: px   Geschäftsstelle extra:>    Gruppiert nach Standort:>    - + @@ -169,19 +167,19 @@ td,th db_query($sql_query); $laststandort='0'; $i=1; - + if ($gruppiert == false) { echo ' @@ -189,7 +187,7 @@ td,th - -
+ +    + + + '.$p->t('global/nachname').' '.$p->t('global/vorname').'' . $p->t('global/geschlecht') . ' '.$p->t('global/mail').'
$row->nachname$row->vorname$row->uid@".DOMAIN."'.strtoupper($row->geschlecht).''.$row->uid .'@' . DOMAIN . '
',$basis->convert_html_chars($row->bezeichnung),'',$basis->convert_html_chars($row->beschreibung),'',$basis->convert_html_chars($row->ipadresse),'Rebootdetailsbearbeiten
Ausbildungsart
Anmerkungen
Studiengang *'; echo '
Studiensemester *'; @@ -1145,17 +1172,20 @@ for ($i=1;$i<9;$i++) echo ''; echo ''; echo '
OrgForm
OrgForm'; + +echo ''; + echo '
Studienplan
'; From d98c7ec9b21cb3ab5ca2cf98ab339bb7cca734e9 Mon Sep 17 00:00:00 2001 From: Manfred Kindl Date: Thu, 31 Jan 2019 17:52:45 +0100 Subject: [PATCH 19/39] Changes to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 8ebe61e25..f2e4d7bdb 100644 --- a/.gitignore +++ b/.gitignore @@ -33,3 +33,4 @@ tests/codeception/tests/unit.suite.yml /sparks/* /webdav/google.php system/sql/ +.ptp-sync* \ No newline at end of file From 1b377474b60e5c06d0288c96a8cf3039cb60a4d1 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 1 Feb 2019 16:59:56 +0100 Subject: [PATCH 20/39] - Created Javascript DialogLib in public/js for showing JQuery UI succes, error and info messages - Used created DialogLib in infocenterDetails --- .../system/infocenter/infocenterDetails.php | 1 + application/views/templates/FHC-Header.php | 7 ++ public/css/DialogLib.css | 11 +++ public/js/DialogLib.js | 95 +++++++++++++++++++ public/js/infocenter/infocenterDetails.js | 17 ++-- 5 files changed, 121 insertions(+), 10 deletions(-) create mode 100644 public/css/DialogLib.css create mode 100644 public/js/DialogLib.js diff --git a/application/views/system/infocenter/infocenterDetails.php b/application/views/system/infocenter/infocenterDetails.php index 2a64f2478..c59702a65 100755 --- a/application/views/system/infocenter/infocenterDetails.php +++ b/application/views/system/infocenter/infocenterDetails.php @@ -7,6 +7,7 @@ 'bootstrap' => true, 'fontawesome' => true, 'jqueryui' => true, + 'dialoglib' => true, 'ajaxlib' => true, 'tablesorter' => true, 'tinymce' => true, diff --git a/application/views/templates/FHC-Header.php b/application/views/templates/FHC-Header.php index 0e1021da3..f58c1e870 100755 --- a/application/views/templates/FHC-Header.php +++ b/application/views/templates/FHC-Header.php @@ -16,6 +16,7 @@ // By default set the parameters to false $addons = isset($addons) ? $addons : false; + $dialoglib = isset($dialoglib) ? $dialoglib : false; $ajaxlib = isset($ajaxlib) ? $ajaxlib : false; $bootstrap = isset($bootstrap) ? $bootstrap : false; $filterwidget = isset($filterwidget) ? $filterwidget : false; @@ -73,6 +74,9 @@ // -------------------------------------------------------------------------------------------------------- // From public folder + // DialogLib CSS + if ($dialoglib === true) generateCSSsInclude('public/css/DialogLib.css'); + // AjaxLib CSS if ($ajaxlib === true) generateCSSsInclude('public/css/AjaxLib.css'); @@ -139,6 +143,9 @@ // -------------------------------------------------------------------------------------------------------- // From public folder + // DialogLib JS + if ($dialoglib === true) generateJSsInclude('public/js/DialogLib.js'); + // AjaxLib JS // NOTE: must be called before including others JS libraries that use it if ($ajaxlib === true) generateJSsInclude('public/js/AjaxLib.js'); diff --git a/public/css/DialogLib.css b/public/css/DialogLib.css new file mode 100644 index 000000000..113fab66e --- /dev/null +++ b/public/css/DialogLib.css @@ -0,0 +1,11 @@ +.dialogmessage +{ + text-align: center; + font-size: 1.1em; + margin: 12px 0 10px 0; +} + +.dialogmessage .glyphicon +{ + top: 3px; +} diff --git a/public/js/DialogLib.js b/public/js/DialogLib.js new file mode 100644 index 000000000..934634af1 --- /dev/null +++ b/public/js/DialogLib.js @@ -0,0 +1,95 @@ +/** + * FH-Complete + * + * @package + * @author + * @copyright Copyright (c) 2016 fhcomplete.org + * @license GPLv3 + * @link https://fhcomplete.org + * @since Version 1.0.0 + */ + +var FHC_DialogLib = { + + /** + * Show success message as jQueryUI alert. Works only with bootstrap. + * @param message + */ + alertSuccess: function(message) + { + var html = "

  "+message+"

"; + FHC_DialogLib.alertDefault('Success', html); + $(".ui-dialog-titlebar").addClass("alert-success text-center"); + $(".glyphicon-ok-sign").css("color", "#3c763d"); + FHC_DialogLib._formatShortDialog(); + }, + /** + * Show error message as jQueryUI alert. Works only with bootstrap. + * @param message + */ + alertError: function(message) + { + var html = "

  "+message+"

"; + FHC_DialogLib.alertDefault('Error occured', html); + $(".ui-dialog-titlebar").addClass("alert-danger text-center"); + $(".glyphicon-warning-sign").css("color", "#a94442"); + FHC_DialogLib._formatShortDialog(); + }, + /** + * Show info message as jQueryUI alert. Works only with bootstrap. + * @param message + */ + alertInfo: function(message) + { + var html = "

  "+message+"

"; + FHC_DialogLib.alertDefault('Info', html); + $(".ui-dialog-titlebar").addClass("alert-info text-center"); + $(".glyphicon-info-sign").css("color", "#245269"); + FHC_DialogLib._formatShortDialog(); + }, + /** + * Default jQueryUI alert + * @param title shown as message box heading + * @param html shown inside message box + * @param width of the message box + */ + alertDefault: function(title, html, width) + { + var strDivDialog = "
"; + strDivDialog += html; + strDivDialog += "
"; + + $(strDivDialog).appendTo("body"); // append the dialog div to the body + + $("#fhc-dialoglib-dialog").dialog({ + title: title, + dialogClass: "no-close", + autoOpen: true, + modal: true, + resizable: false, + height: "auto", + width: width, + minWidth: 300, + closeOnEscape: false, + buttons: [{ + text: "Ok", + click: function() { + $(this).dialog("close"); + } + }] + }); + }, + /** + * formats jQueryUI messagebox as "short", i.e. containing only one line of text, + * centers the text + * @private + */ + _formatShortDialog: function() + { + $(".ui-dialog-title").width("100%"); + $(".ui-dialog-buttonpane.ui-widget-content").css("padding", ".3em .4em .5em .4em"); + $(".ui-dialog .ui-dialog-content").css("padding", "0"); + $(".ui-dialog-buttonset button").css("margin", "0"); + } + +}; diff --git a/public/js/infocenter/infocenterDetails.js b/public/js/infocenter/infocenterDetails.js index 8de1d2c6f..ea21764da 100644 --- a/public/js/infocenter/infocenterDetails.js +++ b/public/js/infocenter/infocenterDetails.js @@ -119,7 +119,7 @@ $(document).ready(function () var InfocenterDetails = { genericSaveError: function() { - alert("error when saving"); + FHC_DialogLib.alertError("error when saving"); }, openZgvInfoForPrestudent: function(prestudent_id) { @@ -174,14 +174,11 @@ var InfocenterDetails = { data, { successCallback: function(data, textStatus, jqXHR) { - if (data === true) + if (data !== true) { - InfocenterDetails._refreshZgv(true); - } - else - { - alert("error when saving zgv Prio"); + FHC_DialogLib.alertError("error when saving ZGV prio"); } + InfocenterDetails._refreshZgv(true); } } ); @@ -264,7 +261,7 @@ var InfocenterDetails = { } else { - alert("error when saving Absage"); + FHC_DialogLib.alertError("error when saving Absage"); } } } @@ -285,13 +282,13 @@ var InfocenterDetails = { } else if (data.error === 2 && parseInt(data.retval.prestudent_id, 10)) { - alert("error when setting accepted documents"); + FHC_DialogLib.alertError("error when setting accepted documents"); InfocenterDetails._refreshZgv(); InfocenterDetails._refreshLog(); } else { - alert("error when saving Freigabe"); + FHC_DialogLib.alertError("error when saving Freigabe"); } } } From 5a2c886cb7cc06129102befe550f30dd400f77f0 Mon Sep 17 00:00:00 2001 From: Manfred Kindl Date: Fri, 1 Feb 2019 17:07:14 +0100 Subject: [PATCH 21/39] Textkorrektur Ausbildungsvertrag MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Studiengebühr umbenannt in Studienbeitrag --- system/xsl/Ausbildungsver_0.xsl | 2 +- system/xsl/Ausbildungsver_9005.xsl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/system/xsl/Ausbildungsver_0.xsl b/system/xsl/Ausbildungsver_0.xsl index 62ccd3b70..f1ba53bf4 100644 --- a/system/xsl/Ausbildungsver_0.xsl +++ b/system/xsl/Ausbildungsver_0.xsl @@ -544,7 +544,7 @@ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn ab dem -3. Semester gleichzeitig mit der Studiengebühr vor Beginn des Semesters zu entrichten. +3. Semester gleichzeitig mit dem Studienbeitrag vor Beginn des Semesters zu entrichten. Bei Vertragsauflösung vor Studienabschluss aus Gründen, die die Studentin bzw. der Student zu vertreten hat, oder auf deren bzw. dessen Wunsch, wird der Unkostenbeitrag zur Abdeckung der dem Erhalter erwachsenen administrativen Zusatzkosten einbehalten. 6.2.6 Lehr- und Lernbehelfe diff --git a/system/xsl/Ausbildungsver_9005.xsl b/system/xsl/Ausbildungsver_9005.xsl index af22bdb71..db74f0dbf 100644 --- a/system/xsl/Ausbildungsver_9005.xsl +++ b/system/xsl/Ausbildungsver_9005.xsl @@ -500,7 +500,7 @@ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn 6.2.3 ÖH-Beitrag Gemäß § 4 Abs 10 FHStG sind ao. Studierende an Fachhochschulen Mitglieder der Österreichischen HochschülerInnenschaft (ÖH). Der/Die ao. Studierende hat semesterweise einen ÖH-Beitrag an den Erhalter zu entrichten, der diesen an die ÖH abführt. Die Entrichtung des Betrags ist Voraussetzung für die Zulassung zum ao. Studium bzw. für dessen Fortsetzung. 6.2.4 Unkostenbeitrag - Pro Semester ist ein Unkostenbeitrag zu entrichten. Die Höhe des Unkostenbeitrages beträgt € 75,– pro Semester. Eine allfällige Anpassung wird durch Aushang bekannt gemacht. Der Unkostenbeitrag ist gleichzeitig mit der Studiengebühr vor Beginn des Semesters zu entrichten. Bei Vertragsauflösung vor dem Ende der besuchten Lehrveranstaltungen aus Gründen, die die ao. Studentin bzw. der ao. Student zu vertreten hat, oder auf deren bzw. dessen Wunsch, wird der Unkostenbeitrag zur Abdeckung der dem Erhalter erwachsenen administrativen Zusatzkosten einbehalten. + Pro Semester ist ein Unkostenbeitrag zu entrichten. Die Höhe des Unkostenbeitrages beträgt € 75,– pro Semester. Eine allfällige Anpassung wird durch Aushang bekannt gemacht. Der Unkostenbeitrag ist gleichzeitig mit dem Studienbeitrag vor Beginn des Semesters zu entrichten. Bei Vertragsauflösung vor dem Ende der besuchten Lehrveranstaltungen aus Gründen, die die ao. Studentin bzw. der ao. Student zu vertreten hat, oder auf deren bzw. dessen Wunsch, wird der Unkostenbeitrag zur Abdeckung der dem Erhalter erwachsenen administrativen Zusatzkosten einbehalten. 6.2.5 Lehr- und Lernbehelfe Die Anschaffung unterrichtsbezogener Literatur und individueller Lernbehelfe ist durch den Unkostenbeitrag nicht abgedeckt. Eventuelle zusätzliche Kosten, die sich beispielsweise durch die lehrveranstaltungsbezogene, gemeinsame Anschaffung von Lehr- bzw. Lernbehelfen (Skripten, CDs, Bücher, Projektmaterialien, Kopierpapier etc.) oder durch Exkursionen ergeben, werden von jedem Studiengang individuell eingehoben. 6.2.6 Beibringung persönlicher Daten From 9c83d10e20b4858423dba7bed721ca3e1e35eb7a Mon Sep 17 00:00:00 2001 From: Paolo Date: Mon, 4 Feb 2019 18:32:00 +0100 Subject: [PATCH 22/39] =?UTF-8?q?DienstreiseMT-Stempelungen=20k=C3=B6nnen?= =?UTF-8?q?=20parallel=20zu=20Arbeitszeit=20eingetragen=20werden?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- zeitaufzeichnung.class.php | 800 +++++++++++++++++++++++++++++++++++++ 1 file changed, 800 insertions(+) create mode 100644 zeitaufzeichnung.class.php diff --git a/zeitaufzeichnung.class.php b/zeitaufzeichnung.class.php new file mode 100644 index 000000000..509444d39 --- /dev/null +++ b/zeitaufzeichnung.class.php @@ -0,0 +1,800 @@ +, + * Andreas Oesterreicher and + * Rudolf Hangl . + */ +/** + * Klasse Zeitaufzeichnung + * @create 06-11-2007 + */ +require_once(dirname(__FILE__).'/basis_db.class.php'); + +class zeitaufzeichnung extends basis_db +{ + public $new; // boolean + public $result = array(); // zeitaufzeichnung Objekt + public $done=false; // boolean + + //Tabellenspalten + public $zeitaufzeichnung_id; // serial + public $uid; // varchar(16) + public $aktivitaet_kurzbz; // varchar(16) + public $start; // timestamp + public $ende; // timestamp + public $beschreibung; // varchar(256) + public $oe_kurzbz_1; // varchar(32) ehemals studiengangs_kz + public $oe_kurzbz_2; // varchar(32) ehemals fachbereich_kurzbz + public $insertamum; // timestamp + public $insertvon; // varchar(16) + public $updateamum; // timestamp + public $updatevon; // varchar(16) + public $projekt_kurzbz; // varchar(16) + public $ext_id; // bigint + public $service_id; // integer + public $kunde_uid; // varchar(32) + + /** + * Konstruktor + * @param $zeitaufzeichnung_id ID der Zeitaufzeichnung die geladen werden soll (Default=null) + */ + public function __construct($zeitaufzeichnung_id=null) + { + parent::__construct(); + + if($zeitaufzeichnung_id != null) + $this->load($zeitaufzeichnung_id); + } + + /** + * Laedt die Zeitaufzeichnung mit der ID $zeitaufzeichnung_id + * @param $adress_id ID der zu ladenden Adresse + * @return true wenn ok, false im Fehlerfall + */ + public function load($zeitaufzeichnung_id) + { + //Pruefen ob zeitaufzeichnung_id eine gueltige Zahl ist + if(!is_numeric($zeitaufzeichnung_id) || $zeitaufzeichnung_id == '') + { + $this->errormsg = 'Zeitaufzeichnung_id muss eine Zahl sein'; + return false; + } + + //Daten aus der Datenbank lesen + $qry = "SELECT * FROM campus.tbl_zeitaufzeichnung WHERE zeitaufzeichnung_id=".$this->db_add_param($zeitaufzeichnung_id, FHC_INTEGER); + + if(!$this->db_query($qry)) + { + $this->errormsg = 'Fehler bei einer Datenbankabfrage'; + return false; + } + + if($row = $this->db_fetch_object()) + { + $this->zeitaufzeichnung_id = $row->zeitaufzeichnung_id; + $this->uid = $row->uid; + $this->aktivitaet_kurzbz = $row->aktivitaet_kurzbz; + $this->start = $row->start; + $this->ende = $row->ende; + $this->beschreibung = $row->beschreibung; + $this->oe_kurzbz_1 = $row->oe_kurzbz_1; + $this->oe_kurzbz_2 = $row->oe_kurzbz_2; + $this->insertamum = $row->insertamum; + $this->insertvon = $row->insertvon; + $this->updateamum = $row->updateamum; + $this->updatevon = $row->updatevon; + $this->projekt_kurzbz = $row->projekt_kurzbz; + $this->ext_id = $row->ext_id; + $this->service_id = $row->service_id; + $this->kunde_uid = $row->kunde_uid; + } + else + { + $this->errormsg = 'Es ist kein Datensatz mit dieser ID vorhanden'; + return false; + } + + return true; + } + + /** + * Prueft die Variablen auf Gueltigkeit + * @return true wenn ok, false im Fehlerfall + */ + protected function validate() + { + $this->errormsg = ''; + return true; + } + + /** + * Speichert den aktuellen Datensatz in die Datenbank + * Wenn $neu auf true gesetzt ist wird ein neuer Datensatz angelegt + * andernfalls wird der Datensatz mit der ID in $adresse_id aktualisiert + * @return true wenn ok, false im Fehlerfall + */ + public function save() + { + //Variablen pruefen + if(!$this->validate()) + return false; + + // check ob identischer eintrag existiert + // DienstreiseMT-Einträge sind hier ausgenommen da eintägige Dienstreisen mit der identen Arbeitszeit eingetragen werden könnten + if ($this->aktivitaet_kurzbz != 'DienstreiseMT') + { + $check_qry = 'SELECT count(*) from campus.tbl_zeitaufzeichnung where uid='.$this->db_add_param($this->uid).' and aktivitaet_kurzbz != \'DienstreiseMT\' and start = '.$this->db_add_param($this->start).' and ende = '.$this->db_add_param($this->ende); + if($this->db_query($check_qry) && $this->new) + { + if($row = $this->db_fetch_object()) + { + if ($row->count) + { + $this->errormsg = 'Identischer Eintrag existiert!'; + return false; + } + } + } + } + + // ER - Checks + if ($this->aktivitaet_kurzbz == 'Ersatzruhe') + { + $check_qry = "SELECT count(*) from campus.tbl_zeitaufzeichnung where uid=".$this->db_add_param($this->uid)." and (start < ".$this->db_add_param($this->ende)." and ende > ".$this->db_add_param($this->start).")"; + if ($this->zeitaufzeichnung_id) + $check_qry .= " and zeitaufzeichnung_id != ".$this->db_add_param($this->zeitaufzeichnung_id); + if($this->db_query($check_qry)) + { + if($row = $this->db_fetch_object()) + { + if ($row->count) + { + $this->errormsg = 'Ersatzruhe darf nicht Überlappen!'; + return false; + } + } + } + } + if ($this->aktivitaet_kurzbz != 'Ersatzruhe') + { + $check_qry = "SELECT count(*) from campus.tbl_zeitaufzeichnung where uid=".$this->db_add_param($this->uid)." and aktivitaet_kurzbz = 'Ersatzruhe' and (start < ".$this->db_add_param($this->ende)." and ende > ".$this->db_add_param($this->start).")"; + if($this->db_query($check_qry)) + { + if($row = $this->db_fetch_object()) + { + if ($row->count) + { + $this->errormsg = 'Eintrag darf nicht mit Ersatzruhe Überlappen!'; + return false; + } + } + } + } + + if($this->new) + { + //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, service_id, kunde_uid) VALUES('. + $this->db_add_param($this->uid).', '. + $this->db_add_param($this->aktivitaet_kurzbz).', '. + $this->db_add_param($this->start).', '. + $this->db_add_param($this->ende).', '. + $this->db_add_param($this->beschreibung).', '. + $this->db_add_param($this->oe_kurzbz_1).', '. + $this->db_add_param($this->oe_kurzbz_2).','. + $this->db_add_param($this->insertamum).', '. + $this->db_add_param($this->insertvon).', '. + $this->db_add_param($this->updateamum).', '. + $this->db_add_param($this->updatevon).', '. + $this->db_add_param($this->projekt_kurzbz).', '. + $this->db_add_param($this->service_id).', '. + $this->db_add_param($this->kunde_uid).');'; + } + else + { + //Updaten des bestehenden Datensatzes + + //Pruefen ob zeitaufzeichnung_id eine gueltige Zahl ist + if(!is_numeric($this->zeitaufzeichnung_id)) + { + $this->errormsg = 'zeitaufzeichnung_id muss eine gueltige Zahl sein'; + return false; + } + + $qry='UPDATE campus.tbl_zeitaufzeichnung SET'. + ' uid='.$this->db_add_param($this->uid).', '. + ' aktivitaet_kurzbz='.$this->db_add_param($this->aktivitaet_kurzbz).', '. + ' start='.$this->db_add_param($this->start).', '. + ' ende='.$this->db_add_param($this->ende).', '. + ' beschreibung='.$this->db_add_param($this->beschreibung).', '. + ' oe_kurzbz_1='.$this->db_add_param($this->oe_kurzbz_1).', '. + ' oe_kurzbz_2='.$this->db_add_param($this->oe_kurzbz_2).', '. + ' updateamum='.$this->db_add_param($this->updateamum).', '. + ' updatevon='.$this->db_add_param($this->updatevon).', '. + ' projekt_kurzbz='.$this->db_add_param($this->projekt_kurzbz).', '. + ' service_id='.$this->db_add_param($this->service_id).', '. + ' kunde_uid='.$this->db_add_param($this->kunde_uid).' '. + 'WHERE zeitaufzeichnung_id='.$this->db_add_param($this->zeitaufzeichnung_id, FHC_INTEGER, false); + } + + if($this->db_query($qry)) + { + if($this->new) + { + //naechste ID aus der Sequence holen + $qry="SELECT currval('campus.tbl_zeitaufzeichnung_zeitaufzeichnung_id_seq') as id;"; + if($this->db_query($qry)) + { + if($row = $this->db_fetch_object()) + { + $this->zeitaufzeichnung_id = $row->id; + $this->db_query('COMMIT'); + return true; + } + else + { + $this->db_query('ROLLBACK'); + $this->errormsg = "Fehler beim Auslesen der Sequence"; + return false; + } + } + else + { + $this->db_query('ROLLBACK'); + $this->errormsg = 'Fehler beim Auslesen der Sequence'; + return false; + } + } + } + else + { + $this->errormsg = 'Fehler beim Speichern'; + return false; + } + return true; + } + + /** + * Loescht den Datenensatz mit der ID die uebergeben wird + * @param $zeitaufzeichnnung_id ID die geloescht werden soll + * @return true wenn ok, false im Fehlerfall + */ + public function delete($zeitaufzeichnung_id) + { + //Pruefen ob zeitaufzeichnung_id eine gueltige Zahl ist + if(!is_numeric($zeitaufzeichnung_id) || $zeitaufzeichnung_id == '') + { + $this->errormsg = 'zeitaufzeichnung_id muss eine gueltige Zahl sein'; + return false; + } + + //loeschen des Datensatzes + $qry="DELETE FROM campus.tbl_zeitaufzeichnung WHERE zeitaufzeichnung_id=".$this->db_add_param($zeitaufzeichnung_id, FHC_INTEGER, false); + + if($this->db_query($qry)) + { + return true; + } + else + { + $this->errormsg = 'Fehler beim Loeschen der Daten'; + return false; + } + } + + /** + * Laedt die Datensaetze eines Projektes + * @param $projekt_kurzbz + */ + public function getListeProjekt($projekt_kurzbz) + { + $where = 'projekt_kurzbz='.$this->db_add_param($projekt_kurzbz); + + $qry = "SELECT + *, to_char ((ende-start),'HH24:MI') as diff, + (SELECT (to_char(sum(ende-start),'DD')::integer)*24+to_char(sum(ende-start),'HH24')::integer || ':' || to_char(sum(ende-start),'MI') + FROM campus.tbl_zeitaufzeichnung + WHERE $where ) as summe + FROM campus.tbl_zeitaufzeichnung WHERE $where + ORDER BY start DESC"; + + if($result = $this->db_query($qry)) + { + while($row = $this->db_fetch_object($result)) + { + $obj = new zeitaufzeichnung(); + + $obj->zeitaufzeichnung_id = $row->zeitaufzeichnung_id; + $obj->uid = $row->uid; + $obj->aktivitaet_kurzbz = $row->aktivitaet_kurzbz; + $obj->start = $row->start; + $obj->ende = $row->ende; + $obj->beschreibung = $row->beschreibung; + $obj->oe_kurzbz_1 = $row->oe_kurzbz_1; + $obj->oe_kurzbz_2 = $row->oe_kurzbz_2; + $obj->insertamum = $row->insertamum; + $obj->insertvon = $row->insertvon; + $obj->updateamum = $row->updateamum; + $obj->updatevon = $row->updatevon; + $obj->projekt_kurzbz = $row->projekt_kurzbz; + $obj->ext_id = $row->ext_id; + $obj->service_id = $row->service_id; + $obj->kunde_uid = $row->kunde_uid; + $obj->summe = $row->summe; + $obj->diff = $row->diff; + + $this->result[] = $obj; + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + + + /** + * Laedt die Zeitaufzeichnungen eines Users in einer festgelegten Zeitspanne + * @param $user + * @param $from startdatum als String in Form Y-m-d + * @param $to enddatum als String in Form Y-m-d + * @param $excluded_activities zu ignorierende Aktivitätstypen + * @return bool + */ + public function getListeUserFromTo($user, $from = null, $to = null, $excluded_activities = null) + { + $where = "uid=".$this->db_add_param($user); + + //standard wenn kein Datum gegeben - letzter Monat + if(empty($from) && empty($to)) + { + $from = date('Y-m-d', strtotime('first day of previous month')); + $to = date('Y-m-d', strtotime('last day of previous month')); + } + else if(empty($to))//standard wenn ein Datum gegeben - datum +/- 40 tage + $to = date('Y-m-d', strtotime($from. ' + 40 days')); + else if(empty($from)) + $from = date('Y-m-d', strtotime($to. ' - 40 days')); + + //zusätzlicher Tag - SQL rechnet letzten Tag nicht hinein + $to = date('Y-m-d', strtotime($to. ' + 1 days')); + + $where.= " AND ((start >= ".$this->db_add_param($from)."::DATE AND start <= ".$this->db_add_param($to)."::DATE) + OR (ende >= ".$this->db_add_param($from)."::DATE AND ende <= ".$this->db_add_param($to)."::DATE))"; + + if (!empty($excluded_activities)) + { + $exactstring = is_array($excluded_activities) ? $this->db_implode4SQL($excluded_activities) : $this->db_add_param($excluded_activities); + $where .= " AND (aktivitaet_kurzbz NOT IN (" . $exactstring . ") OR aktivitaet_kurzbz IS NULL)"; + } + + $qry = "SELECT + *, to_char ((ende-start),'HH24:MI') as diff, + (SELECT (to_char(sum(ende-start),'DD')::integer)*24+to_char(sum(ende-start),'HH24')::integer || ':' || to_char(sum(ende-start),'MI') + FROM campus.tbl_zeitaufzeichnung + WHERE $where ) as summe + FROM campus.tbl_zeitaufzeichnung WHERE $where + ORDER BY start DESC"; + + if($result = $this->db_query($qry)) + { + while($row = $this->db_fetch_object($result)) + { + $obj = new zeitaufzeichnung(); + + $obj->zeitaufzeichnung_id = $row->zeitaufzeichnung_id; + $obj->uid = $row->uid; + $obj->aktivitaet_kurzbz = $row->aktivitaet_kurzbz; + $obj->start = $row->start; + $obj->ende = $row->ende; + $obj->beschreibung = $row->beschreibung; + $obj->oe_kurzbz_1 = $row->oe_kurzbz_1; + $obj->oe_kurzbz_2 = $row->oe_kurzbz_2; + $obj->insertamum = $row->insertamum; + $obj->insertvon = $row->insertvon; + $obj->updateamum = $row->updateamum; + $obj->updatevon = $row->updatevon; + $obj->projekt_kurzbz = $row->projekt_kurzbz; + $obj->ext_id = $row->ext_id; + $obj->service_id = $row->service_id; + $obj->kunde_uid = $row->kunde_uid; + $obj->summe = $row->summe; + $obj->diff = $row->diff; + $obj->datum = $row->start; + + $this->result[] = $obj; + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + + /** + * Laedt die Zeitaufzeichnungen eines Users. Default: Die letzten 40 Tage + * @param string $user + * @param integer $days default: 40 Tage + */ + public function getListeUser($user, $days='40') + { + $where = "uid=".$this->db_add_param($user); + if ($days!='') + $where.= " AND ende>(now() - INTERVAL '".$days." days')"; + + $qry = "SELECT + *, to_char ((ende-start),'HH24:MI') as diff, + (SELECT (to_char(sum(ende-start),'DD')::integer)*24+to_char(sum(ende-start),'HH24')::integer || ':' || to_char(sum(ende-start),'MI') + FROM campus.tbl_zeitaufzeichnung + WHERE $where ) as summe + FROM campus.tbl_zeitaufzeichnung WHERE $where + ORDER BY start DESC"; + + if($result = $this->db_query($qry)) + { + while($row = $this->db_fetch_object($result)) + { + $obj = new zeitaufzeichnung(); + + $obj->zeitaufzeichnung_id = $row->zeitaufzeichnung_id; + $obj->uid = $row->uid; + $obj->aktivitaet_kurzbz = $row->aktivitaet_kurzbz; + $obj->start = $row->start; + $obj->ende = $row->ende; + $obj->beschreibung = $row->beschreibung; + $obj->oe_kurzbz_1 = $row->oe_kurzbz_1; + $obj->oe_kurzbz_2 = $row->oe_kurzbz_2; + $obj->insertamum = $row->insertamum; + $obj->insertvon = $row->insertvon; + $obj->updateamum = $row->updateamum; + $obj->updatevon = $row->updatevon; + $obj->projekt_kurzbz = $row->projekt_kurzbz; + $obj->ext_id = $row->ext_id; + $obj->service_id = $row->service_id; + $obj->kunde_uid = $row->kunde_uid; + $obj->summe = $row->summe; + $obj->diff = $row->diff; + $obj->datum = $row->start; + + $this->result[] = $obj; + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + + /** + * Laedt die Zeitaufzeichnungen eines Users aufgefüllt mit lehren Tagen. + * Default: Die letzten 40 Tage + * @param string $user + * @param integer $days deafult: 40 Tage + */ + public function getListeUserFull($user, $days='40') + { + $where = "uid=".$this->db_add_param($user); + if ($days!='') + $where.= " AND ende>(now() - INTERVAL '".$days." days')"; + $where_join = "and (z.aktivitaet_kurzbz != 'DienstreiseMT' or z.aktivitaet_kurzbz is null) and z.uid=".$this->db_add_param($user); + if ($days!='') + $where_join.= " AND z.ende>(now() - INTERVAL '".$days." days')"; + if ($days=='') + $max_anz = 180; + else + $max_anz = $days; + $qry = "SELECT + d.dates, z.*, to_char ((z.ende-z.start),'HH24:MI') as diff, + (SELECT (to_char(sum(ende-start),'DD')::integer)*24+to_char(sum(ende-start),'HH24')::integer || ':' || to_char(sum(ende-start),'MI') + FROM campus.tbl_zeitaufzeichnung + WHERE $where) as summe + FROM campus.tbl_zeitaufzeichnung z + right join (select current_date - s.a as dates from generate_series(0,$max_anz,1) as s(a)) d on date(z.ende) = d.dates $where_join order by d.dates desc, z.start desc + "; + + if($result = $this->db_query($qry)) + { + while($row = $this->db_fetch_object($result)) + { + $obj = new zeitaufzeichnung(); + + $obj->zeitaufzeichnung_id = $row->zeitaufzeichnung_id; + $obj->uid = $row->uid; + $obj->aktivitaet_kurzbz = $row->aktivitaet_kurzbz; + $obj->start = $row->start; + $obj->ende = $row->ende; + $obj->beschreibung = $row->beschreibung; + $obj->oe_kurzbz_1 = $row->oe_kurzbz_1; + $obj->oe_kurzbz_2 = $row->oe_kurzbz_2; + $obj->insertamum = $row->insertamum; + $obj->insertvon = $row->insertvon; + $obj->updateamum = $row->updateamum; + $obj->updatevon = $row->updatevon; + $obj->projekt_kurzbz = $row->projekt_kurzbz; + $obj->ext_id = $row->ext_id; + $obj->service_id = $row->service_id; + $obj->kunde_uid = $row->kunde_uid; + $obj->summe = $row->summe; + $obj->diff = $row->diff; + $obj->datum = $row->dates; + + $this->result[] = $obj; + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + + /** + * Laedt die Zeitaufzeichnungen eines Users aufgefüllt mit lehren Tagen. + * Default: Die letzten 40 Tage + * @param string $user + * @param integer $days deafult: 40 Tage + */ + public function getDienstreisenUser($user, $days='40') + { + $where = "uid=".$this->db_add_param($user); + if ($days!='') + $where.= " AND ende>(now() - INTERVAL '".$days." days')"; + $where .= " AND aktivitaet_kurzbz = 'DienstreiseMT'"; + $qry = "SELECT + zeitaufzeichnung_id, start::date as starttag, TO_CHAR(start, 'HH24:MI') as startzeit, ende::date as endtag, TO_CHAR(ende, 'HH24:MI') as endzeit + FROM campus.tbl_zeitaufzeichnung + where $where + ORDER BY ende DESC + "; + + if($result = $this->db_query($qry)) + { + $dr_arr = array(); + while($row = $this->db_fetch_object($result)) + { + if (array_key_exists($row->starttag, $dr_arr)) + { + $dr_arr[$row->starttag]['start'] = $row->startzeit; + $dr_arr[$row->starttag]['id'] = $row->zeitaufzeichnung_id; + } + else + { + $dr_arr[$row->starttag] = array(); + $dr_arr[$row->starttag]['start'] = $row->startzeit; + $dr_arr[$row->starttag]['id'] = $row->zeitaufzeichnung_id; + } + if (array_key_exists($row->endtag, $dr_arr)) + { + $dr_arr[$row->endtag]['ende'] = $row->endzeit; + $dr_arr[$row->endtag]['id'] = $row->zeitaufzeichnung_id; + } + else + { + $dr_arr[$row->endtag] = array(); + $dr_arr[$row->endtag]['ende'] = $row->endzeit; + $dr_arr[$row->endtag]['id'] = $row->zeitaufzeichnung_id; + } + + $this->result = $dr_arr; + } + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + + /** + * Löscht sämtliche Einträge eines Users für einen Tag + * @param string $user + * @param string $tag Y-m-d + */ + public function deleteEntriesForUser($user, $tag) + { + $where = "uid=".$this->db_add_param($user); + + $qry = "delete from campus.tbl_zeitaufzeichnung where $where and date_trunc('day', start) = '$tag'"; + if($result = $this->db_query($qry)) + { + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + + /** + * Löscht Pauseneinträge eines Users für einen Tag, die außerhalb der Arbeitszeit liegen + * Löscht Pauseneinträge an Tagen ohne Arbeitszeit + * @param string $user + * @param string $tag Y-m-d + */ + public function cleanPausenForUser($user, $tag) + { + $where = "uid=".$this->db_add_param($user); + + $qry = " + delete from campus.tbl_zeitaufzeichnung where aktivitaet_kurzbz = 'Pause' and start::date = '$tag' and $where and +( +start::time >= +(SELECT max(ende::time) as endzeit from campus.tbl_zeitaufzeichnung where $where and start::date = '$tag' AND (aktivitaet_kurzbz != 'LehreExtern' or aktivitaet_kurzbz is null ) and aktivitaet_kurzbz != 'Pause') +or +ende::time<= +(SELECT min(start::time) as startzeit from campus.tbl_zeitaufzeichnung where $where and start::date = '$tag' AND (aktivitaet_kurzbz != 'LehreExtern' or aktivitaet_kurzbz is null ) and aktivitaet_kurzbz != 'Pause') +or not exists +(select 1 from campus.tbl_zeitaufzeichnung where aktivitaet_kurzbz != 'LehreExtern' and aktivitaet_kurzbz != 'Pause' and start::date = '$tag' and $where ) +) + "; + + if($result = $this->db_query($qry)) + { + return true; + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + + /** + * Holt alle ZA-Einträge Typ LehreIntern und LehreExtern eines Users + * für das laufende Studienjahr und gibt die Summen in einem Array zurück + * @param string $user + * @return Array mit Key: LehreIntern, LehreExtern, LehreAuftraege, LehreInkludiert + */ + public function getLehreForUser($user,$sem) + { + $where = "uid=".$this->db_add_param($user); + $where_sem = "studiensemester_kurzbz=".$this->db_add_param($sem); + $lehre_arr = array("LehreIntern"=>0, "LehreExtern"=>0, "LehreAuftraege"=>0); + + $qry = " + select sum(extract(epoch from ende-start))/3600 as lehre, aktivitaet_kurzbz from campus.tbl_zeitaufzeichnung where $where and aktivitaet_kurzbz in ('LehreIntern', 'LehreExtern') and start > (select start from public.tbl_studiensemester where $where_sem) group by aktivitaet_kurzbz + "; + + if($result = $this->db_query($qry)) + { + + while($row = $this->db_fetch_object($result)) + { + $lehre_arr[$row->aktivitaet_kurzbz] = round($row->lehre,2); + } + } + else + { + return false; + } + $where = "mitarbeiter_uid=".$this->db_add_param($user); + $where_sem = "l.studiensemester_kurzbz=".$this->db_add_param($sem); + + $qry = " + SELECT sum(semstunden) AS stunden + FROM + ( + SELECT sum(m.semesterstunden) AS semstunden + FROM + lehre.tbl_lehreinheitmitarbeiter m, + lehre.tbl_lehreinheit l + JOIN + lehre.tbl_lehrveranstaltung lv using (lehrveranstaltung_id) + JOIN + public.tbl_studiengang s using (studiengang_kz) + WHERE + $where AND + $where_sem AND + l.lehreinheit_id = m.lehreinheit_id AND + m.stundensatz * m.semesterstunden > 0 AND + s.typ not in ('l') AND + lv.studiengang_kz > 0 + UNION + SELECT sum(pb.stunden) AS semstunden + FROM + lehre.tbl_projektarbeit pa, + lehre.tbl_projektbetreuer pb, + public.tbl_benutzer b, + lehre.tbl_lehreinheit l + JOIN + lehre.tbl_lehrveranstaltung lv using (lehrveranstaltung_id) + JOIN + public.tbl_studiengang s using (studiengang_kz) + + WHERE + pa.lehreinheit_id = l.lehreinheit_id AND + pb.projektarbeit_id = pa.projektarbeit_id AND + pb.person_id = b.person_id AND + b.uid = ".$this->db_add_param($user)." AND + pb.stunden * pb.stundensatz > 0 AND + s.typ not in ('l') AND + lv.studiengang_kz > 0 AND + $where_sem + ) AS semstunden + "; + + if($result = $this->db_query($qry)) + { + + while($row = $this->db_fetch_object($result)) + { + $lehre_arr["LehreAuftraege"] = round($row->stunden); + } + } + else + { + return false; + } + + return $lehre_arr; + } + + /** + * Holt das Datum bis zu dem die Eintragung für einen bestimmten User gesperrt ist + * @param string $user + * @return string $tag Y-m-d or false + */ + + public function getEintragungGesperrtBisForUser($user) + { + //check if addon casetime is installed + $qrytable = " + SELECT EXISTS( + SELECT 1 + FROM information_schema.tables + WHERE + table_schema = 'addon' AND + table_name = 'tbl_casetime_timesheet' + ); + "; + + $res = $this->db_query($qrytable); + if ($this->db_fetch_row($res)[0] == 't') + { + //check if sent timesheets for the UID exist + $where = "uid=".$this->db_add_param($user); + + $qry = "select max(datum) from addon.tbl_casetime_timesheet where ".$where." and abgeschicktamum is not null"; + + if($result = $this->db_query($qry)) + { + $datum = $this->db_fetch_object($result); + return $datum->max; + } + else + { + return false; + } + } + else + { + return false; + } + } +} +?> From f6a1f65150214f27d576f9a7404ce8cfe55125de Mon Sep 17 00:00:00 2001 From: Paolo Date: Mon, 4 Feb 2019 18:34:30 +0100 Subject: [PATCH 23/39] =?UTF-8?q?LVPlan=20SQL=20f=C3=BCr=20LOAD=5FUEBER=5F?= =?UTF-8?q?SEMESTERHAELFTE=20angepasst=20damit=20auch=20f=C3=BCr=20Wiederh?= =?UTF-8?q?oler=20ein=20korrektes=20ergebnis=20geliefert=20wird?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/lehrstunde.class.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/include/lehrstunde.class.php b/include/lehrstunde.class.php index 5ed27674e..6cbc5db0a 100644 --- a/include/lehrstunde.class.php +++ b/include/lehrstunde.class.php @@ -329,10 +329,12 @@ class lehrstunde extends basis_db if($lvplan_load_ueber_semesterhaelfte) { $sql_query="SELECT studiengang_kz, semester, verband, gruppe - FROM public.tbl_studentlehrverband - WHERE student_uid=".$this->db_add_param($uid)." - AND studiensemester_kurzbz in(".$this->db_add_param($this->ss).",".$this->db_add_param($this->ssnext).",".$this->db_add_param($this->ssprev).") - order by semester desc limit 2"; + FROM + public.tbl_studentlehrverband + JOIN public.tbl_studiensemester USING(studiensemester_kurzbz) + WHERE student_uid=".$this->db_add_param($uid)." + AND studiensemester_kurzbz in(".$this->db_add_param($this->ss).",".$this->db_add_param($this->ssnext).",".$this->db_add_param($this->ssprev).") + ORDER BY start desc LIMIT 2"; } else { From 6a512d7b256900c806c5349dfde570ca2c7b12fb Mon Sep 17 00:00:00 2001 From: Paolo Date: Tue, 5 Feb 2019 10:33:11 +0100 Subject: [PATCH 24/39] Infocenter notizen update - removed html specialchars in quickinfo - notizen are retrieved by ajax when click on tablerow --- .../system/infocenter/InfoCenter.php | 19 +++- .../views/system/infocenter/notizen.php | 4 +- public/js/infocenter/infocenterDetails.js | 91 +++++++++++++------ system/phrasesupdate.php | 20 ++++ 4 files changed, 103 insertions(+), 31 deletions(-) diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index 1f808da53..65a6aec07 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -84,6 +84,7 @@ class InfoCenter extends Auth_Controller 'saveZgvPruefung' => 'infocenter:rw', 'saveAbsage' => 'infocenter:rw', 'saveFreigabe' => 'infocenter:rw', + 'getNotiz' => 'infocenter:r', 'saveNotiz' => 'infocenter:rw', 'updateNotiz' => 'infocenter:rw', 'reloadZgvPruefungen' => 'infocenter:r', @@ -533,6 +534,20 @@ class InfoCenter extends Auth_Controller $this->output->set_content_type('application/json')->set_output(json_encode($json)); } + /** + * Gets a Notiz + */ + public function getNotiz() + { + $notiz_id = $this->input->get('notiz_id'); + + $result = $this->NotizModel->load( + $notiz_id + ); + + $this->output->set_content_type('application/json')->set_output(json_encode($result)); + } + /** * Saves a new Notiz for a person * @param $person_id @@ -557,10 +572,10 @@ class InfoCenter extends Auth_Controller * Updates a new Notiz for a person * @param int $notiz_id * @param int $person_id - * @return bool true if success */ - public function updateNotiz($notiz_id, $person_id) + public function updateNotiz($notiz_id) { + $person_id = $this->input->post('person_id'); $titel = $this->input->post('notiztitel'); $text = $this->input->post('notiz'); diff --git a/application/views/system/infocenter/notizen.php b/application/views/system/infocenter/notizen.php index 53d289721..13f7bb6e1 100644 --- a/application/views/system/infocenter/notizen.php +++ b/application/views/system/infocenter/notizen.php @@ -9,11 +9,11 @@
insertamum), 'd.m.Y H:i:s') ?> titel) ?> verfasser_uid ?>notiz_id ?>
" + record[additionalColumn] + "

'.$p->t("telefonverzeichnis/titelTelefonverzeichnis").' '.CAMPUS_NAME.'

+ @@ -199,10 +197,10 @@ td,th '; - + while($row = $db->db_fetch_object($result)) { - echo ' + echo ' @@ -227,7 +225,7 @@ td,th '; $i++; } - else + else { while($row = $db->db_fetch_object($result)) { @@ -244,7 +242,7 @@ td,th } $laststandort = $row->standort_id; $qry_standort = "SELECT tbl_kontakt.kontakt as nummer, tbl_firma.name as name FROM public.tbl_standort JOIN public.tbl_firma USING(firma_id) JOIN public.tbl_kontakt USING(standort_id) - WHERE standort_id='".addslashes($row->standort_id)."' AND kontakttyp='telefon'"; + WHERE standort_id=".$db->db_add_param($row->standort_id)." AND kontakttyp='telefon'"; if($result_standort = $db->db_query($qry_standort)) { if($row_standort = $db->db_fetch_object($result_standort)) @@ -267,18 +265,8 @@ td,th } } } - echo ' + echo ' - @@ -292,20 +280,20 @@ td,th
'.$p->t("lvplan/raum").'
'.$row->nachname.' '.$row->vorname.' '.$row->telefonklappe.'
'; - + if ($gst_extra==true || $gruppiert == true) { - $sql_query = " SELECT vw_mitarbeiter.person_id, vw_mitarbeiter.vorname, vw_mitarbeiter.nachname, vw_mitarbeiter.telefonklappe, vw_mitarbeiter.ort_kurzbz, vw_mitarbeiter.standort_id, tbl_person.foto_sperre + $sql_query = " SELECT vw_mitarbeiter.person_id, vw_mitarbeiter.vorname, vw_mitarbeiter.nachname, vw_mitarbeiter.telefonklappe, vw_mitarbeiter.ort_kurzbz, vw_mitarbeiter.standort_id, tbl_person.foto_sperre FROM campus.vw_mitarbeiter JOIN public.tbl_person USING (person_id) WHERE telefonklappe!='' AND standort_id is not null AND vw_mitarbeiter.aktiv=true AND vw_mitarbeiter.standort_id='4' ORDER BY standort_id, nachname, vorname"; $result = $db->db_query($sql_query); $laststandort='0'; - + echo '

'.$p->t("telefonverzeichnis/titelTelefonverzeichnis").' Geschäftsstelle: +43 1 588 39

+ @@ -315,10 +303,10 @@ td,th '; - + while($row = $db->db_fetch_object($result)) { - echo ' + echo ' @@ -389,18 +377,13 @@ td,th '; } - + if($laststandort!='') { echo '
'.$p->t("lvplan/raum").'
'; } } ?> -
- - - - - \ No newline at end of file + diff --git a/cis/private/lehre/abgabe_lektor_terminuebersicht.php b/cis/private/lehre/abgabe_lektor_terminuebersicht.php index c6bd7b946..0cc558e4a 100644 --- a/cis/private/lehre/abgabe_lektor_terminuebersicht.php +++ b/cis/private/lehre/abgabe_lektor_terminuebersicht.php @@ -33,20 +33,19 @@ $datum_obj = new datum(); $sprache = getSprache(); $p = new phrasen($sprache); -echo ' - +echo ' Terminübersicht - + - - - - - + + + + + @@ -101,7 +100,7 @@ $sql_query = " JOIN public.tbl_studiengang ON(tbl_lehrveranstaltung.studiengang_kz=tbl_studiengang.studiengang_kz) JOIN campus.tbl_paabgabetyp USING(paabgabetyp_kurzbz) WHERE - tbl_projektbetreuer.person_id='".addslashes($lektor->person_id)."' AND tbl_paabgabe.datum>=now() AND bn_student.aktiv + tbl_projektbetreuer.person_id=".$db->db_add_param($lektor->person_id)." AND tbl_paabgabe.datum>=now() AND bn_student.aktiv ORDER BY tbl_paabgabe.datum "; diff --git a/cis/private/lehre/anwesenheitsliste_bilder.html.php b/cis/private/lehre/anwesenheitsliste_bilder.html.php deleted file mode 100644 index d138f9704..000000000 --- a/cis/private/lehre/anwesenheitsliste_bilder.html.php +++ /dev/null @@ -1,206 +0,0 @@ -, - * Andreas Oesterreicher and - * Rudolf Hangl . - */ - /** - * - * Erstellt eine Anwesenheitsliste mit Bildern im HTML Format - * - */ - - require_once('../../../config/cis.config.inc.php'); -// ------------------------------------------------------------------------------------------ -// Datenbankanbindung -// ------------------------------------------------------------------------------------------ - require_once('../../../include/basis_db.class.php'); - if (!$db = new basis_db()) - die('Fehler beim Herstellen der Datenbankverbindung'); - - require_once('../../../include/person.class.php'); - require_once('../../../include/studiengang.class.php'); - require_once('../../../include/studiensemester.class.php'); - require_once('../../../include/lehrveranstaltung.class.php'); - error_reporting(E_ALL); - ini_set('display_errors','1'); - - //Uebergabeparameter abpruefen - if(isset($_GET['stg'])) //Studiengang - { - if(is_numeric($_GET['stg'])) - $stg=$_GET['stg']; - else - die('Fehler bei der Parameteruebergabe'); - } - else - $stg=''; - if(isset($_GET['sem'])) //Semester - { - if(is_numeric($_GET['sem'])) - $sem=$_GET['sem']; - else - die('Fehler bei der Parameteruebergabe'); - } - else - $sem=''; - - if(isset($_GET['verband'])) //Verband - $verband=$_GET['verband']; - else - $verband=''; - if(isset($_GET['gruppe'])) //Gruppe - $gruppe=$_GET['gruppe']; - else - $gruppe=''; - if(isset($_GET['gruppe_kurzbz'])) //Einheit - $gruppe_kurzbz = $_GET['gruppe_kurzbz']; - else - $gruppe_kurzbz=''; - - if(isset($_GET['lvid']) && is_numeric($_GET['lvid'])) - $lvid = $_GET['lvid']; - else - die('Fehler bei der Parameteruebergabe'); - - if(isset($_GET['stsem'])) - $stsem = $_GET['stsem']; - else - die('Studiensemester wurde nicht uebergeben'); - - $lehreinheit_id = (isset($_GET['lehreinheit_id'])?$_GET['lehreinheit_id']:''); - - echo ' - - - - - - -'; - -$stgobj=new studiengang(); -$stgobj->load($stg); -//Logo -echo " - - - - -
"; -$lvobj = new lehrveranstaltung($lvid); - -echo 'Anwesenheitsliste '.$lvobj->bezeichnung.''; - -$qry = "SELECT distinct on(kuerzel, semester, verband, gruppe, gruppe_kurzbz) UPPER(stg_typ::varchar(1) || stg_kurzbz) as kuerzel, semester, verband, gruppe, gruppe_kurzbz from campus.vw_lehreinheit WHERE lehrveranstaltung_id='".addslashes($lvid)."' AND studiensemester_kurzbz='".addslashes($stsem)."'"; -if($lehreinheit_id!='') - $qry.=" AND lehreinheit_id='".addslashes($lehreinheit_id)."'"; - -$gruppen=''; -if($result = $db->db_query($qry)) -{ - while($row = $db->db_fetch_object($result)) - { - if($gruppen!='') - $gruppen.=', '; - if($row->gruppe_kurzbz=='') - $gruppen.=trim($row->kuerzel.'-'.$row->semester.$row->verband.$row->gruppe); - else - $gruppen.=$row->gruppe_kurzbz; - } -} - -echo "
Gruppe: $gruppen"; -echo "
Studiensemester: $stsem"; - -echo " -
"; - - -//Studenten holen - -echo '

- - - - - '; - -$stsem_obj = new studiensemester(); -$stsem_obj->load($stsem); -$stsemdatumvon = $stsem_obj->start; -$stsemdatumbis = $stsem_obj->ende; -$qry = "SELECT - distinct on(nachname, vorname, person_id) vorname, nachname, matrikelnr, person_id, - tbl_studentlehrverband.semester, tbl_studentlehrverband.verband, tbl_studentlehrverband.gruppe, - (SELECT status_kurzbz FROM public.tbl_prestudentstatus WHERE prestudent_id=tbl_student.prestudent_id ORDER BY datum DESC, insertamum DESC, ext_id DESC LIMIT 1) as status, - tbl_bisio.bisio_id, tbl_bisio.bis, tbl_bisio.von, - tbl_zeugnisnote.note - FROM - campus.vw_student_lehrveranstaltung JOIN public.tbl_benutzer USING(uid) - JOIN public.tbl_person USING(person_id) JOIN public.tbl_student ON(uid=student_uid) - LEFT JOIN public.tbl_studentlehrverband USING(student_uid,studiensemester_kurzbz) - LEFT JOIN lehre.tbl_zeugnisnote on(vw_student_lehrveranstaltung.lehrveranstaltung_id=tbl_zeugnisnote.lehrveranstaltung_id AND tbl_zeugnisnote.student_uid=tbl_student.student_uid AND tbl_zeugnisnote.studiensemester_kurzbz=tbl_studentlehrverband.studiensemester_kurzbz) - LEFT JOIN bis.tbl_bisio ON(uid=tbl_bisio.student_uid) - WHERE - vw_student_lehrveranstaltung.lehrveranstaltung_id='".addslashes($lvid)."' AND - vw_student_lehrveranstaltung.studiensemester_kurzbz='".addslashes($stsem)."'"; - -if($lehreinheit_id!='') - $qry.=" AND vw_student_lehrveranstaltung.lehreinheit_id='".addslashes($lehreinheit_id)."'"; - -$qry.=' ORDER BY nachname, vorname, person_id, tbl_bisio.bis DESC'; - -if($result = $db->db_query($qry)) -{ - $i=0; - while($elem = $db->db_fetch_object($result)) - { - $i++; - echo ''; - //Abbrecher und Unterbrecher nicht anzeigen - if($elem->status!='Abbrecher' && $elem->status!='Unterbrecher') - { - if($elem->status=='Incoming') - $inc=' (i)'; - else - $inc=''; - - if($elem->bisio_id!='' && $elem->status!='Incoming' && ($elem->bis > $stsemdatumvon || $elem->bis=='') && $elem->von < $stsemdatumbis) //Outgoing - $inc.=' (o)'; - - if($elem->note==6) //angerechnet - $inc.=' (ar)'; - - echo ""; - echo ""; - echo ''; - echo ""; - } - echo ''; - } -} -echo '
Hörer/NameKennzeichenGruppeFoto
$elem->nachname $elem->vorname".trim($elem->matrikelnr)."'.$elem->semester.$elem->verband.$elem->gruppe.'


-(i) ... Incoming
-(o) ... Outgoing
-(ar) ... angerechnet

-Fachhochschulstudiengang ('.strtoupper($stgobj->typ).') '.$stgobj->bezeichnung; - -echo ''; -echo ''; -?> \ No newline at end of file diff --git a/cis/private/profile/lva_liste.php b/cis/private/profile/lva_liste.php index 538d1cb8f..7b394c9d6 100644 --- a/cis/private/profile/lva_liste.php +++ b/cis/private/profile/lva_liste.php @@ -112,19 +112,19 @@ require_once('../../../include/benutzerberechtigung.class.php'); $result=$db->db_query($sql_query); $num_rows=$db->db_num_rows($result); - echo ' + echo ' - + '.$p->t('lvaliste/titel').' - - - - - + + + + +

InteressentIn anlegen

@@ -429,7 +353,7 @@ function setStudienplanData() $rechte = new benutzerberechtigung(); $rechte->getBerechtigungen($user); -if(!$rechte->isBerechtigt('admin') && !$rechte->isBerechtigt('assistenz')) +if (!$rechte->isBerechtigt('admin') && !$rechte->isBerechtigt('assistenz')) die('Sie haben keine Berechtigung fuer diese Seite'); $where = ''; @@ -452,7 +376,7 @@ $plz = (isset($_REQUEST['plz'])?$_REQUEST['plz']:''); //und muessen zuerst nach UTF8 konvertiert werden function utf8($string) { - if(!check_utf8($string)) + if (!check_utf8($string)) return utf8_encode($string); else return $string; @@ -470,7 +394,7 @@ $adresse = utf8($adresse); $adresse_nation = utf8($adresse_nation); $plz = utf8($plz); -if($adresse_nation=='A') +if ($adresse_nation=='A') { $ort = (isset($_REQUEST['ort'])?$_REQUEST['ort']:''); $gemeinde = (isset($_REQUEST['gemeinde'])?$_REQUEST['gemeinde']:''); @@ -485,11 +409,11 @@ $gemeinde = utf8($gemeinde); $ort = utf8($ort); //wenn die Gemeinde leer ist und im Ort etwas steht //dann umdrehen (Das passiert wenn die Daten aus dem Mail von der www importiert werden) -if($gemeinde=='' && $ort!='') +if ($gemeinde == '' && $ort != '') { - $importort=$ort; - $gemeinde=$ort; - $ort=''; + $importort = $ort; + $gemeinde = $ort; + $ort = ''; } $email = (isset($_REQUEST['email'])?$_REQUEST['email']:''); $telefon = (isset($_REQUEST['telefon'])?$_REQUEST['telefon']:''); @@ -498,10 +422,10 @@ $letzteausbildung = (isset($_REQUEST['letzteausbildung'])?$_REQUEST['letzteausbi $ausbildungsart = (isset($_REQUEST['ausbildungsart'])?$_REQUEST['ausbildungsart']:''); $anmerkungen = (isset($_REQUEST['anmerkungen'])?$_REQUEST['anmerkungen']:''); $studiengang_kz = (isset($_REQUEST['studiengang_kz'])?$_REQUEST['studiengang_kz']:''); -if($studiengang_kz=='' && isset($_GET['studiengang_kz'])) +if ($studiengang_kz == '' && isset($_GET['studiengang_kz'])) $studiengang_kz = $_GET['studiengang_kz']; -if($studiengang_kz=='undefined') - $studiengang_kz=''; +if ($studiengang_kz == 'undefined') + $studiengang_kz = ''; $person_id = (isset($_REQUEST['person_id'])?$_REQUEST['person_id']:''); $ueberschreiben = (isset($_REQUEST['ueberschreiben'])?$_REQUEST['ueberschreiben']:''); @@ -511,7 +435,7 @@ $incoming = (isset($_REQUEST['incoming'])?true:false); $orgform_kurzbz = (isset($_REQUEST['orgform_kurzbz'])?$_REQUEST['orgform_kurzbz']:''); $studienplan_id = (isset($_REQUEST['studienplan_id'])?$_REQUEST['studienplan_id']:''); //end Parameter -$geburtsdatum_error=false; +$geburtsdatum_error = false; $ausbildungsart = utf8($ausbildungsart); $anmerkungen = utf8($anmerkungen); @@ -530,17 +454,17 @@ function generateMatrikelnummer($studiengang_kz, $studiensemester_kurzbz) $jahr = mb_substr($studiensemester_kurzbz, 4); $sem = mb_substr($studiensemester_kurzbz, 0, 2); - if($sem=='SS') + if ($sem == 'SS') $jahr = $jahr-1; - $art =0; + $art = 0; $matrikelnummer = sprintf("%02d",$jahr).$art.sprintf("%04d",$studiengang_kz); $qry = "SELECT matrikelnr FROM public.tbl_student WHERE matrikelnr LIKE '$matrikelnummer%' ORDER BY matrikelnr DESC LIMIT 1"; - if($db->db_query($qry)) + if ($db->db_query($qry)) { - if($row = $db->db_fetch_object()) + if ($row = $db->db_fetch_object()) { $max = mb_substr($row->matrikelnr,7); } @@ -557,11 +481,11 @@ function generateMatrikelnummer($studiengang_kz, $studiensemester_kurzbz) } -if($studiensemester_kurzbz == '') +if ($studiensemester_kurzbz == '') { //Im September wird das Aktuelle Studiensemester vorgeschlagen sonst immer das naechste WS /*$stsem = new studiensemester(); - if(date('m')=='9') + if (date('m')=='9') $studiensemester_kurzbz = $stsem->getaktorNext(); else { @@ -570,52 +494,38 @@ if($studiensemester_kurzbz == '') }*/ $stsem = new studiensemester(); - if(defined('VILESCI_PERSON_NEU_STUDIENSEMESTER_UEBERGANGSFRIST') && VILESCI_PERSON_NEU_STUDIENSEMESTER_UEBERGANGSFRIST>0) + if (defined('VILESCI_PERSON_NEU_STUDIENSEMESTER_UEBERGANGSFRIST') && VILESCI_PERSON_NEU_STUDIENSEMESTER_UEBERGANGSFRIST>0) { $studiensemester_kurzbz = $stsem->getNextOrAktSemester(VILESCI_PERSON_NEU_STUDIENSEMESTER_UEBERGANGSFRIST); - if(defined('VILESCI_PERSON_NEU_STUDIENSEMESTER_WINTERONLY') + if (defined('VILESCI_PERSON_NEU_STUDIENSEMESTER_WINTERONLY') && VILESCI_PERSON_NEU_STUDIENSEMESTER_WINTERONLY - && mb_substr($studiensemester_kurzbz,0,2)=='SS') + && mb_substr($studiensemester_kurzbz,0,2) == 'SS') { $studiensemester_kurzbz = $stsem->getNextFrom($studiensemester_kurzbz); } } else { - if(date('m')=='9') - { - $studiensemester_kurzbz = $stsem->getaktorNext(); - } - else - { - $stsem->getNextStudiensemester('WS'); - $studiensemester_kurzbz = $stsem->studiensemester_kurzbz; - } + $studiensemester_kurzbz = $stsem->getaktorNext(); } } // *** Speichern der Daten *** -if(isset($_POST['save'])) +if (isset($_POST['save'])) { - //echo "Saving Data: Geburtsdatum: $geburtsdatum | Titel: $titel | Nachname: $nachname | Vorname: $vorname | - // Geschlecht: $geschlecht | Adresse: $adresse | Plz: $plz | Ort: $ort | - // Email: $email | Telefon: $telefon | Mobil: $mobil | Letzteausbildung: $letzteausbildung | ausbildungsart: $ausbildungsart | - // anmerkungen: $anmerkungen | studiengang_kz: $studiengang_kz | person_id: $person_id

"; $person = new person(); $prestudent = new prestudent(); - $prestudent_vorhanden=false; - $db->db_query('BEGIN'); //Wenn die person_id=0 dann wird eine neue Person angelegt //Ansosnsten wird es an die Person mit $person_id angehaengt - if($person_id!='0') + if ($person_id != '0') { - if(!$person->load($person_id)) + if (!$person->load($person_id)) { - $error=true; + $error = true; $errormsg = 'Person konnte nicht geladen werden'; } else @@ -628,59 +538,10 @@ if(isset($_POST['save'])) $titelpost = $person->titelpost; $geschlecht = $person->geschlecht; $anrede = $person->anrede; - //Wenn Prestudent bereits existiert, dann abbrechen - if($prestudent->exists($person_id, $studiengang_kz)) - { - //Prestudent ID holen - $qry = "SELECT prestudent_id FROM public.tbl_prestudent WHERE person_id='$person_id' AND studiengang_kz='$studiengang_kz'"; - if($result = $db->db_query($qry)) - { - if($db->db_num_rows($result)>1) - { - // Wenn bereits mehrere Prestudenten in diesem Studingang vorhanden sind, dann abbrechen - $error=true; - $errormsg = 'Der Interessent konnte nicht angelegt werden, da dieser Student bereits mehr als einen Prestudenten in diesem Studiengang hat.'; - } - else - { - $row = $db->db_fetch_object($result); - $prestudent_id=$row->prestudent_id; - - //Wenn der Prestudent noch keinen Studenten eintrag hat, dann wird die neue - //Rolle hinzugefuegt, sonst wird abgebrochen - $qry = "SELECT * FROM public.tbl_prestudentstatus WHERE prestudent_id='$prestudent_id' AND status_kurzbz='Student'"; - if($result = $db->db_query($qry)) - { - if($db->db_num_rows($result)>0) - { - $error=true; - $errormsg = 'Der Interessent konnte nicht angelegt werden, da diese Person bereits als Student in diesem Studiengang angelegt ist.'; - } - else - { - $prestudent_vorhanden=true; - $prestudent->load($prestudent_id); - } - } - else - { - $error=true; - $errormsg = 'Fehler beim Ermitteln der Prestudentrollen!'; - } - } - } - else - { - $error = true; - $errormsg = 'Fehler beim Suchen der PrestudentID'; - } - } } } else { - $zugangscode = substr(md5(openssl_random_pseudo_bytes(20)), 0, 15); - $person->new = true; $person->anrede = $anrede; $person->titelpre = $titel; @@ -695,27 +556,27 @@ if(isset($_POST['save'])) $person->aktiv = true; $person->insertamum = date('Y-m-d H:i:s'); $person->insertvon = $user; - $person->zugangscode= $zugangscode; - if($person->save()) + $person->zugangscode= uniqid(); + if ($person->save()) { - $error=false; + $error = false; } else { - $error=true; + $error = true; $errormsg = "Person konnte nicht gespeichert werden: $person->errormsg"; } } //Adresse anlegen - if($ueberschreiben!='' && !($plz=='' && $adresse=='' && $ort=='')) + if ($ueberschreiben != '' && !($plz == '' && $adresse == '' && $ort == '')) { - if($person_id=='0') - $ueberschreiben='Nein'; + if ($person_id == '0') + $ueberschreiben = 'Nein'; $adr = new adresse(); //Adresse neu anlegen - if($ueberschreiben=='Nein') + if ($ueberschreiben == 'Nein') { $adr->new = true; $adr->insertamum = date('Y-m-d H:i:s'); @@ -723,7 +584,7 @@ if(isset($_POST['save'])) $adr->nation = $adresse_nation; //Wenn die Person neu angelegt wird, dann ist die neue Adresse die Heimatadresse //sonst nicht - if($person_id=='0') + if ($person_id == '0') $adr->heimatadresse = true; else $adr->heimatadresse = false; @@ -732,12 +593,12 @@ if(isset($_POST['save'])) { //Bestehende Adresse Ueberschreiben - //Adressen der Peron laden + //Adressen der Person laden $adr->load_pers($person->person_id); - if(isset($adr->result[0])) + if (isset($adr->result[0])) { //Erste Adresse laden - if($adr->load($adr->result[0]->adresse_id)) + if ($adr->load($adr->result[0]->adresse_id)) { $adr->new = false; $adr->updateamum = date('Y-m-d H:i:s'); @@ -760,7 +621,7 @@ if(isset($_POST['save'])) } } - if(!$error) + if (!$error) { //Adressdaten zuweisen und speichern $adr->person_id = $person->person_id; @@ -770,7 +631,7 @@ if(isset($_POST['save'])) $adr->gemeinde = $gemeinde; $adr->typ = 'h'; $adr->zustelladresse = true; - if(!$adr->save()) + if (!$adr->save()) { $error = true; $errormsg = $adr->errormsg; @@ -779,10 +640,10 @@ if(isset($_POST['save'])) } //Kontaktdaten anlegen - if(!$error) + if (!$error) { //EMail Adresse speichern - if($email!='') + if ($email != '') { $kontakt = new kontakt(); $kontakt->person_id = $person->person_id; @@ -793,14 +654,14 @@ if(isset($_POST['save'])) $kontakt->insertvon = $user; $kontakt->new = true; - if(!$kontakt->save()) + if (!$kontakt->save()) { $error = true; $errormsg = 'Fehler beim Speichern der Email Adresse'; } } //Telefonnummer speichern - if($telefon!='') + if ($telefon != '') { $kontakt = new kontakt(); $kontakt->person_id = $person->person_id; @@ -811,14 +672,14 @@ if(isset($_POST['save'])) $kontakt->insertvon = $user; $kontakt->new = true; - if(!$kontakt->save()) + if (!$kontakt->save()) { $error = true; $errormsg = 'Fehler beim Speichern der Telefonnummer'; } } //Mobiltelefonnummer speichern - if($mobil!='') + if ($mobil != '') { $kontakt = new kontakt(); $kontakt->person_id = $person->person_id; @@ -829,7 +690,7 @@ if(isset($_POST['save'])) $kontakt->insertvon = $user; $kontakt->new = true; - if(!$kontakt->save()) + if (!$kontakt->save()) { $error = true; $errormsg = 'Fehler beim Speichern der Mobiltelefonnummer'; @@ -838,24 +699,35 @@ if(isset($_POST['save'])) } //Prestudent Anlegen - if(!$error && !$prestudent_vorhanden) + if (!$error) { $prestudent->new = true; $prestudent->aufmerksamdurch_kurzbz = 'k.A.'; $prestudent->person_id = $person->person_id; $prestudent->studiengang_kz = $studiengang_kz; $prestudent->ausbildungcode = $letzteausbildung; - $prestudent->anmerkung = $anmerkungen .($ausbildungsart!=''?' Ausbildungsart:'.$ausbildungsart:''); + $prestudent->anmerkung = $anmerkungen .($ausbildungsart != ''?' Ausbildungsart:'.$ausbildungsart:''); $prestudent->reihungstestangetreten = false; $prestudent->bismelden = true; //Wenn die Person schon im System erfasst ist, dann die ZGV des Datensatzes uebernehmen - $qry_zgv = "SELECT * FROM public.tbl_prestudent WHERE person_id='$person->person_id' AND zgv_code is not null ORDER BY zgvmas_code, zgv_code DESC LIMIT 1"; - if($result_zgv = $db->db_query($qry_zgv)) + $qry_zgv = " + SELECT + * + FROM + public.tbl_prestudent + WHERE + person_id = ".$db->db_add_param($person->person_id, FHC_INTEGER)." + AND zgv_code is not null + ORDER BY + zgvmas_code, zgv_code DESC + LIMIT 1"; + + if ($result_zgv = $db->db_query($qry_zgv)) { - if($row_zgv = $db->db_fetch_object($result_zgv)) + if ($row_zgv = $db->db_fetch_object($result_zgv)) { - if($row_zgv->zgv_code!='') + if ($row_zgv->zgv_code != '') { $prestudent->zgv_code = $row_zgv->zgv_code; $prestudent->zgvort = $row_zgv->zgvort; @@ -868,20 +740,20 @@ if(isset($_POST['save'])) } } - if(!$prestudent->save()) + if (!$prestudent->save()) { - $error=true; + $error = true; $errormsg = $prestudent->errormsg; } } - if(!$error) + if (!$error) { //Prestudent Rolle Anlegen $rolle = new prestudent(); $rolle->prestudent_id = $prestudent->prestudent_id; - if(!$incoming) + if (!$incoming) $rolle->status_kurzbz = 'Interessent'; else $rolle->status_kurzbz = 'Incoming'; @@ -895,7 +767,7 @@ if(isset($_POST['save'])) $rolle->new = true; - if(!$rolle->save_rolle()) + if (!$rolle->save_rolle()) { $error = true; $errormsg = $rolle->errormsg; @@ -904,7 +776,7 @@ if(isset($_POST['save'])) $error = false; } - if(!$error && $incoming) + if (!$error && $incoming) { //Matrikelnummer und UID generieren $matrikelnr = generateMatrikelnummer($studiengang_kz, $studiensemester_kurzbz); @@ -929,22 +801,22 @@ if(isset($_POST['save'])) $nachname_clean = str_replace(' ','_', $nachname_clean); $vorname_clean = str_replace(' ','_', $vorname_clean); - if(!defined('GENERATE_ALIAS_STUDENT') || GENERATE_ALIAS_STUDENT===true) + if (!defined('GENERATE_ALIAS_STUDENT') || GENERATE_ALIAS_STUDENT === true) { - $qry_alias = "SELECT * FROM public.tbl_benutzer WHERE alias=LOWER('".$vorname_clean.".".$nachname_clean."')"; + $qry_alias = "SELECT * FROM public.tbl_benutzer WHERE alias = LOWER(".$db->db_add_param(".$vorname_clean.".".$nachname_clean.").")"; $result_alias = $db->db_query($qry_alias); - if($db->db_num_rows($result_alias)==0) - $benutzer->alias =$vorname_clean.'.'.$nachname_clean; + if ($db->db_num_rows($result_alias) == 0) + $benutzer->alias = $vorname_clean.'.'.$nachname_clean; else $benutzer->alias = ''; } else - $benutzer->alias=''; + $benutzer->alias = ''; $benutzer->insertamum = date('Y-m-d H:i:s'); $benutzer->insertvon = $user; - if($benutzer->save(true, false)) + if ($benutzer->save(true, false)) { //Studentendatensatz anlegen $student = new student(); @@ -959,7 +831,7 @@ if(isset($_POST['save'])) $student->insertvon = $user; $lvb = new lehrverband(); - if(!$lvb->exists($student->studiengang_kz, $student->semester, $student->verband, $student->gruppe)) + if (!$lvb->exists($student->studiengang_kz, $student->semester, $student->verband, $student->gruppe)) { $lvb->studiengang_kz = $student->studiengang_kz; $lvb->semester = $student->semester; @@ -971,7 +843,7 @@ if(isset($_POST['save'])) $lvb->save(true); } - if($student->save(true, false)) + if ($student->save(true, false)) { //StudentLehrverband anlegen $studentlehrverband = new student(); @@ -984,7 +856,7 @@ if(isset($_POST['save'])) $studentlehrverband->insertamum = date('Y-m-d H:i:s'); $studentlehrverband->insertvon = $user; - if(!$studentlehrverband->save_studentlehrverband(true)) + if (!$studentlehrverband->save_studentlehrverband(true)) { $error = true; $errormsg = 'StudentLehrverband konnte nicht angelegt werden'; @@ -1003,7 +875,7 @@ if(isset($_POST['save'])) } } - if(!$error) + if (!$error) { $db->db_query('COMMIT'); die("".($incoming?'Incoming':'InteressentIn')." $vorname $vornamen $nachname wurde erfolgreich angelegt

Neue Person anlegen"); @@ -1017,30 +889,30 @@ if(isset($_POST['save'])) // *** SAVE ENDE *** $geburtsdatum_orig = $geburtsdatum; -if($geburtsdatum!='') +if ($geburtsdatum != '') { //Wenn das Datum im Format d.m.Y ist dann in Y-m-d umwandeln - if(mb_strpos($geburtsdatum,'.')) + if (mb_strpos($geburtsdatum,'.')) { - if($datum_obj->mktime_datum($geburtsdatum)) + if ($datum_obj->mktime_datum($geburtsdatum)) { $geburtsdatum = date('Y-m-d',$datum_obj->mktime_datum($geburtsdatum)); } else { - $geburtsdatum_error=true; + $geburtsdatum_error = true; } } else { - if(!mb_ereg("([0-9]{4})-([0-9]{2})-([0-9]{2})",$geburtsdatum)) - $geburtsdatum_error=true; + if (!mb_ereg("([0-9]{4})-([0-9]{2})-([0-9]{2})", $geburtsdatum)) + $geburtsdatum_error = true; } - if($geburtsdatum_error) + if ($geburtsdatum_error) echo "Format des Geburtsdatums ist ungueltig!"; } -if(($geburtsdatum=='' && $vorname=='' && $nachname=='') || $geburtsdatum_error) +if (($geburtsdatum == '' && $vorname == '' && $nachname == '') || $geburtsdatum_error) echo "
"; else echo ""; @@ -1067,19 +939,19 @@ echo ''; echo 'Geburtsdatum (Format: dd.mm.JJJJ)'; echo '
Adresse'; -if(isset($adresse_nation) && $adresse_nation=='A' && isset($plz) && $plz>10000) - $nationstyle='style="border: 1px solid red"'; +if (isset($adresse_nation) && $adresse_nation == 'A' && isset($plz) && $plz > 10000) + $nationstyle = 'style="border: 1px solid red"'; else - $nationstyle=''; + $nationstyle = ''; echo ''; @@ -1088,7 +960,7 @@ echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; -echo ''; echo "\n"; echo ' echo ''; echo ''; else { @@ -1216,32 +1069,32 @@ Felder die mit einem * gekennzeichnet sind müssen ausgefüllt werden! db_add_param($geburtsdatum); } } -if($vorname!='' && $nachname!='') +if ($vorname != '' && $nachname != '') { - if($where!='') - $where.=' OR'; - $where.=" (LOWER(vorname)=LOWER(".$db->db_add_param($vorname).") AND LOWER(nachname)=LOWER(".$db->db_add_param($nachname)."))"; + if ($where != '') + $where .= ' OR'; + $where .= " (LOWER(vorname)=LOWER(".$db->db_add_param($vorname).") AND LOWER(nachname)=LOWER(".$db->db_add_param($nachname)."))"; } -elseif($nachname!='') +elseif ($nachname != '') { - if($where!='') - $where.=' OR'; - $where.=" LOWER(nachname)=LOWER(".$db->db_add_param($nachname).")"; + if ($where != '') + $where .= ' OR'; + $where .= " LOWER(nachname)=LOWER(".$db->db_add_param($nachname).")"; } -if($where!='') +if ($where != '') { $qry = "SELECT * FROM public.tbl_person WHERE $where ORDER BY nachname, vorname, gebdatum"; - if($result = $db->db_query($qry)) + if ($result = $db->db_query($qry)) { echo '
Nation
AdresseGemeinde
'; //wenn die Nation Oesterreich ist, dann wird ein DropDown fuer Gemeinde und Ort angezeigt. //wenn die Nation nicht Oesterreich ist, werden nur textfelder angezeigt -if($adresse_nation=='A' && $plz!='') +if ($adresse_nation == 'A' && $plz != '') { echo getGemeindeDropDown($plz); } @@ -1099,14 +971,14 @@ else //wenn der Ort per EMail-Import von der www kommt und der Ort in der Gemeindetabelle //nicht gefunden wird, dann wird der Ort in Klammer neben dem DropDown angezeigt -if($importort!='' && $gemeinde!=$importort) +if ($importort != '' && $gemeinde != $importort) echo ' ( '.$importort.' )'; echo '
'; echo '
Ort
'; -if($adresse_nation=='A' && $plz!='') +if ($adresse_nation == 'A' && $plz != '') { echo getOrtDropDown($plz, $gemeinde); } @@ -1123,7 +995,7 @@ echo '
Mobil'; echo ''; $qry = "SELECT * FROM bis.tbl_ausbildung ORDER BY ausbildungcode"; -if($result = $db->db_query($qry)) +if ($result = $db->db_query($qry)) { while($row = $db->db_fetch_object($result)) { @@ -1135,34 +1007,18 @@ echo '
Ausbildungsart
Anmerkungen
Studiengang *'; echo '
Studiensemester *'; @@ -1172,24 +1028,21 @@ for ($i=1;$i<9;$i++) echo ''; echo ''; echo '
OrgForm'; - -echo '
OrgForm'; - echo '
Studienplan
'; -if($studiengang_kz!='') +if ($studiengang_kz!='') echo getStudienplanDropDown($studiengang_kz, $orgform_kurzbz, $studienplan_id, $studiensemester_kurzbz, $ausbildungssemester); else echo 'Bitte zuerst einen Studiengang waehlen'; @@ -1199,7 +1052,7 @@ echo '
Incoming:
'; -if(($geburtsdatum=='' && $vorname=='' && $nachname=='') || $geburtsdatum_error) +if (($geburtsdatum=='' && $vorname=='' && $nachname=='') || $geburtsdatum_error) echo '
'; echo ''; @@ -1253,19 +1106,19 @@ if($where!='') SELECT (get_rolle_prestudent(prestudent_id, null) || ' ' || UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz)) as rolle FROM public.tbl_prestudent JOIN public.tbl_studiengang USING(studiengang_kz) WHERE person_id='$row->person_id' UNION SELECT 'PreInteressent' as rolle FROM public.tbl_preinteressent WHERE person_id='$row->person_id'"; - if($result_stati = $db->db_query($qry_stati)) + if ($result_stati = $db->db_query($qry_stati)) { while($row_stati = $db->db_fetch_object($result_stati)) { - $status.=$row_stati->rolle.', '; + $status .= $row_stati->rolle.', '; } } $status = mb_substr($status, 0, mb_strlen($status)-2); echo ''; echo ''; @@ -1276,8 +1129,6 @@ if($where!='') echo '
NachnameVornameWeitere
Vornamen
GebDatumSVNRGeschlechtAdresseStatusDetails
Neue Person anlegen
'."$row->nachname$row->vorname$row->vornamen$row->gebdatum$row->svnr".($row->geschlecht=='m'?'männlich':'weiblich').""; - $qry_adr = "SELECT * FROM public.tbl_adresse WHERE person_id='$row->person_id'"; - if($result_adr = $db->db_query($qry_adr)) - while($row_adr=$db->db_fetch_object($result_adr)) + $qry_adr = "SELECT * FROM public.tbl_adresse WHERE person_id=".$db->db_add_param($row->person_id, FHC_INTEGER); + if ($result_adr = $db->db_query($qry_adr)) + while ($row_adr = $db->db_fetch_object($result_adr)) echo "$row_adr->plz $row_adr->ort, $row_adr->strasse
"; echo '
'.$status.'
'; } } -//else -// echo 'Zum Erstellen des Vorschlags bitte Geburtsdatum oder Vorname und Nachname eingeben'; ?> From 922d2367f2d273ec2cdc0c60c1c8b395f351d04f Mon Sep 17 00:00:00 2001 From: Paolo Date: Tue, 5 Feb 2019 10:49:08 +0100 Subject: [PATCH 33/39] - Changed the name of CI session from ci_session to sess_ci_session - Changed CI session expiring time from 7200 to 1800 seconds --- application/config/config.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/application/config/config.php b/application/config/config.php index 2602c12cf..d0bca14b9 100644 --- a/application/config/config.php +++ b/application/config/config.php @@ -347,6 +347,7 @@ $config['encryption_key'] = ''; | 'sess_time_to_update' | | How many seconds between CI regenerating the session ID. +| NOTE: Keep it as it is to prevent security issues (https://en.wikipedia.org/wiki/Session_fixation) | | 'sess_regenerate_destroy' | @@ -359,8 +360,8 @@ $config['encryption_key'] = ''; | */ $config['sess_driver'] = 'files'; -$config['sess_cookie_name'] = 'ci_session'; -$config['sess_expiration'] = 7200; +$config['sess_cookie_name'] = 'sess_ci_session'; +$config['sess_expiration'] = 1800; // Session expires every 30 minutes $config['sess_save_path'] = NULL; $config['sess_match_ip'] = FALSE; $config['sess_time_to_update'] = 300; From aa6b4a312b6caa8fa449e11b1b548e3a40453363 Mon Sep 17 00:00:00 2001 From: Paolo Date: Tue, 5 Feb 2019 10:50:32 +0100 Subject: [PATCH 34/39] Bugfix beim Abzug diverser Abwesenheitszeiten von der Gesamtarbeitszeit --- cis/private/tools/zeitaufzeichnung_projektliste.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cis/private/tools/zeitaufzeichnung_projektliste.php b/cis/private/tools/zeitaufzeichnung_projektliste.php index 36bf00ff5..17adfba97 100644 --- a/cis/private/tools/zeitaufzeichnung_projektliste.php +++ b/cis/private/tools/zeitaufzeichnung_projektliste.php @@ -232,7 +232,7 @@ for ($i = 0; $i < count($ztaufdata); $i++) $projectlines[$day]->arbeitszeit -= $subtraction->diff; $lehreExternExists = true; } - else + elseif ($subtraction->typ == $activitiesToSubtract[2] || $subtraction->typ == $activitiesToSubtract[3]) { $projectlines[$day]->arbeitszeit -= $subtraction->diff; } From d8ff6a3237b8ac74c29a7eb0fe2b36d436f5c9c2 Mon Sep 17 00:00:00 2001 From: Paolo Date: Tue, 5 Feb 2019 10:51:02 +0100 Subject: [PATCH 35/39] Changed Version Number --- locale/de-AT/fas.dtd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locale/de-AT/fas.dtd b/locale/de-AT/fas.dtd index 229bd92af..cad80671f 100644 --- a/locale/de-AT/fas.dtd +++ b/locale/de-AT/fas.dtd @@ -1,5 +1,5 @@ - + From 49b224c10bdc3064b1c51c947e58835be02afddf Mon Sep 17 00:00:00 2001 From: Paolo Date: Tue, 5 Feb 2019 10:52:19 +0100 Subject: [PATCH 36/39] Infocenter: - even if a prestudent is already freigegeben for a studiengang, and if Quereinstieg, "shorter" Quereinstiegsinfomessage is sent when zum RT freigegeben - message sending: replaced ugly html parsing for check if already freigegeben with AJAX call --- .../system/infocenter/InfoCenter.php | 12 ++ .../views/system/infocenter/zgvpruefungen.php | 3 - public/js/infocenter/infocenterDetails.js | 124 ++++++++++++------ 3 files changed, 98 insertions(+), 41 deletions(-) diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index 65a6aec07..4c71da84a 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -78,6 +78,7 @@ class InfoCenter extends Auth_Controller 'showDetails' => 'infocenter:r', 'unlockPerson' => 'infocenter:rw', 'saveFormalGeprueft' => 'infocenter:rw', + 'getPrestudentData' => 'infocenter:r', 'getLastPrestudentWithZgvJson' => 'infocenter:r', 'getZgvInfoForPrestudent' => 'infocenter:r', 'saveBewPriorisierung' => 'infocenter:rw', @@ -263,6 +264,17 @@ class InfoCenter extends Auth_Controller $this->output->set_content_type('application/json')->set_output(json_encode($json)); } + /** + * Gets prestudent data for a person in json format + * @param $person_id + */ + public function getPrestudentData($person_id) + { + $prestudentdata = $this->_loadPrestudentData($person_id); + + $this->output->set_content_type('application/json')->set_output(json_encode($prestudentdata['zgvpruefungen'])); + } + /** * Gets prestudent that was last modified in json format, for ZGV übernehmen * @param $person_id diff --git a/application/views/system/infocenter/zgvpruefungen.php b/application/views/system/infocenter/zgvpruefungen.php index a26c94177..4f4037f43 100644 --- a/application/views/system/infocenter/zgvpruefungen.php +++ b/application/views/system/infocenter/zgvpruefungen.php @@ -98,9 +98,6 @@ - -
diff --git a/public/js/infocenter/infocenterDetails.js b/public/js/infocenter/infocenterDetails.js index 5a1fd7653..252647a71 100644 --- a/public/js/infocenter/infocenterDetails.js +++ b/public/js/infocenter/infocenterDetails.js @@ -4,6 +4,7 @@ const CALLED_PATH = FHC_JS_DATA_STORAGE_OBJECT.called_path; const CONTROLLER_URL = BASE_URL + "/"+CALLED_PATH; const RTFREIGABE_MESSAGE_VORLAGE = "InfocenterRTfreigegeben"; const RTFREIGABE_MESSAGE_VORLAGE_QUER = "InfocenterRTfreigegQuer"; +const RTFREIGABE_MESSAGE_VORLAGE_QUER_KURZ = "InfocenterRTfreigegQuerKurz"; const STGFREIGABE_MESSAGE_VORLAGE = "InfocenterSTGfreigegeben"; /** @@ -277,6 +278,9 @@ var InfocenterDetails = { { FHC_AjaxClient.showVeil(); InfocenterDetails.initFrgMessageSend(data.retval.prestudent_id, rtfreigabe); + InfocenterDetails._refreshZgv(); + FHC_AjaxClient.hideVeil(); + InfocenterDetails._refreshLog(); } else if (data.error === 2 && parseInt(data.retval.prestudent_id, 10)) { @@ -460,48 +464,98 @@ var InfocenterDetails = { } ); }, + getPrestudentData: function(personid, callback) + { + FHC_AjaxClient.ajaxCallGet( + CALLED_PATH + "/getPrestudentData/"+encodeURIComponent(personid), + null, + { + successCallback: callback, + veilTimeout: 0 + } + ); + }, initFrgMessageSend: function(prestudentid, rtfreigabe) { - var callback = function () + var callback = function (data) { + if (data == null) + return; + // check if a prestudent in same semester is already freigegeben - then not send message again var freigegeben = false; - var prestudentids = $(".prestudentidinput"); + var receiverPrestudentstatus = null; - if (prestudentids.length > 1) + //get prestudentstatus of message receiver + for(var i = 0; i < data.length; i++) { - prestudentids.each(function() - { - var id = $(this).val(); - - if (parseInt(id) !== parseInt(prestudentid)) - { - if ($("#studiensemester_"+id).val() === $("#studiensemester_"+prestudentid).val() && $("#isfreigegeben_"+id).val() === "1") - { - freigegeben = true; - return false; - } - } - } - ); + if (data[i].prestudentstatus.prestudent_id === prestudentid) + { + receiverPrestudentstatus = data[i].prestudentstatus; + break; + } } + if (receiverPrestudentstatus == null) + return; + + //check other prestudentstati wether already freigegeben + for(var j = 0; j < data.length; j++) + { + var prestudent = data[j]; + var prestudentstatus = prestudent.prestudentstatus; + var id = prestudentstatus.prestudent_id; + + if (id !== prestudentid) + { + if (receiverPrestudentstatus.studiensemester_kurzbz === prestudentstatus.studiensemester_kurzbz + && prestudentstatus.bestaetigtam !== null && prestudentstatus.status_kurzbz === "Interessent" + && prestudent.studiengangtyp === "b") + { + freigegeben = true; + break; + } + } + } + + var ausbildungssemester = receiverPrestudentstatus.ausbildungssemester; + var studiengangbezeichnung = receiverPrestudentstatus.studiengangbezeichnung; + var studiengangbezeichnung_englisch = receiverPrestudentstatus.studiengangbezeichnung_englisch; + var msgvars = {}; + if (freigegeben) { InfocenterDetails._refreshLog(); + //if already freigegeben, still send (shorter) message if Quereinsteiger + if (ausbildungssemester > 1) + { + msgvars = { + 'ausbildungssemester': ausbildungssemester, + 'studiengangbezeichnung': studiengangbezeichnung, + 'studiengangbezeichnung_englisch': studiengangbezeichnung_englisch + }; + InfocenterDetails.sendFreigabeMessage(prestudentid, RTFREIGABE_MESSAGE_VORLAGE_QUER_KURZ, msgvars); + } } else { - var ausbildungssem = $("#ausbildungssem_" + prestudentid).val(); var vorlage_kurzbz = null; - var msgvars = {}; if (rtfreigabe) { - vorlage_kurzbz = isNaN(ausbildungssem) || parseInt(ausbildungssem) === 1 ? RTFREIGABE_MESSAGE_VORLAGE : RTFREIGABE_MESSAGE_VORLAGE_QUER; - msgvars = { - 'rtlink': FHC_JS_DATA_STORAGE_OBJECT.app_root + 'addons/bewerbung/cis/registration.php?active=aufnahme', - 'ausbildungssemester': ausbildungssem + if (ausbildungssemester > 1) + { + vorlage_kurzbz = RTFREIGABE_MESSAGE_VORLAGE_QUER; + msgvars = { + /*'rtlink': FHC_JS_DATA_STORAGE_OBJECT.app_root + 'addons/bewerbung/cis/registration.php?active=aufnahme',*/ + 'ausbildungssemester': ausbildungssemester, + 'studiengangbezeichnung': studiengangbezeichnung, + 'studiengangbezeichnung_englisch': studiengangbezeichnung_englisch + } + } + else + { + vorlage_kurzbz = RTFREIGABE_MESSAGE_VORLAGE; } } else @@ -510,18 +564,16 @@ var InfocenterDetails = { } InfocenterDetails.sendFreigabeMessage(prestudentid, vorlage_kurzbz, msgvars); } - FHC_AjaxClient.hideVeil(); }; - InfocenterDetails._refreshZgv( - false, - //send message only after refresh to have current Ausbildungssemester - callback - ); + var personid = $("#hiddenpersonid").val(); + + InfocenterDetails.getPrestudentData( + personid, callback + ) }, sendFreigabeMessage: function(prestudentid, vorlage_kurzbz, msgvars) { - FHC_AjaxClient.ajaxCallPost( 'system/Messages/sendJson', { @@ -668,7 +720,7 @@ var InfocenterDetails = { $(".freigabeModal").modal("hide"); var prestudent_id = this.id.substr(this.id.indexOf("_") + 1); var data = {"prestudent_id": prestudent_id}; - InfocenterDetails.saveFreigabe(data, true); + InfocenterDetails.saveFreigabe(data, true);//Reihungstestfreigabe } ); @@ -678,17 +730,17 @@ var InfocenterDetails = { var prestudent_id = this.id.substr(this.id.indexOf("_") + 1); var statusgrund_id = $("#frgstatusgrselect_" + prestudent_id + " select[name=frgstatusgrund]").val(); var data = {"prestudent_id": prestudent_id, "statusgrund_id": statusgrund_id}; - InfocenterDetails.saveFreigabe(data); + InfocenterDetails.saveFreigabe(data);//Studiengangfreigabe } ) }, - _refreshZgv: function(preserveCollapseState, callback) + _refreshZgv: function(preserveCollapseState) { var personid = $("#hiddenpersonid").val(); var collapsed = {}; - //save if panel is collapsed to preserve collapse state + //check if panel is collapsed to preserve collapse state if (preserveCollapseState) { $("#zgvpruefungen").find(".panel-collapse").each( @@ -715,10 +767,6 @@ var InfocenterDetails = { $("#"+i).addClass("in"); } } - - // variable callback executed after refresh - if (callback) - callback(); } ); }, From 7a84ef373651d9555f0b2093cf0ef6d127d8e5ca Mon Sep 17 00:00:00 2001 From: Paolo Date: Tue, 5 Feb 2019 10:53:10 +0100 Subject: [PATCH 37/39] =?UTF-8?q?Beim=20automatischen=20Erstellen=20von=20?= =?UTF-8?q?Pr=C3=BCfungsterminen=20nach=20der=20Noteneintragung=20im=20FAS?= =?UTF-8?q?=20wird=20Lehreinheit=20jetzt=20korrekt=20ermittelt.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/student/studentDBDML.php | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/content/student/studentDBDML.php b/content/student/studentDBDML.php index 6fdbd7306..02fa0deab 100644 --- a/content/student/studentDBDML.php +++ b/content/student/studentDBDML.php @@ -176,10 +176,17 @@ function NotePruefungAnlegen($studiensemester_kurzbz, $student_uid, $lehrveranst // Lehreinheit ermitteln $error = false; - $qry = "SELECT lehreinheit_id FROM campus.vw_student_lehrveranstaltung " - . "WHERE uid=".$db->db_add_param($student_uid)." AND lehrveranstaltung_id=".$db->db_add_param($lehrveranstaltung_id)." " - . "ORDER BY lehreinheit_id ASC " - . "LIMIT 1"; + $qry = " + SELECT + lehreinheit_id + FROM + campus.vw_student_lehrveranstaltung + WHERE + uid=".$db->db_add_param($student_uid)." + AND lehrveranstaltung_id=".$db->db_add_param($lehrveranstaltung_id)." + AND studiensemester_kurzbz=".$db->db_add_param($studiensemester_kurzbz)." + ORDER BY lehreinheit_id ASC + LIMIT 1"; if($result = $db->db_query($qry)) { @@ -1209,7 +1216,7 @@ if(!$error) $rolle->bestaetigtam = $_POST['bestaetigtam']; if($_POST['bestaetigtam']=='') $rolle->bestaetigtvon = null; - + $rolle->bewerbung_abgeschicktamum = $_POST['bewerbung_abgeschicktamum']; $rolle->orgform_kurzbz = $_POST['orgform_kurzbz']; $rolle->studienplan_id = $_POST['studienplan_id']; From 8ccb94af38664566dedea5711fad87a21f3601c4 Mon Sep 17 00:00:00 2001 From: Paolo Date: Tue, 5 Feb 2019 12:23:34 +0100 Subject: [PATCH 38/39] Last things missing from the missing commits --- application/views/templates/FHC-Header.php | 64 +++++++++++++--------- public/js/infocenter/infocenterDetails.js | 17 +++--- 2 files changed, 44 insertions(+), 37 deletions(-) diff --git a/application/views/templates/FHC-Header.php b/application/views/templates/FHC-Header.php index 785ac0184..8bde4c019 100644 --- a/application/views/templates/FHC-Header.php +++ b/application/views/templates/FHC-Header.php @@ -18,15 +18,16 @@ $addons = isset($addons) ? $addons : false; $ajaxlib = isset($ajaxlib) ? $ajaxlib : false; $bootstrap = isset($bootstrap) ? $bootstrap : false; + $dialoglib = isset($dialoglib) ? $dialoglib : false; $filterwidget = isset($filterwidget) ? $filterwidget : false; $fontawesome = isset($fontawesome) ? $fontawesome : false; $jquery = isset($jquery) ? $jquery : false; $jqueryui = isset($jqueryui) ? $jqueryui : false; $jquerytreetable = isset($jquerytreetable) ? $jquerytreetable : false; $navigationwidget = isset($navigationwidget) ? $navigationwidget : false; + $pivotui = isset($pivotui) ? $pivotui : false; $sbadmintemplate = isset($sbadmintemplate) ? $sbadmintemplate : false; $tablesorter = isset($tablesorter) ? $tablesorter : false; - $pivotui = isset($pivotui) ? $pivotui : false; $tinymce = isset($tinymce) ? $tinymce : false; ?> @@ -45,22 +46,18 @@ // -------------------------------------------------------------------------------------------------------- // From vendor folder - // jQuery UI CSS - if ($jqueryui === true) generateCSSsInclude('vendor/components/jqueryui/themes/base/jquery-ui.min.css'); - // Bootstrap CSS if ($bootstrap === true) generateCSSsInclude('vendor/twbs/bootstrap/dist/css/bootstrap.min.css'); + // jQuery UI CSS + if ($jqueryui === true) generateCSSsInclude('vendor/components/jqueryui/themes/base/jquery-ui.min.css'); + + // jQuery treetable + if ($jquerytreetable === true) generateCSSsInclude('vendor/ludo/jquery-treetable/css/jquery.treetable.css'); + // Font Awesome CSS if ($fontawesome === true) generateCSSsInclude('vendor/components/font-awesome/css/font-awesome.min.css'); - // Table sorter CSS - if ($tablesorter === true) - { - generateCSSsInclude('vendor/mottie/tablesorter/dist/css/theme.default.min.css'); - generateCSSsInclude('vendor/mottie/tablesorter/dist/css/jquery.tablesorter.pager.min.css'); - } - // PivotUI CSS if ($pivotui === true) { @@ -74,8 +71,12 @@ generateCSSsInclude('vendor/BlackrockDigital/startbootstrap-sb-admin-2/dist/css/sb-admin-2.min.css'); } - // jQuery treetable - if ($jquerytreetable === true) generateCSSsInclude('vendor/ludo/jquery-treetable/css/jquery.treetable.css'); + // Table sorter CSS + if ($tablesorter === true) + { + generateCSSsInclude('vendor/mottie/tablesorter/dist/css/theme.default.min.css'); + generateCSSsInclude('vendor/mottie/tablesorter/dist/css/jquery.tablesorter.pager.min.css'); + } // -------------------------------------------------------------------------------------------------------- // From public folder @@ -83,6 +84,9 @@ // AjaxLib CSS if ($ajaxlib === true) generateCSSsInclude('public/css/AjaxLib.css'); + // DialogLib CSS + if ($dialoglib === true) generateCSSsInclude('public/css/DialogLib.css'); + // FilterWidget CSS if ($filterwidget === true) generateCSSsInclude('public/css/FilterWidget.css'); @@ -107,6 +111,9 @@ // -------------------------------------------------------------------------------------------------------- // From vendor folder + // Bootstrap JS + if ($bootstrap === true) generateJSsInclude('vendor/twbs/bootstrap/dist/js/bootstrap.min.js'); + // jQuery V3 if ($jquery === true) generateJSsInclude('vendor/components/jquery/jquery.min.js'); @@ -117,8 +124,15 @@ generateJSsInclude('vendor/components/jqueryui/ui/i18n/datepicker-de.js'); // datepicker german language file } - // Bootstrap JS - if ($bootstrap === true) generateJSsInclude('vendor/twbs/bootstrap/dist/js/bootstrap.min.js'); + // jQuery treetable + // NOTE: keep it after jQuery includes + if ($jquerytreetable === true) generateJSsInclude('vendor/ludo/jquery-treetable/jquery.treetable.js'); + + // PivotUI CSS + if ($pivotui === true) + { + generateJSsInclude('vendor/nicolaskruchten/pivottable/dist/pivot.min.js'); + } // Table sorter JS if ($tablesorter === true) @@ -128,12 +142,6 @@ generateJSsInclude('vendor/mottie/tablesorter/dist/js/extras/jquery.tablesorter.pager.min.js'); } - // PivotUI CSS - if ($pivotui === true) - { - generateJSsInclude('vendor/nicolaskruchten/pivottable/dist/pivot.min.js'); - } - // Tinymce JS if ($tinymce === true) generateJSsInclude('vendor/tinymce/tinymce/tinymce.min.js'); @@ -146,29 +154,31 @@ generateBackwardCompatibleJSMsIe('vendor/scottjehl/Respond/dest/respond.min.js'); } - // jQuery treetable - if ($jquerytreetable === true) generateJSsInclude('vendor/ludo/jquery-treetable/jquery.treetable.js'); - // -------------------------------------------------------------------------------------------------------- // From public folder + // DialogLib JS + if ($dialoglib === true) generateJSsInclude('public/js/DialogLib.js'); + // AjaxLib JS // NOTE: must be called before including others JS libraries that use it if ($ajaxlib === true) generateJSsInclude('public/js/AjaxLib.js'); - // PhrasesLib JS - if ($phrases != null) generateJSsInclude('public/js/PhrasesLib.js'); - // FilterWidget JS if ($filterwidget === true) generateJSsInclude('public/js/FilterWidget.js'); // NavigationWidget JS if ($navigationwidget === true) generateJSsInclude('public/js/NavigationWidget.js'); + // PhrasesLib JS + if ($phrases != null) generateJSsInclude('public/js/PhrasesLib.js'); + // Load addon hooks JS + // NOTE: keep it as the latest but one if ($addons === true) generateAddonsJSsInclude($calledPath.'/'.$calledMethod); // Eventually required JS + // NOTE: keep it as the latest generateJSsInclude($customJSs); ?> diff --git a/public/js/infocenter/infocenterDetails.js b/public/js/infocenter/infocenterDetails.js index 252647a71..e1b6e0e46 100644 --- a/public/js/infocenter/infocenterDetails.js +++ b/public/js/infocenter/infocenterDetails.js @@ -115,7 +115,7 @@ $(document).ready(function () var InfocenterDetails = { genericSaveError: function() { - alert("error when saving"); + FHC_DialogLib.alertError("error when saving"); }, openZgvInfoForPrestudent: function(prestudent_id) { @@ -170,14 +170,11 @@ var InfocenterDetails = { data, { successCallback: function(data, textStatus, jqXHR) { - if (data === true) + if (data !== true) { - InfocenterDetails._refreshZgv(true); - } - else - { - alert("error when saving zgv Prio"); + FHC_DialogLib.alertError("error when saving ZGV prio"); } + InfocenterDetails._refreshZgv(true); } } ); @@ -260,7 +257,7 @@ var InfocenterDetails = { } else { - alert("error when saving Absage"); + FHC_DialogLib.alertError("error when saving Absage"); } } } @@ -284,13 +281,13 @@ var InfocenterDetails = { } else if (data.error === 2 && parseInt(data.retval.prestudent_id, 10)) { - alert("error when setting accepted documents"); + FHC_DialogLib.alertError("error when setting accepted documents"); InfocenterDetails._refreshZgv(); InfocenterDetails._refreshLog(); } else { - alert("error when saving Freigabe"); + FHC_DialogLib.alertError("error when saving Freigabe"); } } } From 6b6e030b691c0554d6167756add2f900e9381a00 Mon Sep 17 00:00:00 2001 From: Paolo Date: Tue, 5 Feb 2019 15:26:38 +0100 Subject: [PATCH 39/39] Bootstrap sometimes needs jQuery! --- application/views/templates/FHC-Header.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/application/views/templates/FHC-Header.php b/application/views/templates/FHC-Header.php index 8bde4c019..f48c97cc1 100644 --- a/application/views/templates/FHC-Header.php +++ b/application/views/templates/FHC-Header.php @@ -46,12 +46,12 @@ // -------------------------------------------------------------------------------------------------------- // From vendor folder - // Bootstrap CSS - if ($bootstrap === true) generateCSSsInclude('vendor/twbs/bootstrap/dist/css/bootstrap.min.css'); - // jQuery UI CSS if ($jqueryui === true) generateCSSsInclude('vendor/components/jqueryui/themes/base/jquery-ui.min.css'); + // Bootstrap CSS + if ($bootstrap === true) generateCSSsInclude('vendor/twbs/bootstrap/dist/css/bootstrap.min.css'); + // jQuery treetable if ($jquerytreetable === true) generateCSSsInclude('vendor/ludo/jquery-treetable/css/jquery.treetable.css'); @@ -111,9 +111,6 @@ // -------------------------------------------------------------------------------------------------------- // From vendor folder - // Bootstrap JS - if ($bootstrap === true) generateJSsInclude('vendor/twbs/bootstrap/dist/js/bootstrap.min.js'); - // jQuery V3 if ($jquery === true) generateJSsInclude('vendor/components/jquery/jquery.min.js'); @@ -124,6 +121,9 @@ generateJSsInclude('vendor/components/jqueryui/ui/i18n/datepicker-de.js'); // datepicker german language file } + // Bootstrap JS + if ($bootstrap === true) generateJSsInclude('vendor/twbs/bootstrap/dist/js/bootstrap.min.js'); + // jQuery treetable // NOTE: keep it after jQuery includes if ($jquerytreetable === true) generateJSsInclude('vendor/ludo/jquery-treetable/jquery.treetable.js');