Gruppenmanager:

- Berechtigung "lehre/gruppemanager" needed for managing groups
- added column "aktiv" to benutzeroverview
- group manager are deleted together with their group
- check: generated groups cannot have manager
This commit is contained in:
KarpAlex
2022-06-13 19:59:30 +02:00
parent f57123e100
commit 2e728462ca
5 changed files with 166 additions and 115 deletions
@@ -16,12 +16,12 @@ class Gruppenadministration extends Auth_Controller
{
parent::__construct(
array(
'index' => 'admin:r',
'showBenutzergruppe' => 'admin:r',
'getBenutzer' => 'admin:r',
'getAllBenutzer' => 'admin:r',
'addBenutzer' => 'admin:rw',
'removeBenutzer' => 'admin:rw'
'index' => 'lehre/gruppenmanager:r',
'showBenutzergruppe' => 'lehre/gruppenmanager:r',
'getBenutzer' => 'lehre/gruppenmanager:r',
'getAllBenutzer' => 'lehre/gruppenmanager:r',
'addBenutzer' => 'lehre/gruppenmanager:rw',
'removeBenutzer' => 'lehre/gruppenmanager:rw'
)
);
@@ -70,19 +70,19 @@ class Gruppenadministration extends Auth_Controller
$data[self::FHC_CONTROLLER_ID] = $this->getControllerId();
$this->BenutzergruppeModel->addSelect('uid, vorname, nachname');
$this->BenutzergruppeModel->addJoin('public.tbl_benutzer', 'uid');
$this->BenutzergruppeModel->addJoin('public.tbl_person', 'person_id');
$benutzerRes = $this->BenutzergruppeModel->loadWhere(array('gruppe_kurzbz' => $gruppe_kurzbz));
if (isError($benutzerRes))
show_error(getError($benutzerRes));
$benutzer = hasData($benutzerRes) ? getData($benutzerRes) : array();
// $this->BenutzergruppeModel->addSelect('uid, vorname, nachname');
// $this->BenutzergruppeModel->addJoin('public.tbl_benutzer', 'uid');
// $this->BenutzergruppeModel->addJoin('public.tbl_person', 'person_id');
// $benutzerRes = $this->BenutzergruppeModel->loadWhere(array('gruppe_kurzbz' => $gruppe_kurzbz));
//
// if (isError($benutzerRes))
// show_error(getError($benutzerRes));
//
// $benutzer = hasData($benutzerRes) ? getData($benutzerRes) : array();
$this->load->view(
'person/gruppenadministration/benutzergruppe.php',
array('gruppe_kurzbz' => $gruppe_kurzbz, 'benutzer' => $benutzer)
array('gruppe_kurzbz' => $gruppe_kurzbz)
);
}
@@ -93,8 +93,8 @@ class Gruppenadministration extends Auth_Controller
{
$gruppe_kurzbz = $this->input->get('gruppe_kurzbz');
$this->BenutzergruppeModel->addSelect('uid, vorname, nachname');
$this->BenutzergruppeModel->addJoin('public.tbl_benutzer', 'uid');
$this->BenutzergruppeModel->addSelect('uid, vorname, nachname, ben.aktiv');
$this->BenutzergruppeModel->addJoin('public.tbl_benutzer ben', 'uid');
$this->BenutzergruppeModel->addJoin('public.tbl_person', 'person_id');
$benutzerRes = $this->BenutzergruppeModel->loadWhere(array('gruppe_kurzbz' => $gruppe_kurzbz));
@@ -61,6 +61,7 @@
<th>Uid</th>
<th><?php echo ucfirst($this->p->t('global', 'vorname')); ?></th>
<th><?php echo ucfirst($this->p->t('global', 'nachname')); ?></th>
<th><?php echo ucfirst($this->p->t('global', 'aktiv')); ?></th>
<th><?php echo ucfirst($this->p->t('ui', 'entfernen')); ?></th>
</thead>
<tbody>
+3 -4
View File
@@ -18,9 +18,6 @@ var Benutzergruppe = {
{
// save loaded data
let benutzerData = FHC_AjaxClient.getData(data);
console.log(benutzerData);
let benutzerTable = $("#benutzer-table tbody");
benutzerTable.empty();
@@ -29,11 +26,13 @@ var Benutzergruppe = {
for (let i = 0; i < benutzerData.length; i++)
{
let benutzer = benutzerData[i];
console.log(benutzer.aktiv);
benutzerTable.append(
"<tr>"+
"<td>"+benutzer.uid+"</td>"+
"<td>"+benutzer.vorname+"</td>"+
"<td>"+benutzer.nachname+"</td>"+
"<td>"+(benutzer.aktiv === true ? "Ja" : "Nein")+"</td>"+
"<td>"+
"<button class='btn btn-default benutzerLoeschen' id='"+benutzer.uid+"_benutzerLoeschen'>"+
FHC_PhrasesLib.t('ui', 'entfernen')+
@@ -51,7 +50,7 @@ var Benutzergruppe = {
}
Tablesort.addTablesorter(
"benutzer-table", [[0,0], [2,0]], ["filter", "zebra"], 2, {headers: {3: {filter: false}}}
"benutzer-table", [[0,0], [2,0]], ["filter", "zebra"], 2, {headers: {4: {filter: false}}}
)
}
},
+14
View File
@@ -6176,6 +6176,20 @@ if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berecht
}
}
// Add permission for managing user groups
if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berechtigung_kurzbz = 'lehre/gruppenmanager';"))
{
if($db->db_num_rows($result) == 0)
{
$qry = "INSERT INTO system.tbl_berechtigung(berechtigung_kurzbz, beschreibung) VALUES('lehre/gruppenmanager', 'Manager einer Gruppe werden und die Gruppe verwalten');";
if(!$db->db_query($qry))
echo '<strong>system.tbl_berechtigung '.$db->db_last_error().'</strong><br>';
else
echo ' system.tbl_berechtigung: Added permission for lehre/gruppenmanager<br>';
}
}
// Creates table public.tbl_gruppe_manager if it doesn't exist and grants privileges
if (!$result = @$db->db_query('SELECT 1 FROM public.tbl_gruppe_manager LIMIT 1'))
{
+130 -93
View File
@@ -89,12 +89,29 @@ if(!$rechte->isBerechtigt('lehre/gruppe', null, 's'))
include('../../include/meta/jquery.php');
include('../../include/meta/jquery-tablesorter.php');
?>
<?php
// html Vorlage für ein manager span
const MANAGER_HTML = "<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>";
?>
<script type="text/javascript" src="../../vendor/components/jqueryui/jquery-ui.min.js"></script>
<script language="JavaScript" type="text/javascript">
function conf_del()
{
return confirm('Diese Gruppe wirklich löschen?');
}
function setManagerDeleteEvent()
{
var deleteImages = $('.manager-delete-image');
deleteImages.off("click");
deleteImages.click(function()
{
// closest manager uid parent
$(this).closest('.manager-uid').remove();
});
}
$(document).ready(function()
{
$("#t1").tablesorter(
@@ -117,6 +134,66 @@ if(!$rechte->isBerechtigt('lehre/gruppe', null, 's'))
$( "#domain_text" ).toggle();
$('#gesperrt').prop('disabled', function(i, v) { return !v; });
});
// 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 und Werte ersetzen
var managerHtml = "<?php echo MANAGER_HTML ?>";
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]);
}
// wenn noch nicht vorhanden, Administrator unterhalb des Inputfeldes einfügen
if (!$("input[name='gruppemanager[]'][value='"+ui.item.uid+"']").length)
{
var counter = 0;
$(".manager-uid-container").children().each(
function() {
if ($(this).hasClass('manager-uid'))
counter++;
else
return false;
}
);
// nach 5 Managern Zeile einfügen
if (counter >= 5)
{
$(".manager-uid-container").prepend(
"<p class='manager-separator'></p>"
);
}
$(".manager-uid-container").prepend(
managerHtml
);
// Loeschen Event für neuen Administrator setzen
setManagerDeleteEvent();
}
}
});
});
</script>
<style>
@@ -139,11 +216,6 @@ if(!$rechte->isBerechtigt('lehre/gruppe', null, 's'))
margin-right: 2px;
white-space: nowrap;
}
.manager-uid-container
{
margin-top: 2px;
margin-bottom: 5px;
}
.manager-delete-image
{
position: relative;
@@ -152,7 +224,15 @@ if(!$rechte->isBerechtigt('lehre/gruppe', null, 's'))
}
.manager-separator
{
margin: 2px;
margin: 3px;
}
.gruppenmanager-cell
{
padding-bottom: 3px;
}
.hiddenManager
{
display: none;
}
</style>
</head>
@@ -186,8 +266,22 @@ else if (isset($_GET['type']) && $_GET['type']=='delete')
if($rechte->isBerechtigt('lehre/gruppe', $oe_studiengang, 'suid'))
{
$grp_kurzbz = $_GET['einheit_id'];
// Gruppenmanager der Gruppe löschen
$grpmgr=new gruppemanager();
if ($grpmgr->load_uids($grp_kurzbz))
{
foreach($grpmgr->uids as $uid)
{
if (!$grpmgr->delete($uid->uid, $grp_kurzbz))
echo $grpmgr->errormsg;
}
}
// die Gruppe löschen
$e=new gruppe();
if(!$e->delete($_GET['einheit_id']))
if(!$e->delete($grp_kurzbz))
echo $e->errormsg;
}
else
@@ -289,17 +383,25 @@ function doSave()
$e->sort = $_POST['sort'];
$e->content_visible = isset($_POST['content_visible']);
// gruppemanager immer array, leer wenn keine angegeben
$gruppemanager_uids = is_array($_POST['gruppemanager']) ? $_POST['gruppemanager'] : array();
// Prüfung: generierte Gruppen haben keine Manager
if (count($gruppemanager_uids) > 0 && $e->generiert === true)
{
echo "Generierte Gruppen dürfen keine Administratoren haben!";
return;
}
if(!$e->save())
echo $e->errormsg;
else // wenn Gruppe erfolgreich gespeichert, Gruppemanager speichern
else // wenn Gruppe erfolgreich gespeichert, Gruppenmanager 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 Gruppenmanager laden
$bestehende_gruppemanager_uids = array();
$gruppemanager_class = new gruppemanager();
if ($gruppemanager_class->load_uids($gruppe_kurzbz))
@@ -312,7 +414,7 @@ function doSave()
foreach ($gruppemanager_uids as $gruppemanager_uid)
{
// wenn Gruppemanager noch nicht zugewiesen
// wenn Gruppenmanager noch nicht zugewiesen
if (!in_array($gruppemanager_uid, $bestehende_gruppemanager_uids))
{
// Gruppemanager speichern
@@ -323,19 +425,19 @@ function doSave()
$gruppemgr->insertvon = $user;
if(!$gruppemgr->save())
echo $gruppemgr->errormsg;
echo $gruppemgr->errormsg;
}
}
// noch vorhandene Gruppenmanager aus zu löschenden entfernen
// zu löschende Gruppemanager ermitteln
$geloeschte_gruppemanager_uids = array_diff($bestehende_gruppemanager_uids, $gruppemanager_uids);
// Nicht mehr vorhandene Gruppemanager löschen
// Nicht mehr vorhandene Gruppenmanager 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;
echo $gruppemanager_class->errormsg;
}
}
}
@@ -422,17 +524,13 @@ function doEdit($kurzbz,$new=false)
</tr>
<tr>
<td>Gruppenadministrator</td>
<td>
<td class="gruppenmanager-cell">
<div "<?php echo ($e->generiert?' class="hiddenManager"':'');?>">
<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
// alle Manager der Gruppe anzeigen
if ($gruppemanager_class->load_uids($e->gruppe_kurzbz))
{
$count = 1;
@@ -440,83 +538,22 @@ function doEdit($kurzbz,$new=false)
{
$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);
echo sprintf(MANAGER_HTML, $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++;
}
// Absatz für korrekten Abstand
//echo "<p class='manager-separator'></p>";
}
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>
</div>
<div "<?php echo (!$e->generiert?' class="hiddenManager"':'');?>">
Generierte Gruppen dürfen keine Administratoren haben.
</div>
</td>
<td>Administratoren, die Benutzer zur Gruppe entfernen/hinzufügen können.</td>
<td>Administratoren, die Benutzer zur Gruppe entfernen/hinzufügen können</td>
</tr>
<tr>
<td>Semester</td>