diff --git a/application/config/navigation.php b/application/config/navigation.php index 306728657..427c52e10 100644 --- a/application/config/navigation.php +++ b/application/config/navigation.php @@ -56,7 +56,10 @@ $config['navigation_header'] = array( 'description' => 'Lehrauftrag', 'expand' => true, 'sort' => 40, - 'requiredPermissions' => 'lehre:r' + 'requiredPermissions' => array( + 'lehre/lehrauftrag_bestellen:r', + 'lehre/lehrauftrag_erteilen:r' + ) ) ) ), @@ -132,6 +135,7 @@ $config['navigation_menu']['lehre/lehrauftrag/Lehrauftrag/index'] = array( 'description' => 'Lehrauftrag bestellen', 'icon' => '', 'sort' => 1, + 'requiredPermissions' => 'lehre/lehrauftrag_bestellen:r', 'target' => '_blank' ), 'lehrauftragErteilen' => array( @@ -139,6 +143,7 @@ $config['navigation_menu']['lehre/lehrauftrag/Lehrauftrag/index'] = array( 'description' => 'Lehrauftrag erteilen', 'icon' => '', 'sort' => 1, + 'requiredPermissions' => 'lehre/lehrauftrag_erteilen:r', 'target' => '_blank' ) ); diff --git a/application/controllers/lehre/lehrauftrag/Lehrauftrag.php b/application/controllers/lehre/lehrauftrag/Lehrauftrag.php index cf27fc30e..83c420a6c 100644 --- a/application/controllers/lehre/lehrauftrag/Lehrauftrag.php +++ b/application/controllers/lehre/lehrauftrag/Lehrauftrag.php @@ -74,6 +74,15 @@ class Lehrauftrag extends Auth_Controller show_error('Fehler bei Berechtigungsprüfung'); } + // If studiengang_kz get param was set, check against entitled stg + if (!is_null($studiengang_kz)) + { + if (!in_array($studiengang_kz, $studiengang_kz_arr)) + { + show_error('Keine Berechtigung für diesen Studiengang'); + } + } + // Set studiensemester selected for studiengang dropdown $studiensemester_kurzbz = $this->input->get('studiensemester'); // if provided by selected studiensemester if (is_null($studiensemester_kurzbz)) // else set next studiensemester as default value @@ -123,6 +132,12 @@ class Lehrauftrag extends Auth_Controller $betrag = (isset($lehrauftrag->betrag)) ? $lehrauftrag->betrag : null; $vertrag_betrag = (isset($lehrauftrag->vertrag_betrag)) ? $lehrauftrag->vertrag_betrag : null; $studiensemester_kurzbz = (isset($lehrauftrag->studiensemester_kurzbz)) ? $lehrauftrag->studiensemester_kurzbz : null; + $studiengang_kz = (isset($lehrauftrag->studiengang_kz)) ? $lehrauftrag->studiengang_kz : null; + + // Check if user is entitled to order this Lehrauftrag + if (!$this->permissionlib->isBerechtigt(self::BERECHTIGUNG_LEHRAUFTRAG_BESTELLEN, 'suid', $studiengang_kz)){ + show_error('Keine Bestellberechtigung für diesen Studiengang: '. $studiengang_kz); + } // update contract if contract exists and the betrag was changed $hasChanged = (floatval($betrag) != floatval($vertrag_betrag)) ? true : false; diff --git a/application/controllers/lehre/lehrauftrag/LehrauftragAkzeptieren.php b/application/controllers/lehre/lehrauftrag/LehrauftragAkzeptieren.php index 714d357fe..98ce734a4 100644 --- a/application/controllers/lehre/lehrauftrag/LehrauftragAkzeptieren.php +++ b/application/controllers/lehre/lehrauftrag/LehrauftragAkzeptieren.php @@ -32,6 +32,7 @@ class LehrauftragAkzeptieren extends Auth_Controller $this->load->model('accounting/Vertrag_model', 'VertragModel'); $this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel'); $this->load->model('codex/Bisverwendung_model', 'BisverwendungModel'); + $this->load->model('person/Benutzer_model', 'BenutzerModel'); // Load libraries $this->load->library('WidgetLib'); @@ -122,15 +123,42 @@ class LehrauftragAkzeptieren extends Auth_Controller // Loop through lehraufträge $lehrauftrag_arr = $this->input->post('selected_data'); + if(is_array($lehrauftrag_arr)) { foreach($lehrauftrag_arr as $lehrauftrag) { - $mitarbeiter_uid = (!is_null($lehrauftrag['mitarbeiter_uid'])) ? $lehrauftrag['mitarbeiter_uid'] : null; $vertrag_id = (!is_null($lehrauftrag['vertrag_id'])) ? $lehrauftrag['vertrag_id'] : null; + // Check if user is entitled to accept this Lehrauftrag + // * first retrieve person_id of the contract + $this->VertragModel->addSelect('person_id'); + + if ($result = getData($this->VertragModel->load($vertrag_id))) + { + // * then find the uid of that contracts person_id + $this->BenutzerModel->addSelect('uid'); + + if ($result = getData($this->BenutzerModel->getFromPersonId($result[0]->person_id))) + { + // * finally check uid of contract against the logged in user + if ($result[0]->uid != $this->_uid) + { + show_error('Keine Berechtigung für diesen Vertrag'); + } + } + else + { + show_error($result->retval); + } + } + else + { + show_error($result->retval); + } + // Set status to accepted - $result = $this->VertragModel->setStatus($vertrag_id, $mitarbeiter_uid, 'akzeptiert'); + $result = $this->VertragModel->setStatus($vertrag_id, $this->_uid, 'akzeptiert'); if ($result->retval) { diff --git a/application/controllers/lehre/lehrauftrag/LehrauftragErteilen.php b/application/controllers/lehre/lehrauftrag/LehrauftragErteilen.php index fbd6babbe..2dc771d0f 100644 --- a/application/controllers/lehre/lehrauftrag/LehrauftragErteilen.php +++ b/application/controllers/lehre/lehrauftrag/LehrauftragErteilen.php @@ -75,6 +75,15 @@ class LehrauftragErteilen extends Auth_Controller show_error('Fehler bei Berechtigungsprüfung'); } + // If oe_kurzbz get param was set, check against entitled stg + if (!is_null($oe_kurzbz)) + { + if (!in_array($oe_kurzbz, $oe_kurzbz_arr)) + { + show_error('Keine Berechtigung für diese Organisationseinheit'); + } + } + // Set studiensemester selected for studiengang dropdown $studiensemester_kurzbz = $this->input->get('studiensemester'); // if provided by selected studiensemester if (is_null($studiensemester_kurzbz)) // else set next studiensemester as default value @@ -118,6 +127,12 @@ class LehrauftragErteilen extends Auth_Controller { $mitarbeiter_uid = (isset($lehrauftrag->mitarbeiter_uid)) ? $lehrauftrag->mitarbeiter_uid : null; $vertrag_id = (isset($lehrauftrag->vertrag_id)) ? $lehrauftrag->vertrag_id : null; + $lv_oe_kurzbz = (isset($lehrauftrag->lv_oe_kurzbz)) ? $lehrauftrag->lv_oe_kurzbz : null; + + // Check if user is entitled to approve this Lehrauftrag + if (!$this->permissionlib->isBerechtigt(self::BERECHTIGUNG_LEHRAUFTRAG_ERTEILEN, 'suid', $lv_oe_kurzbz)){ + show_error('Keine Erteilberechtigung für diese Organisationseinheit: '. $lv_oe_kurzbz); + } $result = $this->VertragModel->setStatus($vertrag_id, $mitarbeiter_uid, 'erteilt'); diff --git a/application/views/lehre/lehrauftrag/acceptLehrauftrag.php b/application/views/lehre/lehrauftrag/acceptLehrauftrag.php index 26ef26c42..4a261097a 100644 --- a/application/views/lehre/lehrauftrag/acceptLehrauftrag.php +++ b/application/views/lehre/lehrauftrag/acceptLehrauftrag.php @@ -528,7 +528,6 @@ $this->load->view( // reduce to necessary fields return { 'row_index' : data.row_index, - 'mitarbeiter_uid' : data.mitarbeiter_uid, 'vertrag_id' : data.vertrag_id } }); diff --git a/application/views/lehre/lehrauftrag/acceptLehrauftragData.php b/application/views/lehre/lehrauftrag/acceptLehrauftragData.php index a615d19d3..92fc5065a 100644 --- a/application/views/lehre/lehrauftrag/acceptLehrauftragData.php +++ b/application/views/lehre/lehrauftrag/acceptLehrauftragData.php @@ -281,7 +281,7 @@ $filterWidgetArray = array( 'app' => LehrauftragAkzeptieren::APP, 'datasetName' => 'lehrauftragAccept', 'filterKurzbz' => 'LehrauftragAccept', - 'requiredPermissions' => 'lehre', // TODO: change permission + 'requiredPermissions' => 'lehre/lehrauftrag_akzeptieren', 'datasetRepresentation' => 'tabulator', 'reloadDataset' => true, // reload query on page refresh 'customMenu' => false, diff --git a/application/views/lehre/lehrauftrag/approveLehrauftrag.php b/application/views/lehre/lehrauftrag/approveLehrauftrag.php index 96d3248ab..6388a8956 100644 --- a/application/views/lehre/lehrauftrag/approveLehrauftrag.php +++ b/application/views/lehre/lehrauftrag/approveLehrauftrag.php @@ -620,6 +620,7 @@ $(function() { 'row_index': data.row_index, 'mitarbeiter_uid' : data.mitarbeiter_uid, 'vertrag_id' : data.vertrag_id, + 'lv_oe_kurzbz' : data.lv_oe_kurzbz } }); diff --git a/application/views/lehre/lehrauftrag/approveLehrauftragData.php b/application/views/lehre/lehrauftrag/approveLehrauftragData.php index b6d792283..4b872020f 100644 --- a/application/views/lehre/lehrauftrag/approveLehrauftragData.php +++ b/application/views/lehre/lehrauftrag/approveLehrauftragData.php @@ -289,7 +289,7 @@ $filterWidgetArray = array( 'app' => LehrauftragErteilen::APP, 'datasetName' => 'lehrauftragApprove', 'filterKurzbz' => 'LehrauftragApprove', - 'requiredPermissions' => 'lehre', // TODO: change permission + 'requiredPermissions' => 'lehre/lehrauftrag_erteilen', 'datasetRepresentation' => 'tabulator', 'reloadDataset' => true, // reload query on page refresh 'customMenu' => false, diff --git a/application/views/lehre/lehrauftrag/orderLehrauftragData.php b/application/views/lehre/lehrauftrag/orderLehrauftragData.php index 7bf08193a..0f952b421 100644 --- a/application/views/lehre/lehrauftrag/orderLehrauftragData.php +++ b/application/views/lehre/lehrauftrag/orderLehrauftragData.php @@ -294,7 +294,7 @@ $filterWidgetArray = array( 'app' => Lehrauftrag::APP, 'datasetName' => 'lehrauftragOrder', 'filterKurzbz' => 'LehrauftragOrder', - 'requiredPermissions' => 'lehre', // TODO: change permission + 'requiredPermissions' => 'lehre/lehrauftrag_bestellen', 'datasetRepresentation' => 'tabulator', 'reloadDataset' => true, // reload query on page refresh 'customMenu' => false, diff --git a/content/lvplanung/lehrveranstaltungDBDML.php b/content/lvplanung/lehrveranstaltungDBDML.php index 76d09f5c0..5fd0ffc5c 100644 --- a/content/lvplanung/lehrveranstaltungDBDML.php +++ b/content/lvplanung/lehrveranstaltungDBDML.php @@ -32,6 +32,7 @@ // * - Lehreinheitmitarbeiter Zuteilung hinzufuegen/bearbeiten/loeschen // * - Lehreinheitgruppe Zutelung hinzufuegen/loeschen // * - Lehreinheit anlegen/bearbeiten/loeschen +// * - Lehrauftrag (Vertrag) loeschen (stornieren) // **************************************** require_once('../../config/vilesci.config.inc.php'); @@ -1754,43 +1755,66 @@ if(!$error) } elseif(isset($_POST['type']) && $_POST['type']=='cancelVertrag') { - if(isset($_POST['vertrag_id']) && isset($_POST['mitarbeiter_uid'])) + $error = false; + + // Check if user is entitled to cancel this contract + if (isset($_POST['vertrag_id']) && is_numeric($_POST['vertrag_id'])) { + // * first find lehrveranstaltung_id of the contracts lehrveranstaltung $vertrag = new vertrag(); - if($vertrag->cancel($_POST['vertrag_id'], $_POST['mitarbeiter_uid'])) + $vertrag->load($_POST['vertrag_id']); + $lva = new lehrveranstaltung($vertrag->lehrveranstaltung_id); + + // * then check if the user has permissions to cancel the corresponding lv-organisational units + if (!$rechte->isBerechtigtMultipleOe('admin', $lva->getAllOe(), 'suid') && + !$rechte->isBerechtigtMultipleOe('lehre/lehrauftrag_bestellen', $lva->getAllOe(), 'suid')) { - $return = true; - } - else - { - $errormsg = 'Fehler beim Ausführen des Vertragsstornos'; + $error = true; $return = false; + $errormsg = 'Keine Berechtigung'; } } - elseif(isset($_POST['vertrag_id']) && isset($_POST['person_id'])) - { - $benutzer = new Benutzer(); - if($benutzer->getBenutzerFromPerson($_POST['person_id'])) - { - $mitarbeiter_uid = $benutzer->result[0]->uid; - $vertrag = new vertrag(); - if($vertrag->cancel($_POST['vertrag_id'], $mitarbeiter_uid)) - { - $return = true; - } - else - { - $errormsg = 'Fehler beim Ausführen des Vertragsstornos'; - $return = false; - } - } - else - { - $errormsg = 'Benutzer konnte nicht von PersonID geladen werden'; - $return = false; - } - } + if (!$error) + { + if(isset($_POST['mitarbeiter_uid'])) + { + $vertrag = new vertrag(); + if($vertrag->cancel($_POST['vertrag_id'], $_POST['mitarbeiter_uid'])) + { + $return = true; + } + else + { + $errormsg = 'Fehler beim Ausführen des Vertragsstornos'; + $return = false; + } + } + elseif(isset($_POST['person_id'])) + { + $benutzer = new Benutzer(); + if($benutzer->getBenutzerFromPerson($_POST['person_id'])) + { + $mitarbeiter_uid = $benutzer->result[0]->uid; + + $vertrag = new vertrag(); + if($vertrag->cancel($_POST['vertrag_id'], $mitarbeiter_uid)) + { + $return = true; + } + else + { + $errormsg = 'Fehler beim Ausführen des Vertragsstornos'; + $return = false; + } + } + else + { + $errormsg = 'Benutzer konnte nicht von PersonID geladen werden'; + $return = false; + } + } + } else { $errormsg = 'VertragsID und MitarbeiterUID müssen uebergeben werden';