From a1c4c3133216820b276b12e6d822d3c5486a7293 Mon Sep 17 00:00:00 2001 From: manu Date: Fri, 6 Aug 2021 10:46:14 +0200 Subject: [PATCH 01/22] =?UTF-8?q?Update=20Phrasen=20und=20neue=20Funktion?= =?UTF-8?q?=20f=C3=BCr=20Anzeige=20LV-Leitung?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/lehrveranstaltung.class.php | 47 ++++++++++++++++++++++++++--- locale/de-AT/lehre.php | 3 +- locale/en-US/lehre.php | 1 + 3 files changed, 46 insertions(+), 5 deletions(-) diff --git a/include/lehrveranstaltung.class.php b/include/lehrveranstaltung.class.php index 4021fab85..268c75bf8 100644 --- a/include/lehrveranstaltung.class.php +++ b/include/lehrveranstaltung.class.php @@ -1,5 +1,5 @@ , - * Andreas Oesterreicher and - * Rudolf Hangl . - * Stefan Puraner + * Andreas Oesterreicher , + * Rudolf Hangl , + * Stefan Puraner and + * Manuela Thamer */ require_once(dirname(__FILE__) . '/basis_db.class.php'); require_once(dirname(__FILE__) . '/functions.inc.php'); @@ -2423,6 +2424,44 @@ class lehrveranstaltung extends basis_db } } + /** + * Laedt den LV-Leiter einer Lehrveranstaltung + * ist keiner der Lektoren als LV-Leitung eingetragen, wird Null zurückgegeben + * @param int $lehrveranstaltung_id ID der Lehrveranstaltung. + * @param char $studiensemester_kurzbz Studiensemester. + * @return char $mitarbeiter_uid UID des Mitarbeiters oder NULL, wenn keine LV-Leitung vorhanden + */ + public function getEingetrageneLVLeitung($lehrveranstaltung_id, $studiensemester_kurzbz) + { + $qry = "SELECT + mitarbeiter_uid + FROM + lehre.tbl_lehreinheit + JOIN lehre.tbl_lehreinheitmitarbeiter USING(lehreinheit_id) + WHERE + tbl_lehreinheit.lehrveranstaltung_id=".$this->db_add_param($lehrveranstaltung_id)." + AND tbl_lehreinheit.studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz)." + AND lehrfunktion_kurzbz='LV-Leitung';"; + + if($result = $this->db_query($qry)) + { + if($row = $this->db_fetch_object($result)) + { + return $row->mitarbeiter_uid; + } + else + { + $this->errormsg = 'Keine Eintrag gefunden'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + /** * Liefert den Koordinator einer Lehrveranstaltung * @param $lehrveranstaltung_id diff --git a/locale/de-AT/lehre.php b/locale/de-AT/lehre.php index 3f44edcb9..2290d4a55 100644 --- a/locale/de-AT/lehre.php +++ b/locale/de-AT/lehre.php @@ -2,7 +2,8 @@ $this->phrasen['lehre/keineLektorenZugeordnet']='Derzeit sind keine Lektoren für dieses Fach zugeteilt'; $this->phrasen['lehre/lehrveranstaltungsinformation']='Lehrveranstaltungsinformation'; -$this->phrasen['lehre/lehrbeauftragter']='Lehrbeauftragte(r)'; +$this->phrasen['lehre/lehrbeauftragter']='Lehrbeauftragte*r'; +$this->phrasen['lehre/lvleitung']='LV-Leiter*in'; $this->phrasen['lehre/lvInfoBearbeiten']='Bearbeiten'; $this->phrasen['lehre/semesterplan']='Semesterplan'; diff --git a/locale/en-US/lehre.php b/locale/en-US/lehre.php index 603492c84..4674800da 100644 --- a/locale/en-US/lehre.php +++ b/locale/en-US/lehre.php @@ -3,6 +3,7 @@ $this->phrasen['lehre/keineLektorenZugeordnet']='Currently there are no lecturer $this->phrasen['lehre/lehrveranstaltungsinformation']='Course Information'; $this->phrasen['lehre/lehrbeauftragter']='Lecturer(s)'; +$this->phrasen['lehre/lvleitung']='Head of Course'; $this->phrasen['lehre/lvInfoBearbeiten']='Edit'; $this->phrasen['lehre/semesterplan']='Semesterplan'; From c563f614bb01037768f7e2a1735fddb957422f4d Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Tue, 21 Sep 2021 19:08:22 +0200 Subject: [PATCH 02/22] =?UTF-8?q?adapted=20BISmeldung=20(studentenmeldung.?= =?UTF-8?q?php,=20lehrgangsmeldung.php)=20to=20new=20changes:=20-=20added?= =?UTF-8?q?=20eMailAdresseBE=20for=20university=20adress=20-=20ECTS=20erwo?= =?UTF-8?q?rben=20and=20angerechnet=20are=20rounded=20(kaufm=C3=A4nnisch,?= =?UTF-8?q?=20.5=20up)=20-=20only=20svnr=20reported=20if=20there=20is=20sv?= =?UTF-8?q?nr=20and=20ekz?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vilesci/bis/lehrgangsmeldung.php | 42 ++++++++++++++++++++------------ vilesci/bis/studentenmeldung.php | 40 ++++++++++++++++++++++++++---- 2 files changed, 61 insertions(+), 21 deletions(-) diff --git a/vilesci/bis/lehrgangsmeldung.php b/vilesci/bis/lehrgangsmeldung.php index 9cc560d32..b9d6a2526 100644 --- a/vilesci/bis/lehrgangsmeldung.php +++ b/vilesci/bis/lehrgangsmeldung.php @@ -242,29 +242,37 @@ if($result = $db->db_query($qry)) $zustell_strasse = $rowzustelladr->strasse; $zustell_nation = $rowzustelladr->nation; } - - // eMail-Adresse - $qry_mail = " + + // FH eMail-Adresse FH aus UID@Domain + $email = ''; + if ($row->student_uid != '') + { + $email = $row->student_uid. '@'. DOMAIN; + } + + // private eMail-Adresse + $email_privat = ''; + $qry_privmail = " SELECT kontakt FROM public.tbl_kontakt - WHERE kontakttyp = 'email' - AND zustellung = TRUE - AND person_id = ". $db->db_add_param($row->pers_id). " - ORDER BY insertamum DESC LIMIT 1; + WHERE zustellung = TRUE + AND kontakttyp = 'email' + AND person_id=". $db->db_add_param($row->pers_id). " + ORDER BY insertamum DESC + LIMIT 1; "; - - $email = ''; - if ($result_email = $db->db_query($qry_mail)) + + if ($privmail_result = $db->db_query($qry_privmail)) { - if($db->db_num_rows($result_email) == 1) + if($db->db_num_rows($privmail_result) == 1) { - if($row_mail = $db->db_fetch_object($result_email)) + if ($row_privmail = $db->db_fetch_object($privmail_result)) { - $email = $row_mail->kontakt; + $email_privat = $row_privmail->kontakt; } } } - + if($row->gebdatum<'1920-01-01' OR $row->gebdatum==null OR $row->gebdatum=='') { $error_log.=(!empty($error_log)?', ':'')."Geburtsdatum ('".$row->gebdatum."')"; @@ -620,7 +628,8 @@ if($result = $db->db_query($qry)) $datei.=" ".$row->svnr.""; } - if($row->ersatzkennzeichen!='') + // Ersatzkennzeichen nur inkludieren wenn svnr nicht gesetzt + if($row->ersatzkennzeichen!='' && $row->svnr == null) { $datei.=" ".$row->ersatzkennzeichen.""; @@ -648,7 +657,8 @@ if($result = $db->db_query($qry)) } $datei.=" - ". $email. " + ". $email_privat. " + ". $email. " ".$row->zgv_code." ".date("dmY", $datumobj->mktime_fromdate($row->zgvdatum)).""; diff --git a/vilesci/bis/studentenmeldung.php b/vilesci/bis/studentenmeldung.php index dceb4d30c..901181a24 100644 --- a/vilesci/bis/studentenmeldung.php +++ b/vilesci/bis/studentenmeldung.php @@ -758,6 +758,29 @@ function GenerateXMLStudentBlock($row) $email = $row->student_uid. '@'. DOMAIN; } + // private eMail-Adresse + $email_privat = ''; + $qry_privmail = " + SELECT kontakt + FROM public.tbl_kontakt + WHERE zustellung = TRUE + AND kontakttyp = 'email' + AND person_id=". $db->db_add_param($row->pers_id). " + ORDER BY insertamum DESC + LIMIT 1; + "; + + if ($privmail_result = $db->db_query($qry_privmail)) + { + if($db->db_num_rows($privmail_result) == 1) + { + if ($row_privmail = $db->db_fetch_object($privmail_result)) + { + $email_privat = $row_privmail->kontakt; + } + } + } + if($row->gebdatum<'1920-01-01' OR $row->gebdatum==null OR $row->gebdatum=='') { $error_log.=(!empty($error_log)?', ':'')."Geburtsdatum ('".$row->gebdatum."')"; @@ -1263,7 +1286,9 @@ function GenerateXMLStudentBlock($row) $datei .= " " . $row->svnr . ""; } - if ($row->ersatzkennzeichen != '') + + // Ersatzkennzeichen nur inkludieren wenn svnr nicht gesetzt + if ($row->ersatzkennzeichen != '' && $row->svnr == null) { $datei .= " " . $row->ersatzkennzeichen . ""; @@ -1296,11 +1321,16 @@ function GenerateXMLStudentBlock($row) "; } + if ($email_privat != '') + { + $datei .= " + " . $email_privat . ""; + } + if ($email != '') { $datei .= " - " . $email . " - "; + " . $email . ""; } if(!$ausserordentlich) @@ -1531,12 +1561,12 @@ function GenerateXMLStudentBlock($row) if ($aktstatus != 'Incoming' && $rowio->ects_erworben != '') { $datei.=" - ".$rowio->ects_erworben.""; + ".round($rowio->ects_erworben).""; } if ($aktstatus != 'Incoming' && $rowio->ects_angerechnet != '') { $datei.=" - ".$rowio->ects_angerechnet.""; + ".round($rowio->ects_angerechnet).""; } foreach ($aufenthaltfoerderung_code_arr as $aufenthaltfoerderung_code) { From 4a4c95aa088acd3f6127670bd284d7eade990d6f Mon Sep 17 00:00:00 2001 From: ma0048 Date: Mon, 4 Oct 2021 12:37:50 +0200 Subject: [PATCH 03/22] auswahl fuer bewerbung abgeschickt ja/nein hinzugefuegt --- .../controllers/system/infocenter/InfoCenter.php | 11 ++++++----- application/models/crm/Prestudent_model.php | 14 ++++++++++++-- public/js/infocenter/infocenterPersonDataset.js | 9 ++++++++- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index cd88f814a..59da573b9 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -734,7 +734,7 @@ class InfoCenter extends Auth_Controller if (hasData($lastStatus) && hasData($statusgrresult)) { - //check if still Interessent + //check if still Interessent, Bewerber or Wartender if ($lastStatus->retval[0]->status_kurzbz === self::INTERESSENTSTATUS || $lastStatus->retval[0]->status_kurzbz === self::BEWERBERSTATUS || $lastStatus->retval[0]->status_kurzbz === self::WARTENDER) @@ -2134,17 +2134,18 @@ class InfoCenter extends Auth_Controller { $statusgrund = $this->input->post('statusgrund'); $studiengang = $this->input->post('studiengang'); + $abgeschickt = $this->input->post('abgeschickt'); $personen = $this->input->post('personen'); $studienSemester = $this->variablelib->getVar('infocenter_studiensemester'); - if ($statusgrund === 'null' || $studiengang === 'null' || empty($personen)) - $this->terminateWithJsonError("Bitte Statusgrund, Studiengang und Personen auswählen."); + if ($statusgrund === 'null' || $studiengang === 'null' || $abgeschickt === 'null' || empty($personen)) + $this->terminateWithJsonError("Bitte füllen Sie alle Felder aus"); foreach($personen as $person) { - $prestudent = $this->PrestudentModel->getPrestudentByStudiengangAndPerson($studiengang, $person, $studienSemester); + $prestudent = $this->PrestudentModel->getPrestudentByStudiengangAndPerson($studiengang, $person, $studienSemester, $abgeschickt); - if(!hasData($prestudent)) + if (!hasData($prestudent)) continue; $prestudentData = getData($prestudent); diff --git a/application/models/crm/Prestudent_model.php b/application/models/crm/Prestudent_model.php index 2553fd5fa..0ccba60b3 100644 --- a/application/models/crm/Prestudent_model.php +++ b/application/models/crm/Prestudent_model.php @@ -611,7 +611,7 @@ class Prestudent_model extends DB_Model )); } - public function getPrestudentByStudiengangAndPerson($studiengang, $person, $studienSemester) + public function getPrestudentByStudiengangAndPerson($studiengang, $person, $studienSemester, $abgeschickt) { $query = "SELECT ps.prestudent_id FROM public.tbl_prestudentstatus pss @@ -621,7 +621,17 @@ class Prestudent_model extends DB_Model WHERE ps.person_id = ? AND UPPER((sg.typ || sg.kurzbz) || ':' || sp.orgform_kurzbz) = ? AND pss.studiensemester_kurzbz = ? - "; + AND"; + + if ($abgeschickt === 'true') + $query .= " EXISTS"; + else + $query .= " NOT EXISTS"; + + $query .= " (SELECT 1 FROM public.tbl_prestudentstatus spss + JOIN public.tbl_prestudent sps USING(prestudent_id) + WHERE sps.prestudent_id = ps.prestudent_id + AND spss.bewerbung_abgeschicktamum IS NOT NULL)"; return $this->execQuery($query, array($person, $studiengang, $studienSemester)); } diff --git a/public/js/infocenter/infocenterPersonDataset.js b/public/js/infocenter/infocenterPersonDataset.js index 252f6ac1f..bdeed1770 100644 --- a/public/js/infocenter/infocenterPersonDataset.js +++ b/public/js/infocenter/infocenterPersonDataset.js @@ -49,6 +49,11 @@ var InfocenterPersonDataset = { '' + + '' + ''; InfocenterPersonDataset.getAbsageData(); @@ -327,6 +332,7 @@ var InfocenterPersonDataset = { var statusgrund = $('.absgstatusgrund').val(); var studiengang = $('.auswahlAbsageStg').val(); + var abgeschickt = $('.auswahlAbsageAbgeschickt').val(); var personen = []; @@ -340,7 +346,8 @@ var InfocenterPersonDataset = { { 'statusgrund': statusgrund, 'studiengang': studiengang, - 'personen' : personen + 'personen' : personen, + 'abgeschickt' : abgeschickt }, { successCallback: function(data, textStatus, jqXHR) { From 9c4f8eb0eb08a5210fb50ec7c27ad7de2425e177 Mon Sep 17 00:00:00 2001 From: ma0048 Date: Mon, 4 Oct 2021 13:26:40 +0200 Subject: [PATCH 04/22] bei logdata 'new application' entfernt org_name hinzugefuegt order by log_id statt zeitpunkt --- .../system/infocenter/infocenterData.php | 18 +++++++++-------- .../infocenter/infocenterFreigegebenData.php | 20 ++++++++++--------- .../infocenterReihungstestAbsolviertData.php | 18 +++++++++-------- 3 files changed, 31 insertions(+), 25 deletions(-) diff --git a/application/views/system/infocenter/infocenterData.php b/application/views/system/infocenter/infocenterData.php index d0e0a7126..c49a1c6cc 100644 --- a/application/views/system/infocenter/infocenterData.php +++ b/application/views/system/infocenter/infocenterData.php @@ -6,7 +6,7 @@ $INTERESSENT_STATUS = '\'Interessent\''; $STUDIENGANG_TYP = '\''.$this->variablelib->getVar('infocenter_studiensgangtyp').'\''; $TAETIGKEIT_KURZBZ = '\'bewerbung\', \'kommunikation\''; - $LOGDATA_NAME = '\'Login with code\', \'Login with user\', \'New application\', \'Interessent rejected\''; + $LOGDATA_NAME = '\'Login with code\', \'Login with user\', \'Interessent rejected\''; $LOGDATA_NAME_PARKED = '\'Parked\''; $LOGDATA_NAME_ONHOLD = '\'Onhold\''; $LOGTYPE_KURZBZ = '\'Processstate\''; @@ -14,6 +14,7 @@ $ADDITIONAL_STG = $this->config->item('infocenter_studiengang_kz'); $AKTE_TYP = '\'identity\', \'zgv_bakk\''; $STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\''; + $ORG_NAME = '\'InfoCenter\''; $query = ' SELECT @@ -33,7 +34,7 @@ WHERE l.taetigkeit_kurzbz IN ('.$TAETIGKEIT_KURZBZ.') AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC + ORDER BY l.log_id DESC LIMIT 1 ) AS "LastAction", ( @@ -42,7 +43,7 @@ WHERE l.taetigkeit_kurzbz IN('.$TAETIGKEIT_KURZBZ.') AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC + ORDER BY l.log_id DESC LIMIT 1 ) AS "LastActionType", ( @@ -59,7 +60,7 @@ WHERE l.taetigkeit_kurzbz IN ('.$TAETIGKEIT_KURZBZ.') AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC + ORDER BY l.log_id DESC LIMIT 1 ) AS "User/Operator", ( @@ -254,13 +255,14 @@ JOIN public.tbl_organisationseinheit USING(oe_kurzbz) WHERE (tbl_benutzerfunktion.datum_von IS NULL OR tbl_benutzerfunktion.datum_von <= now()) AND (tbl_benutzerfunktion.datum_bis IS NULL OR tbl_benutzerfunktion.datum_bis >= now()) + AND tbl_organisationseinheit.bezeichnung = '.$ORG_NAME.' AND tbl_benutzerfunktion.uid = ( SELECT l.insertvon FROM system.tbl_log l WHERE l.taetigkeit_kurzbz IN ('.$TAETIGKEIT_KURZBZ.') AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC + ORDER BY l.log_id DESC LIMIT 1 ) LIMIT 1 @@ -439,13 +441,13 @@ $datasetRaw->{'ZGVMNation'} = '-'; } - if ($datasetRaw->{'InfoCenterMitarbeiter'} === 'InfoCenter') + if ($datasetRaw->{'InfoCenterMitarbeiter'} === null) { - $datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja'; + $datasetRaw->{'InfoCenterMitarbeiter'} = 'Nein'; } else { - $datasetRaw->{'InfoCenterMitarbeiter'} = 'Nein'; + $datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja'; } return $datasetRaw; diff --git a/application/views/system/infocenter/infocenterFreigegebenData.php b/application/views/system/infocenter/infocenterFreigegebenData.php index 26c30d718..9078c13db 100644 --- a/application/views/system/infocenter/infocenterFreigegebenData.php +++ b/application/views/system/infocenter/infocenterFreigegebenData.php @@ -5,13 +5,14 @@ $INTERESSENT_STATUS = '\'Interessent\''; $STUDIENGANG_TYP = '\''.$this->variablelib->getVar('infocenter_studiensgangtyp').'\''; $TAETIGKEIT_KURZBZ = '\'bewerbung\', \'kommunikation\''; - $LOGDATA_NAME = '\'Login with code\', \'Login with user\', \'New application\''; + $LOGDATA_NAME = '\'Login with code\', \'Login with user\''; $REJECTED_STATUS = '\'Abgewiesener\''; $ADDITIONAL_STG = $this->config->item('infocenter_studiengang_kz'); $STATUS_KURZBZ = '\'Wartender\', \'Bewerber\', \'Aufgenommener\', \'Student\''; $STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\''; + $ORG_NAME = '\'InfoCenter\''; - $query = ' +$query = ' SELECT p.person_id AS "PersonId", p.vorname AS "Vorname", @@ -27,7 +28,7 @@ WHERE l.taetigkeit_kurzbz IN('.$TAETIGKEIT_KURZBZ.') AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC + ORDER BY l.log_id DESC LIMIT 1 ) AS "LastAction", ( @@ -36,7 +37,7 @@ WHERE l.taetigkeit_kurzbz IN('.$TAETIGKEIT_KURZBZ.') AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC + ORDER BY l.log_id DESC LIMIT 1 ) AS "LastActionType", ( @@ -45,7 +46,7 @@ WHERE l.taetigkeit_kurzbz IN('.$TAETIGKEIT_KURZBZ.') AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC + ORDER BY l.log_id DESC LIMIT 1 ) AS "User/Operator", ( @@ -231,13 +232,14 @@ JOIN public.tbl_organisationseinheit USING(oe_kurzbz) WHERE (tbl_benutzerfunktion.datum_von IS NULL OR tbl_benutzerfunktion.datum_von <= now()) AND (tbl_benutzerfunktion.datum_bis IS NULL OR tbl_benutzerfunktion.datum_bis >= now()) + AND tbl_organisationseinheit.bezeichnung = '.$ORG_NAME.' AND tbl_benutzerfunktion.uid = ( SELECT l.insertvon FROM system.tbl_log l WHERE l.taetigkeit_kurzbz IN ('.$TAETIGKEIT_KURZBZ.') AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC + ORDER BY l.log_id DESC LIMIT 1 ) LIMIT 1 @@ -410,13 +412,13 @@ $datasetRaw->{'ZGVMNation'} = '-'; } - if ($datasetRaw->{'InfoCenterMitarbeiter'} === 'InfoCenter') + if ($datasetRaw->{'InfoCenterMitarbeiter'} === null) { - $datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja'; + $datasetRaw->{'InfoCenterMitarbeiter'} = 'Nein'; } else { - $datasetRaw->{'InfoCenterMitarbeiter'} = 'Nein'; + $datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja'; } return $datasetRaw; diff --git a/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php b/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php index 81ddd2594..5aa664a97 100644 --- a/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php +++ b/application/views/system/infocenter/infocenterReihungstestAbsolviertData.php @@ -5,11 +5,12 @@ $INTERESSENT_STATUS = '\'Interessent\''; $STUDIENGANG_TYP = '\''.$this->variablelib->getVar('infocenter_studiensgangtyp').'\''; $TAETIGKEIT_KURZBZ = '\'bewerbung\', \'kommunikation\''; - $LOGDATA_NAME = '\'Login with code\', \'Login with user\', \'New application\''; + $LOGDATA_NAME = '\'Login with code\', \'Login with user\''; $ADDITIONAL_STG = $this->config->item('infocenter_studiengang_kz'); $STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\''; + $ORG_NAME = '\'InfoCenter\''; - $query = ' +$query = ' SELECT p.person_id AS "PersonId", p.vorname AS "Vorname", @@ -25,7 +26,7 @@ WHERE l.taetigkeit_kurzbz IN('.$TAETIGKEIT_KURZBZ.') AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC + ORDER BY l.log_id DESC LIMIT 1 ) AS "LastAction", ( @@ -34,7 +35,7 @@ WHERE l.taetigkeit_kurzbz IN('.$TAETIGKEIT_KURZBZ.') AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC + ORDER BY l.log_id DESC LIMIT 1 ) AS "User/Operator", ( @@ -182,13 +183,14 @@ JOIN public.tbl_organisationseinheit USING(oe_kurzbz) WHERE (tbl_benutzerfunktion.datum_von IS NULL OR tbl_benutzerfunktion.datum_von <= now()) AND (tbl_benutzerfunktion.datum_bis IS NULL OR tbl_benutzerfunktion.datum_bis >= now()) + AND tbl_organisationseinheit.bezeichnung = '.$ORG_NAME.' AND tbl_benutzerfunktion.uid = ( SELECT l.insertvon FROM system.tbl_log l WHERE l.taetigkeit_kurzbz IN ('.$TAETIGKEIT_KURZBZ.') AND l.logdata->>\'name\' NOT IN ('.$LOGDATA_NAME.') AND l.person_id = p.person_id - ORDER BY l.zeitpunkt DESC + ORDER BY l.log_id DESC LIMIT 1 ) LIMIT 1 @@ -347,13 +349,13 @@ $datasetRaw->{'ZGVMNation'} = '-'; } - if ($datasetRaw->{'InfoCenterMitarbeiter'} === 'InfoCenter') + if ($datasetRaw->{'InfoCenterMitarbeiter'} === null) { - $datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja'; + $datasetRaw->{'InfoCenterMitarbeiter'} = 'Nein'; } else { - $datasetRaw->{'InfoCenterMitarbeiter'} = 'Nein'; + $datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja'; } return $datasetRaw; From 5954237851a6688b4068be5d70ff8a46c36e4b4e Mon Sep 17 00:00:00 2001 From: ma0048 Date: Fri, 8 Oct 2021 10:51:13 +0200 Subject: [PATCH 05/22] update rechte tbl_person_lock fuer benutzer vilesci --- system/dbupdate_3.3.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index 45c9e9e42..66849c47c 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -1725,6 +1725,20 @@ if($result = @$db->db_query("SELECT * FROM information_schema.role_table_grants } } +// UPDATE Berechtigungen fuer vilesci User erteilen fuer tbl_person_lock +if ($result = @$db->db_query("SELECT * FROM information_schema.role_table_grants WHERE table_name='tbl_person_lock' AND table_schema='system' AND grantee='vilesci' AND privilege_type='UPDATE'")) +{ + if ($db->db_num_rows($result) === 0) + { + $qry = "GRANT UPDATE ON system.tbl_person_lock TO vilesci;"; + + if(!$db->db_query($qry)) + echo 'system.tbl_person_lock Berechtigungen: '.$db->db_last_error().'
'; + else + echo 'UPDATE Recht fuer system.tbl_person_lock fuer vilesci user gesetzt '; + } +} + /** * Kommentare fuer Datenbanktabellen From 3e00e4b3a11a47604483d3fe88995d326e8ee251 Mon Sep 17 00:00:00 2001 From: ma0048 Date: Tue, 12 Oct 2021 13:08:17 +0200 Subject: [PATCH 06/22] infocenter warning falls bewerberIn bereits vorhanden ist --- .../system/infocenter/InfoCenter.php | 10 +++++++++- application/models/person/Person_model.php | 15 ++++++++++++++ .../system/infocenter/infocenterDetails.php | 16 +++++++++++++++ system/phrasesupdate.php | 20 +++++++++++++++++++ 4 files changed, 60 insertions(+), 1 deletion(-) diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index cd88f814a..a97c9ef38 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -297,6 +297,13 @@ class InfoCenter extends Auth_Controller } $persondata = $this->_loadPersonData($person_id); + + $checkPerson = $this->PersonModel->checkDuplicate($person_id); + + if (isError($checkPerson)) show_error(getError($checkPerson)); + + $duplicate = array('duplicated' => getData($checkPerson)); + $prestudentdata = $this->_loadPrestudentData($person_id); $this->DokumentModel->addOrder('bezeichnung'); @@ -305,7 +312,8 @@ class InfoCenter extends Auth_Controller $data = array_merge( $persondata, $prestudentdata, - $dokumentdata + $dokumentdata, + $duplicate ); $data[self::FHC_CONTROLLER_ID] = $this->getControllerId(); diff --git a/application/models/person/Person_model.php b/application/models/person/Person_model.php index e005e243c..482cbd2ac 100644 --- a/application/models/person/Person_model.php +++ b/application/models/person/Person_model.php @@ -263,4 +263,19 @@ class Person_model extends DB_Model return success($result->vorname. ' '. $result->nachname); } + + public function checkDuplicate($person_id) + { + $qry = "SELECT sp.person_id + FROM public.tbl_person p + LEFT JOIN public.tbl_person sp ON p.vorname = sp.vorname + AND p.nachname = sp.nachname + AND p.gebdatum = sp.gebdatum + JOIN public.tbl_prestudent ps ON sp.person_id = ps.person_id + JOIN public.tbl_prestudentstatus pss ON ps.prestudent_id = pss.prestudent_id + WHERE p.person_id = ? AND sp.person_id != ? AND pss.status_kurzbz = ?"; + + + return $this->execQuery($qry, array($person_id, $person_id, 'Abbrecher')); + } } diff --git a/application/views/system/infocenter/infocenterDetails.php b/application/views/system/infocenter/infocenterDetails.php index 30acb8617..76a371c11 100644 --- a/application/views/system/infocenter/infocenterDetails.php +++ b/application/views/system/infocenter/infocenterDetails.php @@ -101,6 +101,22 @@ + +
+

+ p->t('global', 'bewerberVorhanden') . ':'; ?> +

+
+ person_id . '
'; + } + ?> +
+ +
+
diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 6e24987c1..77c1c8b1c 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -888,6 +888,26 @@ $phrases = array( ) ) ), + array( + 'app' => 'core', + 'category' => 'global', + 'phrase' => 'bewerberVorhanden', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'BewerberIn bereits vorhanden', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Applicant already available', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'core', 'category' => 'global', From 78057842140c09fe24eb6f0041657f7971c98272 Mon Sep 17 00:00:00 2001 From: ma0048 Date: Fri, 15 Oct 2021 12:54:24 +0200 Subject: [PATCH 07/22] sap projektnummer im export hinzugefuegt --- cis/private/tools/zeitaufzeichnung.php | 10 ++++++---- include/projekt.class.php | 12 +++++++++--- include/projektphase.class.php | 5 ++++- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index fcf3dd811..1b311fdf3 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -2184,7 +2184,7 @@ function getDataForProjectOverviewCSV($user) if($projektphase->getProjectphaseForMitarbeiter($user)) $projektphasen = $projektphase->result; else - $projetkphasen = array(); + $projektphasen = array(); $csvData = array(); @@ -2196,8 +2196,9 @@ function getDataForProjectOverviewCSV($user) $projekt_phase_id = ''; $beginn = $project->beginn; $ende = $project->ende; + $sap_projekt_id = $project->sap_project_id; - $csvData[] = array($titel, $projekt_kurzbz, $projekt_phase, $projekt_phase_id, $beginn, $ende); + $csvData[] = array($titel, $projekt_kurzbz, $projekt_phase, $projekt_phase_id, $beginn, $ende, $sap_projekt_id); } foreach ($projektphasen as $prjp) @@ -2210,14 +2211,15 @@ function getDataForProjectOverviewCSV($user) $projekt_phase_id = $prjp->projektphase_id; $beginn = $prjp->start; $ende = $prjp->ende; + $sap_project_id = $project->sap_project_id; - array_push($csvData, array($titel, $projekt_kurzbz, $projekt_phase, $projekt_phase_id, $beginn, $ende) ); + array_push($csvData, array($titel, $projekt_kurzbz, $projekt_phase, $projekt_phase_id, $beginn, $ende, $sap_project_id) ); } } sort($csvData); //headers schreiben - array_unshift($csvData, array('PROJEKT', 'PROJEKT KURZBEZEICHNUNG', 'PROJEKTPHASE', 'PROJEKTPHASEN ID', 'START', 'PROJEKT ENDE')); + array_unshift($csvData, array('PROJEKT', 'PROJEKT KURZBEZEICHNUNG', 'PROJEKTPHASE', 'PROJEKTPHASEN ID', 'START', 'PROJEKT ENDE', 'SAP PROJEKTNUMMER')); return $csvData; } ?> diff --git a/include/projekt.class.php b/include/projekt.class.php index 5cfa0ed9c..0b2811248 100644 --- a/include/projekt.class.php +++ b/include/projekt.class.php @@ -47,6 +47,7 @@ class projekt extends basis_db public $farbe; public $anzahl_ma; // integer public $aufwand_pt; // integer + public $sap_project_id; /** @@ -420,27 +421,31 @@ class projekt extends basis_db { $projectList = array(); $qry = "SELECT DISTINCT - tbl_projekt.* + tbl_projekt.*, tbl_projects_timesheets_project.projects_timesheet_id FROM fue.tbl_ressource JOIN fue.tbl_projekt_ressource USING(ressource_id) JOIN fue.tbl_projekt USING(projekt_kurzbz) + LEFT JOIN sync.tbl_projects_timesheets_project USING(projekt_id) WHERE (beginn<=now() or beginn is null) AND (ende + interval '1 month 1 day' >=now() OR ende is null) AND ( mitarbeiter_uid=" . $this->db_add_param($mitarbeiter_uid) . " OR student_uid=" . $this->db_add_param($mitarbeiter_uid) . " - )"; + ) + AND tbl_projects_timesheets_project.projektphase_id IS NULL + "; if ($projektphasen == true) $qry .= "UNION SELECT DISTINCT - tbl_projekt.* + tbl_projekt.*, tbl_projects_timesheets_project.projects_timesheet_id FROM fue.tbl_projektphase JOIN fue.tbl_projekt USING (projekt_kurzbz) + LEFT JOIN sync.tbl_projects_timesheets_project USING(projektphase_id) JOIN fue.tbl_projekt_ressource USING (projektphase_id) JOIN fue.tbl_ressource ON (tbl_ressource.ressource_id=tbl_projekt_ressource.ressource_id) WHERE @@ -466,6 +471,7 @@ class projekt extends basis_db $obj->beginn = $row->beginn; $obj->ende = $row->ende; $obj->oe_kurzbz = $row->oe_kurzbz; + $obj->sap_project_id = $row->projects_timesheet_id; $this->result[] = $obj; diff --git a/include/projektphase.class.php b/include/projektphase.class.php index d029ba080..4957847c4 100644 --- a/include/projektphase.class.php +++ b/include/projektphase.class.php @@ -48,6 +48,7 @@ class projektphase extends basis_db public $insertvon; // bigint public $updateamum; // timestamp public $updatevon; // bigint + public $sap_project_id; /** @@ -688,10 +689,11 @@ public function getFortschritt($projektphase_id) $qry = " SELECT - DISTINCT tbl_projektphase.*,tbl_projekt.titel + DISTINCT tbl_projektphase.*,tbl_projekt.titel, tbl_projects_timesheets_project.projects_timesheet_id FROM fue.tbl_projektphase JOIN fue.tbl_projekt USING (projekt_kurzbz) + LEFT JOIN sync.tbl_projects_timesheets_project USING(projektphase_id) JOIN fue.tbl_projekt_ressource USING (projektphase_id) JOIN fue.tbl_ressource ON (tbl_ressource.ressource_id=tbl_projekt_ressource.ressource_id) WHERE @@ -729,6 +731,7 @@ public function getFortschritt($projektphase_id) $obj->insertvon = $row->insertvon; $obj->updateamum = $row->updateamum; $obj->updatevon = $row->updatevon; + $obj->sap_project_id = $row->projects_timesheet_id; $this->result[] = $obj; From a87178a0e704f743702cb4e62311fe1f403e089b Mon Sep 17 00:00:00 2001 From: ma0048 Date: Wed, 20 Oct 2021 15:05:57 +0200 Subject: [PATCH 08/22] automatische pausen werden nun gerundet --- cis/private/tools/zeitaufzeichnung.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index fcf3dd811..422308cdc 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -710,6 +710,10 @@ echo ' else { var pausenstart = Math.floor((spanne/2-15)+(von_stunden*60+parseInt(von_minuten))); + if (pausenstart%15 !== 0) + { + pausenstart = Math.round(pausenstart/10)*10; + } var pausenstart_stunde = Math.floor(pausenstart/60); var pausenstart_minute = pausenstart - pausenstart_stunde*60; pausenstart_stunde = (pausenstart_stunde < 10 ? "0"+pausenstart_stunde : pausenstart_stunde); From 3aa251dc4b778bffb9dee67fd104043b316c1bdd Mon Sep 17 00:00:00 2001 From: ma0048 Date: Wed, 20 Oct 2021 15:11:00 +0200 Subject: [PATCH 09/22] projektexport fixed, wenn es mit at startet --- 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 177f1f8aa..ce00eabc1 100644 --- a/cis/private/tools/zeitaufzeichnung_projektliste.php +++ b/cis/private/tools/zeitaufzeichnung_projektliste.php @@ -750,7 +750,7 @@ foreach ($projektnames as $projektname) } $worksheet->setColumn($spalte, $spalte, $phasewidth); - $worksheet->write($zeile, $spalte++, $projekt->beschreibung, $format_cell_leftrightline); + $worksheet->writeString($zeile, $spalte++, $projekt->beschreibung, $format_cell_leftrightline); } } else From b0571e0a26de36198b438197e4e1318fcaecd39f Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Thu, 21 Oct 2021 08:18:04 +0200 Subject: [PATCH 10/22] additional phrases for eucovidqr --- system/phrasesupdate.php | 48 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 005d1a8a4..b7b2ed2e1 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -12560,13 +12560,13 @@ array( 'phrases' => array( array( 'sprache' => 'German', - 'text' => "Zertifikat als PDF hochladen", + 'text' => "Zertifikat als PDF hochladen (nur mit QR-Code, kein gescanntes Zertifikat)", 'description' => '', 'insertvon' => 'system' ), array( 'sprache' => 'English', - 'text' => "upload certificate pdf", + 'text' => "upload certificate pdf (only with qrcode, no scanned certificate)", 'description' => '', 'insertvon' => 'system' ) @@ -12580,13 +12580,13 @@ array( 'phrases' => array( array( 'sprache' => 'German', - 'text' => "Validierungsergebnis / aktuelles Gültigkeitsdatum", + 'text' => "Validierungsergebnis / gespeichertes Gültigkeitsdatum", 'description' => '', 'insertvon' => 'system' ), array( 'sprache' => 'English', - 'text' => "validation result / current valid date", + 'text' => "validation result / stored valid date", 'description' => '', 'insertvon' => 'system' ) @@ -12772,6 +12772,46 @@ array( ) ) ), + array( + 'app' => 'core', + 'category' => 'eucovidqr', + 'phrase' => 'UploadSuccessful', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Das Gültigkeitsdatum wurde erfolgreich gespeichert.", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "validity date has been successfully stored.", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'eucovidqr', + 'phrase' => 'UploadFailed', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Es wurde kein Gültigkeitsdatum gespeichert.", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "validity date has not been stored.", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), ); From a72f6597b3a6ce638d9e80781d55f4b289ff18c9 Mon Sep 17 00:00:00 2001 From: Manfred Date: Thu, 21 Oct 2021 17:16:20 +0200 Subject: [PATCH 11/22] BugFix 9. und 10. Semester bei Lehrauftragsverwaltung MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Manche Studiengänge haben ein 9. oder 10. Semester. Dieses muss auch bei der Lehrauftragsverwaltung aufscheinen. --- application/views/lehre/lehrauftrag/approveLehrauftragData.php | 2 +- application/views/lehre/lehrauftrag/orderLehrauftrag.php | 2 +- application/views/lehre/lehrauftrag/orderLehrauftragData.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/application/views/lehre/lehrauftrag/approveLehrauftragData.php b/application/views/lehre/lehrauftrag/approveLehrauftragData.php index 7c9669ae3..4d8dc36d0 100644 --- a/application/views/lehre/lehrauftrag/approveLehrauftragData.php +++ b/application/views/lehre/lehrauftrag/approveLehrauftragData.php @@ -2,7 +2,7 @@ $STUDIENSEMESTER = $studiensemester_selected; $ORGANISATIONSEINHEIT = (isset($organisationseinheit_selected) && !is_null($organisationseinheit_selected)) ? array($organisationseinheit_selected) : $organisationseinheit; -$AUSBILDUNGSSEMESTER = (isset($ausbildungssemester_selected) && !is_null($ausbildungssemester_selected)) ? $ausbildungssemester_selected : '1,2,3,4,5,6,7,8'; +$AUSBILDUNGSSEMESTER = (isset($ausbildungssemester_selected) && !is_null($ausbildungssemester_selected)) ? $ausbildungssemester_selected : '1,2,3,4,5,6,7,8,9,10'; $query = ' SELECT diff --git a/application/views/lehre/lehrauftrag/orderLehrauftrag.php b/application/views/lehre/lehrauftrag/orderLehrauftrag.php index 4498dacb4..023df1ac7 100644 --- a/application/views/lehre/lehrauftrag/orderLehrauftrag.php +++ b/application/views/lehre/lehrauftrag/orderLehrauftrag.php @@ -160,7 +160,7 @@ $this->load->view( 'Ausbildungssemester_widget', array( DropdownWidget::SELECTED_ELEMENT => $ausbildungssemester_selected, - 'number_semester' => 6 + 'number_semester' => 10 ), array( 'name' => 'ausbildungssemester', diff --git a/application/views/lehre/lehrauftrag/orderLehrauftragData.php b/application/views/lehre/lehrauftrag/orderLehrauftragData.php index 1ccfc55a4..c272c392c 100644 --- a/application/views/lehre/lehrauftrag/orderLehrauftragData.php +++ b/application/views/lehre/lehrauftrag/orderLehrauftragData.php @@ -2,7 +2,7 @@ $STUDIENSEMESTER = $studiensemester_selected; $STUDIENGANG = (isset($studiengang_selected) && !is_null($studiengang_selected)) ? array($studiengang_selected) : $studiengang; -$AUSBILDUNGSSEMESTER = (isset($ausbildungssemester_selected) && !is_null($ausbildungssemester_selected)) ? $ausbildungssemester_selected : '1,2,3,4,5,6,7,8'; +$AUSBILDUNGSSEMESTER = (isset($ausbildungssemester_selected) && !is_null($ausbildungssemester_selected)) ? $ausbildungssemester_selected : '1,2,3,4,5,6,7,8,9,10'; $query = ' SELECT From d73dd4769add22fa3af4d3f78208aa38c6306cc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Thu, 21 Oct 2021 17:44:45 +0200 Subject: [PATCH 12/22] =?UTF-8?q?Stipendien-Schnittstelle=20ber=C3=BCcksic?= =?UTF-8?q?htigt=20auch=20Anzahlung=20und=20Restzahlung?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/konto.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/konto.class.php b/include/konto.class.php index c23209a06..09afa5303 100644 --- a/include/konto.class.php +++ b/include/konto.class.php @@ -713,7 +713,7 @@ class konto extends basis_db $qry = "select sum(betrag) as betrag from public.tbl_konto join public.tbl_benutzer benutzer using(person_id) where uid=".$this->db_add_param($uid)." and studiensemester_kurzbz = ".$this->db_add_param($stsem)." - and buchungstyp_kurzbz = 'Studiengebuehr' and betrag > 0"; + and buchungstyp_kurzbz in('Studiengebuehr','StudiengebuehrAnzahlung','StudiengebuehrRestzahlung') and betrag > 0"; if($studiengang_kz!= null) $qry.=" and studiengang_kz = ".$this->db_add_param($studiengang_kz, FHC_INTEGER).";"; From 7de012c93093cd24f19d50bff988ccb53f88b690 Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Thu, 21 Oct 2021 18:31:48 +0200 Subject: [PATCH 13/22] more phrases for eucovidqr --- system/phrasesupdate.php | 44 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index b7b2ed2e1..d41d43c4f 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -12680,13 +12680,13 @@ array( 'phrases' => array( array( 'sprache' => 'German', - 'text' => "Das Zertifikat konnte nicht verifiziert werden.", + 'text' => "Das Zertifikat konnte nicht verifiziert werden. Stellen Sie bitte sicher, dass ein QR-Code enthalten ist.", 'description' => '', 'insertvon' => 'system' ), array( 'sprache' => 'English', - 'text' => "certificate could not be verified.", + 'text' => "certificate could not be verified. Please make sure it contains a qr-code.", 'description' => '', 'insertvon' => 'system' ) @@ -12812,6 +12812,46 @@ array( ) ) ), + array( + 'app' => 'core', + 'category' => 'eucovidqr', + 'phrase' => 'uploadbeschreibung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Hier kann ein Zertifikat mit QR-Code selbst erfasst werden.", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "a certificate with qr-code can be self registered here.", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'eucovidqr', + 'phrase' => 'manualbeschreibung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Falls das Zertifikat keinen QR-Code enthält oder die Selbst-Erfassung fehlschlägt, kann das Zertifkat beim Empfang manuell erfasst werden.", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "if the certificate does not contain a qr-code or self registration fails, the certificate can be manually registered at the front desk.", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), ); From 52272932ed45f75b4d70be01073668340571d71f Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Fri, 22 Oct 2021 10:31:02 +0200 Subject: [PATCH 14/22] another euvocid phrase --- system/phrasesupdate.php | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index d41d43c4f..b000177b8 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -12852,6 +12852,26 @@ array( ) ) ), + array( + 'app' => 'core', + 'category' => 'eucovidqr', + 'phrase' => 'supportbeschreibung', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Bei technischen Problemen kontaktieren Sie bitte: ", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "in case of technical issues please contact: ", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), ); From 875fc5c63275b7edad37cf7197cc8cacb0f33cf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Fri, 22 Oct 2021 16:07:41 +0200 Subject: [PATCH 15/22] =?UTF-8?q?Maximale=20laufzeit=20f=C3=BCr=20Auswertu?= =?UTF-8?q?ngen=20erh=C3=B6ht?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/statistik.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/statistik.class.php b/include/statistik.class.php index 7d34a04a0..3075250b5 100644 --- a/include/statistik.class.php +++ b/include/statistik.class.php @@ -510,7 +510,7 @@ class statistik extends basis_db $this->html=''; $this->csv=''; $this->json=array(); - set_time_limit(60); + set_time_limit(120); if($this->sql!='') { From 29ae48bc484dee8dea955d6a0624c8ee48d116b4 Mon Sep 17 00:00:00 2001 From: ma0048 Date: Mon, 25 Oct 2021 09:51:06 +0200 Subject: [PATCH 16/22] udflib fixed fuer den infocenter udf schule uebernehmen job --- application/libraries/UDFLib.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/application/libraries/UDFLib.php b/application/libraries/UDFLib.php index 827bdc989..c5f0d3e98 100644 --- a/application/libraries/UDFLib.php +++ b/application/libraries/UDFLib.php @@ -312,10 +312,10 @@ class UDFLib { $resultElement->{$columnName} = $columnValue; } - } - // And finally remove the UDFs column - unset($resultElement->{self::COLUMN_NAME}); + // And finally remove the UDFs column + unset($resultElement->{self::COLUMN_NAME}); + } } /** From 36731de919a85128cede6ca4b4294daafff78c76 Mon Sep 17 00:00:00 2001 From: Manfred Date: Thu, 28 Oct 2021 12:20:09 +0200 Subject: [PATCH 17/22] =?UTF-8?q?Anpassung=20Breite=20H=C3=B6he=20der=20Te?= =?UTF-8?q?xtareas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vilesci/stammdaten/statistik_details.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vilesci/stammdaten/statistik_details.php b/vilesci/stammdaten/statistik_details.php index 4480de955..1ba840c02 100644 --- a/vilesci/stammdaten/statistik_details.php +++ b/vilesci/stammdaten/statistik_details.php @@ -223,7 +223,7 @@ EOT; SQL - + @@ -234,7 +234,7 @@ EOT; Preferences - + From 92925706846f48755454f68e6b94ba49da781fc7 Mon Sep 17 00:00:00 2001 From: Manfred Date: Thu, 28 Oct 2021 12:26:30 +0200 Subject: [PATCH 18/22] =?UTF-8?q?Log=20f=C3=BCr=20L=C3=B6schen=20von=20LV-?= =?UTF-8?q?Plan=20eintr=C3=A4gen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/lvplanung/timetable-week.xul.php | 1443 +++++++------- include/lehrstunde.class.php | 2285 +++++++++++----------- 2 files changed, 1878 insertions(+), 1850 deletions(-) diff --git a/content/lvplanung/timetable-week.xul.php b/content/lvplanung/timetable-week.xul.php index 18eaf6076..7e3a144dd 100644 --- a/content/lvplanung/timetable-week.xul.php +++ b/content/lvplanung/timetable-week.xul.php @@ -1,708 +1,735 @@ -, - * Andreas Oesterreicher and - * Rudolf Hangl . - * Gerald Simane-Sequens . - */ -header("Content-type: application/vnd.mozilla.xul+xml"); - -require_once('../../config/vilesci.config.inc.php'); -require_once('../../include/globals.inc.php'); -require_once('../../include/functions.inc.php'); -require_once('../../include/benutzerberechtigung.class.php'); -require_once('../../include/lehreinheit.class.php'); -require_once('../../include/zeitwunsch.class.php'); -require_once('../../include/wochenplan.class.php'); -require_once('../../include/reservierung.class.php'); -require_once('../../include/log.class.php'); - -echo ''; -echo ''; -$PHP_SELF = $_SERVER['PHP_SELF']; -// Startwerte setzen -$db_stpl_table=null; -$db = new basis_db(); - -echo ''; - -$uid = get_uid(); - -//Berechtigung pruefen -$rechte = new benutzerberechtigung(); -$rechte->getBerechtigungen($uid); - -if(!$rechte->isBerechtigt('lehre/lvplan')) - die('Sie haben keine Berechtigung fuer diese Seite'); - -$error_msg=''; -$kollision_msg=''; - -// Benutzerdefinierte Variablen laden -loadVariables($uid); - -if (!isset($ignore_kollision)) - $ignore_kollision=(boolean)false; -elseif ($ignore_kollision=='false') - $ignore_kollision=(boolean)false; -else - $ignore_kollision=(boolean)true; - -if (!isset($alle_unr_mitladen)) - $alle_unr_mitladen=(boolean)false; -elseif ($alle_unr_mitladen=='false') - $alle_unr_mitladen=(boolean)false; -else - $alle_unr_mitladen=(boolean)true; - -// Bezeichnungen fuer Tabellen und Views -$lva_stpl_view=VIEW_BEGIN.'lva_'.$db_stpl_table; - -// Variablen uebernehmen -if (isset($_GET['aktion'])) - $aktion=$_GET['aktion']; -else - $aktion=null; - -if (isset($_GET['semesterplan'])) - $semesterplan=$_GET['semesterplan']; -else - $semesterplan=false; -if (isset($_GET['new_stunde'])) - $new_stunde=$_GET['new_stunde']; -if (isset($_GET['new_datum'])) - $new_datum=$_GET['new_datum']; -if (isset($_GET['old_ort'])) - $old_ort=$_GET['old_ort']; -if (isset($_GET['new_ort'])) - $new_ort=$_GET['new_ort']; -if (isset($_GET['kollisionsanzahl'])) - $kollisionsanzahl=$_GET['kollisionsanzahl']; -else - $kollisionsanzahl=0; -if (isset($_GET['ort'])) - $ort=$_GET['ort']; -else - $ort=null; -if (isset($_GET['datum'])) - $datum=$_GET['datum']; -if (isset($_GET['type'])) - $type=$_GET['type']; -if (isset($_GET['stg_kz'])) - $stg_kz=$_GET['stg_kz']; -else - $stg_kz=null; -if (isset($_GET['sem'])) - $sem=$_GET['sem']; -else - $sem=null; -if (isset($_GET['ver'])) - $ver=$_GET['ver']; -else - $ver=null; -if (isset($_GET['grp'])) - $grp=$_GET['grp']; -else - $grp=null; -if (isset($_GET['pers_uid'])) - $pers_uid=$_GET['pers_uid']; -if (isset($_GET['gruppe'])) - $gruppe=$_GET['gruppe']; -else - $gruppe=null; -if (isset($_GET['semester_aktuell'])) - $semester_aktuell=$_GET['semester_aktuell']; - -if (!isset($semester_aktuell) && $semesterplan) - $error_msg.='Studien-Semester ist nicht gesetzt!'; - -if(isset($_GET['fachbereich_kurzbz'])) - $fachbereich_kurzbz = $_GET['fachbereich_kurzbz']; -else - $fachbereich_kurzbz=null; - -if (isset($_GET['new_unr'])) - $new_unr=$_GET['new_unr']; -else - $new_unr=null; - -if (isset($_GET['new_blockung'])) - $new_blockung=$_GET['new_blockung']; -else - $new_blockung=null; -?> - - - - > - - - +, + * Andreas Oesterreicher and + * Rudolf Hangl . + * Gerald Simane-Sequens . + */ +header("Content-type: application/vnd.mozilla.xul+xml"); + +require_once('../../config/vilesci.config.inc.php'); +require_once('../../include/globals.inc.php'); +require_once('../../include/functions.inc.php'); +require_once('../../include/benutzerberechtigung.class.php'); +require_once('../../include/lehreinheit.class.php'); +require_once('../../include/zeitwunsch.class.php'); +require_once('../../include/wochenplan.class.php'); +require_once('../../include/reservierung.class.php'); +require_once('../../include/log.class.php'); + +echo ''; +echo ''; +$PHP_SELF = $_SERVER['PHP_SELF']; +// Startwerte setzen +$db_stpl_table=null; +$db = new basis_db(); + +echo ''; + +$uid = get_uid(); + +//Berechtigung pruefen +$rechte = new benutzerberechtigung(); +$rechte->getBerechtigungen($uid); + +if(!$rechte->isBerechtigt('lehre/lvplan')) + die('Sie haben keine Berechtigung fuer diese Seite'); + +$error_msg=''; +$kollision_msg=''; + +// Benutzerdefinierte Variablen laden +loadVariables($uid); + +if (!isset($ignore_kollision)) + $ignore_kollision=(boolean)false; +elseif ($ignore_kollision=='false') + $ignore_kollision=(boolean)false; +else + $ignore_kollision=(boolean)true; + +if (!isset($alle_unr_mitladen)) + $alle_unr_mitladen=(boolean)false; +elseif ($alle_unr_mitladen=='false') + $alle_unr_mitladen=(boolean)false; +else + $alle_unr_mitladen=(boolean)true; + +// Bezeichnungen fuer Tabellen und Views +$lva_stpl_view=VIEW_BEGIN.'lva_'.$db_stpl_table; + +// Variablen uebernehmen +if (isset($_GET['aktion'])) + $aktion=$_GET['aktion']; +else + $aktion=null; + +if (isset($_GET['semesterplan'])) + $semesterplan=$_GET['semesterplan']; +else + $semesterplan=false; +if (isset($_GET['new_stunde'])) + $new_stunde=$_GET['new_stunde']; +if (isset($_GET['new_datum'])) + $new_datum=$_GET['new_datum']; +if (isset($_GET['old_ort'])) + $old_ort=$_GET['old_ort']; +if (isset($_GET['new_ort'])) + $new_ort=$_GET['new_ort']; +if (isset($_GET['kollisionsanzahl'])) + $kollisionsanzahl=$_GET['kollisionsanzahl']; +else + $kollisionsanzahl=0; +if (isset($_GET['ort'])) + $ort=$_GET['ort']; +else + $ort=null; +if (isset($_GET['datum'])) + $datum=$_GET['datum']; +if (isset($_GET['type'])) + $type=$_GET['type']; +if (isset($_GET['stg_kz'])) + $stg_kz=$_GET['stg_kz']; +else + $stg_kz=null; +if (isset($_GET['sem'])) + $sem=$_GET['sem']; +else + $sem=null; +if (isset($_GET['ver'])) + $ver=$_GET['ver']; +else + $ver=null; +if (isset($_GET['grp'])) + $grp=$_GET['grp']; +else + $grp=null; +if (isset($_GET['pers_uid'])) + $pers_uid=$_GET['pers_uid']; +if (isset($_GET['gruppe'])) + $gruppe=$_GET['gruppe']; +else + $gruppe=null; +if (isset($_GET['semester_aktuell'])) + $semester_aktuell=$_GET['semester_aktuell']; + +if (!isset($semester_aktuell) && $semesterplan) + $error_msg.='Studien-Semester ist nicht gesetzt!'; + +if(isset($_GET['fachbereich_kurzbz'])) + $fachbereich_kurzbz = $_GET['fachbereich_kurzbz']; +else + $fachbereich_kurzbz=null; + +if (isset($_GET['new_unr'])) + $new_unr=$_GET['new_unr']; +else + $new_unr=null; + +if (isset($_GET['new_blockung'])) + $new_blockung=$_GET['new_blockung']; +else + $new_blockung=null; +?> + + + + > + + + diff --git a/include/lehrstunde.class.php b/include/lehrstunde.class.php index 87e6ca569..71dbf3319 100644 --- a/include/lehrstunde.class.php +++ b/include/lehrstunde.class.php @@ -1,1142 +1,1143 @@ -new=TRUE; - } - - /** - * @brief Einen Datensatz aus optional angegebener Stundenplan-Tabelle laden - * @param stundenplan_id ID in der Datenbank - * @param stpl_table Name der Tabelle in der DB - * @return Boolean, Fehlermeldung kommt in das Attribut errormsg - */ - public function load($stundenplan_id,$stpl_table='stundenplandev') - { - // Bezeichnung der Stundenplan-Tabelle und des Keys - $stpl_id=$stpl_table.TABLE_ID; - $stpl_view='lehre.'.VIEW_BEGIN.$stpl_table; - $stpl_table='lehre.'.TABLE_BEGIN.$stpl_table; - - $sql_query="SELECT * FROM $stpl_view WHERE $stpl_id=$stundenplan_id;"; - - //Datenbankabfrage - if (!$this->db_query($sql_query)) - { - $this->errormsg=$sql_query.$this->db_last_error(); - return false; - } - - $this->anzahl = $this->db_num_rows(); - - //Daten uebernehmen - if ($this->anzahl!=1) - { - $this->errormsg='Keinen Datensatz gefunden'; - return false; - } - else - { - $row=$this->db_fetch_object(); - $this->stundenplan_id=$row->{$stpl_id}; - $this->unr=$row->unr; - $this->lektor_uid=$row->uid; - $this->lektor_kurzbz=$row->lektor; - $this->datum=$row->datum; - $this->stunde=$row->stunde; - $this->ort_kurzbz=$row->ort_kurzbz; - $this->lehrfach=$row->lehrfach; - $this->lehrfach_bez=$row->lehrfach_bez; - $this->lehrfach_id=$row->lehrfach_id; - $this->lehrform=$row->lehrform; - $this->studiengang_kz=$row->studiengang_kz; - $this->studiengang=$row->stg_kurzbz; - $this->sem=$row->semester; - $this->ver=$row->verband; - $this->grp=$row->gruppe; - $this->gruppe_kurzbz=$row->gruppe_kurzbz; - $this->titel=$row->titel; - $this->anmerkung=$row->anmerkung; - $this->updateamum=$row->updateamum; - $this->updatevon=$row->updatevon; - $this->new=false; - } - return true; - } - - /** - * Datensatz in DB speichern - * - */ - public function save($uid, $stpl_table='stundenplandev') - { - // Parameter Checken - // Bezeichnung der Stundenplan-Tabelle und des Keys - $stpl_id=$stpl_table.TABLE_ID; - $stpl_table='lehre.'.TABLE_BEGIN.$stpl_table; - if ($this->new) - { - // insert - } - else - { - // update - $sql_query='UPDATE '.$stpl_table; - $sql_query.=" SET datum=".$this->db_add_param($this->datum).", stunde=".$this->db_add_param($this->stunde); - $sql_query.=", ort_kurzbz=".$this->db_add_param($this->ort_kurzbz).", mitarbeiter_uid=".$this->db_add_param($this->lektor_uid); - if($this->unr!='') - $sql_query.=", unr=".$this->db_add_param($this->unr); - $sql_query.=", updateamum=now(), updatevon=".$this->db_add_param($uid); - $sql_query.=" WHERE $stpl_id=".$this->db_add_param($this->stundenplan_id); - - $this->lastqry = $sql_query; - //Datenbankabfrage - if (!$this->db_query($sql_query)) - { - $this->errormsg=$sql_query.$this->db_last_error(); - return false; - } - } - - return true; - } - - /** - * Erstellt einen Undo Befehl fuer die Speichern funktion - * - * @param $stpl_table - * @return string undo - */ - public function getUndo($stpl_table='stundenplandev') - { - $stpl_id=$stpl_table.TABLE_ID; - $stpl_table='lehre.'.TABLE_BEGIN.$stpl_table; - - $sql_query='UPDATE '.$stpl_table; - $sql_query.=" SET datum=".$this->db_add_param($this->datum).", stunde=".$this->db_add_param($this->stunde); - $sql_query.=", ort_kurzbz=".$this->db_add_param($this->ort_kurzbz).", mitarbeiter_uid=".$this->db_add_param($this->lektor_uid); - $sql_query.=", updateamum=".$this->db_add_param($this->updateamum).", updatevon=".$this->db_add_param($this->updatevon); - $sql_query.=" WHERE $stpl_id=".$this->db_add_param($this->stundenplan_id).";"; - - return $sql_query; - } - - /** - * Datensatz aus DB entfernen - * @param id ID des Datensatzes in der Tabelle - * @param stpl_table Name der Tabelle - * - */ - public function delete($id, $stpl_table='stundenplandev') - { - // Parameter Checken - // Bezeichnung der Stundenplan-Tabelle und des Keys - $stpl_id=$stpl_table.TABLE_ID; - $stpl_table='lehre.'.TABLE_BEGIN.$stpl_table; - // Delete SQL vorbereiten - $sql_query='DELETE FROM '.$stpl_table; - $sql_query.=" WHERE $stpl_id=".$this->db_add_param($id); - - //Datenbankrequest - if (!$this->db_query($sql_query)) - { - $this->errormsg=$sql_query.$this->db_last_error(); - return false; - } - else - return true; - } - - /** - * Laedt Lehrstunden - * - * @param type (student, lektor, lehrverband, gruppe, ort, ....) - * @param datum_von (inklusive) Startdatum der Abfrage - * @param datum_bis (exklusive) Enddatum der Abfrage - * @param uid (des Lektors oder Studenten) kann auch NULL sein - * @param ort_kurzbz (Kurzbezeichnung des Orts) kann auch NULL sein - * @param studiengang_kz - * @param sem - * @param ver - * @param grp - * @param gruppe_kurzbz - * - */ - public function load_lehrstunden($type, $datum_von, $datum_bis, $uid, $ort_kurzbz=NULL, $studiengang_kz=NULL, $sem=NULL, $ver=NULL, $grp=NULL, $gruppe_kurzbz=NULL, $stpl_view='stundenplan', $idList=null, $fachbereich_kurzbz=null, $lva=NULL, $alle_unr_mitladen=false) - { - $num_rows_einheit=0; - // Parameter Checken - // Bezeichnung der Stundenplan-Tabelle und des Keys - $stpl_id=$stpl_view.TABLE_ID; - $stpl_view_ohneschema=VIEW_BEGIN.$stpl_view; - $stpl_view='lehre.'.VIEW_BEGIN.$stpl_view; - - - // Datum im Format YYYY-MM-TT ? - if (!preg_match("/([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})/",$datum_von) ) - { - $this->errormsg='Fehler: Startdatum hat falsches Format!'; - return -1; - } - if ($datum_bis!=null) - { - if (!preg_match("/([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})/",$datum_bis) ) - { - $this->errormsg='Fehler: Enddatum hat falsches Format!'; - return -1; - } - } - else - $datum_bis=$datum_von; - - // Person - if (($type=='student' || $type=='lektor') && $uid==NULL) - { - $this->errormsg='Fehler: uid der Person ist nicht gesetzt'; - return -1; - } - // Ort - if ($type=='ort' && $ort_kurzbz==NULL) - { - $this->errormsg='Fehler: Kurzbezeichnung des Orts ist nicht gesetzt'; - return -1; - } - // Gruppe - if ($type=='gruppe' && $gruppe_kurzbz==NULL) - { - $this->errormsg='Fehler: Kurzbezeichnung der Gruppe ist nicht gesetzt'; - return -1; - } - // Verband - if ($type=='verband' && ($studiengang_kz==NULL || !is_numeric($studiengang_kz))) - { - $this->errormsg='Fehler: Studiengang ist nicht gesetzt'; - return -1; - } - // LVA - if ($type=='lva' && $lva==NULL) - { - $this->errormsg='Fehler: LVA-ID ist nicht gesetzt'; - return -1; - } - if ($type=='lva' && !is_numeric($lva)) - { - $this->errormsg='Fehler: LVA-ID ist ungueltig'; - return -1; - } - // Type - if ($type==null) - { - $this->errormsg='Fehler: Type in "lehrstunde->load_lehrstunde" ist nicht gesetzt!'; - return -1; - } - - // Zusaetzliche Daten ermitteln - // Personendaten - if ($type=='student') - { - if(defined('LVPLAN_LOAD_UEBER_SEMESTERHAELFTE') && LVPLAN_LOAD_UEBER_SEMESTERHAELFTE === true) - $lvplan_load_ueber_semesterhaelfte = true; - else - $lvplan_load_ueber_semesterhaelfte = false; - // Bei Studierenden wird das passende Studiensemester ermittelt und das dazupassende - // naechstliegende Dadurch wird sichergestellt, dass Einheiten aus den Vorsemestern - // zB fuer Nachpruefungen oder Einheiten aus den Folgesemestern die vorgezogen werden - // auch im Plan sichtbar sind. - if (is_null($this->ss)) - { - $studiensemester_obj = new studiensemester(); - $this->ss = $studiensemester_obj->getSemesterFromDatum($datum_von,true); - - if($lvplan_load_ueber_semesterhaelfte) - { - $this->ssnext = $studiensemester_obj->getNextFrom($this->ss); - $this->ssprev = $studiensemester_obj->getPreviousFrom($this->ss); - } - else - $this->ssnext = $studiensemester_obj->getNearestTo($this->ss,$datum_von); - } - if(!isset($this->ssnext)) - $this->ssnext = $this->ss; - - if($lvplan_load_ueber_semesterhaelfte) - { - $sql_query="SELECT studiengang_kz, semester, verband, gruppe - 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 - { - // Lehrverbandszuordnungen der betreffenden Studiensemester laden - $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).")"; - } - - $verbaende=array(); - if($this->db_query($sql_query)) - { - $num_rows=$this->db_num_rows(); - if ($num_rows>0) - { - while($row = $this->db_fetch_object()) - { - $verbaende[] = array('studiengang_kz'=>$row->studiengang_kz, - 'sem'=>$row->semester, - 'ver'=>$row->verband, - 'grp'=>$row->gruppe); - } - } - } - else - { - $this->errormsg = 'Fehler beim Laden der Verbaende'; - return -2; - } - // Spezialgruppen ermitteln zu denen die Person zugeteilt ist - if($lvplan_load_ueber_semesterhaelfte) - { - $sql_query="SELECT - gruppe_kurzbz - FROM - public.tbl_benutzergruppe - WHERE - uid=".$this->db_add_param($uid)." - AND (studiensemester_kurzbz=".$this->db_add_param($this->ss)." - OR studiensemester_kurzbz=".$this->db_add_param($this->ssnext)." - OR studiensemester_kurzbz=".$this->db_add_param($this->ssprev)." - OR studiensemester_kurzbz IS NULL)"; - } - else - { - $sql_query="SELECT - gruppe_kurzbz - FROM - public.tbl_benutzergruppe - WHERE - uid=".$this->db_add_param($uid)." - AND (studiensemester_kurzbz=".$this->db_add_param($this->ss)." - OR studiensemester_kurzbz=".$this->db_add_param($this->ssnext)." - OR studiensemester_kurzbz IS NULL)"; - } - - if (!$result_einheit=$this->db_query($sql_query)) - { - $this->errormsg= 'Fehler beim Laden der Gruppen'; - return false; - } - else - $num_rows_einheit=$this->db_num_rows($result_einheit); - } - // Bei Lektoren auch Spezialgruppen wegen Reservierungen abfragen - if ($type == 'lektor') - { - if (is_null($this->ss)) - { - $studiensemester_obj = new studiensemester(); - $this->ss = $studiensemester_obj->getSemesterFromDatum($datum_von,true); - $this->ssnext = $studiensemester_obj->getNearestTo($this->ss,$datum_von); - } - if(!isset($this->ssnext)) - $this->ssnext = $this->ss; - // Spezialgruppen ermitteln zu denen die Person zugeteilt ist - $sql_query="SELECT - gruppe_kurzbz - FROM - public.tbl_benutzergruppe - WHERE - uid=".$this->db_add_param($uid)." - AND (studiensemester_kurzbz=".$this->db_add_param($this->ss)." - OR studiensemester_kurzbz=".$this->db_add_param($this->ssnext)." - OR studiensemester_kurzbz IS NULL)"; - - if (!$result_einheit=$this->db_query($sql_query)) - { - $this->errormsg='Fehler beim Laden der Gruppen'; - return false; - } - else - $num_rows_einheit=$this->db_num_rows($result_einheit); - } - - // Stundenplandaten ermitteln - // Abfrage generieren - - if ($type!='idList') - { - if($alle_unr_mitladen) - $sql_query_stdplan='SELECT '.$stpl_id.', datum, stunde, unr FROM '.$stpl_view.' stplvw'; - else - $sql_query_stdplan='SELECT * FROM '.$stpl_view.' stplvw'; - $sql_query_lva=""; - $sql_query=" WHERE datum>=".$this->db_add_param($datum_von)." AND datum<".$this->db_add_param($datum_bis); - if ($type == 'lva') - $sql_query_lva=" AND lehrveranstaltung_id=".$this->db_add_param($lva); - elseif ($type=='lektor') - { - $sql_query.=" AND ("; - $sql_query.=" uid=".$this->db_add_param($uid); - //Reservierungen mit Spezialgruppen laden - for ($i=0;$i<$num_rows_einheit;$i++) - { - $row=$this->db_fetch_object($result_einheit,$i); - $sql_query.=" OR gruppe_kurzbz=".$this->db_add_param($row->gruppe_kurzbz); - } - $sql_query.=')'; - } - elseif ($type=='ort' && $ort_kurzbz != 'all') - $sql_query.=" AND ort_kurzbz=".$this->db_add_param($ort_kurzbz); - elseif ($type=='ort' && $ort_kurzbz == 'all') - $sql_query.=" AND ort_kurzbz IS NOT NULL AND ort_kurzbz !='Dummy'"; - elseif ($type=='gruppe') - $sql_query.=" AND gruppe_kurzbz=".$this->db_add_param($gruppe_kurzbz); - elseif($type=='fachbereich') - $sql_query.=" AND fachbereich_kurzbz=".$this->db_add_param($fachbereich_kurzbz); - elseif($type=='student') - { - $sql_query.=" AND ("; - if(is_array($verbaende) && count($verbaende)>0) - { - foreach($verbaende as $row_verbaende) - { - $studiengang_kz = $row_verbaende['studiengang_kz']; - $ver = $row_verbaende['ver']; - $sem = $row_verbaende['sem']; - $grp = $row_verbaende['grp']; - - $sql_query.=" (studiengang_kz=".$this->db_add_param($studiengang_kz, FHC_INTEGER); - if ($sem!=null && $sem>=0 && $sem!='') - $sql_query.=" AND (semester=".$this->db_add_param($sem)." OR semester IS NULL)"; - if ($ver!='0' && $ver!=null && $ver!='') - $sql_query.=" AND (verband=".$this->db_add_param($ver)." OR verband IS NULL OR verband='0' OR verband='')"; - if ($grp!='0' && $grp!=null && $grp!='') - $sql_query.=" AND (gruppe=".$this->db_add_param($grp)." OR gruppe IS NULL OR gruppe='0' OR gruppe='')"; - $sql_query.=" AND gruppe_kurzbz is null"; - $sql_query.=") OR "; - } - } - - $sql_query.=" 1!=1"; - for ($i=0;$i<$num_rows_einheit;$i++) - { - $row=$this->db_fetch_object($result_einheit,$i); - $sql_query.=" OR gruppe_kurzbz=".$this->db_add_param($row->gruppe_kurzbz); - } - $sql_query.=')'; - } - else - { - $sql_query.=" AND ( (studiengang_kz=".$this->db_add_param($studiengang_kz, FHC_INTEGER); - if ($sem!=null && $sem>=0 && $sem!='') - $sql_query.=" AND (semester=".$this->db_add_param($sem)." OR semester IS NULL)"; - if ($ver!='0' && $ver!=null && $ver!='') - $sql_query.=" AND (verband=".$this->db_add_param($ver)." OR verband IS NULL OR verband='0' OR verband='')"; - if ($grp!='0' && $grp!=null && $grp!='') - $sql_query.=" AND (gruppe=".$this->db_add_param($grp)." OR gruppe IS NULL OR gruppe='0' OR gruppe='')"; - - // Direkte Gruppen werden ausgenommen da sonst Stunden von Verband A in der Ansicht für Verband B - // mit angezeigt werden weil die direkte Gruppe geladen wird. - $sql_query.=' AND - ( - gruppe_kurzbz is null - OR - EXISTS( - SELECT 1 FROM public.tbl_gruppe - WHERE - gruppe_kurzbz = stplvw.gruppe_kurzbz - AND direktinskription=false - ) - )'; - - $sql_query.=' )'; - - for ($i=0;$i<$num_rows_einheit;$i++) - { - $row=$this->db_fetch_object($result_einheit,$i); - $sql_query.=" OR gruppe_kurzbz=".$this->db_add_param($row->gruppe_kurzbz); - } - $sql_query.=')'; - } - $sql_query_orderby=' ORDER BY datum, stunde, studiengang_kz, semester, verband, gruppe, gruppe_kurzbz, uid'; - $sql_query_stdplan.=$sql_query . $sql_query_lva . $sql_query_orderby; - - // Wenn aktiviert, werden alle Stunden mit der gleichen UNR geladen die zur selben Zeit stattfinden - if($alle_unr_mitladen) - { - $sql_query_stdplan=" - WITH lvplan(id, datum, stunde, unr) as - ( - $sql_query_stdplan - ) - SELECT - distinct $stpl_view_ohneschema.* - FROM - ".$stpl_view.", lvplan - WHERE - $stpl_view_ohneschema.datum=lvplan.datum - AND $stpl_view_ohneschema.stunde=lvplan.stunde - AND $stpl_view_ohneschema.unr=lvplan.unr - ORDER BY datum, stunde, studiengang_kz, semester, verband, gruppe, gruppe_kurzbz, uid - "; - } - } - else - { - $sql_query_stdplan='SELECT * FROM '.$stpl_view; - $sql_query=''; - foreach ($idList as $id) - $sql_query.=" OR ".$stpl_id."=".$this->db_add_param($id); - $sql_query=mb_substr($sql_query,3); - $sql_query_stdplan.=' WHERE'.$sql_query; - } - - //Datenbankabfrage - if (!$this->db_query($sql_query_stdplan)) - { - $this->errormsg = 'Fehler beim Laden der Stundenplandaten'; - return -2; - } - $stpl_tbl = $this->db_result; - $num_rows = $this->db_num_rows($stpl_tbl); - $this->anzahl=$num_rows; - //Daten uebernehmen - for ($i=0;$i<$num_rows;$i++) - { - $row=$this->db_fetch_object($stpl_tbl, $i); - - $stunde=new lehrstunde(); - $stunde->stundenplan_id=$row->{$stpl_id}; - $stunde->lehreinheit_id=$row->lehreinheit_id; - $stunde->unr=$row->unr; - $stunde->lektor_uid=$row->uid; - $stunde->lektor_kurzbz=$row->lektor; - $stunde->datum=$row->datum; - $stunde->stunde=$row->stunde; - $stunde->ort_kurzbz=$row->ort_kurzbz; - $stunde->lehrfach=$row->lehrfach; - $stunde->lehrfach_bez=$row->lehrfach_bez; - $stunde->lehrfach_id=$row->lehrfach_id; - $stunde->lehrform=$row->lehrform; - if ($row->farbe!=' ' && $row->farbe!=null) - $stunde->farbe=$row->farbe; - else - $stunde->farbe='FFFFFF'; - $stunde->studiengang_kz=$row->studiengang_kz; - $stunde->studiengang=mb_strtoupper($row->stg_typ.$row->stg_kurzbz); - $stunde->sem=$row->semester; - $stunde->ver=$row->verband; - $stunde->grp=$row->gruppe; - $stunde->gruppe_kurzbz=$row->gruppe_kurzbz; - $stunde->titel=$row->titel; - $stunde->anmerkung=$row->anmerkung; - $stunde->anmerkung_lehreinheit=$row->anmerkung_lehreinheit; - $stunde->updateamum=$row->updateamum; - $stunde->updatevon=$row->updatevon; - $stunde->reservierung=false; - $this->lehrstunden[$i]=$stunde; - - } - - // Reservierungsdaten ermitteln - if ($type!='idList' && $type!='fachbereich' && $type!='lva') - { - // Datenbankabfrage generieren - $sql_query_reservierung='SELECT * FROM campus.vw_reservierung stplvw'; - $sql_query_reservierung.=$sql_query . $sql_query_orderby; - - //Datenbankabfrage - if (!$this->db_query($sql_query_reservierung)) - { - $this->errormsg = 'Fehler beim Laden der Reservierungen'; - return -2; - } - $stpl_tbl = $this->db_result; - $num_rows=$this->db_num_rows($stpl_tbl); - $this->anzahl+=$num_rows; - - //Daten uebernehmen - for ($i=0;$i<$num_rows;$i++) - { - $row = $this->db_fetch_object($stpl_tbl, $i); - - $stunde=new lehrstunde(); - $stunde->reservierung=true; - $stunde->stundenplan_id=$row->reservierung_id; - $stunde->unr=0; - $stunde->lektor_uid=$row->uid; - $stunde->lektor_kurzbz=$row->uid; - $stunde->datum=$row->datum; - $stunde->stunde=$row->stunde; - $stunde->ort_kurzbz=$row->ort_kurzbz; - //$stunde->lehrfach_id=$row->lehrfach_id; - $stunde->lehrfach=$row->titel; - $stunde->lehrfach_bez=$row->beschreibung; - $stunde->studiengang_kz=$row->studiengang_kz; - $stunde->studiengang=$row->stg_kurzbz; - $stunde->sem=$row->semester; - $stunde->ver=$row->verband; - $stunde->grp=$row->gruppe; - $stunde->gruppe_kurzbz=$row->gruppe_kurzbz; - $stunde->titel=$row->titel; - $stunde->anmerkung=$row->beschreibung; - $stunde->anmerkung_lehreinheit=$row->beschreibung; - $stunde->farbe=''; - $this->lehrstunden[]=$stunde; - } - } - return $this->anzahl; - } - - /** - * @param lehreinheit_id - * @param uid (mitarbeiter) - * - */ - public function load_lehrstunden_le($lehreinheit_id, $uid=null, $stpl_table='stundenplandev') - { - // Bezeichnung der Stundenplan-Tabelle und des Keys - $stpl_id=$stpl_table.TABLE_ID; - $stpl_table='lehre.'.TABLE_BEGIN.$stpl_table; - - // Stundenplandaten ermitteln - // Abfrage generieren - $sql="SELECT * FROM ".$stpl_table." WHERE lehreinheit_id=".$this->db_add_param($lehreinheit_id, FHC_INTEGER); - if ($uid!=null && !is_null($uid)) - $sql.=" AND mitarbeiter_uid=".$this->db_add_param($uid); - - //Datenbankabfrage - if (!$this->db_query($sql)) - { - $this->errormsg=$this->db_last_error(); - return -1; - } - $num_rows=$this->db_num_rows(); - $this->anzahl=$num_rows; - //Daten uebernehmen - for ($i=0;$i<$num_rows;$i++) - { - $row=$this->db_fetch_object(null, $i); - - $stunde=new lehrstunde(); - $stunde->stundenplan_id=$row->{$stpl_id}; - $stunde->lehreinheit_id=$row->lehreinheit_id; - $stunde->unr=$row->unr; - $stunde->studiengang_kz=$row->studiengang_kz; - $stunde->sem=$row->semester; - $stunde->ver=$row->verband; - $stunde->grp=$row->gruppe; - $stunde->gruppe_kurzbz=$row->gruppe_kurzbz; - $stunde->lektor_uid=$row->mitarbeiter_uid; - $stunde->ort_kurzbz=$row->ort_kurzbz; - $stunde->datum=$row->datum; - $stunde->stunde=$row->stunde; - $stunde->titel=$row->titel; - $stunde->anmerkung=$row->anmerkung; - $stunde->fix=$row->fix; - $stunde->insertamum=$row->insertamum; - $stunde->insertvon=$row->insertvon; - $stunde->updateamum=$row->updateamum; - $stunde->updatevon=$row->updatevon; - $stunde->reservierung=false; - $this->lehrstunden[$i]=$stunde; - } - return $this->anzahl; - } - - - /** - * Prueft die geladene Lehrveranstaltung auf Kollisionen im Stundenplan. - * Bei einer Kollision steht der Grund der Kollision in '$this->errormsg'. - * @param string db_stpl_table Tabllenname des Stundenplans im DBMS - * @return boolean true=kollision, false=keine kollision - */ - public function kollision($stpl_table='stundenplandev') - { - $variablen_obj = new variable(); - $variablen_obj->loadVariables(get_uid()); - - $kollision_student = $variablen_obj->variable->kollision_student; - $ignore_reservierung = $variablen_obj->variable->ignore_reservierung; - $ignore_zeitsperre = $variablen_obj->variable->ignore_zeitsperre; - - //Kollisionspruefung auf Studentenebene - if($kollision_student=='true' && $this->kollision_student($stpl_table)) - return true; - - // Parameter Checken - // Bezeichnung der Stundenplan-Tabelle und des Keys - $stpl_id=$stpl_table.TABLE_ID; - $stpl_table='lehre.'.VIEW_BEGIN.$stpl_table; - - // Datenbank abfragen - $sql_query="SELECT $stpl_id AS id, lektor, stg_kurzbz, ort_kurzbz, semester, verband, gruppe, gruppe_kurzbz, datum, stunde FROM $stpl_table - WHERE datum=".$this->db_add_param($this->datum)." AND stunde=".$this->db_add_param($this->stunde); - - // Direkte Lehreinheitsgruppen kollidieren nicht - $sql_query.=" AND NOT EXISTS(SELECT 1 FROM public.tbl_gruppe WHERE gruppe_kurzbz = ".$stpl_table.".gruppe_kurzbz AND direktinskription=true)"; - - $sql_query.= " AND (ort_kurzbz=".$this->db_add_param($this->ort_kurzbz)." "; - - if (!in_array($this->lektor_uid,unserialize(KOLLISIONSFREIE_USER))) - $sql_query.=" OR (uid=".$this->db_add_param($this->lektor_uid)." AND uid not in (".$this->db_implode4SQL(unserialize(KOLLISIONSFREIE_USER))."))"; - - //Wenn eine Kollisionspruefung auf Studentenebene durchgefuehrt wird, werden die LVB nicht gecheckt - if($kollision_student=='false') - { - // Direkte Gruppen kollidieren nicht - $direktgruppe = false; - if($this->gruppe_kurzbz!=null && $this->gruppe_kurzbz!='' && $this->gruppe_kurzbz!=' ') - { - $grp_obj = new gruppe(); - $grp_obj->load($this->gruppe_kurzbz); - if($grp_obj->direktinskription) - { - $direktgruppe = true; - } - } - if(!$direktgruppe) - { - $sql_query.=" OR (studiengang_kz=".$this->db_add_param($this->studiengang_kz)." AND semester=".$this->db_add_param($this->sem); - if($this->gruppe_kurzbz!=null && $this->gruppe_kurzbz!='' && $this->gruppe_kurzbz!=' ') - { - $sql_query.=" OR (gruppe_kurzbz=".$this->db_add_param($this->gruppe_kurzbz).")"; - } - else - { - if ($this->ver!=null && $this->ver!='' && $this->ver!=' ') - $sql_query.=" AND (verband=".$this->db_add_param($this->ver)." OR verband IS NULL OR verband='' OR verband=' ')"; - if ($this->grp!=null && $this->grp!='' && $this->grp!=' ') - $sql_query.=" AND (gruppe=".$this->db_add_param($this->grp)." OR gruppe IS NULL OR gruppe='' OR gruppe=' ')"; - } - - $sql_query.=")"; - } - } - $sql_query.=") AND unr!=".$this->db_add_param($this->unr); - - if (!$erg_stpl = $this->db_query($sql_query)) - { - $this->errormsg=$sql_query.$this->db_last_error(); - return true; - } - - $anz=$this->db_num_rows($erg_stpl); - if ($anz==0) - { - // Zeitsperren pruefen - if($ignore_zeitsperre=='false' && !in_array($this->lektor_uid,unserialize(KOLLISIONSFREIE_USER)) && $this->kollision_zeitsperre()) - return true; - - // Reservierungen pruefen - if ($ignore_reservierung=='false' && $this->kollision_reservierung()) - return true; - - if($this->kollision_ressource()) - return true; - return false; - } - else - { - $row = $this->db_fetch_object($erg_stpl); - $this->errormsg="Kollision ($stpl_table): $row->id|$row->lektor|$row->ort_kurzbz|$row->stg_kurzbz-$row->semester$row->verband$row->gruppe$row->gruppe_kurzbz - $row->datum/$row->stunde\n"; //\n".$sql_query - return true; - } - } - - /** - * Prueft ob eine Kollision mit den zugeteilten Ressourcen vorhanden ist - * - * @return boolean true=kollision, false=keine kollision - */ - public function kollision_ressource() - { - $qry = "SELECT - tbl_betriebsmittel.beschreibung, tbl_stundenplandev.ort_kurzbz - FROM - lehre.tbl_stundenplan_betriebsmittel - JOIN lehre.tbl_stundenplandev USING(stundenplandev_id) - JOIN wawi.tbl_betriebsmittel USING(betriebsmittel_id) - WHERE - tbl_stundenplandev.datum=".$this->db_add_param($this->datum)." - AND tbl_stundenplandev.stunde=".$this->db_add_param($this->stunde)." - AND betriebsmittel_id IN(SELECT betriebsmittel_id FROM lehre.tbl_stundenplan_betriebsmittel WHERE stundenplandev_id=".$this->db_add_param($this->stundenplan_id).") - AND tbl_stundenplandev.stundenplandev_id<>".$this->db_add_param($this->stundenplan_id); - - if($result = $this->db_query($qry)) - { - if($row = $this->db_fetch_object($result)) - { - $this->errormsg='Kollision (Ressource)'.$row->beschreibung.'|'.$row->ort_kurzbz; - return true; - } - return false; - } - return false; - } - - /** - * Prueft ob eine Kollision mit den Zeitsperren vorhanden ist - * - * @return boolean true=kollision, false=keine kollision - */ - public function kollision_zeitsperre() - { - $sql_query="SELECT - zeitsperre_id,zeitsperretyp_kurzbz,mitarbeiter_uid AS lektor,vondatum,vonstunde,bisdatum,bisstunde - FROM campus.tbl_zeitsperre - WHERE mitarbeiter_uid=".$this->db_add_param($this->lektor_uid)." - AND (vondatum<".$this->db_add_param($this->datum)." OR (vondatum=".$this->db_add_param($this->datum)." AND (vonstunde<=".$this->db_add_param($this->stunde)." OR vonstunde IS NULL))) - AND (bisdatum>".$this->db_add_param($this->datum)." OR (bisdatum=".$this->db_add_param($this->datum)." AND (bisstunde>=".$this->db_add_param($this->stunde)." OR bisstunde IS NULL)));"; - - if (!$erg_zs = $this->db_query($sql_query)) - { - $this->errormsg=$sql_query.$this->db_last_error(); - return true; - } - - $anz_zs=$this->db_num_rows($erg_zs); - if ($anz_zs!=0) - { - $row = $this->db_fetch_object($erg_zs); - $this->errormsg="Kollision (Zeitsperre): $row->zeitsperre_id|$row->lektor|$row->zeitsperretyp_kurzbz - $row->vondatum/$row->vonstunde|$row->bisdatum/$row->bisstunde"; - return true; - } - return false; - } - - /** - * Prueft ob eine LV-Plan Kollision mit den Reservierungen besteht - * - * @return boolean true=kollision, false=keine kollision - */ - public function kollision_reservierung() - { - $sql_query="SELECT - reservierung_id AS id, uid AS lektor, stg_kurzbz, ort_kurzbz, - semester, verband, gruppe, gruppe_kurzbz, datum, stunde - FROM lehre.vw_reservierung - WHERE - datum=".$this->db_add_param($this->datum)." AND - stunde=".$this->db_add_param($this->stunde)." AND - (ort_kurzbz=".$this->db_add_param($this->ort_kurzbz)." OR "; - - if (!in_array($this->lektor_uid, unserialize(KOLLISIONSFREIE_USER))) - $sql_query.="(uid=".$this->db_add_param($this->lektor_uid)." AND uid not in(".$this->db_implode4SQL(unserialize(KOLLISIONSFREIE_USER)).")) OR "; - - $sql_query.="(studiengang_kz=".$this->db_add_param($this->studiengang_kz)." AND semester=".$this->db_add_param($this->sem); - if ($this->ver!=null && $this->ver!='' && $this->ver!=' ') - $sql_query.=" AND (verband=".$this->db_add_param($this->ver)." OR verband IS NULL OR verband='' OR verband=' ')"; - if ($this->grp!=null && $this->grp!='' && $this->grp!=' ') - $sql_query.=" AND (gruppe=".$this->db_add_param($this->grp)." OR gruppe IS NULL OR gruppe='' OR gruppe=' ')"; - if ($this->gruppe_kurzbz!=null && $this->gruppe_kurzbz!='' && $this->gruppe_kurzbz!=' ') - $sql_query.=" AND (gruppe_kurzbz=".$this->db_add_param($this->gruppe_kurzbz).")"; - $sql_query.="))"; - - if (!$erg_res = $this->db_query($sql_query)) - { - $this->errormsg=$sql_query.$this->db_last_error(); - return true; - } - $anz_res = $this->db_num_rows($erg_res); - - if ($anz_res!=0) - { - $row = $this->db_fetch_object($erg_res); - $this->errormsg="Kollision (Reservierung): $row->id|$row->lektor|$row->ort_kurzbz|$row->stg_kurzbz-$row->semester$row->verband$row->gruppe$row->gruppe_kurzbz - $row->datum/$row->stunde"; - return true; - } - return false; - } - - /** - * Prueft eine Kollision auf Studentenebene - * Es werden nur die Kollisionen der Studenten abgefragt - * Raum, Lektor, Reservierung, Zeitsperren, etc werden hier nicht geprueft - * - * @param $stpl_table - * @return boolean true=kollision, false=keine kollision - */ - public function kollision_student($stpl_table='stundenplandev') - { - // Parameter Checken - // Bezeichnung der Stundenplan-Tabelle - $stpl_table='lehre.'.VIEW_BEGIN.$stpl_table; - - $sql_query = "SELECT * - FROM ".$stpl_table."_student_unr - WHERE datum=".$this->db_add_param($this->datum)." AND stunde=".$this->db_add_param($this->stunde)." AND student_uid IN( - SELECT uid FROM public.vw_gruppen WHERE - - "; - $sql_query.="(studiengang_kz=".$this->db_add_param($this->studiengang_kz)." AND semester=".$this->db_add_param($this->sem)." - AND studiensemester_kurzbz=( - SELECT tbl_studiensemester.studiensemester_kurzbz - FROM - public.tbl_studiensemester - WHERE - tbl_studiensemester.ende >= ".$this->db_add_param($this->datum)." - AND tbl_studiensemester.start <=".$this->db_add_param($this->datum)." LIMIT 1)"; - if ($this->gruppe_kurzbz!=null && $this->gruppe_kurzbz!='' && $this->gruppe_kurzbz!=' ') - $sql_query.=" AND (gruppe_kurzbz=".$this->db_add_param($this->gruppe_kurzbz).")"; - else - { - if ($this->ver!=null && $this->ver!='' && $this->ver!=' ') - $sql_query.=" AND (verband=".$this->db_add_param($this->ver).")"; - else - $sql_query.=" AND (verband IS NULL OR verband='' OR verband=' ')"; - if ($this->grp!=null && $this->grp!='' && $this->grp!=' ') - $sql_query.=" AND (gruppe=".$this->db_add_param($this->grp).")"; - else - $sql_query.=" AND (gruppe IS NULL OR gruppe='' OR gruppe=' ')"; - } - - - $sql_query.=")) AND unr!=".$this->db_add_param($this->unr); - - if (!$erg_stpl=$this->db_query($sql_query)) - { - $this->errormsg=$sql_query.$this->db_last_error(); - return true; - } - - $anz=$this->db_num_rows($erg_stpl); - - if ($anz>0) - { - $row = $this->db_fetch_object($erg_stpl); - $this->errormsg="Kollision Student ($stpl_table): $row->student_uid $row->datum/$row->stunde "; - return true; - } - else - { - return false; - } - } - - /** - * Gruppiert die einzelnen Lehrstunden zusammen - */ - public function getLehrstundenGruppiert() - { - $result = array(); - - foreach($this->lehrstunden as $row_lehrstunde) - { - $found=false; - //Pruefen ob bereits ein Eintrag vorhanden ist - //zu dem dazugruppiert werden kann - - /* - Kriterien fuer Gruppierung - - gleiches Datum - - gleiche Stunde - - gleiche UNR - */ - foreach($result as $key=>$row_result) - { - if($row_result->unr==$row_lehrstunde->unr - && $row_result->datum==$row_lehrstunde->datum - && $row_result->stunde==$row_lehrstunde->stunde) - { - $found=true; - //gleicher Eintrag gefunden - $grpidx = count($result[$key]->gruppen); - $result[$key]->gruppen[$grpidx]->studiengang_kz=$row_lehrstunde->studiengang_kz; - $result[$key]->gruppen[$grpidx]->sem=$row_lehrstunde->sem; - $result[$key]->gruppen[$grpidx]->ver=$row_lehrstunde->ver; - $result[$key]->gruppen[$grpidx]->grp=$row_lehrstunde->grp; - $result[$key]->gruppen[$grpidx]->gruppe_kurzbz=$row_lehrstunde->gruppe_kurzbz; - if(!in_array($row_lehrstunde->lektor_uid, $result[$key]->lektor_uid)) - $result[$key]->lektor_uid[]=$row_lehrstunde->lektor_uid; - if(!in_array($row_lehrstunde->ort_kurzbz, $result[$key]->ort_kurzbz)) - $result[$key]->ort_kurzbz[]=$row_lehrstunde->ort_kurzbz; - break; - } - } - - if(!$found) - { - // Wenn kein passender Eintrag vorhanden ist, - // wird ein neuer angelegt - $stunde=new lehrstunde(); - $stunde->stundenplan_id=$row_lehrstunde->stundenplan_id; - $stunde->lehreinheit_id=$row_lehrstunde->lehreinheit_id; - $stunde->farbe = (isset($row_lehrstunde->farbe)?$row_lehrstunde->farbe:'FFFFFF'); - $stunde->unr=$row_lehrstunde->unr; - $stunde->gruppen[0]->studiengang_kz=$row_lehrstunde->studiengang_kz; - $stunde->gruppen[0]->sem=$row_lehrstunde->sem; - $stunde->gruppen[0]->ver=$row_lehrstunde->ver; - $stunde->gruppen[0]->grp=$row_lehrstunde->grp; - $stunde->gruppen[0]->gruppe_kurzbz=$row_lehrstunde->gruppe_kurzbz; - $stunde->lektor_uid[]=$row_lehrstunde->lektor_uid; - $stunde->ort_kurzbz[]=$row_lehrstunde->ort_kurzbz; - $stunde->datum=$row_lehrstunde->datum; - $stunde->stunde=$row_lehrstunde->stunde; - $stunde->titel=$row_lehrstunde->titel; - $stunde->anmerkung=$row_lehrstunde->anmerkung; - $stunde->fix=$row_lehrstunde->fix; - $stunde->reservierung=$row_lehrstunde->reservierung; - $result[]=$stunde; - } - } - return $result; - } - - public function getStundenplanData($db_stpl_table, $lehrveranstaltung_id=null, $studiensemester_kurzbz=null, $lehreinheit_id=null, $mitarbeiter_uid=null, $student_uid=null) - { - - $qry = "SELECT - stpl.datum, min(stpl.stunde) as stundevon, max(stpl.stunde) as stundebis, - stpl.lehreinheit_id, lehrfach.bezeichnung as lehrfach_bezeichnung, - array_agg( - CASE WHEN gruppe_kurzbz is not null THEN gruppe_kurzbz - ELSE (SELECT UPPER(typ || kurzbz) FROM public.tbl_studiengang WHERE studiengang_kz=stpl.studiengang_kz) || COALESCE(stpl.semester,'0') || COALESCE(stpl.verband,'') || COALESCE(stpl.gruppe,'') - END) as gruppen, array_agg(mitarbeiter_uid) as lektoren, - array_agg(ort_kurzbz) as orte, - array_agg(titel) as titel - FROM - lehre.tbl_".$db_stpl_table." as stpl - JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) - JOIN lehre.tbl_lehrveranstaltung as lehrfach ON(tbl_lehreinheit.lehrfach_id=lehrfach.lehrveranstaltung_id) - WHERE "; - - if($lehrveranstaltung_id!='') - { - $qry.=" lehreinheit_id in(SELECT lehreinheit_id FROM lehre.tbl_lehreinheit - WHERE lehrveranstaltung_id=".$this->db_add_param($lehrveranstaltung_id)." - AND studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz).")"; - - } - elseif($lehreinheit_id!='') - { - $qry.=" lehreinheit_id=".$this->db_add_param($lehreinheit_id); - } - elseif($mitarbeiter_uid!='') - { - $qry.=" mitarbeiter_uid=".$this->db_add_param($mitarbeiter_uid)." AND lehreinheit_id IN( - SELECT - lehreinheit_id - FROM - lehre.tbl_lehreinheitmitarbeiter - JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) - WHERE mitarbeiter_uid=".$this->db_add_param($mitarbeiter_uid)." AND studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz).")"; - } - elseif($student_uid!='') - { - $qry.=" lehreinheit_id in ( - SELECT - lehreinheit_id - FROM - campus.vw_student_lehrveranstaltung - WHERE - uid=".$this->db_add_param($student_uid)." AND studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz).")"; - } - else - return false; - - $qry.="GROUP BY stpl.datum, stpl.unr, stpl.lehreinheit_id, lehrfach.bezeichnung - ORDER BY stpl.datum, min(stpl.stunde), stpl.unr, stpl.lehreinheit_id"; - - if($result = $this->db_query($qry)) - { - while($row = $this->db_fetch_object($result)) - { - $obj = new stdClass(); - - $obj->datum = $row->datum; - $obj->stundevon = $row->stundevon; - $obj->stundebis = $row->stundebis; - $obj->gruppen = array_unique($this->db_parse_array($row->gruppen)); - $obj->lektoren = array_unique($this->db_parse_array($row->lektoren)); - $obj->orte = array_unique($this->db_parse_array($row->orte)); - $obj->titel = array_filter(array_unique($this->db_parse_array($row->titel))); - $obj->lehrfach_bezeichnung = $row->lehrfach_bezeichnung; - $obj->lehreinheit_id = $row->lehreinheit_id; - - $this->result[] = $obj; - } - return true; - } - else - return false; - } -} - -?> +new=TRUE; + } + + /** + * @brief Einen Datensatz aus optional angegebener Stundenplan-Tabelle laden + * @param stundenplan_id ID in der Datenbank + * @param stpl_table Name der Tabelle in der DB + * @return Boolean, Fehlermeldung kommt in das Attribut errormsg + */ + public function load($stundenplan_id,$stpl_table='stundenplandev') + { + // Bezeichnung der Stundenplan-Tabelle und des Keys + $stpl_id=$stpl_table.TABLE_ID; + $stpl_view='lehre.'.VIEW_BEGIN.$stpl_table; + $stpl_table='lehre.'.TABLE_BEGIN.$stpl_table; + + $sql_query="SELECT * FROM $stpl_view WHERE $stpl_id=$stundenplan_id;"; + + //Datenbankabfrage + if (!$this->db_query($sql_query)) + { + $this->errormsg=$sql_query.$this->db_last_error(); + return false; + } + + $this->anzahl = $this->db_num_rows(); + + //Daten uebernehmen + if ($this->anzahl!=1) + { + $this->errormsg='Keinen Datensatz gefunden'; + return false; + } + else + { + $row=$this->db_fetch_object(); + $this->stundenplan_id=$row->{$stpl_id}; + $this->unr=$row->unr; + $this->lektor_uid=$row->uid; + $this->lektor_kurzbz=$row->lektor; + $this->datum=$row->datum; + $this->stunde=$row->stunde; + $this->ort_kurzbz=$row->ort_kurzbz; + $this->lehrfach=$row->lehrfach; + $this->lehrfach_bez=$row->lehrfach_bez; + $this->lehrfach_id=$row->lehrfach_id; + $this->lehrform=$row->lehrform; + $this->studiengang_kz=$row->studiengang_kz; + $this->studiengang=$row->stg_kurzbz; + $this->sem=$row->semester; + $this->ver=$row->verband; + $this->grp=$row->gruppe; + $this->gruppe_kurzbz=$row->gruppe_kurzbz; + $this->titel=$row->titel; + $this->anmerkung=$row->anmerkung; + $this->updateamum=$row->updateamum; + $this->updatevon=$row->updatevon; + $this->new=false; + } + return true; + } + + /** + * Datensatz in DB speichern + * + */ + public function save($uid, $stpl_table='stundenplandev') + { + // Parameter Checken + // Bezeichnung der Stundenplan-Tabelle und des Keys + $stpl_id=$stpl_table.TABLE_ID; + $stpl_table='lehre.'.TABLE_BEGIN.$stpl_table; + if ($this->new) + { + // insert + } + else + { + // update + $sql_query='UPDATE '.$stpl_table; + $sql_query.=" SET datum=".$this->db_add_param($this->datum).", stunde=".$this->db_add_param($this->stunde); + $sql_query.=", ort_kurzbz=".$this->db_add_param($this->ort_kurzbz).", mitarbeiter_uid=".$this->db_add_param($this->lektor_uid); + if($this->unr!='') + $sql_query.=", unr=".$this->db_add_param($this->unr); + $sql_query.=", updateamum=now(), updatevon=".$this->db_add_param($uid); + $sql_query.=" WHERE $stpl_id=".$this->db_add_param($this->stundenplan_id); + + $this->lastqry = $sql_query; + //Datenbankabfrage + if (!$this->db_query($sql_query)) + { + $this->errormsg=$sql_query.$this->db_last_error(); + return false; + } + } + + return true; + } + + /** + * Erstellt einen Undo Befehl fuer die Speichern funktion + * + * @param $stpl_table + * @return string undo + */ + public function getUndo($stpl_table='stundenplandev') + { + $stpl_id=$stpl_table.TABLE_ID; + $stpl_table='lehre.'.TABLE_BEGIN.$stpl_table; + + $sql_query='UPDATE '.$stpl_table; + $sql_query.=" SET datum=".$this->db_add_param($this->datum).", stunde=".$this->db_add_param($this->stunde); + $sql_query.=", ort_kurzbz=".$this->db_add_param($this->ort_kurzbz).", mitarbeiter_uid=".$this->db_add_param($this->lektor_uid); + $sql_query.=", updateamum=".$this->db_add_param($this->updateamum).", updatevon=".$this->db_add_param($this->updatevon); + $sql_query.=" WHERE $stpl_id=".$this->db_add_param($this->stundenplan_id).";"; + + return $sql_query; + } + + /** + * Datensatz aus DB entfernen + * @param id ID des Datensatzes in der Tabelle + * @param stpl_table Name der Tabelle + * + */ + public function delete($id, $stpl_table='stundenplandev') + { + // Parameter Checken + // Bezeichnung der Stundenplan-Tabelle und des Keys + $stpl_id=$stpl_table.TABLE_ID; + $stpl_table='lehre.'.TABLE_BEGIN.$stpl_table; + // Delete SQL vorbereiten + $sql_query='DELETE FROM '.$stpl_table; + $sql_query.=" WHERE $stpl_id=".$this->db_add_param($id); + + $this->lastqry = $sql_query; + //Datenbankrequest + if (!$this->db_query($sql_query)) + { + $this->errormsg=$sql_query.$this->db_last_error(); + return false; + } + else + return true; + } + + /** + * Laedt Lehrstunden + * + * @param type (student, lektor, lehrverband, gruppe, ort, ....) + * @param datum_von (inklusive) Startdatum der Abfrage + * @param datum_bis (exklusive) Enddatum der Abfrage + * @param uid (des Lektors oder Studenten) kann auch NULL sein + * @param ort_kurzbz (Kurzbezeichnung des Orts) kann auch NULL sein + * @param studiengang_kz + * @param sem + * @param ver + * @param grp + * @param gruppe_kurzbz + * + */ + public function load_lehrstunden($type, $datum_von, $datum_bis, $uid, $ort_kurzbz=NULL, $studiengang_kz=NULL, $sem=NULL, $ver=NULL, $grp=NULL, $gruppe_kurzbz=NULL, $stpl_view='stundenplan', $idList=null, $fachbereich_kurzbz=null, $lva=NULL, $alle_unr_mitladen=false) + { + $num_rows_einheit=0; + // Parameter Checken + // Bezeichnung der Stundenplan-Tabelle und des Keys + $stpl_id=$stpl_view.TABLE_ID; + $stpl_view_ohneschema=VIEW_BEGIN.$stpl_view; + $stpl_view='lehre.'.VIEW_BEGIN.$stpl_view; + + + // Datum im Format YYYY-MM-TT ? + if (!preg_match("/([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})/",$datum_von) ) + { + $this->errormsg='Fehler: Startdatum hat falsches Format!'; + return -1; + } + if ($datum_bis!=null) + { + if (!preg_match("/([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})/",$datum_bis) ) + { + $this->errormsg='Fehler: Enddatum hat falsches Format!'; + return -1; + } + } + else + $datum_bis=$datum_von; + + // Person + if (($type=='student' || $type=='lektor') && $uid==NULL) + { + $this->errormsg='Fehler: uid der Person ist nicht gesetzt'; + return -1; + } + // Ort + if ($type=='ort' && $ort_kurzbz==NULL) + { + $this->errormsg='Fehler: Kurzbezeichnung des Orts ist nicht gesetzt'; + return -1; + } + // Gruppe + if ($type=='gruppe' && $gruppe_kurzbz==NULL) + { + $this->errormsg='Fehler: Kurzbezeichnung der Gruppe ist nicht gesetzt'; + return -1; + } + // Verband + if ($type=='verband' && ($studiengang_kz==NULL || !is_numeric($studiengang_kz))) + { + $this->errormsg='Fehler: Studiengang ist nicht gesetzt'; + return -1; + } + // LVA + if ($type=='lva' && $lva==NULL) + { + $this->errormsg='Fehler: LVA-ID ist nicht gesetzt'; + return -1; + } + if ($type=='lva' && !is_numeric($lva)) + { + $this->errormsg='Fehler: LVA-ID ist ungueltig'; + return -1; + } + // Type + if ($type==null) + { + $this->errormsg='Fehler: Type in "lehrstunde->load_lehrstunde" ist nicht gesetzt!'; + return -1; + } + + // Zusaetzliche Daten ermitteln + // Personendaten + if ($type=='student') + { + if(defined('LVPLAN_LOAD_UEBER_SEMESTERHAELFTE') && LVPLAN_LOAD_UEBER_SEMESTERHAELFTE === true) + $lvplan_load_ueber_semesterhaelfte = true; + else + $lvplan_load_ueber_semesterhaelfte = false; + // Bei Studierenden wird das passende Studiensemester ermittelt und das dazupassende + // naechstliegende Dadurch wird sichergestellt, dass Einheiten aus den Vorsemestern + // zB fuer Nachpruefungen oder Einheiten aus den Folgesemestern die vorgezogen werden + // auch im Plan sichtbar sind. + if (is_null($this->ss)) + { + $studiensemester_obj = new studiensemester(); + $this->ss = $studiensemester_obj->getSemesterFromDatum($datum_von,true); + + if($lvplan_load_ueber_semesterhaelfte) + { + $this->ssnext = $studiensemester_obj->getNextFrom($this->ss); + $this->ssprev = $studiensemester_obj->getPreviousFrom($this->ss); + } + else + $this->ssnext = $studiensemester_obj->getNearestTo($this->ss,$datum_von); + } + if(!isset($this->ssnext)) + $this->ssnext = $this->ss; + + if($lvplan_load_ueber_semesterhaelfte) + { + $sql_query="SELECT studiengang_kz, semester, verband, gruppe + 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 + { + // Lehrverbandszuordnungen der betreffenden Studiensemester laden + $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).")"; + } + + $verbaende=array(); + if($this->db_query($sql_query)) + { + $num_rows=$this->db_num_rows(); + if ($num_rows>0) + { + while($row = $this->db_fetch_object()) + { + $verbaende[] = array('studiengang_kz'=>$row->studiengang_kz, + 'sem'=>$row->semester, + 'ver'=>$row->verband, + 'grp'=>$row->gruppe); + } + } + } + else + { + $this->errormsg = 'Fehler beim Laden der Verbaende'; + return -2; + } + // Spezialgruppen ermitteln zu denen die Person zugeteilt ist + if($lvplan_load_ueber_semesterhaelfte) + { + $sql_query="SELECT + gruppe_kurzbz + FROM + public.tbl_benutzergruppe + WHERE + uid=".$this->db_add_param($uid)." + AND (studiensemester_kurzbz=".$this->db_add_param($this->ss)." + OR studiensemester_kurzbz=".$this->db_add_param($this->ssnext)." + OR studiensemester_kurzbz=".$this->db_add_param($this->ssprev)." + OR studiensemester_kurzbz IS NULL)"; + } + else + { + $sql_query="SELECT + gruppe_kurzbz + FROM + public.tbl_benutzergruppe + WHERE + uid=".$this->db_add_param($uid)." + AND (studiensemester_kurzbz=".$this->db_add_param($this->ss)." + OR studiensemester_kurzbz=".$this->db_add_param($this->ssnext)." + OR studiensemester_kurzbz IS NULL)"; + } + + if (!$result_einheit=$this->db_query($sql_query)) + { + $this->errormsg= 'Fehler beim Laden der Gruppen'; + return false; + } + else + $num_rows_einheit=$this->db_num_rows($result_einheit); + } + // Bei Lektoren auch Spezialgruppen wegen Reservierungen abfragen + if ($type == 'lektor') + { + if (is_null($this->ss)) + { + $studiensemester_obj = new studiensemester(); + $this->ss = $studiensemester_obj->getSemesterFromDatum($datum_von,true); + $this->ssnext = $studiensemester_obj->getNearestTo($this->ss,$datum_von); + } + if(!isset($this->ssnext)) + $this->ssnext = $this->ss; + // Spezialgruppen ermitteln zu denen die Person zugeteilt ist + $sql_query="SELECT + gruppe_kurzbz + FROM + public.tbl_benutzergruppe + WHERE + uid=".$this->db_add_param($uid)." + AND (studiensemester_kurzbz=".$this->db_add_param($this->ss)." + OR studiensemester_kurzbz=".$this->db_add_param($this->ssnext)." + OR studiensemester_kurzbz IS NULL)"; + + if (!$result_einheit=$this->db_query($sql_query)) + { + $this->errormsg='Fehler beim Laden der Gruppen'; + return false; + } + else + $num_rows_einheit=$this->db_num_rows($result_einheit); + } + + // Stundenplandaten ermitteln + // Abfrage generieren + + if ($type!='idList') + { + if($alle_unr_mitladen) + $sql_query_stdplan='SELECT '.$stpl_id.', datum, stunde, unr FROM '.$stpl_view.' stplvw'; + else + $sql_query_stdplan='SELECT * FROM '.$stpl_view.' stplvw'; + $sql_query_lva=""; + $sql_query=" WHERE datum>=".$this->db_add_param($datum_von)." AND datum<".$this->db_add_param($datum_bis); + if ($type == 'lva') + $sql_query_lva=" AND lehrveranstaltung_id=".$this->db_add_param($lva); + elseif ($type=='lektor') + { + $sql_query.=" AND ("; + $sql_query.=" uid=".$this->db_add_param($uid); + //Reservierungen mit Spezialgruppen laden + for ($i=0;$i<$num_rows_einheit;$i++) + { + $row=$this->db_fetch_object($result_einheit,$i); + $sql_query.=" OR gruppe_kurzbz=".$this->db_add_param($row->gruppe_kurzbz); + } + $sql_query.=')'; + } + elseif ($type=='ort' && $ort_kurzbz != 'all') + $sql_query.=" AND ort_kurzbz=".$this->db_add_param($ort_kurzbz); + elseif ($type=='ort' && $ort_kurzbz == 'all') + $sql_query.=" AND ort_kurzbz IS NOT NULL AND ort_kurzbz !='Dummy'"; + elseif ($type=='gruppe') + $sql_query.=" AND gruppe_kurzbz=".$this->db_add_param($gruppe_kurzbz); + elseif($type=='fachbereich') + $sql_query.=" AND fachbereich_kurzbz=".$this->db_add_param($fachbereich_kurzbz); + elseif($type=='student') + { + $sql_query.=" AND ("; + if(is_array($verbaende) && count($verbaende)>0) + { + foreach($verbaende as $row_verbaende) + { + $studiengang_kz = $row_verbaende['studiengang_kz']; + $ver = $row_verbaende['ver']; + $sem = $row_verbaende['sem']; + $grp = $row_verbaende['grp']; + + $sql_query.=" (studiengang_kz=".$this->db_add_param($studiengang_kz, FHC_INTEGER); + if ($sem!=null && $sem>=0 && $sem!='') + $sql_query.=" AND (semester=".$this->db_add_param($sem)." OR semester IS NULL)"; + if ($ver!='0' && $ver!=null && $ver!='') + $sql_query.=" AND (verband=".$this->db_add_param($ver)." OR verband IS NULL OR verband='0' OR verband='')"; + if ($grp!='0' && $grp!=null && $grp!='') + $sql_query.=" AND (gruppe=".$this->db_add_param($grp)." OR gruppe IS NULL OR gruppe='0' OR gruppe='')"; + $sql_query.=" AND gruppe_kurzbz is null"; + $sql_query.=") OR "; + } + } + + $sql_query.=" 1!=1"; + for ($i=0;$i<$num_rows_einheit;$i++) + { + $row=$this->db_fetch_object($result_einheit,$i); + $sql_query.=" OR gruppe_kurzbz=".$this->db_add_param($row->gruppe_kurzbz); + } + $sql_query.=')'; + } + else + { + $sql_query.=" AND ( (studiengang_kz=".$this->db_add_param($studiengang_kz, FHC_INTEGER); + if ($sem!=null && $sem>=0 && $sem!='') + $sql_query.=" AND (semester=".$this->db_add_param($sem)." OR semester IS NULL)"; + if ($ver!='0' && $ver!=null && $ver!='') + $sql_query.=" AND (verband=".$this->db_add_param($ver)." OR verband IS NULL OR verband='0' OR verband='')"; + if ($grp!='0' && $grp!=null && $grp!='') + $sql_query.=" AND (gruppe=".$this->db_add_param($grp)." OR gruppe IS NULL OR gruppe='0' OR gruppe='')"; + + // Direkte Gruppen werden ausgenommen da sonst Stunden von Verband A in der Ansicht für Verband B + // mit angezeigt werden weil die direkte Gruppe geladen wird. + $sql_query.=' AND + ( + gruppe_kurzbz is null + OR + EXISTS( + SELECT 1 FROM public.tbl_gruppe + WHERE + gruppe_kurzbz = stplvw.gruppe_kurzbz + AND direktinskription=false + ) + )'; + + $sql_query.=' )'; + + for ($i=0;$i<$num_rows_einheit;$i++) + { + $row=$this->db_fetch_object($result_einheit,$i); + $sql_query.=" OR gruppe_kurzbz=".$this->db_add_param($row->gruppe_kurzbz); + } + $sql_query.=')'; + } + $sql_query_orderby=' ORDER BY datum, stunde, studiengang_kz, semester, verband, gruppe, gruppe_kurzbz, uid'; + $sql_query_stdplan.=$sql_query . $sql_query_lva . $sql_query_orderby; + + // Wenn aktiviert, werden alle Stunden mit der gleichen UNR geladen die zur selben Zeit stattfinden + if($alle_unr_mitladen) + { + $sql_query_stdplan=" + WITH lvplan(id, datum, stunde, unr) as + ( + $sql_query_stdplan + ) + SELECT + distinct $stpl_view_ohneschema.* + FROM + ".$stpl_view.", lvplan + WHERE + $stpl_view_ohneschema.datum=lvplan.datum + AND $stpl_view_ohneschema.stunde=lvplan.stunde + AND $stpl_view_ohneschema.unr=lvplan.unr + ORDER BY datum, stunde, studiengang_kz, semester, verband, gruppe, gruppe_kurzbz, uid + "; + } + } + else + { + $sql_query_stdplan='SELECT * FROM '.$stpl_view; + $sql_query=''; + foreach ($idList as $id) + $sql_query.=" OR ".$stpl_id."=".$this->db_add_param($id); + $sql_query=mb_substr($sql_query,3); + $sql_query_stdplan.=' WHERE'.$sql_query; + } + + //Datenbankabfrage + if (!$this->db_query($sql_query_stdplan)) + { + $this->errormsg = 'Fehler beim Laden der Stundenplandaten'; + return -2; + } + $stpl_tbl = $this->db_result; + $num_rows = $this->db_num_rows($stpl_tbl); + $this->anzahl=$num_rows; + //Daten uebernehmen + for ($i=0;$i<$num_rows;$i++) + { + $row=$this->db_fetch_object($stpl_tbl, $i); + + $stunde=new lehrstunde(); + $stunde->stundenplan_id=$row->{$stpl_id}; + $stunde->lehreinheit_id=$row->lehreinheit_id; + $stunde->unr=$row->unr; + $stunde->lektor_uid=$row->uid; + $stunde->lektor_kurzbz=$row->lektor; + $stunde->datum=$row->datum; + $stunde->stunde=$row->stunde; + $stunde->ort_kurzbz=$row->ort_kurzbz; + $stunde->lehrfach=$row->lehrfach; + $stunde->lehrfach_bez=$row->lehrfach_bez; + $stunde->lehrfach_id=$row->lehrfach_id; + $stunde->lehrform=$row->lehrform; + if ($row->farbe!=' ' && $row->farbe!=null) + $stunde->farbe=$row->farbe; + else + $stunde->farbe='FFFFFF'; + $stunde->studiengang_kz=$row->studiengang_kz; + $stunde->studiengang=mb_strtoupper($row->stg_typ.$row->stg_kurzbz); + $stunde->sem=$row->semester; + $stunde->ver=$row->verband; + $stunde->grp=$row->gruppe; + $stunde->gruppe_kurzbz=$row->gruppe_kurzbz; + $stunde->titel=$row->titel; + $stunde->anmerkung=$row->anmerkung; + $stunde->anmerkung_lehreinheit=$row->anmerkung_lehreinheit; + $stunde->updateamum=$row->updateamum; + $stunde->updatevon=$row->updatevon; + $stunde->reservierung=false; + $this->lehrstunden[$i]=$stunde; + + } + + // Reservierungsdaten ermitteln + if ($type!='idList' && $type!='fachbereich' && $type!='lva') + { + // Datenbankabfrage generieren + $sql_query_reservierung='SELECT * FROM campus.vw_reservierung stplvw'; + $sql_query_reservierung.=$sql_query . $sql_query_orderby; + + //Datenbankabfrage + if (!$this->db_query($sql_query_reservierung)) + { + $this->errormsg = 'Fehler beim Laden der Reservierungen'; + return -2; + } + $stpl_tbl = $this->db_result; + $num_rows=$this->db_num_rows($stpl_tbl); + $this->anzahl+=$num_rows; + + //Daten uebernehmen + for ($i=0;$i<$num_rows;$i++) + { + $row = $this->db_fetch_object($stpl_tbl, $i); + + $stunde=new lehrstunde(); + $stunde->reservierung=true; + $stunde->stundenplan_id=$row->reservierung_id; + $stunde->unr=0; + $stunde->lektor_uid=$row->uid; + $stunde->lektor_kurzbz=$row->uid; + $stunde->datum=$row->datum; + $stunde->stunde=$row->stunde; + $stunde->ort_kurzbz=$row->ort_kurzbz; + //$stunde->lehrfach_id=$row->lehrfach_id; + $stunde->lehrfach=$row->titel; + $stunde->lehrfach_bez=$row->beschreibung; + $stunde->studiengang_kz=$row->studiengang_kz; + $stunde->studiengang=$row->stg_kurzbz; + $stunde->sem=$row->semester; + $stunde->ver=$row->verband; + $stunde->grp=$row->gruppe; + $stunde->gruppe_kurzbz=$row->gruppe_kurzbz; + $stunde->titel=$row->titel; + $stunde->anmerkung=$row->beschreibung; + $stunde->anmerkung_lehreinheit=$row->beschreibung; + $stunde->farbe=''; + $this->lehrstunden[]=$stunde; + } + } + return $this->anzahl; + } + + /** + * @param lehreinheit_id + * @param uid (mitarbeiter) + * + */ + public function load_lehrstunden_le($lehreinheit_id, $uid=null, $stpl_table='stundenplandev') + { + // Bezeichnung der Stundenplan-Tabelle und des Keys + $stpl_id=$stpl_table.TABLE_ID; + $stpl_table='lehre.'.TABLE_BEGIN.$stpl_table; + + // Stundenplandaten ermitteln + // Abfrage generieren + $sql="SELECT * FROM ".$stpl_table." WHERE lehreinheit_id=".$this->db_add_param($lehreinheit_id, FHC_INTEGER); + if ($uid!=null && !is_null($uid)) + $sql.=" AND mitarbeiter_uid=".$this->db_add_param($uid); + + //Datenbankabfrage + if (!$this->db_query($sql)) + { + $this->errormsg=$this->db_last_error(); + return -1; + } + $num_rows=$this->db_num_rows(); + $this->anzahl=$num_rows; + //Daten uebernehmen + for ($i=0;$i<$num_rows;$i++) + { + $row=$this->db_fetch_object(null, $i); + + $stunde=new lehrstunde(); + $stunde->stundenplan_id=$row->{$stpl_id}; + $stunde->lehreinheit_id=$row->lehreinheit_id; + $stunde->unr=$row->unr; + $stunde->studiengang_kz=$row->studiengang_kz; + $stunde->sem=$row->semester; + $stunde->ver=$row->verband; + $stunde->grp=$row->gruppe; + $stunde->gruppe_kurzbz=$row->gruppe_kurzbz; + $stunde->lektor_uid=$row->mitarbeiter_uid; + $stunde->ort_kurzbz=$row->ort_kurzbz; + $stunde->datum=$row->datum; + $stunde->stunde=$row->stunde; + $stunde->titel=$row->titel; + $stunde->anmerkung=$row->anmerkung; + $stunde->fix=$row->fix; + $stunde->insertamum=$row->insertamum; + $stunde->insertvon=$row->insertvon; + $stunde->updateamum=$row->updateamum; + $stunde->updatevon=$row->updatevon; + $stunde->reservierung=false; + $this->lehrstunden[$i]=$stunde; + } + return $this->anzahl; + } + + + /** + * Prueft die geladene Lehrveranstaltung auf Kollisionen im Stundenplan. + * Bei einer Kollision steht der Grund der Kollision in '$this->errormsg'. + * @param string db_stpl_table Tabllenname des Stundenplans im DBMS + * @return boolean true=kollision, false=keine kollision + */ + public function kollision($stpl_table='stundenplandev') + { + $variablen_obj = new variable(); + $variablen_obj->loadVariables(get_uid()); + + $kollision_student = $variablen_obj->variable->kollision_student; + $ignore_reservierung = $variablen_obj->variable->ignore_reservierung; + $ignore_zeitsperre = $variablen_obj->variable->ignore_zeitsperre; + + //Kollisionspruefung auf Studentenebene + if($kollision_student=='true' && $this->kollision_student($stpl_table)) + return true; + + // Parameter Checken + // Bezeichnung der Stundenplan-Tabelle und des Keys + $stpl_id=$stpl_table.TABLE_ID; + $stpl_table='lehre.'.VIEW_BEGIN.$stpl_table; + + // Datenbank abfragen + $sql_query="SELECT $stpl_id AS id, lektor, stg_kurzbz, ort_kurzbz, semester, verband, gruppe, gruppe_kurzbz, datum, stunde FROM $stpl_table + WHERE datum=".$this->db_add_param($this->datum)." AND stunde=".$this->db_add_param($this->stunde); + + // Direkte Lehreinheitsgruppen kollidieren nicht + $sql_query.=" AND NOT EXISTS(SELECT 1 FROM public.tbl_gruppe WHERE gruppe_kurzbz = ".$stpl_table.".gruppe_kurzbz AND direktinskription=true)"; + + $sql_query.= " AND (ort_kurzbz=".$this->db_add_param($this->ort_kurzbz)." "; + + if (!in_array($this->lektor_uid,unserialize(KOLLISIONSFREIE_USER))) + $sql_query.=" OR (uid=".$this->db_add_param($this->lektor_uid)." AND uid not in (".$this->db_implode4SQL(unserialize(KOLLISIONSFREIE_USER))."))"; + + //Wenn eine Kollisionspruefung auf Studentenebene durchgefuehrt wird, werden die LVB nicht gecheckt + if($kollision_student=='false') + { + // Direkte Gruppen kollidieren nicht + $direktgruppe = false; + if($this->gruppe_kurzbz!=null && $this->gruppe_kurzbz!='' && $this->gruppe_kurzbz!=' ') + { + $grp_obj = new gruppe(); + $grp_obj->load($this->gruppe_kurzbz); + if($grp_obj->direktinskription) + { + $direktgruppe = true; + } + } + if(!$direktgruppe) + { + $sql_query.=" OR (studiengang_kz=".$this->db_add_param($this->studiengang_kz)." AND semester=".$this->db_add_param($this->sem); + if($this->gruppe_kurzbz!=null && $this->gruppe_kurzbz!='' && $this->gruppe_kurzbz!=' ') + { + $sql_query.=" OR (gruppe_kurzbz=".$this->db_add_param($this->gruppe_kurzbz).")"; + } + else + { + if ($this->ver!=null && $this->ver!='' && $this->ver!=' ') + $sql_query.=" AND (verband=".$this->db_add_param($this->ver)." OR verband IS NULL OR verband='' OR verband=' ')"; + if ($this->grp!=null && $this->grp!='' && $this->grp!=' ') + $sql_query.=" AND (gruppe=".$this->db_add_param($this->grp)." OR gruppe IS NULL OR gruppe='' OR gruppe=' ')"; + } + + $sql_query.=")"; + } + } + $sql_query.=") AND unr!=".$this->db_add_param($this->unr); + + if (!$erg_stpl = $this->db_query($sql_query)) + { + $this->errormsg=$sql_query.$this->db_last_error(); + return true; + } + + $anz=$this->db_num_rows($erg_stpl); + if ($anz==0) + { + // Zeitsperren pruefen + if($ignore_zeitsperre=='false' && !in_array($this->lektor_uid,unserialize(KOLLISIONSFREIE_USER)) && $this->kollision_zeitsperre()) + return true; + + // Reservierungen pruefen + if ($ignore_reservierung=='false' && $this->kollision_reservierung()) + return true; + + if($this->kollision_ressource()) + return true; + return false; + } + else + { + $row = $this->db_fetch_object($erg_stpl); + $this->errormsg="Kollision ($stpl_table): $row->id|$row->lektor|$row->ort_kurzbz|$row->stg_kurzbz-$row->semester$row->verband$row->gruppe$row->gruppe_kurzbz - $row->datum/$row->stunde\n"; //\n".$sql_query + return true; + } + } + + /** + * Prueft ob eine Kollision mit den zugeteilten Ressourcen vorhanden ist + * + * @return boolean true=kollision, false=keine kollision + */ + public function kollision_ressource() + { + $qry = "SELECT + tbl_betriebsmittel.beschreibung, tbl_stundenplandev.ort_kurzbz + FROM + lehre.tbl_stundenplan_betriebsmittel + JOIN lehre.tbl_stundenplandev USING(stundenplandev_id) + JOIN wawi.tbl_betriebsmittel USING(betriebsmittel_id) + WHERE + tbl_stundenplandev.datum=".$this->db_add_param($this->datum)." + AND tbl_stundenplandev.stunde=".$this->db_add_param($this->stunde)." + AND betriebsmittel_id IN(SELECT betriebsmittel_id FROM lehre.tbl_stundenplan_betriebsmittel WHERE stundenplandev_id=".$this->db_add_param($this->stundenplan_id).") + AND tbl_stundenplandev.stundenplandev_id<>".$this->db_add_param($this->stundenplan_id); + + if($result = $this->db_query($qry)) + { + if($row = $this->db_fetch_object($result)) + { + $this->errormsg='Kollision (Ressource)'.$row->beschreibung.'|'.$row->ort_kurzbz; + return true; + } + return false; + } + return false; + } + + /** + * Prueft ob eine Kollision mit den Zeitsperren vorhanden ist + * + * @return boolean true=kollision, false=keine kollision + */ + public function kollision_zeitsperre() + { + $sql_query="SELECT + zeitsperre_id,zeitsperretyp_kurzbz,mitarbeiter_uid AS lektor,vondatum,vonstunde,bisdatum,bisstunde + FROM campus.tbl_zeitsperre + WHERE mitarbeiter_uid=".$this->db_add_param($this->lektor_uid)." + AND (vondatum<".$this->db_add_param($this->datum)." OR (vondatum=".$this->db_add_param($this->datum)." AND (vonstunde<=".$this->db_add_param($this->stunde)." OR vonstunde IS NULL))) + AND (bisdatum>".$this->db_add_param($this->datum)." OR (bisdatum=".$this->db_add_param($this->datum)." AND (bisstunde>=".$this->db_add_param($this->stunde)." OR bisstunde IS NULL)));"; + + if (!$erg_zs = $this->db_query($sql_query)) + { + $this->errormsg=$sql_query.$this->db_last_error(); + return true; + } + + $anz_zs=$this->db_num_rows($erg_zs); + if ($anz_zs!=0) + { + $row = $this->db_fetch_object($erg_zs); + $this->errormsg="Kollision (Zeitsperre): $row->zeitsperre_id|$row->lektor|$row->zeitsperretyp_kurzbz - $row->vondatum/$row->vonstunde|$row->bisdatum/$row->bisstunde"; + return true; + } + return false; + } + + /** + * Prueft ob eine LV-Plan Kollision mit den Reservierungen besteht + * + * @return boolean true=kollision, false=keine kollision + */ + public function kollision_reservierung() + { + $sql_query="SELECT + reservierung_id AS id, uid AS lektor, stg_kurzbz, ort_kurzbz, + semester, verband, gruppe, gruppe_kurzbz, datum, stunde + FROM lehre.vw_reservierung + WHERE + datum=".$this->db_add_param($this->datum)." AND + stunde=".$this->db_add_param($this->stunde)." AND + (ort_kurzbz=".$this->db_add_param($this->ort_kurzbz)." OR "; + + if (!in_array($this->lektor_uid, unserialize(KOLLISIONSFREIE_USER))) + $sql_query.="(uid=".$this->db_add_param($this->lektor_uid)." AND uid not in(".$this->db_implode4SQL(unserialize(KOLLISIONSFREIE_USER)).")) OR "; + + $sql_query.="(studiengang_kz=".$this->db_add_param($this->studiengang_kz)." AND semester=".$this->db_add_param($this->sem); + if ($this->ver!=null && $this->ver!='' && $this->ver!=' ') + $sql_query.=" AND (verband=".$this->db_add_param($this->ver)." OR verband IS NULL OR verband='' OR verband=' ')"; + if ($this->grp!=null && $this->grp!='' && $this->grp!=' ') + $sql_query.=" AND (gruppe=".$this->db_add_param($this->grp)." OR gruppe IS NULL OR gruppe='' OR gruppe=' ')"; + if ($this->gruppe_kurzbz!=null && $this->gruppe_kurzbz!='' && $this->gruppe_kurzbz!=' ') + $sql_query.=" AND (gruppe_kurzbz=".$this->db_add_param($this->gruppe_kurzbz).")"; + $sql_query.="))"; + + if (!$erg_res = $this->db_query($sql_query)) + { + $this->errormsg=$sql_query.$this->db_last_error(); + return true; + } + $anz_res = $this->db_num_rows($erg_res); + + if ($anz_res!=0) + { + $row = $this->db_fetch_object($erg_res); + $this->errormsg="Kollision (Reservierung): $row->id|$row->lektor|$row->ort_kurzbz|$row->stg_kurzbz-$row->semester$row->verband$row->gruppe$row->gruppe_kurzbz - $row->datum/$row->stunde"; + return true; + } + return false; + } + + /** + * Prueft eine Kollision auf Studentenebene + * Es werden nur die Kollisionen der Studenten abgefragt + * Raum, Lektor, Reservierung, Zeitsperren, etc werden hier nicht geprueft + * + * @param $stpl_table + * @return boolean true=kollision, false=keine kollision + */ + public function kollision_student($stpl_table='stundenplandev') + { + // Parameter Checken + // Bezeichnung der Stundenplan-Tabelle + $stpl_table='lehre.'.VIEW_BEGIN.$stpl_table; + + $sql_query = "SELECT * + FROM ".$stpl_table."_student_unr + WHERE datum=".$this->db_add_param($this->datum)." AND stunde=".$this->db_add_param($this->stunde)." AND student_uid IN( + SELECT uid FROM public.vw_gruppen WHERE + + "; + $sql_query.="(studiengang_kz=".$this->db_add_param($this->studiengang_kz)." AND semester=".$this->db_add_param($this->sem)." + AND studiensemester_kurzbz=( + SELECT tbl_studiensemester.studiensemester_kurzbz + FROM + public.tbl_studiensemester + WHERE + tbl_studiensemester.ende >= ".$this->db_add_param($this->datum)." + AND tbl_studiensemester.start <=".$this->db_add_param($this->datum)." LIMIT 1)"; + if ($this->gruppe_kurzbz!=null && $this->gruppe_kurzbz!='' && $this->gruppe_kurzbz!=' ') + $sql_query.=" AND (gruppe_kurzbz=".$this->db_add_param($this->gruppe_kurzbz).")"; + else + { + if ($this->ver!=null && $this->ver!='' && $this->ver!=' ') + $sql_query.=" AND (verband=".$this->db_add_param($this->ver).")"; + else + $sql_query.=" AND (verband IS NULL OR verband='' OR verband=' ')"; + if ($this->grp!=null && $this->grp!='' && $this->grp!=' ') + $sql_query.=" AND (gruppe=".$this->db_add_param($this->grp).")"; + else + $sql_query.=" AND (gruppe IS NULL OR gruppe='' OR gruppe=' ')"; + } + + + $sql_query.=")) AND unr!=".$this->db_add_param($this->unr); + + if (!$erg_stpl=$this->db_query($sql_query)) + { + $this->errormsg=$sql_query.$this->db_last_error(); + return true; + } + + $anz=$this->db_num_rows($erg_stpl); + + if ($anz>0) + { + $row = $this->db_fetch_object($erg_stpl); + $this->errormsg="Kollision Student ($stpl_table): $row->student_uid $row->datum/$row->stunde "; + return true; + } + else + { + return false; + } + } + + /** + * Gruppiert die einzelnen Lehrstunden zusammen + */ + public function getLehrstundenGruppiert() + { + $result = array(); + + foreach($this->lehrstunden as $row_lehrstunde) + { + $found=false; + //Pruefen ob bereits ein Eintrag vorhanden ist + //zu dem dazugruppiert werden kann + + /* + Kriterien fuer Gruppierung + - gleiches Datum + - gleiche Stunde + - gleiche UNR + */ + foreach($result as $key=>$row_result) + { + if($row_result->unr==$row_lehrstunde->unr + && $row_result->datum==$row_lehrstunde->datum + && $row_result->stunde==$row_lehrstunde->stunde) + { + $found=true; + //gleicher Eintrag gefunden + $grpidx = count($result[$key]->gruppen); + $result[$key]->gruppen[$grpidx]->studiengang_kz=$row_lehrstunde->studiengang_kz; + $result[$key]->gruppen[$grpidx]->sem=$row_lehrstunde->sem; + $result[$key]->gruppen[$grpidx]->ver=$row_lehrstunde->ver; + $result[$key]->gruppen[$grpidx]->grp=$row_lehrstunde->grp; + $result[$key]->gruppen[$grpidx]->gruppe_kurzbz=$row_lehrstunde->gruppe_kurzbz; + if(!in_array($row_lehrstunde->lektor_uid, $result[$key]->lektor_uid)) + $result[$key]->lektor_uid[]=$row_lehrstunde->lektor_uid; + if(!in_array($row_lehrstunde->ort_kurzbz, $result[$key]->ort_kurzbz)) + $result[$key]->ort_kurzbz[]=$row_lehrstunde->ort_kurzbz; + break; + } + } + + if(!$found) + { + // Wenn kein passender Eintrag vorhanden ist, + // wird ein neuer angelegt + $stunde=new lehrstunde(); + $stunde->stundenplan_id=$row_lehrstunde->stundenplan_id; + $stunde->lehreinheit_id=$row_lehrstunde->lehreinheit_id; + $stunde->farbe = (isset($row_lehrstunde->farbe)?$row_lehrstunde->farbe:'FFFFFF'); + $stunde->unr=$row_lehrstunde->unr; + $stunde->gruppen[0]->studiengang_kz=$row_lehrstunde->studiengang_kz; + $stunde->gruppen[0]->sem=$row_lehrstunde->sem; + $stunde->gruppen[0]->ver=$row_lehrstunde->ver; + $stunde->gruppen[0]->grp=$row_lehrstunde->grp; + $stunde->gruppen[0]->gruppe_kurzbz=$row_lehrstunde->gruppe_kurzbz; + $stunde->lektor_uid[]=$row_lehrstunde->lektor_uid; + $stunde->ort_kurzbz[]=$row_lehrstunde->ort_kurzbz; + $stunde->datum=$row_lehrstunde->datum; + $stunde->stunde=$row_lehrstunde->stunde; + $stunde->titel=$row_lehrstunde->titel; + $stunde->anmerkung=$row_lehrstunde->anmerkung; + $stunde->fix=$row_lehrstunde->fix; + $stunde->reservierung=$row_lehrstunde->reservierung; + $result[]=$stunde; + } + } + return $result; + } + + public function getStundenplanData($db_stpl_table, $lehrveranstaltung_id=null, $studiensemester_kurzbz=null, $lehreinheit_id=null, $mitarbeiter_uid=null, $student_uid=null) + { + + $qry = "SELECT + stpl.datum, min(stpl.stunde) as stundevon, max(stpl.stunde) as stundebis, + stpl.lehreinheit_id, lehrfach.bezeichnung as lehrfach_bezeichnung, + array_agg( + CASE WHEN gruppe_kurzbz is not null THEN gruppe_kurzbz + ELSE (SELECT UPPER(typ || kurzbz) FROM public.tbl_studiengang WHERE studiengang_kz=stpl.studiengang_kz) || COALESCE(stpl.semester,'0') || COALESCE(stpl.verband,'') || COALESCE(stpl.gruppe,'') + END) as gruppen, array_agg(mitarbeiter_uid) as lektoren, + array_agg(ort_kurzbz) as orte, + array_agg(titel) as titel + FROM + lehre.tbl_".$db_stpl_table." as stpl + JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) + JOIN lehre.tbl_lehrveranstaltung as lehrfach ON(tbl_lehreinheit.lehrfach_id=lehrfach.lehrveranstaltung_id) + WHERE "; + + if($lehrveranstaltung_id!='') + { + $qry.=" lehreinheit_id in(SELECT lehreinheit_id FROM lehre.tbl_lehreinheit + WHERE lehrveranstaltung_id=".$this->db_add_param($lehrveranstaltung_id)." + AND studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz).")"; + + } + elseif($lehreinheit_id!='') + { + $qry.=" lehreinheit_id=".$this->db_add_param($lehreinheit_id); + } + elseif($mitarbeiter_uid!='') + { + $qry.=" mitarbeiter_uid=".$this->db_add_param($mitarbeiter_uid)." AND lehreinheit_id IN( + SELECT + lehreinheit_id + FROM + lehre.tbl_lehreinheitmitarbeiter + JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) + WHERE mitarbeiter_uid=".$this->db_add_param($mitarbeiter_uid)." AND studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz).")"; + } + elseif($student_uid!='') + { + $qry.=" lehreinheit_id in ( + SELECT + lehreinheit_id + FROM + campus.vw_student_lehrveranstaltung + WHERE + uid=".$this->db_add_param($student_uid)." AND studiensemester_kurzbz=".$this->db_add_param($studiensemester_kurzbz).")"; + } + else + return false; + + $qry.="GROUP BY stpl.datum, stpl.unr, stpl.lehreinheit_id, lehrfach.bezeichnung + ORDER BY stpl.datum, min(stpl.stunde), stpl.unr, stpl.lehreinheit_id"; + + if($result = $this->db_query($qry)) + { + while($row = $this->db_fetch_object($result)) + { + $obj = new stdClass(); + + $obj->datum = $row->datum; + $obj->stundevon = $row->stundevon; + $obj->stundebis = $row->stundebis; + $obj->gruppen = array_unique($this->db_parse_array($row->gruppen)); + $obj->lektoren = array_unique($this->db_parse_array($row->lektoren)); + $obj->orte = array_unique($this->db_parse_array($row->orte)); + $obj->titel = array_filter(array_unique($this->db_parse_array($row->titel))); + $obj->lehrfach_bezeichnung = $row->lehrfach_bezeichnung; + $obj->lehreinheit_id = $row->lehreinheit_id; + + $this->result[] = $obj; + } + return true; + } + else + return false; + } +} + +?> From e6a11d0dc206b6a383e0749bf41920f2fb6039c4 Mon Sep 17 00:00:00 2001 From: ma0048 Date: Thu, 28 Oct 2021 12:30:10 +0200 Subject: [PATCH 19/22] abfrage ob die tbl vorhanden ist hinzugefuegt --- cis/private/tools/zeitaufzeichnung.php | 31 ++++++-- include/projekt.class.php | 102 +++++++++++++++++-------- include/projektphase.class.php | 60 +++++++++------ 3 files changed, 136 insertions(+), 57 deletions(-) diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index 1b311fdf3..e35a7f046 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -2177,6 +2177,7 @@ function exportProjectOverviewAsCSV($user, $delimiter = ',') function getDataForProjectOverviewCSV($user) { + $db = new basis_db(); $projects_of_user = new projekt(); $projects = $projects_of_user->getProjekteListForMitarbeiter($user); @@ -2188,6 +2189,8 @@ function getDataForProjectOverviewCSV($user) $csvData = array(); + $exists = @$db->db_query('SELECT 1 FROM sync.tbl_projects_timesheets_project LIMIT 1;'); + foreach ($projects as $project) { $titel = $project->titel; @@ -2196,9 +2199,16 @@ function getDataForProjectOverviewCSV($user) $projekt_phase_id = ''; $beginn = $project->beginn; $ende = $project->ende; - $sap_projekt_id = $project->sap_project_id; - $csvData[] = array($titel, $projekt_kurzbz, $projekt_phase, $projekt_phase_id, $beginn, $ende, $sap_projekt_id); + $inhalt = array($titel, $projekt_kurzbz, $projekt_phase, $projekt_phase_id, $beginn, $ende); + + if ($exists) + { + $sap_projekt_id = $project->sap_project_id; + $inhalt[] = $sap_projekt_id; + } + + $csvData[] = $inhalt; } foreach ($projektphasen as $prjp) @@ -2211,15 +2221,26 @@ function getDataForProjectOverviewCSV($user) $projekt_phase_id = $prjp->projektphase_id; $beginn = $prjp->start; $ende = $prjp->ende; - $sap_project_id = $project->sap_project_id; + $inhalt = array($titel, $projekt_kurzbz, $projekt_phase, $projekt_phase_id, $beginn, $ende); - array_push($csvData, array($titel, $projekt_kurzbz, $projekt_phase, $projekt_phase_id, $beginn, $ende, $sap_project_id) ); + if ($exists) + { + $project_task_id = $prjp->project_task_id; + $inhalt[] = $project_task_id; + } + + array_push($csvData, $inhalt); } } sort($csvData); //headers schreiben - array_unshift($csvData, array('PROJEKT', 'PROJEKT KURZBEZEICHNUNG', 'PROJEKTPHASE', 'PROJEKTPHASEN ID', 'START', 'PROJEKT ENDE', 'SAP PROJEKTNUMMER')); + $header = array('PROJEKT', 'PROJEKT KURZBEZEICHNUNG', 'PROJEKTPHASE', 'PROJEKTPHASEN ID', 'START', 'PROJEKT ENDE'); + + if ($exists) + $header[] = 'SAP PROJEKTNUMMER'; + + array_unshift($csvData, $header); return $csvData; } ?> diff --git a/include/projekt.class.php b/include/projekt.class.php index 0b2811248..9d1250982 100644 --- a/include/projekt.class.php +++ b/include/projekt.class.php @@ -420,45 +420,86 @@ class projekt extends basis_db function getProjekteListForMitarbeiter($mitarbeiter_uid, $projektphasen = false) { $projectList = array(); + $exists = @$this->db_query('SELECT 1 FROM sync.tbl_projects_timesheets_project LIMIT 1;'); + $qry = "SELECT DISTINCT - tbl_projekt.*, tbl_projects_timesheets_project.projects_timesheet_id - FROM - fue.tbl_ressource - JOIN fue.tbl_projekt_ressource USING(ressource_id) - JOIN fue.tbl_projekt USING(projekt_kurzbz) - LEFT JOIN sync.tbl_projects_timesheets_project USING(projekt_id) - WHERE (beginn<=now() or beginn is null) + tbl_projekt.* + "; + + if ($exists) + { + $qry .= ", tbl_sap_projects_timesheets.project_id + "; + } + + $qry .= "FROM + fue.tbl_ressource + JOIN fue.tbl_projekt_ressource USING(ressource_id) + JOIN fue.tbl_projekt USING(projekt_kurzbz) + "; + + if ($exists) + { + $qry .= "LEFT JOIN sync.tbl_projects_timesheets_project USING(projekt_id) + LEFT JOIN sync.tbl_sap_projects_timesheets USING(projects_timesheet_id) + "; + } + + $qry .= "WHERE (beginn<=now() or beginn is null) AND (ende + interval '1 month 1 day' >=now() OR ende is null) AND ( mitarbeiter_uid=" . $this->db_add_param($mitarbeiter_uid) . " OR student_uid=" . $this->db_add_param($mitarbeiter_uid) . " ) - AND tbl_projects_timesheets_project.projektphase_id IS NULL "; - if ($projektphasen == true) - $qry .= "UNION + if ($exists) + { + $qry .= "AND tbl_projects_timesheets_project.projektphase_id IS NULL + "; + } - SELECT DISTINCT - tbl_projekt.*, tbl_projects_timesheets_project.projects_timesheet_id - FROM - fue.tbl_projektphase - JOIN fue.tbl_projekt USING (projekt_kurzbz) - LEFT JOIN sync.tbl_projects_timesheets_project USING(projektphase_id) - JOIN fue.tbl_projekt_ressource USING (projektphase_id) - JOIN fue.tbl_ressource ON (tbl_ressource.ressource_id=tbl_projekt_ressource.ressource_id) - WHERE - ( - ( - (tbl_projekt.beginn<=now() or tbl_projekt.beginn is null) - AND (tbl_projekt.ende + interval '1 month 1 day' >=now() OR tbl_projekt.ende is null) - ) OR ( - (tbl_projektphase.start<=now() or tbl_projektphase.start is null) - AND (tbl_projektphase.ende + interval '1 month 1 day' >=now() OR tbl_projektphase.ende is null) - ) - ) - AND mitarbeiter_uid=" . $this->db_add_param($mitarbeiter_uid); + if ($projektphasen == true) + { + $qry .= "UNION + SELECT DISTINCT + tbl_projekt.* + "; + + if ($exists) + { + $qry .= ", tbl_sap_projects_timesheets.project_task_id + "; + } + + $qry .= "FROM fue.tbl_projektphase + JOIN fue.tbl_projekt USING (projekt_kurzbz) + JOIN fue.tbl_projekt_ressource USING(projektphase_id) + JOIN fue.tbl_ressource ON (tbl_ressource.ressource_id=tbl_projekt_ressource.ressource_id) + "; + + if ($exists) + { + $qry .= "LEFT JOIN sync.tbl_projects_timesheets_project ON tbl_projects_timesheets_project.projektphase_id = tbl_projekt_ressource.projektphase_id + LEFT JOIN sync.tbl_sap_projects_timesheets USING(projects_timesheet_id) + "; + } + + $qry .= "WHERE + ( + ( + (tbl_projekt.beginn<=now() or tbl_projekt.beginn is null) + AND (tbl_projekt.ende + interval '1 month 1 day' >=now() OR tbl_projekt.ende is null) + ) OR ( + (tbl_projektphase.start<=now() or tbl_projektphase.start is null) + AND (tbl_projektphase.ende + interval '1 month 1 day' >=now() OR tbl_projektphase.ende is null) + ) + ) + "; + }; + + $qry .= "AND mitarbeiter_uid=" . $this->db_add_param($mitarbeiter_uid); if ($result = $this->db_query($qry)) { while ($row = $this->db_fetch_object($result)) { @@ -471,7 +512,8 @@ class projekt extends basis_db $obj->beginn = $row->beginn; $obj->ende = $row->ende; $obj->oe_kurzbz = $row->oe_kurzbz; - $obj->sap_project_id = $row->projects_timesheet_id; + if ($exists) + $obj->sap_project_id = $row->project_id; $this->result[] = $obj; diff --git a/include/projektphase.class.php b/include/projektphase.class.php index 4957847c4..21d50fb68 100644 --- a/include/projektphase.class.php +++ b/include/projektphase.class.php @@ -48,7 +48,7 @@ class projektphase extends basis_db public $insertvon; // bigint public $updateamum; // timestamp public $updatevon; // bigint - public $sap_project_id; + public $project_task_id; /** @@ -686,27 +686,42 @@ public function getFortschritt($projektphase_id) public function getProjectphaseForMitarbeiter($mitarbeiter_uid) { $projecphasetList = array(); + $exists = @$this->db_query('SELECT 1 FROM sync.tbl_projects_timesheets_project LIMIT 1;'); - $qry = " - SELECT - DISTINCT tbl_projektphase.*,tbl_projekt.titel, tbl_projects_timesheets_project.projects_timesheet_id - FROM - fue.tbl_projektphase - JOIN fue.tbl_projekt USING (projekt_kurzbz) - LEFT JOIN sync.tbl_projects_timesheets_project USING(projektphase_id) - JOIN fue.tbl_projekt_ressource USING (projektphase_id) - JOIN fue.tbl_ressource ON (tbl_ressource.ressource_id=tbl_projekt_ressource.ressource_id) - WHERE - ( - ( - (tbl_projekt.beginn<=now() or tbl_projekt.beginn is null) - AND (tbl_projekt.ende + interval '1 month 1 day' >=now() OR tbl_projekt.ende is null) - ) AND ( - (tbl_projektphase.start<=now() or tbl_projektphase.start is null) - AND (tbl_projektphase.ende + interval '1 month 1 day' >=now() OR tbl_projektphase.ende is null) - ) - ) - AND mitarbeiter_uid=" . $this->db_add_param($mitarbeiter_uid); + $qry = "SELECT DISTINCT tbl_projektphase.*, + tbl_projekt.titel + "; + + if ($exists) + { + $qry .= ", tbl_sap_projects_timesheets.project_task_id + "; + } + + $qry .= "FROM fue.tbl_projektphase + JOIN fue.tbl_projekt USING (projekt_kurzbz) + JOIN fue.tbl_projekt_ressource USING(projektphase_id) + JOIN fue.tbl_ressource ON (tbl_ressource.ressource_id=tbl_projekt_ressource.ressource_id) + "; + + if ($exists) + { + $qry .= "LEFT JOIN sync.tbl_projects_timesheets_project ON tbl_projects_timesheets_project.projektphase_id = tbl_projekt_ressource.projektphase_id + LEFT JOIN sync.tbl_sap_projects_timesheets USING(projects_timesheet_id) + "; + } + + $qry .= "WHERE + ( + ( + (tbl_projekt.beginn<=now() or tbl_projekt.beginn is null) + AND (tbl_projekt.ende + interval '1 month 1 day' >=now() OR tbl_projekt.ende is null) + ) AND ( + (tbl_projektphase.start<=now() or tbl_projektphase.start is null) + AND (tbl_projektphase.ende + interval '1 month 1 day' >=now() OR tbl_projektphase.ende is null) + ) + ) + AND mitarbeiter_uid=" . $this->db_add_param($mitarbeiter_uid); if($result = $this->db_query($qry)) { @@ -731,7 +746,8 @@ public function getFortschritt($projektphase_id) $obj->insertvon = $row->insertvon; $obj->updateamum = $row->updateamum; $obj->updatevon = $row->updatevon; - $obj->sap_project_id = $row->projects_timesheet_id; + if ($exists) + $obj->project_task_id = $row->project_task_id; $this->result[] = $obj; From ef937368912242823532ec0a52bd098e9e925eda Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Thu, 28 Oct 2021 12:31:48 +0200 Subject: [PATCH 20/22] eucovidqr phrases modified --- system/phrasesupdate.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index e74003292..17befb2fb 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -12840,13 +12840,13 @@ array( 'phrases' => array( array( 'sprache' => 'German', - 'text' => "Hier kann ein Zertifikat mit QR-Code selbst erfasst werden.", + 'text' => "Hier kann ein Digitales COVID-Zertifikat der EU mit QR-Code selbst erfasst werden.", 'description' => '', 'insertvon' => 'system' ), array( 'sprache' => 'English', - 'text' => "a certificate with qr-code can be self registered here.", + 'text' => "an EU Digital COVID Certificate with QR code can be self registered here.", 'description' => '', 'insertvon' => 'system' ) @@ -12866,7 +12866,7 @@ array( ), array( 'sprache' => 'English', - 'text' => "if the certificate does not contain a qr-code or self registration fails, the certificate can be manually registered at the front desk.", + 'text' => "if the certificate does not contain a QR code or self registration fails, the certificate can be manually registered at the front desk.", 'description' => '', 'insertvon' => 'system' ) From 0d4c041688aba3fad95c252c9c90972cb75a20ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Fri, 29 Oct 2021 15:26:45 +0200 Subject: [PATCH 21/22] Organisationseinheiten im FAS werden nach der Bezeichnung sortiert statt nach der Kurzbezeichnung --- rdf/organisationseinheit.rdf.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rdf/organisationseinheit.rdf.php b/rdf/organisationseinheit.rdf.php index f31d542ce..ee66697a9 100644 --- a/rdf/organisationseinheit.rdf.php +++ b/rdf/organisationseinheit.rdf.php @@ -35,7 +35,7 @@ require_once('../include/organisationseinheit.class.php'); // raumtypen holen $org=new organisationseinheit(); -$org->getAll(); +$org->getAll(null, null, 'organisationseinheittyp_kurzbz, bezeichnung'); $rdf_url='http://www.technikum-wien.at/organisationseinheit'; @@ -64,4 +64,4 @@ foreach ($org->result as $oe) ?> - \ No newline at end of file + From 69613d35c7af845f8ce3350414295179b533fc5a Mon Sep 17 00:00:00 2001 From: Manfred Date: Fri, 29 Oct 2021 17:06:29 +0200 Subject: [PATCH 22/22] =?UTF-8?q?Filter=20Widget=20f=C3=BCr=20Services=20u?= =?UTF-8?q?nd=20Spalte=20"Content=20ID"=20eingeblendet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vilesci/stammdaten/service_details.php | 2 +- vilesci/stammdaten/service_uebersicht.php | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/vilesci/stammdaten/service_details.php b/vilesci/stammdaten/service_details.php index 70605f420..686ed52f4 100644 --- a/vilesci/stammdaten/service_details.php +++ b/vilesci/stammdaten/service_details.php @@ -149,7 +149,7 @@ $datum_obj = new datum(); { echo 'Daten erfolgreich gespeichert'; echo "\n"; $action='update'; $service_id = $service->service_id; diff --git a/vilesci/stammdaten/service_uebersicht.php b/vilesci/stammdaten/service_uebersicht.php index b8381667e..756f4a685 100644 --- a/vilesci/stammdaten/service_uebersicht.php +++ b/vilesci/stammdaten/service_uebersicht.php @@ -51,9 +51,9 @@ echo ' { $("#myTable").tablesorter( { - sortList: [[3,0],[2,0]], - widgets: [\'zebra\'], - headers: {8:{sorter:false}} + sortList: [[2,0]], + widgets: [\'zebra\',\'filter\', \'stickyHeaders\'], + headers: {9:{sorter:false,filter: false}} }); } ); @@ -127,6 +127,7 @@ echo ' + @@ -144,6 +145,7 @@ foreach($service->result as $row) echo ''; $title = (isset($servicekategorie_arr[$row->servicekategorie_kurzbz])?$servicekategorie_arr[$row->servicekategorie_kurzbz]:''); echo ''; + echo ''; echo ''; echo ''; echo '';
Beschreibung Organisationseinheit KategorieContent ID Design Betrieb Operativ',$row->oe_kurzbz,'',$row->servicekategorie_kurzbz,'',$row->content_id,'',$row->design_uid,'',$row->betrieb_uid,'',$row->operativ_uid,'