From 23f335e6a55ab3df4017d34cf4704326ee5b7291 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Mon, 4 Oct 2021 12:00:51 +0200 Subject: [PATCH 01/88] 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/88] 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/88] 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/88] 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/88] 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")+""+ ""+ " + + + + + + ` +} diff --git a/public/js/components/DBW/KPI.js b/public/js/components/DBW/KPI.js new file mode 100644 index 000000000..3346685f8 --- /dev/null +++ b/public/js/components/DBW/KPI.js @@ -0,0 +1,26 @@ +export default { + props: [ + "configMode", + "config" + ], + methods: { + changeConfig() { + this.config.display = parseInt(this.$refs.display.value); + this.$emit('config', this.config); + } + }, + template: `
+
KPI Widget
+
+ + +
+ +
` +} diff --git a/public/js/components/Dashboard/DragAndDrop.js b/public/js/components/Dashboard/DragAndDrop.js new file mode 100644 index 000000000..cd24c0ef6 --- /dev/null +++ b/public/js/components/Dashboard/DragAndDrop.js @@ -0,0 +1,139 @@ +export default { + data: () => ({ + isMounted: 0, + movedObjects: [], + tmpStyle: { + display: 'none', + background: 'gray', + 'grid-column-start': 0, + 'grid-column-end': 0, + 'grid-row-start': 0, + 'grid-row-end': 0, + } + }), + props: [ + "width", + "height", + "items" + ], + computed: { + gridWidth() { + if(!this.isMounted) + return 0; + return window.getComputedStyle(this.$refs.container).getPropertyValue('grid-template-columns').split(" ").length; + }, + gridHeight() { + if (!this.gridWidth) + return 0; + let minH = 0; + this.items.forEach(item => { + // TODO(chris): item change is not detected? + minH = Math.max(minH, item.y + item.h - 1); + }); + return Math.max(1, minH); + }, + gridOccupiers() { + let occupiers = []; + let gridWidth = this.gridWidth; + this.items.forEach(item => { + for (var i = 0; i < item.w; i++) + for (var j = 0; j < item.h; j++) + occupiers[(item.y+j) * gridWidth + (item.x+i)] = item.id; + }); + return occupiers; + } + }, + methods: { + startDrag(evt, item) { + evt.dataTransfer.dropEffect = 'move'; + evt.dataTransfer.effectAllowed = 'move'; + evt.dataTransfer.setData('itemId', item.id) + evt.dataTransfer.setData('itemW', item.w) + evt.dataTransfer.setData('itemH', item.h) + console.log(evt.target.style.display); + }, + moveItem(item) { + // TODO(chris): IMPLEMENT + if (!item._x) + item._x = item.x; + item.x++; + }, + moveItemBack(item) { + item.x = item._x; + }, + onDragOver(evt) { + this.tmpStyle.display = 'block'; + + let x = Math.floor(this.gridWidth * (evt.layerX / this.$refs.container.clientWidth)) + 1; + let y = Math.floor(this.gridHeight * (evt.layerY / this.$refs.container.clientHeight)) + 1; + let w = parseInt(evt.dataTransfer.getData('itemW')); + let h = parseInt(evt.dataTransfer.getData('itemH')); + + while (x + w > this.gridWidth + 1) + x--; + + // TODO(chris): start + let id = 0; + while (id = this.movedObjects.pop()) + /*this.items[id].c = this.items[id]._c;*/ + this.moveItemBack(this.items[id]); + for (var i = 0; i < w; i++) { + for (var j = 0; j < h; j++) { + let id = (y+j) * this.gridWidth + (x+i); + if (this.gridOccupiers[id] && this.gridOccupiers[id] != evt.dataTransfer.getData('itemID')) { + + /*if (!this.items[this.gridOccupiers[id]]._c) + this.items[this.gridOccupiers[id]]._c = this.items[this.gridOccupiers[id]].c; + this.items[this.gridOccupiers[id]].c = 'grey';*/ + this.moveItem(this.items[this.gridOccupiers[id]]); + + this.movedObjects.push(this.gridOccupiers[id]); + } + } + } + // TODO(chris): end + + this.tmpStyle['grid-column-start'] = x; + this.tmpStyle['grid-column-end'] = x + w; + this.tmpStyle['grid-row-start'] = y; + this.tmpStyle['grid-row-end'] = y + h; + }, + onDrop(evt, list) { + this.tmpStyle.display = 'none'; + + let id = evt.dataTransfer.getData('itemId'); + let x = Math.floor(this.gridWidth * (evt.layerX / this.$refs.container.clientWidth)) + 1; + let y = Math.floor(this.gridHeight * (evt.layerY / this.$refs.container.clientHeight)) + 1; + let w = parseInt(evt.dataTransfer.getData('itemW')); + + while (x + w > this.gridWidth + 1) + x--; + + this.items.forEach(item => { + if (id == item.id) { + item.x = x; + item.y = y; + console.log(item, id); + } + }); + // TODO(chris): find better way to trigger change for gridHeight + this.isMounted++ + } + }, + watchers: { + items() { + console.log(this.items); + } + }, + mounted() { + this.isMounted = 1; + window.addEventListener('resize', e => { this.isMounted ? this.isMounted++ : 0 }) + }, + template: `
+
+
+
{{gridWidth2}} +
+
+
` +} diff --git a/public/js/components/Dashboard/Item.js b/public/js/components/Dashboard/Item.js new file mode 100644 index 000000000..9a956a3ce --- /dev/null +++ b/public/js/components/Dashboard/Item.js @@ -0,0 +1,52 @@ +export default { + components: {}, + data: () => ({ + configMode: false, + name: '', + component: '', + arguments: null + }), + props: [ + "widget", + "config", + "editMode" + ], + computed: { + ready() { + return this.name && this.component && this.arguments !== null; + } + }, + methods: { + changeConfig(v) { + this.arguments = v; + this.configMode = false; + // TODO(chris): diff arguments widget.arguments + this.$emit('change', v); + } + }, + mounted() { + let self = this; + + if (!this.isPlaceholder) { + this.$options.components[this.widget.component_name] = this.widget.component; + this.name = this.widget.name; + this.component = this.widget.component_name; + this.arguments = {...this.widget.arguments, ...this.config}; + } + }, + template: `
+
+
+
+ + {{name}} + + +
+
+ +
+
+
+
` +} From 00f1eb38d178d1d5a750e123d5bf5e85dea41038 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Wed, 7 Sep 2022 08:27:31 +0200 Subject: [PATCH 81/88] Added missing index files --- cis/private/coodle/index.html | 0 cis/private/index.html | 0 cis/private/info/index.html | 0 cis/private/tools/index.html | 0 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 cis/private/coodle/index.html create mode 100644 cis/private/index.html create mode 100644 cis/private/info/index.html create mode 100644 cis/private/tools/index.html diff --git a/cis/private/coodle/index.html b/cis/private/coodle/index.html new file mode 100644 index 000000000..e69de29bb diff --git a/cis/private/index.html b/cis/private/index.html new file mode 100644 index 000000000..e69de29bb diff --git a/cis/private/info/index.html b/cis/private/info/index.html new file mode 100644 index 000000000..e69de29bb diff --git a/cis/private/tools/index.html b/cis/private/tools/index.html new file mode 100644 index 000000000..e69de29bb From 393eaea91dc377df132f4681e1ced4072ca13621 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Wed, 7 Sep 2022 09:00:00 +0200 Subject: [PATCH 82/88] Removed Dashboard Testfiles --- application/controllers/Test.php | 51 ----- .../api/v1/dashboard/Dashboard.php | 54 ----- .../controllers/api/v1/dashboard/User.php | 89 -------- .../models/dashboard/Dashboard_model.php | 18 -- .../dashboard/Dashboardpreset_model.php | 28 --- .../dashboard/Dashboardwidget_model.php | 29 --- application/models/dashboard/Widget_model.php | 18 -- application/views/test/Test.php | 63 ------ public/js/apps/Test.js | 15 -- public/js/components/CoreDashboard.js | 206 ------------------ public/js/components/DBW/KPI.js | 26 --- public/js/components/Dashboard/DragAndDrop.js | 139 ------------ public/js/components/Dashboard/Item.js | 52 ----- 13 files changed, 788 deletions(-) delete mode 100644 application/controllers/Test.php delete mode 100644 application/controllers/api/v1/dashboard/Dashboard.php delete mode 100644 application/controllers/api/v1/dashboard/User.php delete mode 100644 application/models/dashboard/Dashboard_model.php delete mode 100644 application/models/dashboard/Dashboardpreset_model.php delete mode 100644 application/models/dashboard/Dashboardwidget_model.php delete mode 100644 application/models/dashboard/Widget_model.php delete mode 100644 application/views/test/Test.php delete mode 100644 public/js/apps/Test.js delete mode 100644 public/js/components/CoreDashboard.js delete mode 100644 public/js/components/DBW/KPI.js delete mode 100644 public/js/components/Dashboard/DragAndDrop.js delete mode 100644 public/js/components/Dashboard/Item.js diff --git a/application/controllers/Test.php b/application/controllers/Test.php deleted file mode 100644 index aa21f6296..000000000 --- a/application/controllers/Test.php +++ /dev/null @@ -1,51 +0,0 @@ - 'user:r', - ) - ); - - $this->load->library('AuthLib'); - $this->load->library('WidgetLib'); - - $this->_setAuthUID(); // sets property uid - - $this->setControllerId(); // sets the controller id - } - - // ----------------------------------------------------------------------------------------------------------------- - // Public methods - public function index() - { - $this->load->view('test/Test.php', []); - } - - // ----------------------------------------------------------------------------------------------------------------- - // Private methods - - /** - * Retrieve the UID of the logged user and checks if it is valid - */ - private function _setAuthUID() - { - $this->_uid = getAuthUID(); - - if (!$this->_uid) show_error('User authentification failed'); - } - -} diff --git a/application/controllers/api/v1/dashboard/Dashboard.php b/application/controllers/api/v1/dashboard/Dashboard.php deleted file mode 100644 index 28365525b..000000000 --- a/application/controllers/api/v1/dashboard/Dashboard.php +++ /dev/null @@ -1,54 +0,0 @@ - 'user:r' - ]); - } - - /** - * @return void - */ - public function getWidgets() - { - $this->load->model('dashboard/Dashboard_model', 'DashboardModel'); - $result = $this->DashboardModel->loadWhere(['name'=>$this->get('dashboard')]); - if (isError($result)) - return $this->response($result, REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - if (!hasData($result)) - return $this->response('No Dashboard with the name "' . $this->get('dashboard') . '" found.', REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - $dashboard_id = current(getData($result))->dashboard_id; - - $this->load->model('dashboard/Dashboardwidget_model', 'DashboardwidgetModel'); - $result = $this->DashboardwidgetModel->loadWidgets($dashboard_id); - if (isError($result)) - return $this->response($result, REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - if (!hasData($result)) - return $this->response('No Widgets for Dashboard "' . $this->get('dashboard') . '" found.', REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - - $this->response(getData($result), REST_Controller::HTTP_OK); - } - - protected function _check_whitelist_auth() {} - -} diff --git a/application/controllers/api/v1/dashboard/User.php b/application/controllers/api/v1/dashboard/User.php deleted file mode 100644 index fdc5d7a1e..000000000 --- a/application/controllers/api/v1/dashboard/User.php +++ /dev/null @@ -1,89 +0,0 @@ - 'user:r', - 'Widget' => 'user:r', - 'Widgets' => 'user:r' - ]); - } - - /** - * @return void - */ - public function getAuthObj() - { - $result = $this->authlib->getAuthObj(); - - $this->response($result, REST_Controller::HTTP_OK); - } - - /** - * @return void - */ - public function getWidget() - { - $this->load->model('dashboard/Widget_model', 'WidgetModel'); - $result = $this->WidgetModel->load($this->get('widget_id')); - if (isError($result)) - return $this->response($result, REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - if (!hasData($result)) - return $this->response('No Widget with the id "' . $this->get('widget_id') . '" found.', REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - $result = current(getData($result)); - - $this->response($result, REST_Controller::HTTP_OK); - } - - /** - * @return void - */ - public function getWidgets() - { - $this->load->model('dashboard/Dashboard_model', 'DashboardModel'); - $result = $this->DashboardModel->loadWhere(['name'=>$this->get('dashboard')]); - if (isError($result)) - return $this->response($result, REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - if (!hasData($result)) - return $this->response('No Dashboard with the name "' . $this->get('dashboard') . '" found.', REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - $dashboard_id = current(getData($result))->dashboard_id; - - $authObj = $this->authlib->getAuthObj(); - - $this->load->model('dashboard/Dashboardpreset_model', 'DashboardpresetModel'); - $result = $this->DashboardpresetModel->loadForUser($dashboard_id, $authObj->username); - if (isError($result)) - return $this->response($result, REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - if (!hasData($result)) - return $this->response('No Dashboard for user "' . $authObj->username . '" found.', REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - - $result = (current(getData($result))->config); - $result = json_decode($result); - if ($result === null) - return $this->response(json_last_error_msg(), REST_Controller::HTTP_INTERNAL_SERVER_ERROR); - - $this->response($result, REST_Controller::HTTP_OK); - } - - protected function _check_whitelist_auth() {} - -} diff --git a/application/models/dashboard/Dashboard_model.php b/application/models/dashboard/Dashboard_model.php deleted file mode 100644 index 2aa567282..000000000 --- a/application/models/dashboard/Dashboard_model.php +++ /dev/null @@ -1,18 +0,0 @@ -dbTable = "( WITH vals (dashboard_id, name) AS (VALUES - (0,'CIS'), - (1,'PV21') - ) SELECT * FROM vals ) AS tbl_dashboard"; - $this->pk = 'dashboard_id'; - } - -} diff --git a/application/models/dashboard/Dashboardpreset_model.php b/application/models/dashboard/Dashboardpreset_model.php deleted file mode 100644 index 070fb77be..000000000 --- a/application/models/dashboard/Dashboardpreset_model.php +++ /dev/null @@ -1,28 +0,0 @@ -dbTable = "( WITH vals (dashboard_preset_id, config) AS (VALUES - (0,CONCAT('[[0',',','0',',','0',',','0',',','[]]',',','[1',',','2',',','2',',','2',',','{\"display\":2}]]')), - (1,CONCAT('[[0',',','1',',','0',',','1',',','{}]',',','[1',',','0',',','1',',','0',',','{\"display\":1}]]')) - ) SELECT * FROM vals ) AS tbl_dashboard_preset"; - $this->pk = 'dashboard_preset_id'; - } - - public function loadForUser($dashboard_id, $uid) - { - $this->addJoin("( WITH vals (dashboard_preset_user_id, uid, dashboard_id, dashboard_preset_id) AS (VALUES - (0,'ma0168', 0, 0) - ) SELECT * FROM vals ) AS tbl_dashboard_preset_user", 'dashboard_preset_id'); - return $this->loadWhere(['uid' => $uid, 'dashboard_id' => $dashboard_id]); - - return success(); - } - -} diff --git a/application/models/dashboard/Dashboardwidget_model.php b/application/models/dashboard/Dashboardwidget_model.php deleted file mode 100644 index e9349aae4..000000000 --- a/application/models/dashboard/Dashboardwidget_model.php +++ /dev/null @@ -1,29 +0,0 @@ -dbTable = "( WITH vals (dashboard_widget_id, dashboard_id, widget_id) AS (VALUES - (0,0,0), - (1,0,1), - (2,1,0) - ) SELECT * FROM vals ) AS tbl_dashboard_widget"; - $this->pk = 'dashboard_widget_id'; - } - - public function loadWidgets($dashboard_id) - { - $this->addJoin("( WITH vals (widget_id, name, component_name, component_path, arguments) AS (VALUES - (0,'KPI Single','DbwKpi','./DBW/KPI.js',CONCAT('{\"data\":[1]',',','\"display\":0}')), - (1,'KPI Multi','DbwKpi','./DBW/KPI.js',CONCAT('{\"data\":[1,2,3]}')) - ) SELECT * FROM vals ) AS tbl_widget", 'widget_id'); - - return $this->loadWhere(['dashboard_id' => $dashboard_id]); - } - -} diff --git a/application/models/dashboard/Widget_model.php b/application/models/dashboard/Widget_model.php deleted file mode 100644 index c5d39e99d..000000000 --- a/application/models/dashboard/Widget_model.php +++ /dev/null @@ -1,18 +0,0 @@ -dbTable = "( WITH vals (widget_id, name, component_name, component_path, arguments) AS (VALUES - (0,'KPI Single','DbwKpi','./DBW/KPI.js',CONCAT('{\"data\":[1]',',','\"display\":0}')), - (1,'KPI Multi','DbwKpi','./DBW/KPI.js',CONCAT('{\"data\":[1,2,3]}')) - ) SELECT * FROM vals ) AS tbl_widget"; - $this->pk = 'widget_id'; - } - -} diff --git a/application/views/test/Test.php b/application/views/test/Test.php deleted file mode 100644 index 84a2a5ece..000000000 --- a/application/views/test/Test.php +++ /dev/null @@ -1,63 +0,0 @@ -load->view('templates/FHC-Header', - array( - 'title' => 'FH-Complete', - 'bootstrap5' => true, - 'fontawesome6' => true, - 'axios027' => true, - 'restclient' => true, - 'vue3' => true, - 'customJSModules' => ['public/js/apps/Test.js'], - 'navigationcomponent' => true - ) -); -?> - - - -
- - - -
-
-

Dashboard

-
- - - -
-
- -load->view('templates/FHC-Footer'); ?> diff --git a/public/js/apps/Test.js b/public/js/apps/Test.js deleted file mode 100644 index ec6e74a9b..000000000 --- a/public/js/apps/Test.js +++ /dev/null @@ -1,15 +0,0 @@ -import {CoreNavigationCmpt} from '../components/navigation/Navigation.js'; -import CoreDashboard from '../components/CoreDashboard.js'; - -Vue.createApp({ - data: () => ({ - appSideMenuEntries: {} - }), - components: { - CoreNavigationCmpt, - CoreDashboard/*, - "CoreFilterCmpt": CoreFilterCmpt, - "verticalsplit": verticalsplit, - "searchbar": searchbar*/ - } -}).mount('#main'); diff --git a/public/js/components/CoreDashboard.js b/public/js/components/CoreDashboard.js deleted file mode 100644 index e6d5c77ac..000000000 --- a/public/js/components/CoreDashboard.js +++ /dev/null @@ -1,206 +0,0 @@ -import CoreDashboardItem from './Dashboard/Item.js'; -import DragAndDrop from './Dashboard/DragAndDrop.js'; - -export default { - components: { - CoreDashboardItem, - DragAndDrop - }, - data: () => ({ - widgetCache: {}, - componentCache: {}, - widgetWizard: null, - allowedWidgets: [], - widgets: [], - name: '', - newMode: false, - editMode: false - }), - computed: { - loaded: function() { - return this.widgets && this.name; - } - }, - props: [ - "dashboard" - ], - methods: { - saveConfig() { - // TODO(chris): SAVE! - console.log('SAVE', this.widgets); - this.editMode = false; - }, - startWidgetWizard() { - // TODO(chris): load widgets! - let self = this; - axios.get('/fhcomplete/index.ci.php/api/v1/dashboard/Dashboard/Widgets', { - headers: { - 'FHC-API-KEY':'itservice@technikum-wien.at' - }, - params: { - dashboard: this.dashboard - } - }).then(function(result) {console.log(result); - self.allowedWidgets = result.data; - }); - this.widgetWizard.show(); - }, - newWidget(widget) { - let self = this; - let newWidget = [widget.widget_id, this.widgets.length, this.widgets.length, this.widgets.length, []]; - // TODO(chris): loadingscreen? - (new Promise(function (resolve, reject) { - if (self.widgetCache[widget.widget_id]) { - resolve(self.widgetCache[widget.widget_id]); - } else { - this.extendWidgetAndCache(widget).then(widget => { - resolve(widget); - }); - } - })).then(widget => { - newWidget[5] = widget; - self.widgets.push(newWidget); - self.widgetWizard.hide(); - }); - }, - removeWidget(id) { - if (confirm('Are you sure you want to delete this widget?')) - this.widgets = this.widgets.filter(widget => widget[0] != id); - }, - getWidget(widget_id) { - let self = this; - return new Promise(function(resolve, reject) { - if (self.widgetCache[widget_id]) - return resolve(self.widgetCache[widget_id]); - axios.get('/fhcomplete/index.ci.php/api/v1/dashboard/User/Widget', { - headers: { - 'FHC-API-KEY':'itservice@technikum-wien.at' - }, - params: { - widget_id: widget_id - } - }) - .then(result => self.extendWidgetAndCache(result.data)) - .then(widget => resolve(widget)); - }); - }, - extendWidgetAndCache(widget) { - let self = this; - return new Promise(function(resolve, reject) { - let name = widget.component_name; - widget.arguments = JSON.parse(widget.arguments); - widget.component_name = widget.component_name.replace(/[A-Z]/g, (m,o) => (o > 0 ? "-" : "") + m.toLowerCase()); - self.getComponent(name, widget.component_path).then(component => { - widget.component = component; - return widget; - }).then(() => { - self.widgetCache[widget.widget_id] = widget; - resolve(self.widgetCache[widget.widget_id]); - }); - }); - }, - getComponent(name, path) { - let self = this; - return new Promise(async function(resolve, reject) { - if (self.componentCache[name]) - return resolve(self.componentCache[name]); - - - self.componentCache[name] = (await import(path)).default; - resolve(self.componentCache[name]); - }); - } - }, - mounted() { - let self = this; - this.widgetWizard = new bootstrap.Modal(this.$refs.widgetWizard); - axios.get('/fhcomplete/index.ci.php/api/v1/dashboard/User/AuthObj', { - headers: { - 'FHC-API-KEY':'itservice@technikum-wien.at' - } - }).then(function(result) { - self.name = result.data.name; - }); - axios.get('/fhcomplete/index.ci.php/api/v1/dashboard/User/Widgets', { - headers: { - 'FHC-API-KEY':'itservice@technikum-wien.at' - }, - params: { - dashboard: this.dashboard - } - }).then(function(result) { - let promises = []; - result.data.forEach(function(item) { - promises.push(new Promise(function(resolve, reject) { - self.getWidget(item[0]).then(function(widget) { - item[5] = widget; - resolve(); - }); - })); - }); - Promise.all(promises).then(function() { - self.widgets = result.data; - }) - }); - }, - template: `
-
- -
-

