diff --git a/application/controllers/system/issues/Plausichecks.php b/application/controllers/system/issues/Plausichecks.php new file mode 100644 index 000000000..8251560e0 --- /dev/null +++ b/application/controllers/system/issues/Plausichecks.php @@ -0,0 +1,146 @@ + array('system/issues_verwalten:r'), + 'runChecks' => array('system/issues_verwalten:r') + ) + ); + + // Load libraries + $this->load->library('issues/PlausicheckProducerLib'); + $this->load->library('WidgetLib'); + //$this->load->library('IssuesLib'); + + // Load models + $this->load->model('system/Fehler_model', 'FehlerModel'); + $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); + $this->load->model('organisation/Studiengang_model', 'StudiengangModel'); + + //~ $this->loadPhrases( + //~ array( + //~ 'global', + //~ 'ui', + //~ 'filter', + //~ 'lehre', + //~ 'person', + //~ 'fehlermonitoring' + //~ ) + //~ ); + + $this->_setAuthUID(); // sets property uid + } + + public function index() + { + $filterData = $this->_getFilterData(); + $this->load->view('system/issues/plausichecks', $filterData); + } + + public function runChecks() + { + $studiensemester_kurzbz = $this->input->get('studiensemester_kurzbz'); + $studiengang_kz = $this->input->get('studiengang_kz'); + $fehler_kurzbz = $this->input->get('fehler_kurzbz'); + + // message array for storing info output + $messages = array(); + // all fehler kurzbz which are going to be checked + $fehlerKurzbz = !isEmptyString($fehler_kurzbz) ? array($fehler_kurzbz) : $this->plausicheckproducerlib->getFehlerKurzbz(); + // set Studiengang to null if not passed + if (isEmptyString($studiengang_kz)) $studiengang_kz = null; + + $messages[] = "Plausicheck Lauf gestartet"; + + // get the data returned by Plausicheck + foreach ($fehlerKurzbz as $fehler_kurzbz) + { + // execute the check + $messages[] = "Prüfe " . $fehler_kurzbz . "..."; + $plausicheckRes = $this->plausicheckproducerlib->producePlausicheck($fehler_kurzbz, $studiensemester_kurzbz, $studiengang_kz); + + if (isError($plausicheckRes)) $this->terminateWithJsonError(getError($plausicheckRes)); + + if (hasData($plausicheckRes)) + { + $plausicheckData = getData($plausicheckRes); + + foreach ($plausicheckData as $plausiData) + { + // get the data needed for issue production + $person_id = isset($plausiData['person_id']) ? $plausiData['person_id'] : null; + $oe_kurzbz = isset($plausiData['oe_kurzbz']) ? $plausiData['oe_kurzbz'] : null; + $fehlertext_params = isset($plausiData['fehlertext_params']) ? $plausiData['fehlertext_params'] : null; + $resolution_params = isset($plausiData['resolution_params']) ? $plausiData['resolution_params'] : null; + + // get Text of the Fehler + $this->FehlerModel->addSelect('fehlertext'); + $fehlerRes = $this->FehlerModel->loadWhere(array('fehler_kurzbz' => $fehler_kurzbz)); + + if (isError($fehlerRes)) $this->outputJsonError(getError($fehlerRes)); + + // optionally replace fehler parameters in text, output the fehlertext + if (hasData($fehlerRes)) + { + $fehlerText = getData($fehlerRes)[0]->fehlertext; + $fehlerText = isEmptyArray($fehlertext_params) ? $fehlerText : vsprintf($fehlerText, $fehlertext_params); + $messages[] = $fehlerText; + } + } + } + else + $messages[] = "Nichts gefunden für Fehler $fehler_kurzbz"; + } + + $messages[] = "Plausicheck Lauf gestoppt"; + + $this->outputJsonSuccess($messages); + } + + private function _getFilterData() + { + $this->StudiensemesterModel->addOrder('start', 'DESC'); + $studiensemesterRes = $this->StudiensemesterModel->load(); + + if (isError($studiensemesterRes)) show_error(getError($studiensemesterRes)); + + $currSemRes = $this->StudiensemesterModel->getAkt(); + + if (isError($currSemRes)) show_error(getError($currSemRes)); + + $this->StudiengangModel->addSelect('studiengang_kz, tbl_studiengang.bezeichnung, tbl_studiengang.typ, + tbl_studiengangstyp.bezeichnung AS typbezeichnung, UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as kuerzel'); + $this->StudiengangModel->addJoin('public.tbl_studiengangstyp', 'typ'); + $this->StudiengangModel->addOrder('kuerzel, tbl_studiengang.bezeichnung, studiengang_kz'); + $studiengaengeRes = $this->StudiengangModel->loadWhere(array('aktiv' => true)); + + if (isError($studiengaengeRes)) show_error(getError($studiengaengeRes)); + + $fehlerKurzbz = $this->plausicheckproducerlib->getFehlerKurzbz(); + + return array( + 'semester' => hasData($studiensemesterRes) ? getData($studiensemesterRes) : array(), + 'currsemester' => hasData($currSemRes) ? getData($currSemRes) : array(), + 'studiengaenge' => hasData($studiengaengeRes) ? getData($studiengaengeRes) : array(), + 'fehler' => $fehlerKurzbz + ); + } + + /** + * 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/views/system/issues/plausichecks.php b/application/views/system/issues/plausichecks.php new file mode 100644 index 000000000..850accd41 --- /dev/null +++ b/application/views/system/issues/plausichecks.php @@ -0,0 +1,108 @@ +load->view( + 'templates/FHC-Header', + array( + 'title' => 'Plausichecks', + 'jquery' => true, + 'jqueryui' => true, + 'jquerycheckboxes' => true, + 'bootstrap' => true, + 'fontawesome' => true, + 'sbadmintemplate' => true, + 'ajaxlib' => true, + 'navigationwidget' => true, + 'dialoglib' => true, + //~ 'phrases' => array( + //~ 'ui', + //~ 'fehlermonitoring' + //~ ), + //'customCSSs' => array('public/css/issues/issuesZustaendigkeiten.css', 'public/css/sbadmin2/tablesort_bootstrap.css'), + 'customJSs' => array('public/js/issues/plausichecks.js') + ) +); +?> + +
+