From b22c9753559f65b2a979c64353a4d24516a95094 Mon Sep 17 00:00:00 2001 From: FHBGLD <33415881+FHBGLD@users.noreply.github.com> Date: Tue, 4 May 2021 14:19:48 +0200 Subject: [PATCH 01/31] Create set_gemeinde.php --- vilesci/stammdaten/set_gemeinde.php | 163 ++++++++++++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 vilesci/stammdaten/set_gemeinde.php diff --git a/vilesci/stammdaten/set_gemeinde.php b/vilesci/stammdaten/set_gemeinde.php new file mode 100644 index 000000000..df07be120 --- /dev/null +++ b/vilesci/stammdaten/set_gemeinde.php @@ -0,0 +1,163 @@ + delete from bis.tbl_gemeinde; +Skript aufrufen, csv auswählen und hochladen. +Datei wird eingelesen und in die DB gespeichert. +*/ + +require_once('../../config/system.config.inc.php'); +require_once(DOC_ROOT.'include/functions.inc.php'); +require_once(DOC_ROOT.'include/benutzerberechtigung.class.php'); +require_once(DOC_ROOT.'include/gemeinde.class.php'); +require_once(DOC_ROOT.'include/benutzerberechtigung.class.php'); + + +$user = get_uid(); + +$rechte = new benutzerberechtigung(); +$rechte->getBerechtigungen($user); + +if(!$rechte->isBerechtigt('basis/gemeinde')) { + die('Sie haben keine Berechtigung fuer diese Seite'); +} + +$tmp_gemeinde_ar = array(); + +if(isset($_FILES['parsefile']) && $_FILES['parsefile']['error'] == 0) { + + $rows = array_map('str_getcsv', file( $_FILES['parsefile']['tmp_name'] )); + $header = array_shift($rows); + $data = array(); + foreach($rows as $row) { + $data[] = array_combine($header, $row); + } + + foreach ($data as $gemeinde_details) { + + //Wenn nicht gültig dann überspringen + if ($gemeinde_details['Gültig'] == 'Nein') continue; + + //es können mehrere plz in einer zeile stehen + $plzs = explode(' ', trim($gemeinde_details['PLZ'])); + + foreach ($plzs as $plz) { + $tmp_obj_gemeinde = null; + $tmp_obj_gemeinde = new gemeinde(); + $tmp_obj_gemeinde->plz = $plz; + $tmp_obj_gemeinde->name = $gemeinde_details['Gemeindename']; + $tmp_obj_gemeinde->ortschaftskennziffer = $gemeinde_details['Ortschaftskennziffer']; + $tmp_obj_gemeinde->ortschaftsname = $gemeinde_details['Ortschaftsname']; + $tmp_obj_gemeinde->bulacode = $gemeinde_details['BULA_Code']; + $tmp_obj_gemeinde->bulabez = $gemeinde_details['BULA_Bez']; + $tmp_obj_gemeinde->kennziffer = $gemeinde_details['Gemeindekennziffer']; + + //print_r($tmp_obj_gemeinde); + $tmp_obj_gemeinde->save(); + $tmp_gemeinde_ar[] = $tmp_obj_gemeinde; + // if ($tmp_obj_gemeinde->save()) { + // echo "
"; + // echo "gemeinde save true"; + // echo "
"; + // print_r($tmp_obj_gemeinde); + // echo "
"; + // } else { + // echo "
"; + // echo "gemeinde save false"; + // echo "
"; + // print_r($tmp_obj_gemeinde); + // echo "
"; + // } + } + } +} +?> + + + + + + set gemeinde skript + + +
Filesyntax: (Standard xlsx-File von https://www.bis.ac.at/BISSuite, gespeichert als csv! erste Zeile ist Header (alles was oberhalb ist kann entfernt werden) -> dann Daten) +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GemeindekennzifferGemeindenameOrtschaftskennzifferOrtschaftsnamePLZBULA_CodeBULA_BezGültig
10101Eisenstadt1Eisenstadt70001BGLDJa
10101Eisenstadt2Kleinhöflein im Burgenland7000 7001 70021BGLDJa
........................
+
+
+
PLZ Kodextabelle + +
+
+
+				
+			
+
+ + From aac4467d8a82a1a29f2422b37a19383932bdad57 Mon Sep 17 00:00:00 2001 From: FHBGLD <33415881+FHBGLD@users.noreply.github.com> Date: Wed, 5 May 2021 11:52:12 +0200 Subject: [PATCH 02/31] Update set_gemeinde.php --- vilesci/stammdaten/set_gemeinde.php | 92 +++++++++++++++-------------- 1 file changed, 48 insertions(+), 44 deletions(-) diff --git a/vilesci/stammdaten/set_gemeinde.php b/vilesci/stammdaten/set_gemeinde.php index df07be120..5cc2f0097 100644 --- a/vilesci/stammdaten/set_gemeinde.php +++ b/vilesci/stammdaten/set_gemeinde.php @@ -101,55 +101,59 @@ if(isset($_FILES['parsefile']) && $_FILES['parsefile']['error'] == 0) { set gemeinde skript -
Filesyntax: (Standard xlsx-File von https://www.bis.ac.at/BISSuite, gespeichert als csv! erste Zeile ist Header (alles was oberhalb ist kann entfernt werden) -> dann Daten) -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GemeindekennzifferGemeindenameOrtschaftskennzifferOrtschaftsnamePLZBULA_CodeBULA_BezGültig
10101Eisenstadt1Eisenstadt70001BGLDJa
10101Eisenstadt2Kleinhöflein im Burgenland7000 7001 70021BGLDJa
........................
+
+ Filesyntax:(Standard xlsx-File von https://www.bis.ac.at/BISSuite, gespeichert als csv! erste Zeile ist Header (alles was oberhalb ist kann entfernt werden) -> dann Daten) +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GemeindekennzifferGemeindenameOrtschaftskennzifferOrtschaftsnamePLZBULA_CodeBULA_BezGültig
10101Eisenstadt1Eisenstadt70001BGLDJa
10101Eisenstadt2Kleinhöflein im Burgenland7000 7001 70021BGLDJa
........................


PLZ Kodextabelle
+
 				
Date: Fri, 6 Aug 2021 10:46:14 +0200
Subject: [PATCH 03/31] =?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 30dc43644237e826a54057f473e169e7a4778c05 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= 
Date: Wed, 15 Sep 2021 13:49:20 +0200
Subject: [PATCH 04/31] =?UTF-8?q?Berechtigung=20f=C3=BCr=20basis/gemeinde?=
 =?UTF-8?q?=20hinzugef=C3=BCgt=20Pfade=20korrigiert?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 system/dbupdate_3.3.php             | 14 ++++++++++++++
 vilesci/stammdaten/set_gemeinde.php | 20 ++++++++++----------
 2 files changed, 24 insertions(+), 10 deletions(-)

diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php
index 3aef03b4d..a75b648fa 100644
--- a/system/dbupdate_3.3.php
+++ b/system/dbupdate_3.3.php
@@ -4962,6 +4962,20 @@ if(!@$db->db_query("SELECT statusgrund_kurzbz FROM public.tbl_status_grund LIMIT
 		echo '
Neue Spalte statusgrund_kurzbz zu Tabelle public.tbl_status_grund hinzugefügt'; } +// Add permission to set gemeinde +if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berechtigung_kurzbz = 'basis/gemeinde';")) +{ + if($db->db_num_rows($result) == 0) + { + $qry = "INSERT INTO system.tbl_berechtigung(berechtigung_kurzbz, beschreibung) VALUES('basis/gemeinde', 'Gemeindedaten pflegen');"; + + if(!$db->db_query($qry)) + echo 'system.tbl_berechtigung '.$db->db_last_error().'
'; + else + echo ' system.tbl_berechtigung: Added permission for basis/gemeinde
'; + } +} + // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

Pruefe Tabellen und Attribute!

'; diff --git a/vilesci/stammdaten/set_gemeinde.php b/vilesci/stammdaten/set_gemeinde.php index 5cc2f0097..c59e3264b 100644 --- a/vilesci/stammdaten/set_gemeinde.php +++ b/vilesci/stammdaten/set_gemeinde.php @@ -28,10 +28,10 @@ Datei wird eingelesen und in die DB gespeichert. */ require_once('../../config/system.config.inc.php'); -require_once(DOC_ROOT.'include/functions.inc.php'); -require_once(DOC_ROOT.'include/benutzerberechtigung.class.php'); -require_once(DOC_ROOT.'include/gemeinde.class.php'); -require_once(DOC_ROOT.'include/benutzerberechtigung.class.php'); +require_once(dirname(__FILE__).'/../../include/functions.inc.php'); +require_once(dirname(__FILE__).'/../../include/benutzerberechtigung.class.php'); +require_once(dirname(__FILE__).'/../../include/gemeinde.class.php'); +require_once(dirname(__FILE__).'/../../include/benutzerberechtigung.class.php'); $user = get_uid(); @@ -55,13 +55,13 @@ if(isset($_FILES['parsefile']) && $_FILES['parsefile']['error'] == 0) { } foreach ($data as $gemeinde_details) { - + //Wenn nicht gültig dann überspringen if ($gemeinde_details['Gültig'] == 'Nein') continue; - + //es können mehrere plz in einer zeile stehen $plzs = explode(' ', trim($gemeinde_details['PLZ'])); - + foreach ($plzs as $plz) { $tmp_obj_gemeinde = null; $tmp_obj_gemeinde = new gemeinde(); @@ -72,7 +72,7 @@ if(isset($_FILES['parsefile']) && $_FILES['parsefile']['error'] == 0) { $tmp_obj_gemeinde->bulacode = $gemeinde_details['BULA_Code']; $tmp_obj_gemeinde->bulabez = $gemeinde_details['BULA_Bez']; $tmp_obj_gemeinde->kennziffer = $gemeinde_details['Gemeindekennziffer']; - + //print_r($tmp_obj_gemeinde); $tmp_obj_gemeinde->save(); $tmp_gemeinde_ar[] = $tmp_obj_gemeinde; @@ -156,9 +156,9 @@ if(isset($_FILES['parsefile']) && $_FILES['parsefile']['error'] == 0) {
-				
 			
From 8075ba3a8484da34a95156aefb39e1e51b5fb6fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Wed, 15 Sep 2021 15:57:15 +0200 Subject: [PATCH 05/31] =?UTF-8?q?Menueeintrag=20hinzugef=C3=BCgt=20f=C3=BC?= =?UTF-8?q?r=20Gemeinde?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/tw/vilesci_menu_main.inc.php | 1 + vilesci/stammdaten/set_gemeinde.php | 45 +++++++++++----------------- 2 files changed, 19 insertions(+), 27 deletions(-) diff --git a/include/tw/vilesci_menu_main.inc.php b/include/tw/vilesci_menu_main.inc.php index d465eba28..34f44ec66 100644 --- a/include/tw/vilesci_menu_main.inc.php +++ b/include/tw/vilesci_menu_main.inc.php @@ -190,6 +190,7 @@ $menu=array 'StudienplanZuteilung'=>array('name'=>'Studienplan Zuteilung', 'link'=>'lehre/studienplan_zuteilung.php', 'target'=>'main','permissions'=>array('assistenz')), 'lv_merge'=>array('name'=>'LVs zusammenlegen', 'link'=>'lehre/lv_merge.php', 'target'=>'main','permissions'=>array('lehre/lehrveranstaltung')), 'akteupdate'=>array('name'=>'Akten überschreiben', 'link'=>'personen/akteupdate.php', 'target'=>'main','permissions'=>array('admin')), + 'gemeindeupdate'=>array('name'=>'Gemeinden aktualisieren', 'link'=>'stammdaten/set_gemeinde.php', 'target'=>'main','permissions'=>array('basis/gemeinde')), ), 'Auswertung'=> array ( diff --git a/vilesci/stammdaten/set_gemeinde.php b/vilesci/stammdaten/set_gemeinde.php index c59e3264b..e461c7872 100644 --- a/vilesci/stammdaten/set_gemeinde.php +++ b/vilesci/stammdaten/set_gemeinde.php @@ -26,35 +26,37 @@ Die Tabelle bis.tbl_gemeinde löschen. -> delete from bis.tbl_gemeinde; Skript aufrufen, csv auswählen und hochladen. Datei wird eingelesen und in die DB gespeichert. */ - require_once('../../config/system.config.inc.php'); require_once(dirname(__FILE__).'/../../include/functions.inc.php'); require_once(dirname(__FILE__).'/../../include/benutzerberechtigung.class.php'); require_once(dirname(__FILE__).'/../../include/gemeinde.class.php'); require_once(dirname(__FILE__).'/../../include/benutzerberechtigung.class.php'); - $user = get_uid(); $rechte = new benutzerberechtigung(); $rechte->getBerechtigungen($user); -if(!$rechte->isBerechtigt('basis/gemeinde')) { +if (!$rechte->isBerechtigt('basis/gemeinde')) +{ die('Sie haben keine Berechtigung fuer diese Seite'); } $tmp_gemeinde_ar = array(); -if(isset($_FILES['parsefile']) && $_FILES['parsefile']['error'] == 0) { +if (isset($_FILES['parsefile']) && $_FILES['parsefile']['error'] == 0) +{ - $rows = array_map('str_getcsv', file( $_FILES['parsefile']['tmp_name'] )); + $rows = array_map('str_getcsv', file( $_FILES['parsefile']['tmp_name'] )); $header = array_shift($rows); - $data = array(); - foreach($rows as $row) { + $data = array(); + foreach ($rows as $row) + { $data[] = array_combine($header, $row); } - foreach ($data as $gemeinde_details) { + foreach ($data as $gemeinde_details) + { //Wenn nicht gültig dann überspringen if ($gemeinde_details['Gültig'] == 'Nein') continue; @@ -62,7 +64,8 @@ if(isset($_FILES['parsefile']) && $_FILES['parsefile']['error'] == 0) { //es können mehrere plz in einer zeile stehen $plzs = explode(' ', trim($gemeinde_details['PLZ'])); - foreach ($plzs as $plz) { + foreach ($plzs as $plz) + { $tmp_obj_gemeinde = null; $tmp_obj_gemeinde = new gemeinde(); $tmp_obj_gemeinde->plz = $plz; @@ -73,35 +76,22 @@ if(isset($_FILES['parsefile']) && $_FILES['parsefile']['error'] == 0) { $tmp_obj_gemeinde->bulabez = $gemeinde_details['BULA_Bez']; $tmp_obj_gemeinde->kennziffer = $gemeinde_details['Gemeindekennziffer']; - //print_r($tmp_obj_gemeinde); $tmp_obj_gemeinde->save(); $tmp_gemeinde_ar[] = $tmp_obj_gemeinde; - // if ($tmp_obj_gemeinde->save()) { - // echo "
"; - // echo "gemeinde save true"; - // echo "
"; - // print_r($tmp_obj_gemeinde); - // echo "
"; - // } else { - // echo "
"; - // echo "gemeinde save false"; - // echo "
"; - // print_r($tmp_obj_gemeinde); - // echo "
"; - // } } } } ?> - - set gemeinde skript + Set Gemeinde + -
+

Gemeinden aktualisieren

+ Diese Seite dient dazu die Gemeinde Kodex Tabelle zu aktualisieren.

Filesyntax:(Standard xlsx-File von https://www.bis.ac.at/BISSuite, gespeichert als csv! erste Zeile ist Header (alles was oberhalb ist kann entfernt werden) -> dann Daten)

@@ -157,7 +147,8 @@ if(isset($_FILES['parsefile']) && $_FILES['parsefile']['error'] == 0) {
 				

From c563f614bb01037768f7e2a1735fddb957422f4d Mon Sep 17 00:00:00 2001
From: KarpAlex 
Date: Tue, 21 Sep 2021 19:08:22 +0200
Subject: [PATCH 06/31] =?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 07/31] 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 08/31] 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 a8327a20abcb356e6d154fb5b19001bfae6b6c26 Mon Sep 17 00:00:00 2001
From: ma0048 
Date: Fri, 8 Oct 2021 10:40:10 +0200
Subject: [PATCH 09/31] excel report angepasst

---
 content/statistik/lvplanung.xls.php | 65 +++++++++++++++++++++++++----
 1 file changed, 58 insertions(+), 7 deletions(-)

diff --git a/content/statistik/lvplanung.xls.php b/content/statistik/lvplanung.xls.php
index 3b74992fa..09af429ec 100644
--- a/content/statistik/lvplanung.xls.php
+++ b/content/statistik/lvplanung.xls.php
@@ -29,6 +29,7 @@ require_once('../../include/benutzer.class.php');
 require_once('../../include/mitarbeiter.class.php');
 require_once('../../include/organisationseinheit.class.php');
 require_once('../../include/benutzerberechtigung.class.php');
+require_once('../../include/studiensemester.class.php');
 
 $user = get_uid();
 
@@ -114,6 +115,9 @@ $oe_arr[''] = '';
 $stg_obj = new studiengang();
 $stg_obj->getAll('typ, kurzbz', false);
 
+$stsem = new studiensemester();
+
+$previousStsem = $stsem->getPreviousFrom($stsem->getPreviousFrom($studiensemester_kurzbz));
 $qry = "
 SELECT tbl_lehrveranstaltung.bezeichnung AS lf_bezeichnung,
 	tbl_lehrveranstaltung.studiengang_kz,
@@ -124,18 +128,21 @@ SELECT tbl_lehrveranstaltung.bezeichnung AS lf_bezeichnung,
 	tbl_lehreinheitmitarbeiter.stundensatz,
 	tbl_lehreinheitmitarbeiter.semesterstunden lemss,
 	tbl_lehreinheitmitarbeiter.planstunden,
+	tbl_lehreinheitmitarbeiter.anmerkung as mitarbeiter_anmerkung,
 	tbl_lehreinheit.stundenblockung,
 	tbl_lehreinheit.wochenrythmus,
 	tbl_lehreinheit.raumtyp,
 	tbl_lehreinheit.raumtypalternativ,
-	tbl_lehreinheit.anmerkung,
+	tbl_lehreinheit.anmerkung as lehreinheit_anmerkung,
 	tbl_lehreinheit.studiensemester_kurzbz,
+	tbl_lehreinheit.start_kw,
 	tbl_lehrveranstaltung.ects,
 	tbl_lehrveranstaltung.semesterstunden,
 	tbl_lehrveranstaltung.semesterstunden AS sws,
 	tbl_lehrveranstaltung.lehrform_kurzbz,
 	tbl_lehrveranstaltung.lehrveranstaltung_id,
 	tbl_lehrveranstaltung.orgform_kurzbz,
+	tbl_lehrveranstaltung.sprache,
 	(
 		SELECT nachname
 		FROM PUBLIC.tbl_person
@@ -163,6 +170,16 @@ SELECT tbl_lehrveranstaltung.bezeichnung AS lf_bezeichnung,
 		FROM lehre.tbl_lehrform
 		WHERE lehre.tbl_lehrform.lehrform_kurzbz = tbl_lehrveranstaltung.lehrform_kurzbz LIMIT 1
 		) AS lv_type,
+	(
+			SELECT STRING_AGG(DISTINCT (person.nachname || ' ' || person.vorname), ', ')
+			FROM lehre.tbl_lehrveranstaltung slv
+			JOIN lehre.tbl_lehreinheit sle USING (lehrveranstaltung_id)
+			JOIN lehre.tbl_lehreinheitmitarbeiter slema USING (lehreinheit_id)
+			JOIN PUBLIC.tbl_benutzer benutzer ON benutzer.uid = slema.mitarbeiter_uid
+			JOIN PUBLIC.tbl_person person USING (person_id)
+			WHERE lehre.tbl_lehreinheit.lehrveranstaltung_id = sle.lehrveranstaltung_id
+			AND sle.studiensemester_kurzbz = " . $db->db_add_param($previousStsem) . "
+		) AS vorjahr_lektor,
 	tbl_lehrveranstaltung.lehrform_kurzbz
 FROM lehre.tbl_lehrveranstaltung
 JOIN lehre.tbl_lehreinheit USING (lehrveranstaltung_id)
@@ -217,6 +234,10 @@ $worksheet->write($zeile,++$spalte,"LektorIn", $format_bold);
 $maxlength[$spalte]=6;
 $worksheet->write($zeile,++$spalte,"Fixangestellt", $format_bold);
 $maxlength[$spalte]=10;
+$worksheet->write($zeile,++$spalte,"Vorjahrslektor", $format_bold);
+$maxlength[$spalte]=12;
+$worksheet->write($zeile,++$spalte,"Wunschlektor", $format_bold);
+$maxlength[$spalte]=12;
 $worksheet->write($zeile,++$spalte,"Bezeichnung", $format_bold);
 $maxlength[$spalte]=25;
 $worksheet->write($zeile,++$spalte,"Semester", $format_bold);
@@ -239,8 +260,12 @@ $worksheet->write($zeile,++$spalte,"Raum", $format_bold);
 $maxlength[$spalte]=4;
 $worksheet->write($zeile,++$spalte,"Raum alternativ", $format_bold);
 $maxlength[$spalte]=15;
-$worksheet->write($zeile,++$spalte,"Anmerkung", $format_bold);
-$maxlength[$spalte]=9;
+
+$worksheet->write($zeile,++$spalte,"Anmerkung für LV Planung", $format_bold);
+$maxlength[$spalte]=25;
+
+$worksheet->write($zeile,++$spalte,"Anmerkung für Dpt/KF", $format_bold);
+$maxlength[$spalte]=25;
 
 $worksheet->write($zeile,++$spalte,"LV-Leitung", $format_bold);
 $maxlength[$spalte]=9;
@@ -260,6 +285,16 @@ $maxlength[$spalte]=9;
 $worksheet->write($zeile,++$spalte,"Organisationsform", $format_bold);
 $maxlength[$spalte]=15;
 
+$worksheet->write($zeile,++$spalte,"Sprache (LV)", $format_bold);
+$maxlength[$spalte]=10;
+
+$worksheet->write($zeile,++$spalte,"Software", $format_bold);
+$maxlength[$spalte]=10;
+
+$worksheet->write($zeile,++$spalte,"Start in KW", $format_bold);
+$maxlength[$spalte]=10;
+
+
 if($result = $db->db_query($qry))
 {
 	while($row = $db->db_fetch_object($result))
@@ -290,6 +325,10 @@ if($result = $db->db_query($qry))
 		if($maxlength[$spalte]fixangestellt ? 'Ja' : 'Nein'))
 			$maxlength[$spalte]=mb_strlen($mitarbeiter->fixangestellt ? 'Ja' : 'Nein');
 
+		$worksheet->write($zeile,++$spalte, $row->vorjahr_lektor);
+
+		$worksheet->write($zeile,++$spalte, '');
+
 		//Lehrfach
 		$worksheet->write($zeile,++$spalte,$row->lf_bezeichnung);
 		//if($maxlength[$spalte]lf_bezeichnung))
@@ -354,10 +393,13 @@ if($result = $db->db_query($qry))
 		$worksheet->write($zeile,++$spalte,$row->raumtypalternativ);
 		if($maxlength[$spalte]raumtypalternativ))
 			$maxlength[$spalte]=mb_strlen($row->raumtypalternativ);
-		//Anmerkung
-		$worksheet->write($zeile,++$spalte,$row->anmerkung);
-		//if($maxlength[$spalte]anmerkung))
-			//$maxlength[$spalte]=mb_strlen($row->anmerkung);
+
+		//Anmerkung für LV Planung
+		$worksheet->write($zeile,++$spalte,$row->lehreinheit_anmerkung
+);
+
+		//Anmerkung für Dpt/KF
+		$worksheet->write($zeile,++$spalte,$row->mitarbeiter_anmerkung);
 
 		//LV-Leitung
 		$worksheet->write($zeile,++$spalte,$row->lv_leitung.' '.$row->lv_leitung_vorname);
@@ -394,6 +436,15 @@ if($result = $db->db_query($qry))
 		$worksheet->write($zeile,++$spalte,$row->orgform_kurzbz);
 		if($maxlength[$spalte]orgform_kurzbz))
 			$maxlength[$spalte]=mb_strlen($row->orgform_kurzbz);
+
+		//Sprache (LV)
+		$worksheet->write($zeile,++$spalte,$row->sprache);
+
+		//Software
+		$worksheet->write($zeile,++$spalte,'');
+
+		//Software
+		$worksheet->write($zeile,++$spalte,$row->start_kw);
 	}
 
 	//Betreuungen

From 20f583f7e25321bc4640d2c613502ee2eff4c7e4 Mon Sep 17 00:00:00 2001
From: ma0048 
Date: Fri, 8 Oct 2021 10:44:27 +0200
Subject: [PATCH 10/31] excel report angepasst

---
 content/statistik/lvplanung.xls.php | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/content/statistik/lvplanung.xls.php b/content/statistik/lvplanung.xls.php
index 09af429ec..ff6faa508 100644
--- a/content/statistik/lvplanung.xls.php
+++ b/content/statistik/lvplanung.xls.php
@@ -178,6 +178,7 @@ SELECT tbl_lehrveranstaltung.bezeichnung AS lf_bezeichnung,
 			JOIN PUBLIC.tbl_benutzer benutzer ON benutzer.uid = slema.mitarbeiter_uid
 			JOIN PUBLIC.tbl_person person USING (person_id)
 			WHERE lehre.tbl_lehreinheit.lehrveranstaltung_id = sle.lehrveranstaltung_id
+			AND tbl_lehrveranstaltung.lehrform_kurzbz = slv.lehrform_kurzbz
 			AND sle.studiensemester_kurzbz = " . $db->db_add_param($previousStsem) . "
 		) AS vorjahr_lektor,
 	tbl_lehrveranstaltung.lehrform_kurzbz
@@ -395,8 +396,7 @@ if($result = $db->db_query($qry))
 			$maxlength[$spalte]=mb_strlen($row->raumtypalternativ);
 
 		//Anmerkung für LV Planung
-		$worksheet->write($zeile,++$spalte,$row->lehreinheit_anmerkung
-);
+		$worksheet->write($zeile,++$spalte,$row->lehreinheit_anmerkung);
 
 		//Anmerkung für Dpt/KF
 		$worksheet->write($zeile,++$spalte,$row->mitarbeiter_anmerkung);
@@ -443,7 +443,7 @@ if($result = $db->db_query($qry))
 		//Software
 		$worksheet->write($zeile,++$spalte,'');
 
-		//Software
+		//Start in KW
 		$worksheet->write($zeile,++$spalte,$row->start_kw);
 	}
 

From 5954237851a6688b4068be5d70ff8a46c36e4b4e Mon Sep 17 00:00:00 2001
From: ma0048 
Date: Fri, 8 Oct 2021 10:51:13 +0200
Subject: [PATCH 11/31] 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 12/31] 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 0e5e6866690cdeb41a2e626a93bb880c37d7ce06 Mon Sep 17 00:00:00 2001 From: FHBGLD <33415881+FHBGLD@users.noreply.github.com> Date: Thu, 14 Oct 2021 14:33:55 +0200 Subject: [PATCH 13/31] =?UTF-8?q?=C3=84nderungen=20bez=C3=BCglich=20genera?= =?UTF-8?q?teMatrikelnummer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hallo liebes Technikum Team, wie besprochen die Änderungen bezüglich generateMatrikelnummer. Als erstes die Erweiterung der Unterscheidung von Lehrgang und Studiengang. Weiters die Aufteilung von unseren AO Studiengängen zwischen 90010 bis 90019. Hoffe das dies für alle FH's so passt. Bitte um check ob dieser Code so übernommen werden kann. Danke und liebe Grüße Thomas und Michael --- content/student/studentDBDML.php | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/content/student/studentDBDML.php b/content/student/studentDBDML.php index e411dbaad..31da28b8a 100644 --- a/content/student/studentDBDML.php +++ b/content/student/studentDBDML.php @@ -109,12 +109,23 @@ if(!$rechte->isBerechtigt('admin') && !$rechte->isBerechtigt('assistenz') && !$r function generateMatrikelnummer($studiengang_kz, $studiensemester_kurzbz) { $db = new basis_db(); - + + + $studiengang_details = new studiengang(); + $studiengang_details->load($studiengang_kz); + + if (!isset($studiengang_details->studiengang_kz)) { + //wenn es diesen Studiengang nicht gibt (übergabeparamter falsch) + //wie müsste hier ein error handle gemacht werden? + } + $jahr = substr($studiensemester_kurzbz, 4); $art = substr($studiensemester_kurzbz, 0, 2); - if($studiengang_kz<0) - { + if( ($studiengang_kz < 0) + || ( isset($studiengang_details->typ) + && ($studiengang_details->typ == 'l')) + ) { $studiengang_kz=abs($studiengang_kz); //Lehrgang switch($art) @@ -136,8 +147,16 @@ function generateMatrikelnummer($studiengang_kz, $studiensemester_kurzbz) } if($art=='2' || $art=='4') $jahr = $jahr-1; - $matrikelnummer = sprintf("%02d",$jahr).$art.sprintf("%04d",$studiengang_kz); - + + + //FH-Burgenland - weil leider die AO Studiengänge aufgeteilt sind (AO sind normal 9+erhalter Nummer, matrikelnr/personenkz wird auch im DVUH Extension berücksichtigt) + if ($studiengang_kz >= 90010 && $studiengang_kz <= 90019) { + $matrikelnummer = sprintf("%02d",$jahr).$art.substr($studiengang_kz, 0, 4); + } else { + $matrikelnummer = sprintf("%02d",$jahr).$art.sprintf("%04d",$studiengang_kz); + } + + $qry = null; $qry = "SELECT matrikelnr FROM public.tbl_student WHERE matrikelnr LIKE '$matrikelnummer%' ORDER BY matrikelnr DESC LIMIT 1"; if($result = $db->db_query($qry)) From 19548bf5f9b276476d580b5126614c378c28d599 Mon Sep 17 00:00:00 2001 From: FHBGLD <33415881+FHBGLD@users.noreply.github.com> Date: Thu, 14 Oct 2021 14:36:58 +0200 Subject: [PATCH 14/31] Update studentDBDML.php --- content/student/studentDBDML.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/content/student/studentDBDML.php b/content/student/studentDBDML.php index 31da28b8a..df841115d 100644 --- a/content/student/studentDBDML.php +++ b/content/student/studentDBDML.php @@ -148,7 +148,6 @@ function generateMatrikelnummer($studiengang_kz, $studiensemester_kurzbz) if($art=='2' || $art=='4') $jahr = $jahr-1; - //FH-Burgenland - weil leider die AO Studiengänge aufgeteilt sind (AO sind normal 9+erhalter Nummer, matrikelnr/personenkz wird auch im DVUH Extension berücksichtigt) if ($studiengang_kz >= 90010 && $studiengang_kz <= 90019) { $matrikelnummer = sprintf("%02d",$jahr).$art.substr($studiengang_kz, 0, 4); @@ -156,7 +155,6 @@ function generateMatrikelnummer($studiengang_kz, $studiensemester_kurzbz) $matrikelnummer = sprintf("%02d",$jahr).$art.sprintf("%04d",$studiengang_kz); } - $qry = null; $qry = "SELECT matrikelnr FROM public.tbl_student WHERE matrikelnr LIKE '$matrikelnummer%' ORDER BY matrikelnr DESC LIMIT 1"; if($result = $db->db_query($qry)) From 1c7bd4986a18f1cbb9d6af6e34d17f24e3a46268 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Fri, 15 Oct 2021 15:12:23 +0200 Subject: [PATCH 15/31] =?UTF-8?q?Fehler=20beim=20Anlegen=20von=20neuen=20S?= =?UTF-8?q?tudieng=C3=A4ngen=20behoben?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/studiengang.class.php | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/include/studiengang.class.php b/include/studiengang.class.php index 08d6e1f13..530b072c0 100644 --- a/include/studiengang.class.php +++ b/include/studiengang.class.php @@ -500,7 +500,8 @@ class studiengang extends basis_db $qry = 'INSERT INTO public.tbl_studiengang (studiengang_kz, kurzbz, kurzbzlang, bezeichnung, english, typ, farbe, email, telefon, max_verband, max_semester, max_gruppe, erhalter_kz, bescheid, bescheidbgbl1, bescheidbgbl2, bescheidgz, bescheidvom, titelbescheidvom, aktiv, onlinebewerbung, orgform_kurzbz, zusatzinfo_html, - oe_kurzbz, moodle, sprache, testtool_sprachwahl, studienplaetze, lgartcode, mischform,projektarbeit_note_anzeige) VALUES ('. + oe_kurzbz, moodle, sprache, testtool_sprachwahl, studienplaetze, lgartcode, mischform,projektarbeit_note_anzeige, + melderelevant, foerderrelevant, standort_code) VALUES ('. $this->db_add_param($this->studiengang_kz, FHC_INTEGER).', '. $this->db_add_param($this->kurzbz).', '. $this->db_add_param($this->kurzbzlang).', '. @@ -1103,7 +1104,7 @@ class studiengang extends basis_db return false; } } - + /** * Laedt die Studiengänge die vom übergeben Typ sind * @param string $typ @@ -1118,13 +1119,13 @@ class studiengang extends basis_db tbl_studiengang.typ=".$this->db_add_param($typ)." ORDER BY kurzbz"; - + if($this->db_query($qry)) { while($row = $this->db_fetch_object()) { $obj = new studiengang(); - + $obj->studiengang_kz = $row->studiengang_kz; $obj->kurzbz = $row->kurzbz; $obj->kurzbzlang = $row->kurzbzlang; @@ -1160,10 +1161,10 @@ class studiengang extends basis_db $obj->melderelevant = $this->db_parse_bool($row->melderelevant); $obj->foerderrelevant = $this->db_parse_bool($row->foerderrelevant); $obj->standort_code = $row->standort_code; - + $obj->bezeichnung_arr['German'] = $obj->bezeichnung; $obj->bezeichnung_arr['English'] = $obj->english; - + $this->result[] = $obj; } return true; From 2bcf422d7ab5bcc6216bd36111b53fc9322f97c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Fri, 15 Oct 2021 16:01:52 +0200 Subject: [PATCH 16/31] Fixed Coding Guidelines --- content/student/studentDBDML.php | 33 ++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/content/student/studentDBDML.php b/content/student/studentDBDML.php index df841115d..dd3525d1d 100644 --- a/content/student/studentDBDML.php +++ b/content/student/studentDBDML.php @@ -109,23 +109,20 @@ if(!$rechte->isBerechtigt('admin') && !$rechte->isBerechtigt('assistenz') && !$r function generateMatrikelnummer($studiengang_kz, $studiensemester_kurzbz) { $db = new basis_db(); - - + $studiengang_details = new studiengang(); $studiengang_details->load($studiengang_kz); - - if (!isset($studiengang_details->studiengang_kz)) { - //wenn es diesen Studiengang nicht gibt (übergabeparamter falsch) - //wie müsste hier ein error handle gemacht werden? + + if (!isset($studiengang_details->studiengang_kz)) + { + return false; } - + $jahr = substr($studiensemester_kurzbz, 4); $art = substr($studiensemester_kurzbz, 0, 2); - if( ($studiengang_kz < 0) - || ( isset($studiengang_details->typ) - && ($studiengang_details->typ == 'l')) - ) { + if (($studiengang_kz < 0) || (isset($studiengang_details->typ) && ($studiengang_details->typ == 'l'))) + { $studiengang_kz=abs($studiengang_kz); //Lehrgang switch($art) @@ -147,14 +144,18 @@ function generateMatrikelnummer($studiengang_kz, $studiensemester_kurzbz) } if($art=='2' || $art=='4') $jahr = $jahr-1; - - //FH-Burgenland - weil leider die AO Studiengänge aufgeteilt sind (AO sind normal 9+erhalter Nummer, matrikelnr/personenkz wird auch im DVUH Extension berücksichtigt) - if ($studiengang_kz >= 90010 && $studiengang_kz <= 90019) { + + //FH-Burgenland - weil leider die AO Studiengänge aufgeteilt sind + //(AO sind normal 9+erhalter Nummer, matrikelnr/personenkz wird auch im DVUH Extension berücksichtigt) + if ($studiengang_kz >= 90010 && $studiengang_kz <= 90019) + { $matrikelnummer = sprintf("%02d",$jahr).$art.substr($studiengang_kz, 0, 4); - } else { + } + else + { $matrikelnummer = sprintf("%02d",$jahr).$art.sprintf("%04d",$studiengang_kz); } - + $qry = "SELECT matrikelnr FROM public.tbl_student WHERE matrikelnr LIKE '$matrikelnummer%' ORDER BY matrikelnr DESC LIMIT 1"; if($result = $db->db_query($qry)) From 7c81f5a64c2b10228670401ce1ac8b67ceb19d5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Fri, 15 Oct 2021 17:21:05 +0200 Subject: [PATCH 17/31] =?UTF-8?q?Gemeinde=20Update=20Infotext=20erg=C3=A4n?= =?UTF-8?q?zt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vilesci/stammdaten/set_gemeinde.php | 1 + 1 file changed, 1 insertion(+) diff --git a/vilesci/stammdaten/set_gemeinde.php b/vilesci/stammdaten/set_gemeinde.php index e461c7872..075f2c910 100644 --- a/vilesci/stammdaten/set_gemeinde.php +++ b/vilesci/stammdaten/set_gemeinde.php @@ -92,6 +92,7 @@ if (isset($_FILES['parsefile']) && $_FILES['parsefile']['error'] == 0)

Gemeinden aktualisieren

Diese Seite dient dazu die Gemeinde Kodex Tabelle zu aktualisieren.

+ Die Gemeinde Tabelle muss zuvor manuell geleert werden
Filesyntax:(Standard xlsx-File von https://www.bis.ac.at/BISSuite, gespeichert als csv! erste Zeile ist Header (alles was oberhalb ist kann entfernt werden) -> dann Daten)

From 3aa251dc4b778bffb9dee67fd104043b316c1bdd Mon Sep 17 00:00:00 2001 From: ma0048 Date: Wed, 20 Oct 2021 15:11:00 +0200 Subject: [PATCH 18/31] 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 44c1e65011394e59db842e7bb617d7d17cd76f50 Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Wed, 20 Oct 2021 15:48:34 +0200 Subject: [PATCH 19/31] getBetriebsmittel add parameter to only retrieve aktive users --- .../models/ressource/Betriebsmittelperson_model.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/application/models/ressource/Betriebsmittelperson_model.php b/application/models/ressource/Betriebsmittelperson_model.php index 87915cfa8..1a97d9e38 100644 --- a/application/models/ressource/Betriebsmittelperson_model.php +++ b/application/models/ressource/Betriebsmittelperson_model.php @@ -18,7 +18,7 @@ class Betriebsmittelperson_model extends DB_Model * @param bool $isRetourniert False to retrieve only active Betriebsmittel. * @return array|bool */ - public function getBetriebsmittel($person_id, $betriebsmitteltyp = null, $isRetourniert = null) + public function getBetriebsmittel($person_id, $betriebsmitteltyp = null, $isRetourniert = null, $onlyAktiveBenutzer=false) { if (!is_numeric($person_id)) { @@ -28,8 +28,12 @@ class Betriebsmittelperson_model extends DB_Model $this->addJoin('wawi.tbl_betriebsmittel', 'betriebsmittel_id'); + if( $onlyAktiveBenutzer ) { + $this->addJoin('public.tbl_benutzer b', 'b.uid = wawi.tbl_betriebsmittelperson.uid AND b.aktiv = \'t\''); + } + $condition = ' - person_id = '. $this->escape($person_id). ' + wawi.tbl_betriebsmittelperson.person_id = '. $this->escape($person_id). ' '; if (is_string($betriebsmitteltyp)) { From 860ca5df53ce5af110d4e47106bfab1ef0a6c118 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Wed, 20 Oct 2021 18:49:39 +0200 Subject: [PATCH 20/31] Spalte Wunschlektor umbenannt --- content/statistik/lvplanung.xls.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/statistik/lvplanung.xls.php b/content/statistik/lvplanung.xls.php index ff6faa508..970e66899 100644 --- a/content/statistik/lvplanung.xls.php +++ b/content/statistik/lvplanung.xls.php @@ -237,7 +237,7 @@ $worksheet->write($zeile,++$spalte,"Fixangestellt", $format_bold); $maxlength[$spalte]=10; $worksheet->write($zeile,++$spalte,"Vorjahrslektor", $format_bold); $maxlength[$spalte]=12; -$worksheet->write($zeile,++$spalte,"Wunschlektor", $format_bold); +$worksheet->write($zeile,++$spalte,"Lektor*in bestätigt", $format_bold); $maxlength[$spalte]=12; $worksheet->write($zeile,++$spalte,"Bezeichnung", $format_bold); $maxlength[$spalte]=25; From b0571e0a26de36198b438197e4e1318fcaecd39f Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Thu, 21 Oct 2021 08:18:04 +0200 Subject: [PATCH 21/31] 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 22/31] 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 23/31] =?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 24/31] 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 25/31] 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 26/31] =?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 27/31] 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 28/31] =?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; - + @@ -234,7 +234,7 @@ EOT; - + From 92925706846f48755454f68e6b94ba49da781fc7 Mon Sep 17 00:00:00 2001 From: Manfred Date: Thu, 28 Oct 2021 12:26:30 +0200 Subject: [PATCH 29/31] =?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 ef937368912242823532ec0a52bd098e9e925eda Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Thu, 28 Oct 2021 12:31:48 +0200 Subject: [PATCH 30/31] 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 31/31] 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 +
SQL
Preferences