Gruppenmanager can be added and deleted in vilesci gui

This commit is contained in:
KarpAlex
2022-06-07 17:54:05 +02:00
parent 0cb303c242
commit 549396148d
2 changed files with 370 additions and 6 deletions
+187
View File
@@ -0,0 +1,187 @@
<?php
/* Copyright (C) 2006 Technikum-Wien
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* Authors: Alexei Karpenko <karpenko@technikum-wien.at>.
*/
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;
}
}
}
?>
+183 -6
View File
@@ -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'))
<title>Gruppe-Verwaltung</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="../../skin/vilesci.css" type="text/css">
<link rel="stylesheet" href="../../skin/jquery-ui-1.9.2.custom.min.css" type="text/css">
<?php
include('../../include/meta/jquery.php');
include('../../include/meta/jquery-tablesorter.php');
?>
<script type="text/javascript" src="../../vendor/components/jqueryui/jquery-ui.min.js"></script>
<script language="JavaScript" type="text/javascript">
function conf_del()
{
@@ -110,11 +112,11 @@ if(!$rechte->isBerechtigt('lehre/gruppe', null, 's'))
return false;
});
$( "#mailgrp" ).click(function() {
$( "#mailgrp" ).click(function()
{
$( "#domain_text" ).toggle();
$('#gesperrt').prop('disabled', function(i, v) { return !v; });
});
});
</script>
<style>
@@ -126,6 +128,32 @@ if(!$rechte->isBerechtigt('lehre/gruppe', null, 's'))
{
background-color: #d1d1d1;
}
col.first-table-column
{
width: 130px;
}
.manager-uid
{
border: 1px solid black;
padding: 2px;
margin-right: 2px;
white-space: nowrap;
}
.manager-uid-container
{
margin-top: 2px;
margin-bottom: 5px;
}
.manager-delete-image
{
position: relative;
top: 4px;
cursor: pointer;
}
.manager-separator
{
margin: 2px;
}
</style>
</head>
<body>
@@ -214,6 +242,7 @@ function printDropDown()
echo '<input type="submit" value="Anzeigen" />';
echo '</form>';
}
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)
<form name="gruppe" method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>">
<p><b>Gruppe <?php echo ($new?'hinzufügen':'bearbeiten'); ?></b><br>
<table id="newFormTable" border="0">
<colgroup>
<col span="1" class="first-table-column">
</colgroup>
<tbody>
<tr>
<td>Kurzbezeichnung</td>
@@ -341,6 +420,104 @@ function doEdit($kurzbz,$new=false)
</td>
<td></td>
</tr>
<tr>
<td>Gruppenadministrator</td>
<td>
<input type="text" name="gruppemanager" id="gruppemanager" autofocus="autofocus" />
<?php
$managerHtml = "<span class='manager-uid'>%s - %s %s&nbsp;"
."<img class='manager-delete-image' src='../../skin/images/cross.png' title='Manager entfernen' alt='Manager entfernen'>"
."<input type='hidden' name='gruppemanager[]' value='%s'>"
."</span>";
$gruppemanager_class = new gruppemanager();
echo "<div class='manager-uid-container'>";
// 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 "<p class='manager-separator'></p>";
$count++;
}
}
echo "</div>";
?>
<script type="text/javascript">
$(document).ready(function()
{
// Löschen von Gruppemanager html bei Klick
setManagerDeleteEvent();
// autocomplete für user input Feld
$("#gruppemanager").autocomplete({
source: "einheit_autocomplete.php?work=searchUser",
minLength:3,
response: function(event, ui)
{
// Value und Label fuer die Anzeige setzen
for(i in ui.content)
{
ui.content[i].value=ui.content[i].uid;
ui.content[i].label=ui.content[i].uid+" - "+ui.content[i].vorname+" "+ui.content[i].nachname;
}
},
// bei Auswahl einer uid
select: function(event, ui)
{
// Administrator html holen
var managerHtml = "<?php echo $managerHtml ?>";
var managerHtmlValues = [ui.item.uid, ui.item.vorname, ui.item.nachname, ui.item.uid];
for (var i = 0; i < managerHtmlValues.length; i++)
{
managerHtml = managerHtml.replace(/%s/, managerHtmlValues[i]);
}
// Administrator unterhalb des Inputfeldes einfügen
if (!$("input[name='gruppemanager[]'][value='"+ui.item.uid+"']").length)
{
var numberManagers = $("input[name='gruppemanager[]']").length;
// nach 5 Managern Zeile einfügen
if (numberManagers % 5 == 0)
{
$(".manager-uid-container").prepend(
"<p class='manager-separator'></p>"
);
}
$(".manager-uid-container").prepend(
managerHtml
);
// Loeschen Event für neuen Administrator setzen
setManagerDeleteEvent();
}
}
});
function setManagerDeleteEvent()
{
var deleteImages = $('.manager-delete-image');
deleteImages.off("click");
deleteImages.click(function()
{
// closest manager uid parent
$(this).closest('.manager-uid').remove();
});
}
});
$("#gruppemanager").focus();
</script>
</td>
<td>Administratoren, die Benutzer zur Gruppe entfernen/hinzufügen können.</td>
</tr>
<tr>
<td>Semester</td>
<td><input type="text" name="semester" size="2" maxlength="1" value="<?php echo $e->semester ?>"></td>