From 23f335e6a55ab3df4017d34cf4704326ee5b7291 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Mon, 4 Oct 2021 12:00:51 +0200 Subject: [PATCH 01/32] BT: Ausbildungsvertrag wird bei Abgewiesenen bei nicht vorhandener offener Bewerbung nicht mehr angezeigt --- include/prestudent.class.php | 76 ++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/include/prestudent.class.php b/include/prestudent.class.php index 9a28961ff..35000ded8 100644 --- a/include/prestudent.class.php +++ b/include/prestudent.class.php @@ -2453,4 +2453,80 @@ class prestudent extends person return false; } } + + /** + * Prueft, ob eine Person offene Bewerbungen besitzt + * @param int $person_id ID der zu überprüfenden Person. + * @return true wenn vorhanden, false wenn nicht vorhanden + */ + public function existsOffeneBewerbung($person_id) + { + if (!is_numeric($person_id)) + { + $this->errormsg = 'Person_id muss eine gueltige Zahl sein'; + return false; + } + + $db = new basis_db(); + + $qry = "SELECT + prestudent_id + FROM + tbl_prestudent ps + WHERE + person_id = ".$this->db_add_param($person_id)." + And + get_rolle_prestudent(prestudent_id, null) in ('Interessent','Bewerber','Aufgenommener','Wartender');"; + + if ($db->db_query($qry)) + { + $num_rows = $db->db_num_rows(); + if ($num_rows > 0) + { + return true; + } + else + return false; + } + else + return false; + } + + /** + * Prueft, ob es sich um einen Student / Unterbrecher handelt + * @param int $person_id ID der zu überprüfenden Person. + * @return true wenn zutreffend, false wenn nicht zutreffend + */ + public function isStudent($person_id) + { + if (!is_numeric($person_id)) + { + $this->errormsg = 'Person_id muss eine gueltige Zahl sein'; + return false; + } + + $db = new basis_db(); + + $qry = "SELECT + prestudent_id + FROM + tbl_prestudent ps + WHERE + person_id = ".$this->db_add_param($person_id)." + And + get_rolle_prestudent(prestudent_id, null) in ('Student','Unterbrecher');"; + + if ($db->db_query($qry)) + { + $num_rows = $db->db_num_rows(); + if ($num_rows > 0) + { + return true; + } + else + return false; + } + else + return false; + } } From 3d3f4d54531e7c4a50474b71515c7c12a387c72b Mon Sep 17 00:00:00 2001 From: ma0048 Date: Tue, 24 May 2022 13:51:39 +0200 Subject: [PATCH 02/32] erste version infocenter lehrgaenge --- .../system/infocenter/InfoCenter.php | 45 +++++++--- .../models/organisation/Studiengang_model.php | 10 +++ .../views/system/infocenter/zgvpruefungen.php | 66 +++++++++------ .../js/infocenter/infocenterPersonDataset.js | 82 +++++++++++-------- 4 files changed, 129 insertions(+), 74 deletions(-) diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index 76011dc04..124723aa5 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -142,7 +142,8 @@ class InfoCenter extends Auth_Controller 'getStudienjahrEnd' => array('infocenter:r', 'lehre/zgvpruefung:r'), 'setNavigationMenuArrayJson' => 'infocenter:r', 'getAbsageData' => 'infocenter:r', - 'saveAbsageForAll' => 'infocenter:rw' + 'saveAbsageForAll' => 'infocenter:rw', + 'getStudienartData' => 'infocenter:rw' ) ); @@ -159,6 +160,7 @@ class InfoCenter extends Auth_Controller $this->load->model('system/Message_model', 'MessageModel'); $this->load->model('system/Filters_model', 'FiltersModel'); $this->load->model('system/PersonLock_model', 'PersonLockModel'); + $this->load->model('organisation/Studiengang_model', 'StudiengangModel'); // Loads libraries $this->load->library('PersonLogLib'); @@ -320,12 +322,13 @@ class InfoCenter extends Auth_Controller $this->DokumentModel->addOrder('bezeichnung'); $dokumentdata = array('dokumententypen' => (getData($this->DokumentModel->load()))); - + $studienArtBerechtigung = array('studienArtBerechtigung' => array_column($this->getStudienArtBerechtigung(), 'typ')); $data = array_merge( $persondata, $prestudentdata, $dokumentdata, - $duplicate + $duplicate, + $studienArtBerechtigung ); $data[self::FHC_CONTROLLER_ID] = $this->getControllerId(); @@ -2194,18 +2197,36 @@ class InfoCenter extends Auth_Controller public function getAbsageData() { - $this->load->model('organisation/Studiengang_model', 'StudiengangModel'); + $studiengang_kz_all = $this->permissionlib->getSTG_isEntitledFor('infocenter'); + $stg_typ = $this->StudiengangModel->getStudiengangTyp($studiengang_kz_all, ['b', 'm']); - $statusgruende = $this->StatusgrundModel->getStatus(self::ABGEWIESENERSTATUS, true)->retval; - $studienSemester = $this->variablelib->getVar('infocenter_studiensemester'); - $studiengaenge = $this->StudiengangModel->getStudiengaengeWithOrgForm(['b', 'm'], $studienSemester); + if (hasData($stg_typ)) + { + $stg_typ = getData($stg_typ); + $statusgruende = $this->StatusgrundModel->getStatus(self::ABGEWIESENERSTATUS, true)->retval; + $studienSemester = $this->variablelib->getVar('infocenter_studiensemester'); + $studiengaenge = $this->StudiengangModel->getStudiengaengeWithOrgForm(array_column($stg_typ, 'typ'), $studienSemester); - $data = array ( - 'statusgruende' => $statusgruende, - 'studiengaenge' => $studiengaenge->retval - ); + $data = array ( + 'statusgruende' => $statusgruende, + 'studiengaenge' => $studiengaenge->retval + ); - $this->outputJsonSuccess($data); + $this->outputJsonSuccess($data); + } + else + $this->outputJsonSuccess(null); + } + + public function getStudienArtBerechtigung() + { + $studiengang_kz_all = $this->permissionlib->getSTG_isEntitledFor('infocenter'); + $stg_typ = $this->StudiengangModel->getStudiengangTyp($studiengang_kz_all, ['b', 'm', 'l']); + return getData($stg_typ); + } + public function getStudienartData() + { + $this->outputJsonSuccess($this->getStudienArtBerechtigung()); } public function saveAbsageForAll() diff --git a/application/models/organisation/Studiengang_model.php b/application/models/organisation/Studiengang_model.php index 0d0c248a6..e848cb4c2 100644 --- a/application/models/organisation/Studiengang_model.php +++ b/application/models/organisation/Studiengang_model.php @@ -507,4 +507,14 @@ class Studiengang_model extends DB_Model return $this->execQuery($query, array($typ, $semester)); } + + public function getStudiengangTyp($studiengang_kz, $typ) + { + $query = "SELECT DISTINCT(sgt.*) + FROM tbl_studiengangstyp sgt JOIN tbl_studiengang sg on sgt.typ = sg.typ + WHERE studiengang_kz IN ? and sgt.typ IN ?"; + + return $this->execQuery($query, array($studiengang_kz, $typ)); + + } } diff --git a/application/views/system/infocenter/zgvpruefungen.php b/application/views/system/infocenter/zgvpruefungen.php index 253145557..aed8659cd 100644 --- a/application/views/system/infocenter/zgvpruefungen.php +++ b/application/views/system/infocenter/zgvpruefungen.php @@ -124,6 +124,32 @@
+ prestudentstatus->bewerbung_abgeschicktamum)) + { + $disabled = $disabledStg = 'disabled'; + $disabledTxt = $disabledStgTxt = $this->p->t('infocenter', 'bewerbungMussAbgeschickt'); + } + + if ($studiengangtyp !== 'b' && $studiengangtyp !== 'm') + { + $disabled = 'disabled'; + $disabledTxt = $this->p->t('infocenter', 'nurBachelorMasterFreigeben'); + + // FIT-Lehrgänge: exceptions, can be freigegeben in Infocenter + if (!in_array($studiengang_kz, $fit_programme_studiengaenge)) + { + $disabledStg = 'disabled'; + $disabledStgTxt = $this->p->t('infocenter', 'nurBachelorMasterFreigeben'); + } + } + + if (!in_array($studiengangtyp, $studienArtBerechtigung)) + $disabledPer = 'disabled'; + else + $disabledPer = ''; + ?>
@@ -318,17 +344,17 @@
- - statusZGV))) ?: print_r('data-info="need"')?>>
-
@@ -336,7 +362,7 @@
prestudentUdfs)) + if (isset($zgvpruefung->prestudentUdfs) && $studiengangtyp !== 'l') { echo $this->udflib->UDFWidget( array( @@ -362,6 +388,8 @@
+ required>
- @@ -489,6 +499,8 @@
' + - '' + - '' + - '' + ''; + InfocenterPersonDataset.getStudienartData(infocenter_studiengangstyp); + var auswahlAbsageToggle = 'Erweiterte Einstellungen'; @@ -90,11 +89,9 @@ var InfocenterPersonDataset = { "

" ); - InfocenterPersonDataset.selectStudiengangTyp(infocenter_studiengangstyp) - $('.auswahlStudienArt').change(function() { - InfocenterPersonDataset.changeStudengangsTyp($(this).find('option:selected').attr('data-id')); + InfocenterPersonDataset.changeStudengangsTyp($(this).find('option:selected').val()); }); $("#datasetActionsBottom").append( @@ -183,22 +180,6 @@ var InfocenterPersonDataset = { ); }, - selectStudiengangTyp: function(typ) - { - switch (typ) - { - case 'b, m' : - $('.auswahlStudienArt [data-id="all"]').attr('selected', 'selected'); - break; - case 'b' : - $('.auswahlStudienArt [data-id="bachelor"]').attr('selected', 'selected'); - break; - case 'm' : - $('.auswahlStudienArt [data-id="master"]').attr('selected', 'selected'); - break; - } - }, - /** * sets functionality for the actions above and beneath the person table */ @@ -257,20 +238,12 @@ var InfocenterPersonDataset = { }); }, - changeStudengangsTyp: function($typ) + changeStudengangsTyp: function(typ) { - switch ($typ) - { - case 'all' : - var change = 'b\', \'m'; - break; - case 'bachelor' : - var change = 'b'; - break; - case 'master' : - var change = 'm'; - break; - } + let change = typ; + + if (typ === 'all') + change = change = 'b\', \'m\', \'l'; FHC_AjaxClient.showVeil(); @@ -372,7 +345,8 @@ var InfocenterPersonDataset = { 'system/infocenter/InfoCenter/getAbsageData', {}, { - successCallback: function(data, textStatus, jqXHR) { + successCallback: function(data, textStatus, jqXHR) + { if (FHC_AjaxClient.hasData(data)) { data = FHC_AjaxClient.getData(data); @@ -397,6 +371,42 @@ var InfocenterPersonDataset = { } ); }, + getStudienartData: function(infocenter_studiengangstyp) + { + FHC_AjaxClient.ajaxCallGet( + 'system/infocenter/InfoCenter/getStudienartData', + {}, + { + successCallback: function(data, textStatus, jqXHR) + { + if (FHC_AjaxClient.hasData(data)) + { + data = FHC_AjaxClient.getData(data); + + let all = data.map(item => item.typ).join('\',\''); + $('.auswahlStudienArt').append($("
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 07/32] 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 08/32] 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 09/32] 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")+""+ ""+ "