From 0cb303c2424831f460ea9d61f424117ab7edd62f Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Tue, 31 May 2022 14:59:05 +0200 Subject: [PATCH 01/16] added table public.tbl_gruppe_manager for adding managers to groups --- system/dbupdate_3.3.php | 52 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index fa1a15940..f36760821 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -6154,6 +6154,58 @@ 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 RESTRICT; + 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'; +} + // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

Pruefe Tabellen und Attribute!

'; From 549396148dd66ad9f5e63aeb0d93ee213621e25c Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Tue, 7 Jun 2022 17:54:05 +0200 Subject: [PATCH 02/16] 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) + + + + + From 457ab9dc3e30812b1bbbb771c401bcfcb3f47eea Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Wed, 8 Jun 2022 19:49:30 +0200 Subject: [PATCH 03/16] Gruppenadministration: first version of list with Gruppen of a manager. --- .../organisation/Gruppenadministration.php | 166 ++++++++++++++++++ .../organisation/Benutzergruppe_model.php | 14 ++ .../gruppenadministration/benutzergruppe.php | 47 +++++ .../gruppenadministration.php | 46 +++++ .../gruppenadministrationData.php | 57 ++++++ system/filtersupdate.php | 23 ++- 6 files changed, 352 insertions(+), 1 deletion(-) create mode 100644 application/controllers/organisation/Gruppenadministration.php create mode 100644 application/models/organisation/Benutzergruppe_model.php create mode 100644 application/views/organisation/gruppenadministration/benutzergruppe.php create mode 100644 application/views/organisation/gruppenadministration/gruppenadministration.php create mode 100644 application/views/organisation/gruppenadministration/gruppenadministrationData.php diff --git a/application/controllers/organisation/Gruppenadministration.php b/application/controllers/organisation/Gruppenadministration.php new file mode 100644 index 000000000..68d4b9771 --- /dev/null +++ b/application/controllers/organisation/Gruppenadministration.php @@ -0,0 +1,166 @@ + 'admin:r', + 'showBenutzergruppe' => 'admin:r', + 'saveBPK' => 'admin:rw', + ) + ); + + // Loads models + $this->load->model('organisation/benutzergruppe_model', 'BenutzergruppeModel'); + + $this->load->library('WidgetLib'); + $this->loadPhrases( + array( + 'global', + 'person', + 'lehre', + 'ui', + 'filter' + ) + ); + + $this->setControllerId(); // sets the controller id + $this->_setAuthUID(); // sets property uid + } + + // ----------------------------------------------------------------------------------------------------------------- + // Public methods + + /** + * Main page + */ + public function index() + { + //$this->_setNavigationMenuIndex(); // define the navigation menu for this page + + $this->load->view( + 'organisation/gruppenadministration/gruppenadministration.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->BenutzergruppeModel->addSelect('uid, vorname, nachname'); + $this->BenutzergruppeModel->addJoin('public.tbl_benutzer', 'uid'); + $this->BenutzergruppeModel->addJoin('public.tbl_person', 'person_id'); + $benutzer = $this->BenutzergruppeModel->loadWhere(array('gruppe_kurzbz' => $gruppe_kurzbz)); + + $this->load->view( + 'organisation/gruppenadministration/benutzergruppe.php', + array('gruppe_kurzbz' => $gruppe_kurzbz, 'benutzer' => $benutzer) + ); + } + + /** + * Saves a ZGV for a prestudent, includes Ort, Datum, Nation for bachelor and master + */ + // public function saveBPK() + // { + // $person_id = $this->input->post('person_id'); + // $bpk = $this->input->post('bpk'); + // + // if (isEmptyString($person_id)) + // $result = error('PersonID missing'); + // else + // { + // $result = $this->PersonModel->update( + // $person_id, + // array( + // 'bpk' => $bpk, + // 'updateamum' => date('Y-m-d H:i:s') + // ) + // ); + // redirect('person/BPKWartung/index'); + // } + // } + + // ----------------------------------------------------------------------------------------------------------------- + // Private methods + + /** + * Define the navigation menu for the showDetails page + */ + private function _setNavigationMenuShowDetails() + { + $this->load->library('NavigationLib', array('navigation_page' => 'organisation/Gruppenadministration/showBenutzergruppe')); + + $link = site_url('organisation/Gruppenadministration'); + + $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 + ) + ) + ); + } + + /** + * Define the navigation menu for the showDetails page + */ + // private function _setNavigationMenuIndex() + // { + // $this->load->library('NavigationLib', array('navigation_page' => 'organisation/Gruppenadministration/index')); + // + // $link = site_url(); + // + // $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 + // ) + // ) + // ); + // } + + private function _setAuthUID() + { + $this->_uid = getAuthUID(); + + if (!$this->_uid) show_error('User authentification failed'); + } +} diff --git a/application/models/organisation/Benutzergruppe_model.php b/application/models/organisation/Benutzergruppe_model.php new file mode 100644 index 000000000..b99ddc35e --- /dev/null +++ b/application/models/organisation/Benutzergruppe_model.php @@ -0,0 +1,14 @@ +dbTable = 'public.tbl_benutzergruppe'; + $this->pk = array('uid', 'gruppe_kurzbz'); + } +} diff --git a/application/views/organisation/gruppenadministration/benutzergruppe.php b/application/views/organisation/gruppenadministration/benutzergruppe.php new file mode 100644 index 000000000..db706e510 --- /dev/null +++ b/application/views/organisation/gruppenadministration/benutzergruppe.php @@ -0,0 +1,47 @@ +load->view( + 'templates/FHC-Header', + array( + 'title' => 'Benutzer in Gruppe', + 'jquery' => true, + 'jqueryui' => true, + 'bootstrap' => true, + 'fontawesome' => true, + 'sbadmintemplate' => true, + 'tablesorter' => true, + 'ajaxlib' => true, + 'filterwidget' => true, + 'navigationwidget' => true, + 'phrases' => array( + 'ui' => array('bitteEintragWaehlen') + ), + 'customCSSs' => 'public/css/sbadmin2/tablesort_bootstrap.css', + 'customJSs' => array('public/js/bootstrapper.js') + ) + ); +?> + + +
+ + widgetlib->widget('NavigationWidget'); ?> + +
+
+
+
+ +
+
+
+ +
+
+
+
+ + +load->view('templates/FHC-Footer'); ?> diff --git a/application/views/organisation/gruppenadministration/gruppenadministration.php b/application/views/organisation/gruppenadministration/gruppenadministration.php new file mode 100644 index 000000000..889894835 --- /dev/null +++ b/application/views/organisation/gruppenadministration/gruppenadministration.php @@ -0,0 +1,46 @@ +load->view( + 'templates/FHC-Header', + array( + 'title' => 'Gruppenadministration', + 'jquery' => true, + 'jqueryui' => true, + 'bootstrap' => true, + 'fontawesome' => true, + 'sbadmintemplate' => true, + 'tablesorter' => true, + 'ajaxlib' => true, + 'filterwidget' => true, + 'navigationwidget' => true, + 'phrases' => array( + 'ui' => array('bitteEintragWaehlen') + ), + 'customCSSs' => 'public/css/sbadmin2/tablesort_bootstrap.css', + 'customJSs' => array('public/js/bootstrapper.js') + ) + ); +?> + + +
+ + widgetlib->widget('NavigationWidget'); ?> + +
+
+
+
+ +
+
+
+ load->view('organisation/gruppenadministration/gruppenadministrationData.php'); ?> +
+
+
+
+ + +load->view('templates/FHC-Footer'); ?> diff --git a/application/views/organisation/gruppenadministration/gruppenadministrationData.php b/application/views/organisation/gruppenadministration/gruppenadministrationData.php new file mode 100644 index 000000000..7e9e467a5 --- /dev/null +++ b/application/views/organisation/gruppenadministration/gruppenadministrationData.php @@ -0,0 +1,57 @@ + ' + SELECT gruppe_kurzbz, grp.bezeichnung AS gruppe_bezeichnung, grp.beschreibung AS gruppe_beschreibung, + studiengang_kz, UPPER(stg.typ||stg.kurzbz) AS studiengang_kurzbz, semester + 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('gruppenadministration', 'kurzbezeichnung')) , + ucfirst($this->p->t('global', 'bezeichnung')) , + ucfirst($this->p->t('global', 'beschreibung')) , + ucfirst($this->p->t('lehre', 'studiengangskennzahl')) , + ucfirst($this->p->t('lehre', 'studiengang')), + ucfirst($this->p->t('lehre', 'semester')) , + ), + 'formatRow' => function($datasetRaw) { + + /* NOTE: Dont use $this here for PHP Version compatibility */ + $datasetRaw->{'Teilnehmer'} = sprintf( + ''.$this->p->t('gruppenadministration', 'zuweisenlöschen').'', + site_url('organisation/Gruppenadministration/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->{'lehre'} = $datasetRaw->{'lehre'} == 'true' ? 'ja' : 'nein'; + + return $datasetRaw; + } + ); + + $filterWidgetArray['app'] = 'core'; + $filterWidgetArray['datasetName'] = 'gruppenadministration'; + $filterWidgetArray['filterKurzbz'] = 'gruppenadministration'; + $filterWidgetArray['filter_id'] = $this->input->get('filter_id'); + + echo $this->widgetlib->widget('FilterWidget', $filterWidgetArray); +?> diff --git a/system/filtersupdate.php b/system/filtersupdate.php index 05cfc0d38..746ff2adc 100644 --- a/system/filtersupdate.php +++ b/system/filtersupdate.php @@ -1082,7 +1082,28 @@ $filters = array( } ', 'oe_kurzbz' => null, - ) + ), + array( + 'app' => 'core', + 'dataset_name' => 'gruppenadministration', + 'filter_kurzbz' => 'Gruppenadministration', + 'description' => '{Meine Gruppen}', + 'sort' => 1, + 'default_filter' => true, + 'filter' => ' + { + "name": "Gruppenadministration", + "columns": [ + {"name": "gruppe_kurzbz"}, + {"name": "gruppe_bezeichnung"}, + {"name": "gruppe_beschreibung"}, + {"name": "studiengang_kurzbz"} + ], + "filters": [] + } + ', + 'oe_kurzbz' => null, + ), ); // Loop through the filters array From 83351e7329cba5147b73cb6529e0179742fa6889 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Thu, 9 Jun 2022 20:05:46 +0200 Subject: [PATCH 04/16] Manager Gruppenadministration: first version of adding Benutzer to Gruppe --- .../organisation/Gruppenadministration.php | 67 ++++++---- .../organisation/Benutzergruppe_model.php | 14 -- .../gruppenadministration/benutzergruppe.php | 50 +++++++- public/js/organisation/benutzergruppe.js | 121 ++++++++++++++++++ 4 files changed, 210 insertions(+), 42 deletions(-) delete mode 100644 application/models/organisation/Benutzergruppe_model.php create mode 100644 public/js/organisation/benutzergruppe.js diff --git a/application/controllers/organisation/Gruppenadministration.php b/application/controllers/organisation/Gruppenadministration.php index 68d4b9771..342e93a67 100644 --- a/application/controllers/organisation/Gruppenadministration.php +++ b/application/controllers/organisation/Gruppenadministration.php @@ -18,12 +18,14 @@ class Gruppenadministration extends Auth_Controller array( 'index' => 'admin:r', 'showBenutzergruppe' => 'admin:r', - 'saveBPK' => 'admin:rw', + 'getAllBenutzer' => 'admin:r', + 'addBenutzer' => 'admin:rw', ) ); // Loads models - $this->load->model('organisation/benutzergruppe_model', 'BenutzergruppeModel'); + $this->load->model('person/benutzer_model', 'BenutzerModel'); + $this->load->model('person/benutzergruppe_model', 'BenutzergruppeModel'); $this->load->library('WidgetLib'); $this->loadPhrases( @@ -69,7 +71,12 @@ class Gruppenadministration extends Auth_Controller $this->BenutzergruppeModel->addSelect('uid, vorname, nachname'); $this->BenutzergruppeModel->addJoin('public.tbl_benutzer', 'uid'); $this->BenutzergruppeModel->addJoin('public.tbl_person', 'person_id'); - $benutzer = $this->BenutzergruppeModel->loadWhere(array('gruppe_kurzbz' => $gruppe_kurzbz)); + $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( 'organisation/gruppenadministration/benutzergruppe.php', @@ -78,27 +85,41 @@ class Gruppenadministration extends Auth_Controller } /** - * Saves a ZGV for a prestudent, includes Ort, Datum, Nation for bachelor and master + * 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 saveBPK() - // { - // $person_id = $this->input->post('person_id'); - // $bpk = $this->input->post('bpk'); - // - // if (isEmptyString($person_id)) - // $result = error('PersonID missing'); - // else - // { - // $result = $this->PersonModel->update( - // $person_id, - // array( - // 'bpk' => $bpk, - // 'updateamum' => date('Y-m-d H:i:s') - // ) - // ); - // redirect('person/BPKWartung/index'); - // } - // } + public function addBenutzer() + { + $uid = $this->input->post('uid'); + $gruppe_kurzbz = $this->input->post('gruppe_kurzbz'); + + if (isEmptyString($uid)) + $result = error('Uid missing'); + else + { + $result = $this->BenutzergruppeModel->insert( + array( + 'uid' => $uid, + 'gruppe_kurzbz' => $gruppe_kurzbz, + 'insertamum' => date('Y-m-d H:i:s') + ) + ); + } + + $this->outputJson($result); + } // ----------------------------------------------------------------------------------------------------------------- // Private methods diff --git a/application/models/organisation/Benutzergruppe_model.php b/application/models/organisation/Benutzergruppe_model.php deleted file mode 100644 index b99ddc35e..000000000 --- a/application/models/organisation/Benutzergruppe_model.php +++ /dev/null @@ -1,14 +0,0 @@ -dbTable = 'public.tbl_benutzergruppe'; - $this->pk = array('uid', 'gruppe_kurzbz'); - } -} diff --git a/application/views/organisation/gruppenadministration/benutzergruppe.php b/application/views/organisation/gruppenadministration/benutzergruppe.php index db706e510..be7e02fc6 100644 --- a/application/views/organisation/gruppenadministration/benutzergruppe.php +++ b/application/views/organisation/gruppenadministration/benutzergruppe.php @@ -10,13 +10,14 @@ 'sbadmintemplate' => true, 'tablesorter' => true, 'ajaxlib' => true, + 'dialoglib' => true, 'filterwidget' => true, 'navigationwidget' => true, 'phrases' => array( 'ui' => array('bitteEintragWaehlen') ), 'customCSSs' => 'public/css/sbadmin2/tablesort_bootstrap.css', - 'customJSs' => array('public/js/bootstrapper.js') + 'customJSs' => array('public/js/bootstrapper.js', 'public/js/tablesort/tablesort.js', 'public/js/organisation/benutzergruppe.js') ) ); ?> @@ -31,13 +32,52 @@
-
- +
+
+
+
+ + + + + + + +
+
+
+
+
+
+
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
+ + + + + + + + + + + + + + + + +
Uidp->t('global', 'vorname')); ?>p->t('global', 'nachname')); ?>p->t('ui', 'loeschen')); ?>
uid; ?>vorname; ?>nachname; ?> + +
+ diff --git a/public/js/organisation/benutzergruppe.js b/public/js/organisation/benutzergruppe.js new file mode 100644 index 000000000..c7bdd3580 --- /dev/null +++ b/public/js/organisation/benutzergruppe.js @@ -0,0 +1,121 @@ +/** + * Javascript file for benutzergruppe management page + */ + +var Benutzergruppe = { + getAllBenutzer: function() + { + FHC_AjaxClient.ajaxCallGet( + 'organisation/Gruppenadministration/getAllBenutzer', + null, + { + successCallback: function(data, textStatus, jqXHR) { + 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( + 'organisation/Gruppenadministration/addBenutzer', + { + uid: uid, + gruppe_kurzbz: gruppe_kurzbz + }, + { + successCallback: function(data, textStatus, jqXHR) { + if (FHC_AjaxClient.hasData(data)) + { + let addBenutzerRes = FHC_AjaxClient.getData(data); + console.log(addBenutzerRes); + } + }, + 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; + } + } + ); + } +}; + +/** + * When JQuery is up + */ +$(document).ready(function() { + + Benutzergruppe.getAllBenutzer(); + Tablesort.addTablesorter( + "benutzer-table", [[0,0], [2,0]], ['filter'], 2 + ) + + $("#teilnehmerHinzufuegen").click( + function(){ + let uid = $("#teilnehmer_uid").val(); + let gruppe_kurzbz = $("#gruppe_kurzbz").val(); + Benutzergruppe.addBenutzer(uid, gruppe_kurzbz); + } + ); +}); From 5bc57767d143d539aa71557ee102f2cf2a3c4fe4 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Fri, 10 Jun 2022 22:01:48 +0200 Subject: [PATCH 05/16] Gruppenadministration: - added delete functionality - Benutzer per group are retrieved via javascript and refreshed when group added/delted - moved gruppenadministration files to person folder from organisation - handle error when benutzer was already assigned to a group --- .../Gruppenadministration.php | 67 ++++++++++++- .../gruppenadministration/benutzergruppe.php | 11 ++- .../gruppenadministration.php | 2 +- .../gruppenadministrationData.php | 2 +- .../benutzergruppe.js | 93 +++++++++++++++++-- 5 files changed, 155 insertions(+), 20 deletions(-) rename application/controllers/{organisation => person}/Gruppenadministration.php (72%) rename application/views/{organisation => person}/gruppenadministration/benutzergruppe.php (89%) rename application/views/{organisation => person}/gruppenadministration/gruppenadministration.php (90%) rename application/views/{organisation => person}/gruppenadministration/gruppenadministrationData.php (96%) rename public/js/{organisation => person}/benutzergruppe.js (54%) diff --git a/application/controllers/organisation/Gruppenadministration.php b/application/controllers/person/Gruppenadministration.php similarity index 72% rename from application/controllers/organisation/Gruppenadministration.php rename to application/controllers/person/Gruppenadministration.php index 342e93a67..f614a4b02 100644 --- a/application/controllers/organisation/Gruppenadministration.php +++ b/application/controllers/person/Gruppenadministration.php @@ -18,8 +18,10 @@ class Gruppenadministration extends Auth_Controller array( 'index' => 'admin:r', 'showBenutzergruppe' => 'admin:r', + 'getBenutzer' => 'admin:r', 'getAllBenutzer' => 'admin:r', 'addBenutzer' => 'admin:rw', + 'removeBenutzer' => 'admin:rw' ) ); @@ -53,7 +55,7 @@ class Gruppenadministration extends Auth_Controller //$this->_setNavigationMenuIndex(); // define the navigation menu for this page $this->load->view( - 'organisation/gruppenadministration/gruppenadministration.php', + 'person/gruppenadministration/gruppenadministration.php', array('uid' => $this->_uid) ); } @@ -79,11 +81,27 @@ class Gruppenadministration extends Auth_Controller $benutzer = hasData($benutzerRes) ? getData($benutzerRes) : array(); $this->load->view( - 'organisation/gruppenadministration/benutzergruppe.php', + 'person/gruppenadministration/benutzergruppe.php', array('gruppe_kurzbz' => $gruppe_kurzbz, 'benutzer' => $benutzer) ); } + /** + * Gets Benutzer assigned to a Gruppe + */ + public function getBenutzer() + { + $gruppe_kurzbz = $this->input->get('gruppe_kurzbz'); + + $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)); + + $this->outputJson($benutzerRes); + } + + /** * Gets all Benutzer for assignment to Gruppe */ @@ -109,6 +127,25 @@ class Gruppenadministration extends Auth_Controller $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(getError($this->p->t('gruppenadministration', 'benutzerZugewiesen'))); + return; + } + $result = $this->BenutzergruppeModel->insert( array( 'uid' => $uid, @@ -121,6 +158,26 @@ class Gruppenadministration extends Auth_Controller $this->outputJson($result); } + 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 + ) + ); + } + + $this->outputJson($result); + } + // ----------------------------------------------------------------------------------------------------------------- // Private methods @@ -129,9 +186,9 @@ class Gruppenadministration extends Auth_Controller */ private function _setNavigationMenuShowDetails() { - $this->load->library('NavigationLib', array('navigation_page' => 'organisation/Gruppenadministration/showBenutzergruppe')); + $this->load->library('NavigationLib', array('navigation_page' => 'person/Gruppenadministration/showBenutzergruppe')); - $link = site_url('organisation/Gruppenadministration'); + $link = site_url('person/Gruppenadministration'); $this->navigationlib->setSessionMenu( array( @@ -156,7 +213,7 @@ class Gruppenadministration extends Auth_Controller */ // private function _setNavigationMenuIndex() // { - // $this->load->library('NavigationLib', array('navigation_page' => 'organisation/Gruppenadministration/index')); + // $this->load->library('NavigationLib', array('navigation_page' => 'person/gruppenadministration/index')); // // $link = site_url(); // diff --git a/application/views/organisation/gruppenadministration/benutzergruppe.php b/application/views/person/gruppenadministration/benutzergruppe.php similarity index 89% rename from application/views/organisation/gruppenadministration/benutzergruppe.php rename to application/views/person/gruppenadministration/benutzergruppe.php index be7e02fc6..e5eb9c84d 100644 --- a/application/views/organisation/gruppenadministration/benutzergruppe.php +++ b/application/views/person/gruppenadministration/benutzergruppe.php @@ -14,10 +14,10 @@ 'filterwidget' => true, 'navigationwidget' => true, 'phrases' => array( - 'ui' => array('bitteEintragWaehlen') + 'ui' ), 'customCSSs' => 'public/css/sbadmin2/tablesort_bootstrap.css', - 'customJSs' => array('public/js/bootstrapper.js', 'public/js/tablesort/tablesort.js', 'public/js/organisation/benutzergruppe.js') + 'customJSs' => array('public/js/bootstrapper.js', 'public/js/tablesort/tablesort.js', 'public/js/person/benutzergruppe.js') ) ); ?> @@ -46,6 +46,7 @@ @@ -63,18 +64,18 @@ p->t('ui', 'loeschen')); ?> - + diff --git a/application/views/organisation/gruppenadministration/gruppenadministration.php b/application/views/person/gruppenadministration/gruppenadministration.php similarity index 90% rename from application/views/organisation/gruppenadministration/gruppenadministration.php rename to application/views/person/gruppenadministration/gruppenadministration.php index 889894835..86442af1d 100644 --- a/application/views/organisation/gruppenadministration/gruppenadministration.php +++ b/application/views/person/gruppenadministration/gruppenadministration.php @@ -36,7 +36,7 @@

- load->view('organisation/gruppenadministration/gruppenadministrationData.php'); ?> + load->view('person/gruppenadministration/gruppenadministrationData.php'); ?>
diff --git a/application/views/organisation/gruppenadministration/gruppenadministrationData.php b/application/views/person/gruppenadministration/gruppenadministrationData.php similarity index 96% rename from application/views/organisation/gruppenadministration/gruppenadministrationData.php rename to application/views/person/gruppenadministration/gruppenadministrationData.php index 7e9e467a5..2a9193cb9 100644 --- a/application/views/organisation/gruppenadministration/gruppenadministrationData.php +++ b/application/views/person/gruppenadministration/gruppenadministrationData.php @@ -24,7 +24,7 @@ /* NOTE: Dont use $this here for PHP Version compatibility */ $datasetRaw->{'Teilnehmer'} = sprintf( ''.$this->p->t('gruppenadministration', 'zuweisenlöschen').'', - site_url('organisation/Gruppenadministration/showBenutzergruppe'), + site_url('person/Gruppenadministration/showBenutzergruppe'), $datasetRaw->{'gruppe_kurzbz'}, 'index', (isset($_GET['fhc_controller_id'])?$_GET['fhc_controller_id']:'') diff --git a/public/js/organisation/benutzergruppe.js b/public/js/person/benutzergruppe.js similarity index 54% rename from public/js/organisation/benutzergruppe.js rename to public/js/person/benutzergruppe.js index c7bdd3580..1dd01131a 100644 --- a/public/js/organisation/benutzergruppe.js +++ b/public/js/person/benutzergruppe.js @@ -3,10 +3,66 @@ */ var Benutzergruppe = { + getBenutzer: function(gruppe_kurzbz) + { + FHC_AjaxClient.ajaxCallGet( + 'person/gruppenadministration/getBenutzer', + { + gruppe_kurzbz: gruppe_kurzbz + }, + { + successCallback: function(data, textStatus, jqXHR) { + if (FHC_AjaxClient.hasData(data)) + { + // save loaded data + let benutzerData = FHC_AjaxClient.getData(data); + + console.log(benutzerData); + + let benutzerTable = $("#benutzer-table tbody"); + + benutzerTable.empty(); + + // 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+""+ + ""+ + ""+ + ""+ + "" + ); + + // add delete event to button + $("#"+benutzer.uid+"_benutzerLoeschen").click( + function() { + Benutzergruppe.removeBenutzer(benutzer.uid, gruppe_kurzbz); + } + ) + } + + Tablesort.addTablesorter( + "benutzer-table", [[0,0], [2,0]], ["filter"], 2 + ) + } + }, + errorCallback: function(jqXHR, textStatus, errorThrown) { + FHC_DialogLib.alertError(textStatus); + } + } + ); + }, getAllBenutzer: function() { FHC_AjaxClient.ajaxCallGet( - 'organisation/Gruppenadministration/getAllBenutzer', + 'person/gruppenadministration/getAllBenutzer', null, { successCallback: function(data, textStatus, jqXHR) { @@ -62,7 +118,7 @@ var Benutzergruppe = { addBenutzer: function(uid, gruppe_kurzbz) { FHC_AjaxClient.ajaxCallPost( - 'organisation/Gruppenadministration/addBenutzer', + 'person/gruppenadministration/addBenutzer', { uid: uid, gruppe_kurzbz: gruppe_kurzbz @@ -72,7 +128,31 @@ var Benutzergruppe = { if (FHC_AjaxClient.hasData(data)) { let addBenutzerRes = FHC_AjaxClient.getData(data); - console.log(addBenutzerRes); + + Benutzergruppe.getBenutzer(gruppe_kurzbz); + } + }, + errorCallback: function(jqXHR, textStatus, errorThrown) { + FHC_DialogLib.alertError(textStatus); + } + } + ); + }, + removeBenutzer: function(uid, gruppe_kurzbz) + { + FHC_AjaxClient.ajaxCallPost( + 'person/gruppenadministration/removeBenutzer', + { + uid: uid, + gruppe_kurzbz: gruppe_kurzbz + }, + { + successCallback: function(data, textStatus, jqXHR) { + if (FHC_AjaxClient.hasData(data)) + { + let addBenutzerRes = FHC_AjaxClient.getData(data); + + Benutzergruppe.getBenutzer(gruppe_kurzbz); } }, errorCallback: function(jqXHR, textStatus, errorThrown) { @@ -105,16 +185,13 @@ var Benutzergruppe = { * When JQuery is up */ $(document).ready(function() { - + let gruppe_kurzbz = $("#gruppe_kurzbz").val(); Benutzergruppe.getAllBenutzer(); - Tablesort.addTablesorter( - "benutzer-table", [[0,0], [2,0]], ['filter'], 2 - ) + Benutzergruppe.getBenutzer(gruppe_kurzbz); $("#teilnehmerHinzufuegen").click( function(){ let uid = $("#teilnehmer_uid").val(); - let gruppe_kurzbz = $("#gruppe_kurzbz").val(); Benutzergruppe.addBenutzer(uid, gruppe_kurzbz); } ); From f57123e100bba315b65ac13bda6d27132b4ba797 Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Mon, 13 Jun 2022 12:01:00 +0200 Subject: [PATCH 06/16] Gruppenadministration Benutzergruppen: - changed phrases - show error dialog when json error returned - zebra table - hide filter header for non-filtered columns - empty input field after adding Benutzer --- .../controllers/person/Gruppenadministration.php | 2 +- .../gruppenadministration/benutzergruppe.php | 14 +------------- public/js/person/benutzergruppe.js | 13 +++++++++++-- 3 files changed, 13 insertions(+), 16 deletions(-) diff --git a/application/controllers/person/Gruppenadministration.php b/application/controllers/person/Gruppenadministration.php index f614a4b02..46862021c 100644 --- a/application/controllers/person/Gruppenadministration.php +++ b/application/controllers/person/Gruppenadministration.php @@ -142,7 +142,7 @@ class Gruppenadministration extends Auth_Controller if (hasData($benutzerExistsRes)) { - $this->outputJsonError(getError($this->p->t('gruppenadministration', 'benutzerZugewiesen'))); + $this->outputJsonError($this->p->t('gruppenadministration', 'benutzerSchonZugewiesen')); return; } diff --git a/application/views/person/gruppenadministration/benutzergruppe.php b/application/views/person/gruppenadministration/benutzergruppe.php index e5eb9c84d..dbb009c0b 100644 --- a/application/views/person/gruppenadministration/benutzergruppe.php +++ b/application/views/person/gruppenadministration/benutzergruppe.php @@ -61,21 +61,9 @@ Uid p->t('global', 'vorname')); ?> p->t('global', 'nachname')); ?> - p->t('ui', 'loeschen')); ?> + p->t('ui', 'entfernen')); ?> - diff --git a/public/js/person/benutzergruppe.js b/public/js/person/benutzergruppe.js index 1dd01131a..a6a60c7ac 100644 --- a/public/js/person/benutzergruppe.js +++ b/public/js/person/benutzergruppe.js @@ -12,6 +12,8 @@ var Benutzergruppe = { }, { successCallback: function(data, textStatus, jqXHR) { + if (FHC_AjaxClient.isError(data)) FHC_DialogLib.alertError(FHC_AjaxClient.getError(data)); + if (FHC_AjaxClient.hasData(data)) { // save loaded data @@ -34,7 +36,7 @@ var Benutzergruppe = { ""+benutzer.nachname+""+ ""+ ""+ ""+ "" @@ -49,7 +51,7 @@ var Benutzergruppe = { } Tablesort.addTablesorter( - "benutzer-table", [[0,0], [2,0]], ["filter"], 2 + "benutzer-table", [[0,0], [2,0]], ["filter", "zebra"], 2, {headers: {3: {filter: false}}} ) } }, @@ -66,6 +68,8 @@ var Benutzergruppe = { null, { successCallback: function(data, textStatus, jqXHR) { + if (FHC_AjaxClient.isError(data)) FHC_DialogLib.alertError(FHC_AjaxClient.getError(data)); + if (FHC_AjaxClient.hasData(data)) { benutzerArr = []; @@ -125,6 +129,8 @@ var Benutzergruppe = { }, { successCallback: function(data, textStatus, jqXHR) { + if (FHC_AjaxClient.isError(data)) FHC_DialogLib.alertError(FHC_AjaxClient.getError(data)); + if (FHC_AjaxClient.hasData(data)) { let addBenutzerRes = FHC_AjaxClient.getData(data); @@ -148,6 +154,8 @@ var Benutzergruppe = { }, { successCallback: function(data, textStatus, jqXHR) { + if (FHC_AjaxClient.isError(data)) FHC_DialogLib.alertError(FHC_AjaxClient.getError(data)); + if (FHC_AjaxClient.hasData(data)) { let addBenutzerRes = FHC_AjaxClient.getData(data); @@ -193,6 +201,7 @@ $(document).ready(function() { function(){ let uid = $("#teilnehmer_uid").val(); Benutzergruppe.addBenutzer(uid, gruppe_kurzbz); + $("#teilnehmerSelect").val(''); } ); }); From 2e728462ca24e6c0d1c6210dab4b54a2b02169cf Mon Sep 17 00:00:00 2001 From: KarpAlex Date: Mon, 13 Jun 2022 19:59:30 +0200 Subject: [PATCH 07/16] 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 --- .../person/Gruppenadministration.php | 36 +-- .../gruppenadministration/benutzergruppe.php | 1 + public/js/person/benutzergruppe.js | 7 +- system/dbupdate_3.3.php | 14 ++ vilesci/lehre/einheit_menu.php | 223 ++++++++++-------- 5 files changed, 166 insertions(+), 115 deletions(-) diff --git a/application/controllers/person/Gruppenadministration.php b/application/controllers/person/Gruppenadministration.php index 46862021c..c88c3565f 100644 --- a/application/controllers/person/Gruppenadministration.php +++ b/application/controllers/person/Gruppenadministration.php @@ -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)); diff --git a/application/views/person/gruppenadministration/benutzergruppe.php b/application/views/person/gruppenadministration/benutzergruppe.php index dbb009c0b..f0b63aba8 100644 --- a/application/views/person/gruppenadministration/benutzergruppe.php +++ b/application/views/person/gruppenadministration/benutzergruppe.php @@ -61,6 +61,7 @@ Uid p->t('global', 'vorname')); ?> p->t('global', 'nachname')); ?> + p->t('global', 'aktiv')); ?> p->t('ui', 'entfernen')); ?> diff --git a/public/js/person/benutzergruppe.js b/public/js/person/benutzergruppe.js index a6a60c7ac..126c9a19e 100644 --- a/public/js/person/benutzergruppe.js +++ b/public/js/person/benutzergruppe.js @@ -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( ""+ ""+benutzer.uid+""+ ""+benutzer.vorname+""+ ""+benutzer.nachname+""+ + ""+(benutzer.aktiv === true ? "Ja" : "Nein")+""+ ""+ "