From 549396148dd66ad9f5e63aeb0d93ee213621e25c Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Tue, 7 Jun 2022 17:54:05 +0200 Subject: [PATCH] Gruppenmanager can be added and deleted in vilesci gui --- include/gruppemanager.class.php | 187 +++++++++++++++++++++++++++++++ vilesci/lehre/einheit_menu.php | 189 +++++++++++++++++++++++++++++++- 2 files changed, 370 insertions(+), 6 deletions(-) create mode 100644 include/gruppemanager.class.php diff --git a/include/gruppemanager.class.php b/include/gruppemanager.class.php new file mode 100644 index 000000000..009804204 --- /dev/null +++ b/include/gruppemanager.class.php @@ -0,0 +1,187 @@ +. + */ +require_once(dirname(__FILE__).'/basis_db.class.php'); + +class gruppemanager extends basis_db +{ + public $new; + + //Tabellenspalten + public $uid; // varchar(32) + public $gruppe_kurzbz; // varchar(32) + public $insertamum; // timestamp + public $insertvon; // varchar(32) + + public $uids = array(); // array + + /** + * Konstruktor - Laedt optional einen Gruppenmanager + * @param $uid + * @param $gruppe_kurzbz + */ + public function __construct($uid=null, $gruppe_kurzbz=null) + { + parent::__construct(); + + if(!is_null($gruppe_kurzbz) && !is_null($uid)) + $this->load($uid, $gruppe_kurzbz); + } + + /** + * Laedt die BenutzerGruppe + * @param uid, gruppe_kurzbz + * @return true wenn ok, false im Fehlerfall + */ + public function load($uid, $gruppe_kurzbz) + { + $qry = "SELECT * FROM public.tbl_gruppe_manager WHERE uid=".$this->db_add_param($uid)." AND gruppe_kurzbz=".$this->db_add_param($gruppe_kurzbz); + + if($this->db_query($qry)) + { + if($row = $this->db_fetch_object()) + { + $this->uid = $row->uid; + $this->gruppe_kurzbz = $row->gruppe_kurzbz; + $this->insertamum = $row->insertamum; + $this->insertvon = $row->insertvon; + return true; + } + else + { + $this->errormsg = 'Es wurde kein Datensatz gefunden'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Laden des Datensatzes'; + return false; + } + } + + /** + * Laedt die Manager einer Benutzergruppe + * @param gruppe_kurzbz + * @return true wenn ok, false im Fehlerfall + */ + public function load_uids($gruppe_kurzbz) + { + $qry = "SELECT * FROM public.tbl_gruppe_manager + WHERE gruppe_kurzbz=".$this->db_add_param($gruppe_kurzbz); + + if ($this->db_query($qry)) + { + if ($this->db_num_rows() == 0) + return false; + else + { + while ($row = $this->db_fetch_object()) + { + $gm_obj = new gruppemanager(); + $gm_obj->uid = $row->uid; + $this->uids[] = $gm_obj; + } + return true; + } + } + else + { + $this->errormsg = 'Fehler beim Laden des Datensatzes'; + return false; + } + } + + /** + * Prueft die Variablen vor dem Speichern + * auf Gueltigkeit. + * @return true wenn ok, false im Fehlerfall + */ + protected function validate() + { + if(mb_strlen($this->uid)>32) + { + $this->errormsg = 'UID darf nich laenger als 32 Zeichen sein'; + return false; + } + if(mb_strlen($this->gruppe_kurzbz)>32) + { + $this->errormsg = 'Gruppe_kurzbz darf nicht laenger als 32 Zeichen sein'; + return false; + } + if(mb_strlen($this->insertvon)>32) + { + $this->errormsg = 'Insertvon darf nicht laenger als 32 Zeichen sein'; + return false; + } + + return true; + } + + /** + * Speichert GruppeManager in die Datenbank + * Wenn $new auf true gesetzt ist wird ein neuer Datensatz + * angelegt, ansonsten der Datensatz upgedated + * @return true wenn erfolgreich, false im Fehlerfall + */ + public function save() + { + //Variablen auf Gueltigkeit pruefen + if(!$this->validate()) + return false; + + $qry = 'INSERT INTO public.tbl_gruppe_manager (uid, gruppe_kurzbz, insertamum, insertvon) + VALUES('.$this->db_add_param($this->uid).','. + $this->db_add_param($this->gruppe_kurzbz).','. + $this->db_add_param($this->insertamum).','. + $this->db_add_param($this->insertvon).');'; + + if($this->db_query($qry)) + { + //Log schreiben + return true; + } + else + { + $this->errormsg = 'Fehler beim Speichern des GruppeManagers'; + return false; + } + } + + /** + * Loescht eine Gruppenmanagerzuordnung + * + * @param $uid + * @param $gruppe_kurzbz + * @return boolean + */ + public function delete($uid, $gruppe_kurzbz) + { + $qry = "DELETE FROM public.tbl_gruppe_manager WHERE uid=".$this->db_add_param($uid)." AND gruppe_kurzbz=".$this->db_add_param($gruppe_kurzbz); + + if($this->db_query($qry)) + return true; + else + { + $this->errormsg = 'Fehler beim Loeschen der Zuteilung'; + return false; + } + } +} +?> diff --git a/vilesci/lehre/einheit_menu.php b/vilesci/lehre/einheit_menu.php index bfb44e8d9..b46371b76 100644 --- a/vilesci/lehre/einheit_menu.php +++ b/vilesci/lehre/einheit_menu.php @@ -24,6 +24,7 @@ require_once('../../config/vilesci.config.inc.php'); require_once('../../include/functions.inc.php'); require_once('../../include/studiengang.class.php'); require_once('../../include/gruppe.class.php'); +require_once('../../include/gruppemanager.class.php'); require_once('../../include/person.class.php'); require_once('../../include/benutzer.class.php'); require_once('../../include/student.class.php'); @@ -82,12 +83,13 @@ if(!$rechte->isBerechtigt('lehre/gruppe', null, 's')) Gruppe-Verwaltung + - + @@ -214,6 +242,7 @@ function printDropDown() echo ''; echo ''; } + function doSave() { global $rechte; @@ -241,8 +270,10 @@ function doSave() $e->new = false; } + $user = get_uid(); + $e->updateamum = date('Y-m-d H:i:s'); - $e->updatevon = get_uid(); + $e->updatevon = $user; $e->bezeichnung = $_POST['bezeichnung']; $e->beschreibung = $_POST['beschreibung']; $e->studiengang_kz = $_POST['studiengang_kz']; @@ -260,11 +291,56 @@ function doSave() if(!$e->save()) echo $e->errormsg; + else // wenn Gruppe erfolgreich gespeichert, Gruppemanager speichern + { + // Gruppe gemäss Konvention in Großbuchstaben + $gruppe_kurzbz = mb_strtoupper($_POST['kurzbz']); + + // gruppemanager immer array, leer wenn keine angegeben + $gruppemanager_uids = is_array($_POST['gruppemanager']) ? $_POST['gruppemanager'] : array(); + + // bestehende Gruppemanager laden + $bestehende_gruppemanager_uids = array(); + $gruppemanager_class = new gruppemanager(); + if ($gruppemanager_class->load_uids($gruppe_kurzbz)) + { + foreach ($gruppemanager_class->uids as $uid_obj) + { + $bestehende_gruppemanager_uids[] = $uid_obj->uid; + } + } + + foreach ($gruppemanager_uids as $gruppemanager_uid) + { + // wenn Gruppemanager noch nicht zugewiesen + if (!in_array($gruppemanager_uid, $bestehende_gruppemanager_uids)) + { + // Gruppemanager speichern + $gruppemgr = new gruppemanager(); + $gruppemgr->uid = $gruppemanager_uid; + $gruppemgr->gruppe_kurzbz = $gruppe_kurzbz; + $gruppemgr->insertamum = date('Y-m-d H:i:s'); + $gruppemgr->insertvon = $user; + + if(!$gruppemgr->save()) + echo $gruppemgr->errormsg; + } + } + + // noch vorhandene Gruppenmanager aus zu löschenden entfernen + $geloeschte_gruppemanager_uids = array_diff($bestehende_gruppemanager_uids, $gruppemanager_uids); + + // Nicht mehr vorhandene Gruppemanager löschen + $gruppemanager_class = new gruppemanager(); + foreach ($geloeschte_gruppemanager_uids as $geloeschte_uid) + { + if (!$gruppemanager_class->delete($geloeschte_uid, $gruppe_kurzbz)) + echo $gruppemanager_class->errormsg; + } + } } } - - function doEdit($kurzbz,$new=false) { global $db, $rechte, $studiengang, $searchItems; @@ -282,6 +358,9 @@ function doEdit($kurzbz,$new=false)

Gruppe
+ + + @@ -341,6 +420,104 @@ function doEdit($kurzbz,$new=false) + + + + +
Kurzbezeichnung
Gruppenadministrator + + %s - %s %s " + ."Manager entfernen" + ."" + .""; + + $gruppemanager_class = new gruppemanager(); + echo "
"; + // alle Administratoren der Gruppe anzeigen + if ($gruppemanager_class->load_uids($e->gruppe_kurzbz)) + { + $count = 1; + foreach ($gruppemanager_class->uids as $uid_obj) + { + $ben = new benutzer($uid_obj->uid); + // Vorlagestring durch Werte ersetzen und ausgeben + echo sprintf($managerHtml, $uid_obj->uid, $ben->vorname, $ben->nachname, $uid_obj->uid); + if ($count % 5 == 0) // neue Zeile nach 5 Elementen + echo "

"; + $count++; + } + } + echo "
"; + ?> + +
Administratoren, die Benutzer zur Gruppe entfernen/hinzufügen können.
Semester