- Hallo {{name}}! - - - - - -

-
Loading...
-
- -
-
-
- -
-
-
-
- -
` -} diff --git a/public/js/components/DBW/KPI.js b/public/js/components/DBW/KPI.js deleted file mode 100644 index 3346685f8..000000000 --- a/public/js/components/DBW/KPI.js +++ /dev/null @@ -1,26 +0,0 @@ -export default { - props: [ - "configMode", - "config" - ], - methods: { - changeConfig() { - this.config.display = parseInt(this.$refs.display.value); - this.$emit('config', this.config); - } - }, - template: `
-
KPI Widget
-
- - -
- -
` -} diff --git a/public/js/components/Dashboard/DragAndDrop.js b/public/js/components/Dashboard/DragAndDrop.js deleted file mode 100644 index cd24c0ef6..000000000 --- a/public/js/components/Dashboard/DragAndDrop.js +++ /dev/null @@ -1,139 +0,0 @@ -export default { - data: () => ({ - isMounted: 0, - movedObjects: [], - tmpStyle: { - display: 'none', - background: 'gray', - 'grid-column-start': 0, - 'grid-column-end': 0, - 'grid-row-start': 0, - 'grid-row-end': 0, - } - }), - props: [ - "width", - "height", - "items" - ], - computed: { - gridWidth() { - if(!this.isMounted) - return 0; - return window.getComputedStyle(this.$refs.container).getPropertyValue('grid-template-columns').split(" ").length; - }, - gridHeight() { - if (!this.gridWidth) - return 0; - let minH = 0; - this.items.forEach(item => { - // TODO(chris): item change is not detected? - minH = Math.max(minH, item.y + item.h - 1); - }); - return Math.max(1, minH); - }, - gridOccupiers() { - let occupiers = []; - let gridWidth = this.gridWidth; - this.items.forEach(item => { - for (var i = 0; i < item.w; i++) - for (var j = 0; j < item.h; j++) - occupiers[(item.y+j) * gridWidth + (item.x+i)] = item.id; - }); - return occupiers; - } - }, - methods: { - startDrag(evt, item) { - evt.dataTransfer.dropEffect = 'move'; - evt.dataTransfer.effectAllowed = 'move'; - evt.dataTransfer.setData('itemId', item.id) - evt.dataTransfer.setData('itemW', item.w) - evt.dataTransfer.setData('itemH', item.h) - console.log(evt.target.style.display); - }, - moveItem(item) { - // TODO(chris): IMPLEMENT - if (!item._x) - item._x = item.x; - item.x++; - }, - moveItemBack(item) { - item.x = item._x; - }, - onDragOver(evt) { - this.tmpStyle.display = 'block'; - - let x = Math.floor(this.gridWidth * (evt.layerX / this.$refs.container.clientWidth)) + 1; - let y = Math.floor(this.gridHeight * (evt.layerY / this.$refs.container.clientHeight)) + 1; - let w = parseInt(evt.dataTransfer.getData('itemW')); - let h = parseInt(evt.dataTransfer.getData('itemH')); - - while (x + w > this.gridWidth + 1) - x--; - - // TODO(chris): start - let id = 0; - while (id = this.movedObjects.pop()) - /*this.items[id].c = this.items[id]._c;*/ - this.moveItemBack(this.items[id]); - for (var i = 0; i < w; i++) { - for (var j = 0; j < h; j++) { - let id = (y+j) * this.gridWidth + (x+i); - if (this.gridOccupiers[id] && this.gridOccupiers[id] != evt.dataTransfer.getData('itemID')) { - - /*if (!this.items[this.gridOccupiers[id]]._c) - this.items[this.gridOccupiers[id]]._c = this.items[this.gridOccupiers[id]].c; - this.items[this.gridOccupiers[id]].c = 'grey';*/ - this.moveItem(this.items[this.gridOccupiers[id]]); - - this.movedObjects.push(this.gridOccupiers[id]); - } - } - } - // TODO(chris): end - - this.tmpStyle['grid-column-start'] = x; - this.tmpStyle['grid-column-end'] = x + w; - this.tmpStyle['grid-row-start'] = y; - this.tmpStyle['grid-row-end'] = y + h; - }, - onDrop(evt, list) { - this.tmpStyle.display = 'none'; - - let id = evt.dataTransfer.getData('itemId'); - let x = Math.floor(this.gridWidth * (evt.layerX / this.$refs.container.clientWidth)) + 1; - let y = Math.floor(this.gridHeight * (evt.layerY / this.$refs.container.clientHeight)) + 1; - let w = parseInt(evt.dataTransfer.getData('itemW')); - - while (x + w > this.gridWidth + 1) - x--; - - this.items.forEach(item => { - if (id == item.id) { - item.x = x; - item.y = y; - console.log(item, id); - } - }); - // TODO(chris): find better way to trigger change for gridHeight - this.isMounted++ - } - }, - watchers: { - items() { - console.log(this.items); - } - }, - mounted() { - this.isMounted = 1; - window.addEventListener('resize', e => { this.isMounted ? this.isMounted++ : 0 }) - }, - template: `
-
-
-
{{gridWidth2}} -
-
-
` -} diff --git a/public/js/components/Dashboard/Item.js b/public/js/components/Dashboard/Item.js deleted file mode 100644 index 9a956a3ce..000000000 --- a/public/js/components/Dashboard/Item.js +++ /dev/null @@ -1,52 +0,0 @@ -export default { - components: {}, - data: () => ({ - configMode: false, - name: '', - component: '', - arguments: null - }), - props: [ - "widget", - "config", - "editMode" - ], - computed: { - ready() { - return this.name && this.component && this.arguments !== null; - } - }, - methods: { - changeConfig(v) { - this.arguments = v; - this.configMode = false; - // TODO(chris): diff arguments widget.arguments - this.$emit('change', v); - } - }, - mounted() { - let self = this; - - if (!this.isPlaceholder) { - this.$options.components[this.widget.component_name] = this.widget.component; - this.name = this.widget.name; - this.component = this.widget.component_name; - this.arguments = {...this.widget.arguments, ...this.config}; - } - }, - template: `
-
-
-
- - {{name}} - - -
-
- -
-
-
-
` -} From d13cc789ad834c6dcad27e5ee2ad00b9a1968cd4 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 8 Sep 2022 12:53:44 +0200 Subject: [PATCH 83/88] =?UTF-8?q?Fix=20Anrechnung=20Student=20View:=20?= =?UTF-8?q?=C3=84nderung=20des=20Download-Dokumentnamens=20zur=C3=BCckgeno?= =?UTF-8?q?mmen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Der Download-Dokumentname ist in der Studierendenansicht nun wieder gleich wie der originale Dokuementname beim Hochladen. --- application/controllers/lehre/anrechnung/RequestAnrechnung.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/controllers/lehre/anrechnung/RequestAnrechnung.php b/application/controllers/lehre/anrechnung/RequestAnrechnung.php index bc8ab562e..ce694e3d2 100644 --- a/application/controllers/lehre/anrechnung/RequestAnrechnung.php +++ b/application/controllers/lehre/anrechnung/RequestAnrechnung.php @@ -208,7 +208,7 @@ class requestAnrechnung extends Auth_Controller $this->_checkIfEntitledToReadDMSDoc($dms_id); // Get file to be downloaded from DMS - $download = $this->dmslib->download($dms_id, $filename); + $download = $this->dmslib->download($dms_id); if (isError($download)) return $download; // Download file From 15121ced6d1381a03649637d33b2ba2f595be081 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 8 Sep 2022 14:08:46 +0200 Subject: [PATCH 84/88] Fixed missing disabled formular and wrong status-test when student emits Anrechnung with Begruendung Hochschule --- .../js/lehre/anrechnung/requestAnrechnung.js | 93 ++++++++++--------- 1 file changed, 49 insertions(+), 44 deletions(-) diff --git a/public/js/lehre/anrechnung/requestAnrechnung.js b/public/js/lehre/anrechnung/requestAnrechnung.js index dd93394d4..5edb4e162 100644 --- a/public/js/lehre/anrechnung/requestAnrechnung.js +++ b/public/js/lehre/anrechnung/requestAnrechnung.js @@ -7,49 +7,6 @@ const COLOR_DANGER = '#f2dede'; $(function(){ const uploadMaxFilesize = $('#requestAnrechnung-uploadfile').data('maxsize') ; // in byte - let status_kurzbz = $('#requestAnrechnung-status_kurzbz').data('status_kurzbz'); - if (status_kurzbz != ' ' && status_kurzbz != ANRECHNUNGSTATUS_APPROVED) - { - var ectsLv = parseFloat($('#ects').text()); - var sumEctsSchulisch = parseFloat($('#sumEctsSchulisch').text()); - var sumEctsBeruflich = parseFloat($('#sumEctsBeruflich').text()); - var begruendung_id = $('#requestAnrechnung-form :input[name="begruendung"]:checked').val(); - - // If Begründung is 'Hochschulzeugnis', return. They are accepted without limit. - if (begruendung_id == 5) - { - exit; - } - - // If max ECTS is ecceeded - if (begruendung_id == 4) - { - if ((sumEctsSchulisch + sumEctsBeruflich + ectsLv) > 90 || - (sumEctsBeruflich + ectsLv) > 60 - ) - { - // Get ECTS Überschreitungs-message, depending on schulische or berufliche Qualifikation - var msgBeiEctsUeberschreitung = requestAnrechnung.getMsgBeiEctsUeberschreitung(begruendung_id, ectsLv, sumEctsSchulisch, sumEctsBeruflich); - - // Add to Checkbox text - $('#requestAnrechnung-form :input[name="begruendung"]:checked').closest('label').append(msgBeiEctsUeberschreitung); - } - } - else - { - if ((sumEctsSchulisch + sumEctsBeruflich + ectsLv) > 90 || - (sumEctsSchulisch + ectsLv) > 60 - ) - { - // Get ECTS Überschreitungs-message, depending on schulische or berufliche Qualifikation - var msgBeiEctsUeberschreitung = requestAnrechnung.getMsgBeiEctsUeberschreitung(begruendung_id, ectsLv, sumEctsSchulisch, sumEctsBeruflich); - - // Add to Checkbox text - $('#requestAnrechnung-form :input[name="begruendung"]:checked').closest('label').append(msgBeiEctsUeberschreitung); - } - } - } - // Set status alert color requestAnrechnung.setStatusAlertColor(); @@ -62,9 +19,12 @@ $(function(){ // Init tooltips requestAnrechnung.initTooltips(); - // // Alert message, if maximum ECTS exceeded + // Alert message, if maximum ECTS exceeded requestAnrechnung.alertIfMaxEctsExceeded(); + // Alert message inside Begruendungsbox, if maximum ECTS exceeded + requestAnrechnung.alertIfMaxEctsExceededInsideBegruendungsbox(); + // Set chars counter for textarea 'Herkunft der Kenntnisse' requestAnrechnung.setCharsCounter(); @@ -318,6 +278,51 @@ var requestAnrechnung = { }); } }, + alertIfMaxEctsExceededInsideBegruendungsbox: function(){ + let status_kurzbz = $('#requestAnrechnung-status_kurzbz').data('status_kurzbz'); + + if (status_kurzbz != ' ' && status_kurzbz != ANRECHNUNGSTATUS_APPROVED) + { + var ectsLv = parseFloat($('#ects').text()); + var sumEctsSchulisch = parseFloat($('#sumEctsSchulisch').text()); + var sumEctsBeruflich = parseFloat($('#sumEctsBeruflich').text()); + var begruendung_id = $('#requestAnrechnung-form :input[name="begruendung"]:checked').val(); + + // If Begründung is 'Hochschulzeugnis', return. They are accepted without limit. + if (begruendung_id == 5) + { + return; + } + + // If max ECTS is ecceeded + if (begruendung_id == 4) + { + if ((sumEctsSchulisch + sumEctsBeruflich + ectsLv) > 90 || + (sumEctsBeruflich + ectsLv) > 60 + ) + { + // Get ECTS Überschreitungs-message, depending on schulische or berufliche Qualifikation + var msgBeiEctsUeberschreitung = requestAnrechnung.getMsgBeiEctsUeberschreitung(begruendung_id, ectsLv, sumEctsSchulisch, sumEctsBeruflich); + + // Add to Checkbox text + $('#requestAnrechnung-form :input[name="begruendung"]:checked').closest('label').append(msgBeiEctsUeberschreitung); + } + } + else + { + if ((sumEctsSchulisch + sumEctsBeruflich + ectsLv) > 90 || + (sumEctsSchulisch + ectsLv) > 60 + ) + { + // Get ECTS Überschreitungs-message, depending on schulische or berufliche Qualifikation + var msgBeiEctsUeberschreitung = requestAnrechnung.getMsgBeiEctsUeberschreitung(begruendung_id, ectsLv, sumEctsSchulisch, sumEctsBeruflich); + + // Add to Checkbox text + $('#requestAnrechnung-form :input[name="begruendung"]:checked').closest('label').append(msgBeiEctsUeberschreitung); + } + } + } + }, getMsgBeiEctsUeberschreitung: function(begruendung_id, ects, sumEctsSchulisch, sumEctsBeruflich){ return $('') From 617dcc0646eeef5a5ea895807021a504c15630cb Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 8 Sep 2022 14:09:37 +0200 Subject: [PATCH 85/88] Changed application dates for testing reason --- application/config/anrechnung.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/application/config/anrechnung.php b/application/config/anrechnung.php index d1f4f0958..c2e38385c 100644 --- a/application/config/anrechnung.php +++ b/application/config/anrechnung.php @@ -7,8 +7,8 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); $config['interval_blocking_application'] = 'P1M'; // Application submission period given by start- and enddate. -$config['submit_application_start'] = '01.02.2021'; -$config['submit_application_end'] = '22.02.2021'; +$config['submit_application_start'] = '05.09.2022'; +$config['submit_application_end'] = '22.09.2022'; // Lehrveranstaltungen with these grades will be blocked for application $config['grades_blocking_application'] = array( From 030f1c9c4e9b8da20a812418c28ce9bc859e822e Mon Sep 17 00:00:00 2001 From: ma0048 Date: Mon, 12 Sep 2022 14:30:12 +0200 Subject: [PATCH 86/88] zgvpruefung fehler behoben und studienartberechtigung --- .../system/infocenter/InfoCenter.php | 10 +- .../views/system/infocenter/zgvpruefungen.php | 98 ++++++------------- 2 files changed, 37 insertions(+), 71 deletions(-) diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index 5f40a1f90..42b9c3cfa 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -333,13 +333,12 @@ 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, - $studienArtBerechtigung + $duplicate ); $data[self::FHC_CONTROLLER_ID] = $this->getControllerId(); @@ -1986,10 +1985,13 @@ class InfoCenter extends Auth_Controller $abwstatusgruende = $this->StatusgrundModel->getStatus(self::ABGEWIESENERSTATUS, true)->retval; $intstatusgruende = $this->StatusgrundModel->getStatus(self::INTERESSENTSTATUS)->retval; + $studienArtBerechtigung = array_column($this->getStudienArtBerechtigung(), 'typ'); + $data = array ( 'zgvpruefungen' => $zgvpruefungen, 'abwstatusgruende' => $abwstatusgruende, - 'intstatusgruende' => $intstatusgruende + 'intstatusgruende' => $intstatusgruende, + 'studienArtBerechtigung' => $studienArtBerechtigung ); return $data; diff --git a/application/views/system/infocenter/zgvpruefungen.php b/application/views/system/infocenter/zgvpruefungen.php index db157dffb..f6e8a845b 100644 --- a/application/views/system/infocenter/zgvpruefungen.php +++ b/application/views/system/infocenter/zgvpruefungen.php @@ -223,21 +223,11 @@ ZgvModel->getAllZgv(); - echo '"; - ?> + echo $this->widgetlib->widget( + 'Zgv_widget', + array(DropdownWidget::SELECTED_ELEMENT => $zgvpruefung->zgv_code), + array('name' => 'zgv', 'id' => 'zgv_'.$zgvpruefung->prestudent_id) + ); ?>
@@ -272,22 +262,14 @@
- - NationModel->getAll(); - echo '"; - ?> + zgvnation_bez; + else + echo $this->widgetlib->widget( + 'Nation_widget', + array(DropdownWidget::SELECTED_ELEMENT => $zgvpruefung->zgvnation_code), + array('name' => 'zgvnation', 'id' => 'zgvnation_'.$zgvpruefung->prestudent_id) + ); ?>
@@ -296,23 +278,15 @@
- - ZgvmasterModel->getAllZgvmaster(); - echo '"; - ?> + zgvmas_bez; + else + echo $this->widgetlib->widget( + 'Zgvmaster_widget', + array(DropdownWidget::SELECTED_ELEMENT => $zgvpruefung->zgvmas_code), + array('name' => 'zgvmas', 'id' => 'zgvmas_'.$zgvpruefung->prestudent_id) + ); ?>
@@ -348,25 +322,15 @@
- - NationModel->getAll(); - echo '"; - ?> - - + zgvmanation_bez; + else + echo $this->widgetlib->widget( + 'Nation_widget', + array(DropdownWidget::SELECTED_ELEMENT => $zgvpruefung->zgvmanation_code), + array('name' => 'zgvmanation', 'id' => 'zgvmanation_'.$zgvpruefung->prestudent_id) + ); ?>
From c4fbaaaa9d20635a0f348c7f4462b4e4d5136447 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Mon, 12 Sep 2022 17:53:51 +0200 Subject: [PATCH 87/88] Logging for Students implemented --- .../controllers/person/Gruppenmanagement.php | 37 ++++++++++++++----- .../gruppenmanagement/benutzergruppe.php | 1 - .../gruppenmanagementData.php | 2 +- config/global.config-default.inc.php | 3 ++ 4 files changed, 31 insertions(+), 12 deletions(-) diff --git a/application/controllers/person/Gruppenmanagement.php b/application/controllers/person/Gruppenmanagement.php index 4bc80c760..8e8e22d41 100644 --- a/application/controllers/person/Gruppenmanagement.php +++ b/application/controllers/person/Gruppenmanagement.php @@ -27,6 +27,7 @@ class Gruppenmanagement extends Auth_Controller // Loads models $this->load->model('person/benutzer_model', 'BenutzerModel'); + $this->load->model('ressource/mitarbeiter_model', 'MitarbeiterModel'); $this->load->model('person/benutzergruppe_model', 'BenutzergruppeModel'); $this->load->model('system/Log_model', 'LogModel'); @@ -149,11 +150,8 @@ class Gruppenmanagement extends Auth_Controller if (isSuccess($result)) { - $this->LogModel->insert(array( - 'mitarbeiter_uid' => $this->_uid, - 'beschreibung' => 'Gruppenmanagement: Nutzer zu Gruppe hinzugefügt', - 'sql' => $lastQry - )); + $beschreibung = 'Gruppenmanagement: Nutzer zu Gruppe hinzugefügt'; + $this->_writeLog($this->_uid, $beschreibung, $lastQry); } } @@ -185,11 +183,8 @@ class Gruppenmanagement extends Auth_Controller if (isSuccess($result)) { - $this->LogModel->insert(array( - 'mitarbeiter_uid' => $this->_uid, - 'beschreibung' => 'Gruppenmanagement: Nutzer aus Gruppe entfernt', - 'sql' => $lastQry - )); + $beschreibung = 'Gruppenmanagement: Nutzer aus Gruppe entfernt'; + $this->_writeLog($this->_uid, $beschreibung, $lastQry); } $this->outputJson($result); @@ -234,4 +229,26 @@ class Gruppenmanagement extends Auth_Controller if (!$this->_uid) show_error('User authentification failed'); } + + /** + * Writes an entry in the log table + */ + private function _writeLog($uid, $beschreibung, $lastQry) + { + $mitarbeiterResult = $this->MitarbeiterModel->load(array('mitarbeiter_uid'=>$this->_uid)); + + if(!isSuccess($mitarbeiterResult) || !hasData($mitarbeiterResult)) + { + $uid = DUMMY_LEKTOR_UID; + $beschreibung .= ': '.$this->_uid; + $beschreibung = mb_substr($beschreibung, 0, 64); + } + + $this->LogModel->insert(array( + 'mitarbeiter_uid' => $uid, + 'beschreibung' => $beschreibung, + 'sql' => $lastQry + )); + } + } diff --git a/application/views/person/gruppenmanagement/benutzergruppe.php b/application/views/person/gruppenmanagement/benutzergruppe.php index 1bb698591..0096f8d52 100644 --- a/application/views/person/gruppenmanagement/benutzergruppe.php +++ b/application/views/person/gruppenmanagement/benutzergruppe.php @@ -11,7 +11,6 @@ 'tablesorter' => true, 'ajaxlib' => true, 'dialoglib' => true, - 'filterwidget' => true, 'navigationwidget' => true, 'phrases' => array( 'gruppenmanagement', diff --git a/application/views/person/gruppenmanagement/gruppenmanagementData.php b/application/views/person/gruppenmanagement/gruppenmanagementData.php index 4eef0acec..2a07f85f7 100644 --- a/application/views/person/gruppenmanagement/gruppenmanagementData.php +++ b/application/views/person/gruppenmanagement/gruppenmanagementData.php @@ -8,7 +8,7 @@ JOIN public.tbl_gruppe_manager grpmgr USING (gruppe_kurzbz) WHERE grp.aktiv = TRUE AND grpmgr.uid = \''.$uid.'\'', - 'requiredPermissions' => 'admin', + 'requiredPermissions' => 'lehre/gruppenmanager', 'datasetRepresentation' => 'tablesorter', 'additionalColumns' => array('Teilnehmer'), 'columnsAliases' => array( diff --git a/config/global.config-default.inc.php b/config/global.config-default.inc.php index ed17a096d..0380ea8d5 100644 --- a/config/global.config-default.inc.php +++ b/config/global.config-default.inc.php @@ -258,6 +258,9 @@ define('STIP_USER_PASSWORD','password'); // Array mit Usern die nicht Kollidieren define('KOLLISIONSFREIE_USER',serialize(array('_DummyLektor'))); +// UID des Dummy Lektors +define('DUMMY_LEKTOR_UID','_DummyLektor'); + // Soll der Lageplan am Infoterminal angezeigt werden (true|false) //define('CIS_INFOSCREEN_LAGEPLAN_ANZEIGEN', true); From f7fa97499cb0d6ff5e9aca1e112711ca45cf34e9 Mon Sep 17 00:00:00 2001 From: ma0048 Date: Tue, 13 Sep 2022 18:01:09 +0200 Subject: [PATCH 88/88] error von loeschen der doc gefixed --- application/controllers/system/infocenter/InfoCenter.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index 42b9c3cfa..3bd08b7d1 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -423,7 +423,7 @@ class InfoCenter extends Auth_Controller if (hasData($akte)) { $akte = getData($akte); - if ($akte->person_id === $person_id) + if ($akte->person_id === (int)$person_id) { $result = $this->aktelib->remove($akte_id);