diff --git a/application/config/navigation.php b/application/config/navigation.php
index cf87ce19d..5f3414759 100644
--- a/application/config/navigation.php
+++ b/application/config/navigation.php
@@ -119,6 +119,13 @@ $config['navigation_header'] = array(
'expand' => true,
'sort' => 30,
'requiredPermissions' => 'system/issues_verwalten:r'
+ ),
+ 'gruppenmanagement' => array(
+ 'link' => site_url('person/Gruppenmanagement'),
+ 'description' => 'Gruppenmanagement',
+ 'expand' => true,
+ 'sort' => 40,
+ 'requiredPermissions' => 'lehre/gruppenmanager:r'
)
)
),
diff --git a/application/controllers/person/Gruppenmanagement.php b/application/controllers/person/Gruppenmanagement.php
new file mode 100644
index 000000000..4bc80c760
--- /dev/null
+++ b/application/controllers/person/Gruppenmanagement.php
@@ -0,0 +1,237 @@
+ 'lehre/gruppenmanager:r',
+ 'showBenutzergruppe' => 'lehre/gruppenmanager:r',
+ 'getBenutzer' => 'lehre/gruppenmanager:r',
+ 'getAllBenutzer' => 'lehre/gruppenmanager:r',
+ 'addBenutzer' => 'lehre/gruppenmanager:rw',
+ 'removeBenutzer' => 'lehre/gruppenmanager:rw'
+ )
+ );
+
+ // Loads models
+ $this->load->model('person/benutzer_model', 'BenutzerModel');
+ $this->load->model('person/benutzergruppe_model', 'BenutzergruppeModel');
+ $this->load->model('system/Log_model', 'LogModel');
+
+ $this->load->library('WidgetLib');
+ $this->loadPhrases(
+ array(
+ 'global',
+ 'person',
+ 'lehre',
+ 'ui',
+ 'filter',
+ 'gruppenmanagement'
+ )
+ );
+
+ $this->setControllerId(); // sets the controller id
+ $this->_setAuthUID(); // sets property uid
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ // Public methods
+
+ /**
+ * Main page
+ */
+ public function index()
+ {
+ $this->load->view(
+ 'person/gruppenmanagement/gruppenmanagement.php',
+ array('uid' => $this->_uid)
+ );
+ }
+
+ /**
+ * Shows Benutzergruppe overview page.
+ */
+ public function showBenutzergruppe()
+ {
+ $this->_setNavigationMenuShowDetails();
+ $gruppe_kurzbz = $this->input->get('gruppe_kurzbz');
+
+ $data[self::FHC_CONTROLLER_ID] = $this->getControllerId();
+
+ $this->load->view(
+ 'person/gruppenmanagement/benutzergruppe.php',
+ array('gruppe_kurzbz' => $gruppe_kurzbz)
+ );
+ }
+
+ /**
+ * Gets Benutzer assigned to a Gruppe
+ */
+ public function getBenutzer()
+ {
+ $gruppe_kurzbz = $this->input->get('gruppe_kurzbz');
+
+ $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));
+
+ $this->outputJson($benutzerRes);
+ }
+
+ /**
+ * Gets all Benutzer for assignment to Gruppe
+ */
+ public function getAllBenutzer()
+ {
+ $this->BenutzerModel->addSelect('uid, vorname, nachname');
+ $this->BenutzerModel->addJoin('public.tbl_person', 'person_id');
+ $benutzerRes = $this->BenutzerModel->loadWhere(
+ array('tbl_benutzer.aktiv' => true)
+ );
+ $this->outputJson($benutzerRes);
+ }
+
+ /**
+ * Adds a Benutzer to Gruppe
+ */
+ public function addBenutzer()
+ {
+ $uid = $this->input->post('uid');
+ $gruppe_kurzbz = $this->input->post('gruppe_kurzbz');
+
+ if (isEmptyString($uid))
+ $result = error('Uid missing');
+ else
+ {
+ $benutzerExistsRes = $this->BenutzergruppeModel->loadWhere(
+ array(
+ 'uid' => $uid,
+ 'gruppe_kurzbz' => $gruppe_kurzbz
+ )
+ );
+
+ if (isError($benutzerExistsRes))
+ {
+ $this->outputJsonError(getError($benutzerExistsRes));
+ return;
+ }
+
+ if (hasData($benutzerExistsRes))
+ {
+ $this->outputJsonError($this->p->t('gruppenmanagement', 'benutzerSchonZugewiesen'));
+ return;
+ }
+
+ $result = $this->BenutzergruppeModel->insert(
+ array(
+ 'uid' => $uid,
+ 'gruppe_kurzbz' => $gruppe_kurzbz,
+ 'insertamum' => date('Y-m-d H:i:s'),
+ 'insertvon' => $this->_uid
+ )
+ );
+
+ // log the group add
+ $lastQry = $this->db->last_query();
+
+ if (isSuccess($result))
+ {
+ $this->LogModel->insert(array(
+ 'mitarbeiter_uid' => $this->_uid,
+ 'beschreibung' => 'Gruppenmanagement: Nutzer zu Gruppe hinzugefügt',
+ 'sql' => $lastQry
+ ));
+ }
+ }
+
+ $this->outputJson($result);
+ }
+
+ /**
+ * Removes Benutzer from Gruppe
+ */
+ public function removeBenutzer()
+ {
+ $uid = $this->input->post('uid');
+ $gruppe_kurzbz = $this->input->post('gruppe_kurzbz');
+
+ if (isEmptyString($uid))
+ $result = error('Uid missing');
+ else
+ {
+ $result = $this->BenutzergruppeModel->delete(
+ array(
+ 'uid' => $uid,
+ 'gruppe_kurzbz' => $gruppe_kurzbz
+ )
+ );
+ }
+
+ // log the group remove
+ $lastQry = $this->db->last_query();
+
+ if (isSuccess($result))
+ {
+ $this->LogModel->insert(array(
+ 'mitarbeiter_uid' => $this->_uid,
+ 'beschreibung' => 'Gruppenmanagement: Nutzer aus Gruppe entfernt',
+ 'sql' => $lastQry
+ ));
+ }
+
+ $this->outputJson($result);
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ // Private methods
+
+ /**
+ * Define the navigation menu for the showDetails page
+ */
+ private function _setNavigationMenuShowDetails()
+ {
+ $this->load->library('NavigationLib', array('navigation_page' => 'person/Gruppenmanagement/showBenutzergruppe'));
+
+ $link = site_url('person/Gruppenmanagement');
+
+ $this->navigationlib->setSessionMenu(
+ array(
+ 'back' => $this->navigationlib->oneLevel(
+ 'Zurück', // description
+ $link, // link
+ array(), // children
+ 'angle-left', // icon
+ true, // expand
+ null, // subscriptDescription
+ null, // subscriptLinkClass
+ null, // subscriptLinkValue
+ '', // target
+ 1 // sort
+ )
+ )
+ );
+ }
+
+ /**
+ * Set uid of authentificated user
+ */
+ private function _setAuthUID()
+ {
+ $this->_uid = getAuthUID();
+
+ if (!$this->_uid) show_error('User authentification failed');
+ }
+}
diff --git a/application/views/person/gruppenmanagement/benutzergruppe.php b/application/views/person/gruppenmanagement/benutzergruppe.php
new file mode 100644
index 000000000..1bb698591
--- /dev/null
+++ b/application/views/person/gruppenmanagement/benutzergruppe.php
@@ -0,0 +1,76 @@
+load->view(
+ 'templates/FHC-Header',
+ array(
+ 'title' => 'Benutzer in Gruppe',
+ 'jquery' => true,
+ 'jqueryui' => true,
+ 'bootstrap' => true,
+ 'fontawesome' => true,
+ 'sbadmintemplate' => true,
+ 'tablesorter' => true,
+ 'ajaxlib' => true,
+ 'dialoglib' => true,
+ 'filterwidget' => true,
+ 'navigationwidget' => true,
+ 'phrases' => array(
+ 'gruppenmanagement',
+ 'ui'
+ ),
+ 'customCSSs' => 'public/css/sbadmin2/tablesort_bootstrap.css',
+ 'customJSs' => array('public/js/bootstrapper.js', 'public/js/tablesort/tablesort.js', 'public/js/person/benutzergruppe.js')
+ )
+ );
+?>
+
+
+
+
+ widgetlib->widget('NavigationWidget'); ?>
+
+
+
+
+
+
+
+
+
+ | Uid |
+ p->t('person', 'vorname')); ?> |
+ p->t('person', 'nachname')); ?> |
+ p->t('gruppenmanagement', 'aktiv')); ?> |
+ p->t('ui', 'entfernen')); ?> |
+
+
+
+
+
+
+
+
+
+
+
+load->view('templates/FHC-Footer'); ?>
diff --git a/application/views/person/gruppenmanagement/gruppenmanagement.php b/application/views/person/gruppenmanagement/gruppenmanagement.php
new file mode 100644
index 000000000..32416eb86
--- /dev/null
+++ b/application/views/person/gruppenmanagement/gruppenmanagement.php
@@ -0,0 +1,46 @@
+load->view(
+ 'templates/FHC-Header',
+ array(
+ 'title' => 'Gruppenmanagement',
+ 'jquery' => true,
+ 'jqueryui' => true,
+ 'bootstrap' => true,
+ 'fontawesome' => true,
+ 'sbadmintemplate' => true,
+ 'tablesorter' => true,
+ 'ajaxlib' => true,
+ 'filterwidget' => true,
+ 'navigationwidget' => true,
+ 'phrases' => array(
+ 'ui'
+ ),
+ 'customCSSs' => 'public/css/sbadmin2/tablesort_bootstrap.css',
+ 'customJSs' => array('public/js/bootstrapper.js')
+ )
+ );
+?>
+
+
+
+
+ widgetlib->widget('NavigationWidget'); ?>
+
+
+
+
+
+ load->view('person/gruppenmanagement/gruppenmanagementData.php'); ?>
+
+
+
+
+
+
+load->view('templates/FHC-Footer'); ?>
diff --git a/application/views/person/gruppenmanagement/gruppenmanagementData.php b/application/views/person/gruppenmanagement/gruppenmanagementData.php
new file mode 100644
index 000000000..4eef0acec
--- /dev/null
+++ b/application/views/person/gruppenmanagement/gruppenmanagementData.php
@@ -0,0 +1,66 @@
+ '
+ SELECT gruppe_kurzbz, grp.bezeichnung AS gruppe_bezeichnung, grp.beschreibung AS gruppe_beschreibung,
+ studiengang_kz, UPPER(stg.typ||stg.kurzbz) AS studiengang_kurzbz, semester, sichtbar, lehre, grp.aktiv, mailgrp, generiert
+ FROM public.tbl_gruppe grp
+ JOIN public.tbl_studiengang stg USING (studiengang_kz)
+ JOIN public.tbl_gruppe_manager grpmgr USING (gruppe_kurzbz)
+ WHERE grp.aktiv = TRUE
+ AND grpmgr.uid = \''.$uid.'\'',
+ 'requiredPermissions' => 'admin',
+ 'datasetRepresentation' => 'tablesorter',
+ 'additionalColumns' => array('Teilnehmer'),
+ 'columnsAliases' => array(
+ ucfirst($this->p->t('gruppenmanagement', 'kurzbezeichnung')),
+ ucfirst($this->p->t('gruppenmanagement', 'bezeichnung')),
+ ucfirst($this->p->t('gruppenmanagement', 'beschreibung')),
+ ucfirst($this->p->t('lehre', 'studiengangskennzahlLehre')),
+ ucfirst($this->p->t('lehre', 'studiengang')),
+ ucfirst($this->p->t('lehre', 'semester')),
+ 'Sichtbar',
+ 'Lehre',
+ 'Aktiv',
+ 'Mailgrp',
+ 'Generiert'
+ ),
+ 'formatRow' => function($datasetRaw) {
+
+ /* NOTE: Dont use $this here for PHP Version compatibility */
+ $datasetRaw->{'Teilnehmer'} = sprintf(
+ ''.$this->p->t('gruppenmanagement', 'zuweisenloeschen').'',
+ site_url('person/Gruppenmanagement/showBenutzergruppe'),
+ $datasetRaw->{'gruppe_kurzbz'},
+ 'index',
+ (isset($_GET['fhc_controller_id'])?$_GET['fhc_controller_id']:'')
+ );
+
+ if ($datasetRaw->{'gruppe_bezeichnung'} == null)
+ {
+ $datasetRaw->{'gruppe_bezeichnung'} = '-';
+ }
+ if ($datasetRaw->{'gruppe_beschreibung'} == null)
+ {
+ $datasetRaw->{'gruppe_beschreibung'} = '-';
+ }
+ if ($datasetRaw->{'semester'} == null)
+ {
+ $datasetRaw->{'semester'} = '-';
+ }
+ $datasetRaw->{'sichtbar'} = $datasetRaw->{'sichtbar'} == 'true' ? 'ja' : 'nein';
+ $datasetRaw->{'lehre'} = $datasetRaw->{'lehre'} == 'true' ? 'ja' : 'nein';
+ $datasetRaw->{'aktiv'} = $datasetRaw->{'aktiv'} == 'true' ? 'ja' : 'nein';
+ $datasetRaw->{'mailgrp'} = $datasetRaw->{'mailgrp'} == 'true' ? 'ja' : 'nein';
+ $datasetRaw->{'generiert'} = $datasetRaw->{'generiert'} == 'true' ? 'ja' : 'nein';
+
+ return $datasetRaw;
+ }
+ );
+
+ $filterWidgetArray['app'] = 'core';
+ $filterWidgetArray['datasetName'] = 'gruppenmanagement';
+ $filterWidgetArray['filterKurzbz'] = 'gruppenmanagement';
+ $filterWidgetArray['filter_id'] = $this->input->get('filter_id');
+
+ echo $this->widgetlib->widget('FilterWidget', $filterWidgetArray);
+?>
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/public/js/person/benutzergruppe.js b/public/js/person/benutzergruppe.js
new file mode 100644
index 000000000..353cb6ea3
--- /dev/null
+++ b/public/js/person/benutzergruppe.js
@@ -0,0 +1,223 @@
+/**
+ * Javascript file for benutzergruppe management page
+ */
+
+var Benutzergruppe = {
+ getBenutzer: function(gruppe_kurzbz) {
+ FHC_AjaxClient.ajaxCallGet(
+ 'person/gruppenmanagement/getBenutzer',
+ {
+ gruppe_kurzbz: gruppe_kurzbz
+ },
+ {
+ successCallback: function(data, textStatus, jqXHR) {
+ if (FHC_AjaxClient.isError(data))
+ {
+ FHC_DialogLib.alertError(FHC_AjaxClient.getError(data));
+ return;
+ }
+
+ let benutzerTable = $("#benutzer-table tbody");
+ benutzerTable.empty();
+
+ if (FHC_AjaxClient.hasData(data))
+ {
+ // save loaded data
+ let benutzerData = FHC_AjaxClient.getData(data);
+
+ // fill table with Benutzer of Gruppe
+ for (let i = 0; i < benutzerData.length; i++)
+ {
+ let benutzer = benutzerData[i];
+ benutzerTable.append(
+ ""+
+ "| "+benutzer.uid+" | "+
+ ""+benutzer.vorname+" | "+
+ ""+benutzer.nachname+" | "+
+ ""+(benutzer.aktiv === true ? "Ja" : "Nein")+" | "+
+ ""+
+ ""+
+ " | "+
+ "
"
+ );
+
+ // add delete event to button
+ $("#"+benutzer.uid+"_benutzerLoeschen").click(
+ function() {
+ Benutzergruppe.removeBenutzer(benutzer.uid, gruppe_kurzbz);
+ }
+ )
+ }
+ }
+
+ // add tablesorter to benutzergruppe table
+ Benutzergruppe._setTablesorter();
+ },
+ errorCallback: function(jqXHR, textStatus, errorThrown) {
+ FHC_DialogLib.alertError(textStatus);
+ }
+ }
+ );
+ },
+ getAllBenutzer: function() {
+ FHC_AjaxClient.ajaxCallGet(
+ 'person/gruppenmanagement/getAllBenutzer',
+ null,
+ {
+ successCallback: function(data, textStatus, jqXHR) {
+ if (FHC_AjaxClient.isError(data))
+ {
+ FHC_DialogLib.alertError(FHC_AjaxClient.getError(data));
+ return;
+ }
+
+ if (FHC_AjaxClient.hasData(data))
+ {
+ benutzerArr = [];
+
+ // save loaded data
+ let benutzerData = FHC_AjaxClient.getData(data);
+
+ for (let i = 0; i < benutzerData.length; i++)
+ {
+ let ben = benutzerData[i];
+
+ benutzerArr.push(
+ {
+ vorname: ben.vorname,
+ nachname: ben.nachname,
+ uid: ben.uid,
+ label: ben.nachname + " " + ben.vorname + " (" + ben.uid + ")",
+ id: ben.uid
+ }
+ );
+ }
+
+ // callback for searching source mitarbeiter array correctly
+ let sourceCallback = function(request, response)
+ {
+ // case insensitive matcher
+ let matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
+
+ // match vorname nachname OR nachname vorname OR uid
+ response($.grep(benutzerArr, function (value) {
+ return matcher.test(value.nachname + ' '+value.vorname + ' ' + value.nachname)
+ || matcher.test(value.uid);
+ }));
+ }
+
+ // fill autocomplete field with benutzer data
+ Benutzergruppe._fillAutocomplete(
+ 'teilnehmerSelect',
+ 'teilnehmer_uid',
+ sourceCallback
+ );
+ }
+ },
+ errorCallback: function(jqXHR, textStatus, errorThrown) {
+ FHC_DialogLib.alertError(textStatus);
+ }
+ }
+ );
+ },
+ addBenutzer: function(uid, gruppe_kurzbz) {
+ FHC_AjaxClient.ajaxCallPost(
+ 'person/gruppenmanagement/addBenutzer',
+ {
+ uid: uid,
+ gruppe_kurzbz: gruppe_kurzbz
+ },
+ {
+ successCallback: function(data, textStatus, jqXHR) {
+ if (FHC_AjaxClient.isError(data))
+ {
+ FHC_DialogLib.alertError(FHC_AjaxClient.getError(data));
+ return;
+ }
+
+ if (FHC_AjaxClient.hasData(data))
+ {
+ // load Benutzer after add to show change
+ Benutzergruppe.getBenutzer(gruppe_kurzbz);
+ }
+ },
+ errorCallback: function(jqXHR, textStatus, errorThrown) {
+ FHC_DialogLib.alertError(textStatus);
+ }
+ }
+ );
+ },
+ removeBenutzer: function(uid, gruppe_kurzbz) {
+ FHC_AjaxClient.ajaxCallPost(
+ 'person/gruppenmanagement/removeBenutzer',
+ {
+ uid: uid,
+ gruppe_kurzbz: gruppe_kurzbz
+ },
+ {
+ successCallback: function(data, textStatus, jqXHR) {
+ if (FHC_AjaxClient.isError(data))
+ {
+ FHC_DialogLib.alertError(FHC_AjaxClient.getError(data));
+ return;
+ }
+
+ if (FHC_AjaxClient.hasData(data))
+ {
+ // load Benutzer after remove to show change
+ Benutzergruppe.getBenutzer(gruppe_kurzbz);
+ }
+ },
+ errorCallback: function(jqXHR, textStatus, errorThrown) {
+ FHC_DialogLib.alertError(textStatus);
+ }
+ }
+ );
+ },
+ _fillAutocomplete: function(autocompleteId, idFieldId, source) {
+ // jQuery ui autocomplete for benutzer
+ $("#"+autocompleteId).autocomplete(
+ {
+ // custom matcher
+ source: source,
+ autoFocus: true,
+ select: function(event, ui)
+ {
+ // when autocmplete entry selected, display label text in autocomplete, fill hidden value field
+ $("#"+autocompleteId).val(ui.item.label);
+ $("#"+idFieldId).val(ui.item.id);
+ return false;
+ }
+ }
+ );
+ },
+ _setTablesorter: function() {
+ Tablesort.addTablesorter(
+ // sort by first and third column asc, show filters beggining with 2 Benutzer, exclude fifth column from filter
+ "benutzer-table", [[0,0], [2,0]], ["filter", "zebra"], 2, {headers: {4: {filter: false}}}
+ )
+ }
+};
+
+/**
+ * When JQuery is up
+ */
+$(document).ready(function() {
+ // get the group name
+ let gruppe_kurzbz = $("#gruppe_kurzbz").val();
+
+ // load Benutzer for autocomplete selection
+ Benutzergruppe.getAllBenutzer();
+ // load Benutzer for table
+ Benutzergruppe.getBenutzer(gruppe_kurzbz);
+
+ // add click event to "add Benutzer" button
+ $("#teilnehmerHinzufuegen").click(function(){
+ let uid = $("#teilnehmer_uid").val();
+ Benutzergruppe.addBenutzer(uid, gruppe_kurzbz);
+ $("#teilnehmerSelect").val('');
+ }
+ );
+});
diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php
index 14193b32e..b29171f86 100644
--- a/system/dbupdate_3.3.php
+++ b/system/dbupdate_3.3.php
@@ -6203,6 +6203,72 @@ if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berecht
}
}
+// 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'))
+{
+ $qry = 'CREATE TABLE public.tbl_gruppe_manager (
+ gruppe_manager_id integer,
+ gruppe_kurzbz varchar(32) NOT NULL,
+ uid varchar(32) NOT NULL,
+ insertamum timestamp DEFAULT NOW(),
+ insertvon varchar(32)
+ );
+
+ COMMENT ON TABLE public.tbl_gruppe_manager IS \'Table to save assignments groups to their managers.\';
+ COMMENT ON COLUMN public.tbl_gruppe_manager.gruppe_kurzbz IS \'Name of group\';
+ COMMENT ON COLUMN public.tbl_gruppe_manager.uid IS \'User id of group manager\';
+
+ CREATE SEQUENCE public.seq_gruppe_manager_gruppe_manager_id
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+ ALTER TABLE public.tbl_gruppe_manager ALTER COLUMN gruppe_manager_id SET DEFAULT nextval(\'public.seq_gruppe_manager_gruppe_manager_id\'::regclass);
+
+ GRANT SELECT, UPDATE ON SEQUENCE public.seq_gruppe_manager_gruppe_manager_id TO vilesci;
+ GRANT SELECT, UPDATE ON SEQUENCE public.seq_gruppe_manager_gruppe_manager_id TO fhcomplete;
+
+ ALTER TABLE public.tbl_gruppe_manager ADD CONSTRAINT pk_gruppe_manager PRIMARY KEY (gruppe_manager_id);
+
+ ALTER TABLE public.tbl_gruppe_manager ADD CONSTRAINT fk_gruppe_manager_gruppe_kurzbz FOREIGN KEY (gruppe_kurzbz) REFERENCES public.tbl_gruppe(gruppe_kurzbz) ON UPDATE CASCADE ON DELETE CASCADE;
+ ALTER TABLE public.tbl_gruppe_manager ADD CONSTRAINT fk_gruppe_manager_uid FOREIGN KEY (uid) REFERENCES public.tbl_benutzer(uid) ON UPDATE CASCADE ON DELETE RESTRICT;
+
+ ALTER TABLE public.tbl_gruppe_manager ADD CONSTRAINT uk_gruppe_manager_gruppe_kurzbz_uid UNIQUE (gruppe_kurzbz, uid);';
+
+ if (!$db->db_query($qry))
+ echo 'public.tbl_gruppe_manager: '.$db->db_last_error().'
';
+ else
+ echo '
public.tbl_gruppe_manager table created';
+
+ $qry = 'GRANT SELECT ON TABLE public.tbl_gruppe_manager TO web;';
+ if (!$db->db_query($qry))
+ echo 'public.tbl_gruppe_manager: '.$db->db_last_error().'
';
+ else
+ echo '
Granted privileges to web on public.tbl_gruppe_manager';
+
+ $qry = 'GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE public.tbl_gruppe_manager TO vilesci;';
+ if (!$db->db_query($qry))
+ echo 'public.tbl_gruppe_manager: '.$db->db_last_error().'
';
+ else
+ echo '
Granted privileges to vilesci on public.tbl_gruppe_manager';
+}
+
+// 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 'system.tbl_berechtigung '.$db->db_last_error().'
';
+ else
+ echo ' system.tbl_berechtigung: Added permission for lehre/gruppenmanager
';
+ }
+}
+
// NOTE(chris): Add "Template" to "Lehrtyp"
if($result = @$db->db_query("SELECT 1 FROM lehre.tbl_lehrtyp WHERE bezeichnung = 'Template';"))
{
diff --git a/system/filtersupdate.php b/system/filtersupdate.php
index 3237eae2d..2aa2dc5c2 100644
--- a/system/filtersupdate.php
+++ b/system/filtersupdate.php
@@ -1142,6 +1142,27 @@ $filters = array(
}
',
'oe_kurzbz' => null
+ ),
+ array(
+ 'app' => 'core',
+ 'dataset_name' => 'gruppenmanagement',
+ 'filter_kurzbz' => 'gruppenmanagement',
+ 'description' => '{Meine Gruppen}',
+ 'sort' => 1,
+ 'default_filter' => true,
+ 'filter' => '
+ {
+ "name": "gruppenmanagement",
+ "columns": [
+ {"name": "gruppe_kurzbz"},
+ {"name": "gruppe_bezeichnung"},
+ {"name": "gruppe_beschreibung"},
+ {"name": "studiengang_kurzbz"}
+ ],
+ "filters": []
+ }
+ ',
+ 'oe_kurzbz' => null,
)
);
diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php
index b1f22c473..0f68a3558 100644
--- a/system/phrasesupdate.php
+++ b/system/phrasesupdate.php
@@ -16107,6 +16107,186 @@ array(
'insertvon' => 'system'
)
)
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'gruppenmanagement',
+ 'phrase' => 'benutzerSchonZugewiesen',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Benutzer ist bereits der Gruppe zugewiesen",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "User is already assigned to the group",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'gruppenmanagement',
+ 'phrase' => 'gruppenmanagement',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Gruppenmanagement",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "Group management",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'gruppenmanagement',
+ 'phrase' => 'kurzbezeichnung',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Kurzbezeichnung",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "Short description",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'gruppenmanagement',
+ 'phrase' => 'bezeichnung',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Bezeichnung",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "Name",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'gruppenmanagement',
+ 'phrase' => 'beschreibung',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Beschreibung",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "Description",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'gruppenmanagement',
+ 'phrase' => 'zuweisenloeschen',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Zuweisen/Entfernen",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "Assign/Remove",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'gruppenmanagement',
+ 'phrase' => 'benutzergruppe',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Benutzergruppe",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "User group",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'gruppenmanagement',
+ 'phrase' => 'benutzerHinzufuegen',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Benutzer hinzufügen",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "Add user",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'gruppenmanagement',
+ 'phrase' => 'aktiv',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "aktiv",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "active",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
)
);
diff --git a/vilesci/lehre/einheit_menu.php b/vilesci/lehre/einheit_menu.php
index bfb44e8d9..a6e09fe23 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,17 +83,59 @@ if(!$rechte->isBerechtigt('lehre/gruppe', null, 's'))
Gruppe-Verwaltung
+
-
+ %s - %s %s "
+ ."
"
+ .""
+ ."";
+ ?>
+
@@ -158,8 +301,10 @@ else if (isset($_GET['type']) && $_GET['type']=='delete')
if($rechte->isBerechtigt('lehre/gruppe', $oe_studiengang, 'suid'))
{
+ $grp_kurzbz = $_GET['einheit_id'];
+
$e=new gruppe();
- if(!$e->delete($_GET['einheit_id']))
+ if(!$e->delete($grp_kurzbz))
echo $e->errormsg;
}
else
@@ -214,6 +359,7 @@ function printDropDown()
echo '';
echo '';
}
+
function doSave()
{
global $rechte;
@@ -241,8 +387,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'];
@@ -258,13 +406,66 @@ function doSave()
$e->sort = $_POST['sort'];
$e->content_visible = isset($_POST['content_visible']);
+
+ // gruppemanager immer array, leer wenn keine angegeben
+ $gruppemanager_uids = isset($_POST['gruppemanager']) && 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;
+ echo "".$e->errormsg."";
+ else // wenn Gruppe erfolgreich gespeichert, Gruppenmanager speichern
+ {
+ // Gruppe gemäss Konvention in Großbuchstaben
+ $gruppe_kurzbz = mb_strtoupper($_POST['kurzbz']);
+
+ // bestehende Gruppenmanager laden
+ $bestehende_gruppemanager_uids = array();
+ $gruppemanager_hlp = new gruppemanager();
+ if ($gruppemanager_hlp->load_uids($gruppe_kurzbz))
+ {
+ foreach ($gruppemanager_hlp->uids as $uid_obj)
+ {
+ $bestehende_gruppemanager_uids[] = $uid_obj->uid;
+ }
+ }
+
+ foreach ($gruppemanager_uids as $gruppemanager_uid)
+ {
+ // wenn Gruppenmanager 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;
+ }
+ }
+
+ // zu löschende Gruppemanager ermitteln
+ $geloeschte_gruppemanager_uids = array_diff($bestehende_gruppemanager_uids, $gruppemanager_uids);
+
+ // Nicht mehr vorhandene Gruppenmanager löschen
+ $gruppemanager_hlp = new gruppemanager();
+ foreach ($geloeschte_gruppemanager_uids as $geloeschte_uid)
+ {
+ if (!$gruppemanager_hlp->delete($geloeschte_uid, $gruppe_kurzbz))
+ echo $gruppemanager_hlp->errormsg;
+ }
+ }
}
}
-
-
function doEdit($kurzbz,$new=false)
{
global $db, $rechte, $studiengang, $searchItems;
@@ -282,6 +483,9 @@ function doEdit($kurzbz,$new=false)