diff --git a/application/config/treemenu.php b/application/config/treemenu.php index 72a02947b..d2ee26546 100644 --- a/application/config/treemenu.php +++ b/application/config/treemenu.php @@ -27,3 +27,8 @@ $config['lvv'] = [ "library" => "treemenu/LvVwLib", "permissions" => ["admin:r", "assistenz:r"] ]; + +$config['tempus'] = [ + "library" => "treemenu/TempusLib", + "permissions" => ["admin:r", "assistenz:r", "lehre/lvplan:r"] +]; diff --git a/application/config/treemenu/custom/tempus.php b/application/config/treemenu/custom/tempus.php new file mode 100644 index 000000000..977c0459e --- /dev/null +++ b/application/config/treemenu/custom/tempus.php @@ -0,0 +1,32 @@ +. + */ + +if (!defined('BASEPATH')) exit('No direct script access allowed'); + +$config['root'] = [ + 'stg' => [ + 'semester' => [ + 'group', + 'verband' => [ + 'group' + ] + ], + 'orgform' + ] +]; diff --git a/application/controllers/api/frontend/v1/lv/StgTree.php b/application/controllers/api/frontend/v1/lv/StgTree.php deleted file mode 100644 index e69de29bb..000000000 diff --git a/application/controllers/api/frontend/v1/tempus/Coursepicker.php b/application/controllers/api/frontend/v1/tempus/Coursepicker.php index 686b39023..fd4ca5c75 100644 --- a/application/controllers/api/frontend/v1/tempus/Coursepicker.php +++ b/application/controllers/api/frontend/v1/tempus/Coursepicker.php @@ -154,7 +154,7 @@ class Coursepicker extends FHCAPI_Controller } $first = false; - $this->_ci->LehreinheitModel->db->where('tbl_lehrveranstaltung.studiengang_kz', $studiengang['studiengang_kz']); + $this->_ci->LehreinheitModel->db->where('tbl_lehrveranstaltung.studiengang_kz', $studiengang['stg_kz']); if (isset($studiengang['semester'])) $this->_ci->LehreinheitModel->db->where('tbl_lehrveranstaltung.semester', $studiengang['semester']); diff --git a/application/libraries/KalenderLib.php b/application/libraries/KalenderLib.php index 643491839..8d5aa1a9a 100644 --- a/application/libraries/KalenderLib.php +++ b/application/libraries/KalenderLib.php @@ -412,7 +412,7 @@ class KalenderLib foreach ($studiengaenge as $studiengang) { $conditions = array(); - $conditions[] = 'filter_lv.studiengang_kz = ' . $db->escape($studiengang['studiengang_kz']); + $conditions[] = 'filter_lv.studiengang_kz = ' . $db->escape($studiengang['stg_kz']); if (isset($studiengang['semester'])) $conditions[] = 'filter_lv.semester = ' . $db->escape($studiengang['semester']); diff --git a/application/libraries/treemenu/TempusLib.php b/application/libraries/treemenu/TempusLib.php new file mode 100644 index 000000000..75a8b2b1b --- /dev/null +++ b/application/libraries/treemenu/TempusLib.php @@ -0,0 +1,148 @@ +. + */ + +if (! defined('BASEPATH')) exit('No direct script access allowed'); + +/** + * Tempus Menu library + */ +class TempusLib +{ + protected $_ci = null; + + public $config = []; + + public function __construct() + { + // Get code igniter instance + $this->_ci =& get_instance(); + + // Load Tree-config + $this->_ci->load->config('treemenu/custom/tempus'); + $this->config = $this->_ci->config->item('root'); + + // Load Libraries + $this->_ci->load->library('treemenu/base/StgLib'); + + // Load Model + $this->_ci->load->model('organisation/Studiengang_model', 'StudiengangModel'); + } + + public function stg($path_template) + { + $permittedStgs = $this->getPermittedStudiengangKzs(); + + if (!$permittedStgs) + return []; + + return $this->_ci->stglib->studiengang($path_template, $permittedStgs); + } + + public function semester($path_template, $has_children, $stg) + { + + $stg = $this->getStgFromUrl($stg); + + if ($stg === null) + return []; + + if (!$has_children) + $this->_ci->StudiengangModel->db->select('TRUE AS leaf', false); + + return $this->_ci->stglib->semester($path_template, $stg->studiengang_kz); + } + + public function verband($path_template, $stg, $semester) + { + $stg = $this->getStgFromUrl($stg); + + if ($stg === null) + return []; + + $this->_ci->StudiengangModel->addSelect("CASE WHEN MAX(gruppe)='' OR MAX(gruppe)=' ' THEN TRUE ELSE FALSE END AS leaf"); + $this->_ci->StudiengangModel->addGroupBy('v.studiengang_kz, v.semester'); + + + return $this->_ci->stglib->verband($path_template, $stg->studiengang_kz, $semester); + } + + public function group($path_template, $stg, $semester, $verband) + { + $stg = $this->getStgFromUrl($stg); + + if ($stg === null) + return []; + + $this->_ci->StudiengangModel->db->select('TRUE AS leaf', false); + + if ($verband === null) { + $this->_ci->load->model('organisation/Gruppe_model', 'GruppeModel'); + $this->_ci->GruppeModel->addSelect('semester'); + + return $this->_ci->stglib->group($path_template, $stg->studiengang_kz, $semester); + } + + + return $this->_ci->stglib->verbandsgroup($path_template, $stg->studiengang_kz, $semester, $verband); + } + + public function orgform($path_template, $stg) + { + $stg = $this->getStgFromUrl($stg); + + if ($stg === null) + return []; + + if (!$stg->mischform) + return []; + + $this->_ci->StudiengangModel->db->select('TRUE AS leaf', false); + + $this->_ci->load->model('organisation/Studienordnung_model', 'StudienordnungModel'); + $this->_ci->StudienordnungModel->addSelect("p.orgform_kurzbz"); + + return $this->_ci->stglib->orgform($path_template, $stg->studiengang_kz); + } + + protected function getPermittedStudiengangKzs() + { + $permittedStgs = $this->_ci->permissionlib->getSTG_isEntitledFor('admin') ?: []; + $permittedStgs = array_merge($permittedStgs, $this->_ci->permissionlib->getSTG_isEntitledFor('assistenz') ?: []); + $permittedStgs = array_merge($permittedStgs, $this->_ci->permissionlib->getSTG_isEntitledFor('lehre/lvplan') ?: []); + return $permittedStgs; + } + + protected function getStgFromUrl($stg) + { + $permittedStgs = $this->getPermittedStudiengangKzs(); + + if (!$permittedStgs) + return null; + + $this->_ci->StudiengangModel->db->where_in('studiengang_kz', $permittedStgs); + $stg = $this->_ci->StudiengangModel->loadWhere([ + 'LOWER(CONCAT(typ, kurzbz)) =' => $stg + ]); + + if (!hasData($stg)) + return null; + + return current(getData($stg)); + } +} diff --git a/public/js/components/Tempus/Coursepicker.js b/public/js/components/Tempus/Coursepicker.js index 95b8bbb5c..abf112356 100644 --- a/public/js/components/Tempus/Coursepicker.js +++ b/public/js/components/Tempus/Coursepicker.js @@ -103,8 +103,8 @@ export default { return; } - let payload = stg.map(({ studiengang_kz, semester, orgform_kurzbz }) => ({ - studiengang_kz, + let payload = stg.map(({ stg_kz, semester, orgform_kurzbz }) => ({ + stg_kz, semester, orgform_kurzbz })); diff --git a/public/js/components/Tempus/Filters/VerbandSelection.js b/public/js/components/Tempus/Filters/VerbandSelection.js index ec51d563a..122897047 100644 --- a/public/js/components/Tempus/Filters/VerbandSelection.js +++ b/public/js/components/Tempus/Filters/VerbandSelection.js @@ -20,13 +20,14 @@ export default { } else { - this.$emit('update:studiengaenge', this.studiengaenge.filter(studiengang => !(studiengang.studiengang_kz === stg_kz && studiengang.semester === semester && studiengang.orgform_kurzbz === orgform_kurzbz))); + this.$emit('update:studiengaenge', this.studiengaenge.filter(studiengang => !(studiengang.stg_kz === stg_kz && studiengang.semester === semester && (!orgform_kurzbz || studiengang.orgform_kurzbz === orgform_kurzbz)))); } }, stgLabel(stg) { - let found = this.studiengaengeAll.find(s => s.studiengang_kz == stg.studiengang_kz); - let name = found?.name ?? stg.studiengang_kz; + let found = this.studiengaengeAll.find(s => s.studiengang_kz == stg.stg_kz); + let name = found?.name ?? stg.stg_kz; + if (stg.orgform_kurzbz) return `${name} - ${stg.orgform_kurzbz}`; @@ -56,7 +57,7 @@ export default { - +