diff --git a/application/config/routes.php b/application/config/routes.php index 733dcf8b8..330a94dcd 100644 --- a/application/config/routes.php +++ b/application/config/routes.php @@ -129,8 +129,11 @@ $route['api/frontend/v1/treemenudata/stv/.*'] = 'api/frontend/v1/stv/students/in $route['api/frontend/v1/treemenudata/lvverwaltung/stdsem/(:any)/stg/(:any)'] = 'api/frontend/v1/Lehrveranstaltung/getByStg/$1/$2'; $route['api/frontend/v1/treemenudata/lvverwaltung/stdsem/(:any)/stg/(:any)/semester/(:any)'] = 'api/frontend/v1/Lehrveranstaltung/getByStg/$1/$2/$3'; $route['api/frontend/v1/treemenudata/lvverwaltung/stdsem/(:any)/stg/(:any)/semester/(:any)/.*'] = 'api/frontend/v1/Lehrveranstaltung/getByStg/$1/$2/$3'; -$route['api/frontend/v1/treemenudata/lvverwaltung/stdsem/(:any)/stg/(:any)/orgform/(:any)'] = 'api/frontend/v1/Lehrveranstaltung/getByStg/$1/$2/$3'; -$route['api/frontend/v1/treemenudata/lvverwaltung/stdsem/(:any)/stg/(:any)/orgform/(:any)/.*'] = 'api/frontend/v1/Lehrveranstaltung/getByStg/$1/$2/$3'; + +$route['api/frontend/v1/treemenudata/lvverwaltung/stdsem/(:any)/stg/(:any)/orgform/(:any)/semester/(:any)'] = 'api/frontend/v1/Lehrveranstaltung/getByStgOrgform/$1/$2/$3/$4'; +$route['api/frontend/v1/treemenudata/lvverwaltung/stdsem/(:any)/stg/(:any)/orgform/(:any)/semester/(:any)/.*'] = 'api/frontend/v1/Lehrveranstaltung/getByStgOrgform/$1/$2/$3/$4'; +$route['api/frontend/v1/treemenudata/lvverwaltung/stdsem/(:any)/stg/(:any)/orgform/(:any)'] = 'api/frontend/v1/Lehrveranstaltung/getByStgOrgform/$1/$2/$3'; +$route['api/frontend/v1/treemenudata/lvverwaltung/stdsem/(:any)/stg/(:any)/orgform/(:any)/.*'] = 'api/frontend/v1/Lehrveranstaltung/getByStgOrgform/$1/$2/$3'; $route['api/frontend/v1/treemenudata/lvverwaltung/stdsem/(:any)/emp/(:any)'] = 'api/frontend/v1/Lehrveranstaltung/getByEmp/$1/$2'; $route['api/frontend/v1/treemenudata/lvverwaltung/stdsem/(:any)/emp/(:any)/stg/(:any)'] = 'api/frontend/v1/Lehrveranstaltung/getByEmp/$1/$2/$3'; diff --git a/application/config/treemenu/custom/lvvw.php b/application/config/treemenu/custom/lvvw.php index 977c0459e..09a10ed2b 100644 --- a/application/config/treemenu/custom/lvvw.php +++ b/application/config/treemenu/custom/lvvw.php @@ -26,7 +26,8 @@ $config['root'] = [ 'verband' => [ 'group' ] - ], - 'orgform' + ] ] ]; + +$config['root']['stg']['orgform'] = $config['root']['stg']; diff --git a/application/controllers/api/frontend/v1/Lehrveranstaltung.php b/application/controllers/api/frontend/v1/Lehrveranstaltung.php index 481a12841..e67a8a53f 100644 --- a/application/controllers/api/frontend/v1/Lehrveranstaltung.php +++ b/application/controllers/api/frontend/v1/Lehrveranstaltung.php @@ -31,6 +31,7 @@ class Lehrveranstaltung extends FHCAPI_Controller 'getByLe' => ['admin:r', 'assistenz:r'], 'getByLv' => ['admin:r', 'assistenz:r'], 'getByStg' => ['admin:r', 'assistenz:r'], + 'getByStgOrgform' => ['admin:r', 'assistenz:r'], 'loadByLV' => ['admin:r', 'assistenz:r'], ]); @@ -103,30 +104,48 @@ class Lehrveranstaltung extends FHCAPI_Controller $tree = []; - $lehrveranstaltungen = $this->_ci->LehreinheitModel->getLvsById($lehrveranstaltung_id, $studiensemester_kurzbz); - $lehrveranstaltungen_data = $this->getDataOrTerminateWithError($lehrveranstaltungen); + $this->_ci->LehrveranstaltungModel->addSelect('studiengang_kz'); + $lv = $this->_ci->LehrveranstaltungModel->load($lehrveranstaltung_id); + $lv = $this->getDataOrTerminateWithError($lv); - if (!hasData($lehrveranstaltungen_data)) + if (empty($lv)) + $this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL); + + $lehrveranstaltungen_data = array(); + foreach ($this->_loadLvRows(current($lv)->studiengang_kz, $studiensemester_kurzbz) as $row) + { + if ((string)$row->lehrveranstaltung_id === (string)$lehrveranstaltung_id) + { + $lehrveranstaltungen_data[] = $row; + break; + } + } + + if (empty($lehrveranstaltungen_data)) { $this->_ci->LehrveranstaltungModel->addSelect(' - kurzbz as lv_kurzbz, + tbl_lehrveranstaltung.*, + tbl_lehrveranstaltung.kurzbz as lv_kurzbz, lehrveranstaltung_id, lehrtyp_kurzbz, studiengang_kz as lv_studiengang_kz, - semester as lv_semester, - bezeichnung as lv_bezeichnung, + UPPER(CONCAT(tbl_studiengang.typ, tbl_studiengang.kurzbz)) as studiengang, + semester as semester, + tbl_lehrveranstaltung.bezeichnung as lv_bezeichnung, ects as lv_ects, lehreverzeichnis as lv_lehreverzeichnis, planfaktor as lv_planfaktor, planlektoren as lv_planlektoren, planpersonalkosten as lv_planpersonalkosten, plankostenprolektor as lv_plankostenprolektor, - orgform_kurzbz as lv_orgform_kurzbz, + tbl_lehrveranstaltung.orgform_kurzbz as orgform_kurzbz, + tbl_lehrveranstaltung.sprache as sprache, lehrform_kurzbz as lv_lehrform_kurzbz, - bezeichnung_english as lv_bezeichnung_english, + tbl_lehrveranstaltung.bezeichnung_english as lv_bezeichnung_english, semesterstunden as lv_semesterstunden, '); + $this->_ci->LehrveranstaltungModel->addJoin('public.tbl_studiengang', 'studiengang_kz'); $lehrveranstaltungen = $this->_ci->LehrveranstaltungModel->load($lehrveranstaltung_id); $lehrveranstaltungen_data = $this->getDataOrTerminateWithError($lehrveranstaltungen); } @@ -143,43 +162,35 @@ class Lehrveranstaltung extends FHCAPI_Controller $tree[] = $lehrveranstaltung; } + $counter = 0; + $this->assignUniqueIndex($tree, $counter); $this->terminateWithSuccess($tree); } + public function getByStg($studiensemester_kurzbz = null, $stg_kz = null, $semester = null) + { + $this->_getLvTree($studiensemester_kurzbz, $stg_kz, $semester, null); + } + + public function getByStgOrgform($studiensemester_kurzbz = null, $stg_kz = null, $orgform = null, $semester = null) + { + $orgform_kurzbz = $this->getOrgformKurzbz($orgform); + $this->_getLvTree($studiensemester_kurzbz, $stg_kz, $semester, $orgform_kurzbz); + } + + private function _getLvTree($studiensemester_kurzbz, $stg_kz, $semester, $orgform_kurzbz) { $studiengang_kz = $this->getStudiengangKz($stg_kz); if (is_null($studiengang_kz) || !preg_match("/^(-?[1-9][0-9]*|0)$/", (string)$studiengang_kz)) $this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL); - $verband = null; - if (!is_null($semester) && !is_numeric($semester)) - { - $verband = $this->getOrgformKurzbz($semester); - $semester = null; - } - - $this->_ci->load->model('organisation/Studienplan_model', 'StudienplanModel'); + if (!is_null($semester) && !ctype_digit((string)$semester)) + $this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL); $studiensemester_kurzbz = $this->getStudiensemesterKurzbz($studiensemester_kurzbz); - $studienplan_data = $this->_ci->StudienplanModel->getStudienplaeneBySemester($studiengang_kz, $studiensemester_kurzbz, $semester, $verband); - $studienplan_ids = array(); - $only_ids = array(); - $placeholders = array(); - - if (hasData($studienplan_data)) - { - foreach (getData($studienplan_data) as $studienplan) { - $placeholders[] = "(?, ?)"; - $studienplan_ids[] = $studienplan->studienplan_id; - $studienplan_ids[] = $studienplan->semester; - $only_ids[] = $studienplan->studienplan_id; - } - } - - $lehrveranstaltungen_data = $this->_ci->LehrveranstaltungModel->getLvsByStudiengang($studienplan_ids, $placeholders, $only_ids, $studiengang_kz, $studiensemester_kurzbz, $semester, $verband); - $lehrveranstaltungen_data = hasData($lehrveranstaltungen_data) ? getData($lehrveranstaltungen_data) : array(); + $lehrveranstaltungen_data = $this->_loadLvRows($studiengang_kz, $studiensemester_kurzbz, $semester, $orgform_kurzbz); $tree = []; foreach ($lehrveranstaltungen_data as $row) @@ -312,6 +323,31 @@ class Lehrveranstaltung extends FHCAPI_Controller $this->LehreinheitModel->getLvsByFachbereich($fachbereich, $studiensemester_kurzbz, $mitarbeiter_uid); }*/ + + private function _loadLvRows($studiengang_kz, $studiensemester_kurzbz, $semester = null, $orgform_kurzbz = null) + { + $this->_ci->load->model('organisation/Studienplan_model', 'StudienplanModel'); + + $studienplan_data = $this->_ci->StudienplanModel->getStudienplaeneBySemester($studiengang_kz, $studiensemester_kurzbz, $semester, $orgform_kurzbz); + + $studienplan_ids = array(); + $only_ids = array(); + $placeholders = array(); + + if (hasData($studienplan_data)) + { + foreach (getData($studienplan_data) as $studienplan) { + $placeholders[] = "(?, ?)"; + $studienplan_ids[] = $studienplan->studienplan_id; + $studienplan_ids[] = $studienplan->semester; + $only_ids[] = $studienplan->studienplan_id; + } + } + + $lehrveranstaltungen_data = $this->_ci->LehrveranstaltungModel->getLvsByStudiengang($studienplan_ids, $placeholders, $only_ids, $studiengang_kz, $studiensemester_kurzbz, $semester, $orgform_kurzbz); + return hasData($lehrveranstaltungen_data) ? getData($lehrveranstaltungen_data) : array(); + } + private function _setAuthUID() { $this->_uid = getAuthUID(); @@ -377,8 +413,8 @@ class Lehrveranstaltung extends FHCAPI_Controller $data = $this->getDataOrTerminateWithError($result); if (!$data) - return $orgform_kurzbz; + $this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL); return current($data)->orgform_kurzbz; } -} +} \ No newline at end of file diff --git a/application/libraries/SearchBarLib.php b/application/libraries/SearchBarLib.php index 12718b9d6..c228d318f 100644 --- a/application/libraries/SearchBarLib.php +++ b/application/libraries/SearchBarLib.php @@ -180,10 +180,14 @@ class SearchBarLib protected function buildSearchClause(DB_Model $dbModel, array $columns, $searchstr) { $searchstr = preg_replace('/[[:punct:]]/', ' ', $searchstr); + $words = preg_split('/\s+/', trim($searchstr), -1, PREG_SPLIT_NO_EMPTY); + + if (empty($words)) return array(); + $document = implode(' || \' \' || ', $columns); - $query = '\'' . implode(':* & ', explode(' ', trim($searchstr))) . ':*\''; - $reversequery = '\'*:' . implode(' & *:', explode(' ', trim($searchstr))) . '\''; - $nospacequery = '\'' . implode('', explode(' ', trim($searchstr))) . ':*\''; + $query = '\'' . implode(':* & ', $words) . ':*\''; + $reversequery = '\'*:' . implode(' & *:', $words) . '\''; + $nospacequery = '\'' . implode('', $words) . ':*\''; $searchclause = <<execReadOnlyQuery(' SELECT \'teachingunit\' AS renderer, \''.$type.'\' AS type, - lehreinheit_id as id, - studiensemester_kurzbz, - lv_bezeichnung as bezeichnung, - \'lv_table_icon icon-\' as foto, - UPPER(CONCAT(vw_lehreinheit.stg_typ, vw_lehreinheit.stg_kurzbz)) as studiengang - FROM campus.vw_lehreinheit - JOIN public.tbl_studiensemester USING(studiensemester_kurzbz) - WHERE cast(lehreinheit_id as text) ILIKE \'%'.$dbModel->escapeLIKE($searchstr).'%\' - OR lv_bezeichnung ILIKE \'%'.$dbModel->escapeLike($searchstr).'%\' - ORDER BY start DESC, lv_bezeichnung - '); + le.lehreinheit_id AS id, + le.studiensemester_kurzbz, + lv.bezeichnung, + \'lv_table_icon icon-\' AS foto, + UPPER(stg.typ || stg.kurzbz) AS studiengang, + le.lehrform_kurzbz, + lv.semester + FROM lehre.tbl_lehreinheit le + JOIN lehre.tbl_lehrveranstaltung lv ON (lv.lehrveranstaltung_id = le.lehrveranstaltung_id) + JOIN public.tbl_studiengang stg ON (stg.studiengang_kz = lv.studiengang_kz) + JOIN public.tbl_studiensemester sem ON (sem.studiensemester_kurzbz = le.studiensemester_kurzbz) + WHERE (' . + $this->buildSearchClause( + $dbModel, + array( + '(stg.typ || stg.kurzbz)', + 'lv.semester', + 'lv.bezeichnung' + ), + $searchstr + ) . ')' . $idwhere . ' + '); // If something has been found then return it if (hasData($lehreinheit)) return getData($lehreinheit); @@ -629,6 +651,14 @@ EOSC; { $dbModel = new DB_Model(); + $idwhere = ''; + + if (ctype_digit(trim($searchstr))) + { + $id = (int)trim($searchstr); + $idwhere = ' OR tbl_lehrveranstaltung.lehrveranstaltung_id = ' . $id; + } + $lehreinheit = $dbModel->execReadOnlyQuery(' SELECT @@ -637,12 +667,23 @@ EOSC; lehrveranstaltung_id as id, tbl_lehrveranstaltung.bezeichnung, \'lv_table_icon icon-lv\' as foto, - UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as studiengang + UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as studiengang, + semester, + lehrform_kurzbz, + tbl_organisationseinheit.bezeichnung as oe_bezeichnung FROM lehre.tbl_lehrveranstaltung JOIN public.tbl_studiengang USING(studiengang_kz) - WHERE cast(lehrveranstaltung_id as text) ILIKE \'%'.$dbModel->escapeLIKE($searchstr).'%\' - OR tbl_lehrveranstaltung.bezeichnung ILIKE \'%'.$dbModel->escapeLike($searchstr).'%\' - ORDER BY lehrveranstaltung_id DESC + JOIN public.tbl_organisationseinheit ON tbl_lehrveranstaltung.oe_kurzbz = tbl_organisationseinheit.oe_kurzbz + WHERE (' . + $this->buildSearchClause( + $dbModel, + array( + '(tbl_studiengang.typ || tbl_studiengang.kurzbz)', + 'semester', + 'tbl_lehrveranstaltung.bezeichnung' + ), + $searchstr + ) . ')' . $idwhere . ' '); // If something has been found then return it diff --git a/application/libraries/treemenu/LvVwLib.php b/application/libraries/treemenu/LvVwLib.php index d3c91a196..171a8c191 100644 --- a/application/libraries/treemenu/LvVwLib.php +++ b/application/libraries/treemenu/LvVwLib.php @@ -159,8 +159,6 @@ class LvVwLib if (!$stg->mischform) return []; - $this->_ci->StudiengangModel->db->select('TRUE AS leaf', false); - return $this->_ci->stglib->orgform($path_template, $stg->studiengang_kz); } diff --git a/public/js/components/searchbar/result/teachingunit.js b/public/js/components/searchbar/result/teachingunit.js index d60444ea4..6c5922e30 100644 --- a/public/js/components/searchbar/result/teachingunit.js +++ b/public/js/components/searchbar/result/teachingunit.js @@ -32,13 +32,30 @@ export default { {{ res.studiengang }} - +
+
{{ $p.t('lehre/organisationseinheit') }}
+
+ {{ res.oe_bezeichnung }} +
+
{{ $p.t('lehre/studiensemester') }}
{{ res.studiensemester_kurzbz }}
+
+
{{ $p.t('lehre/ausbildungssemester') }}
+
+ {{ res.semester }} +
+
+
+
{{ $p.t('lehre/lehrform') }}
+
+ {{ res.lehrform_kurzbz }} +
+
`