mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-01 12:19:28 +00:00
63eda8b934
gruppen sortierung angepasst fehlende les anzeigen
278 lines
9.2 KiB
PHP
278 lines
9.2 KiB
PHP
<?php
|
|
/**
|
|
* Copyright (C) 2025 fhcomplete.org
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
if (!defined('BASEPATH'))
|
|
exit('No direct script access allowed');
|
|
|
|
class Lehrveranstaltung extends FHCAPI_Controller
|
|
{
|
|
private $_ci;
|
|
private $_uid;
|
|
|
|
public function __construct()
|
|
{
|
|
parent::__construct([
|
|
'getByEmp' => ['admin:r', 'assistenz:r'],
|
|
'getByStg' => ['admin:r', 'assistenz:r'],
|
|
'loadByLV' => ['admin:r', 'assistenz:r'],
|
|
]);
|
|
|
|
$this->_ci = &get_instance();
|
|
$this->_setAuthUID();
|
|
|
|
$this->_ci->load->model('education/Lehreinheit_model', 'LehreinheitModel');
|
|
$this->_ci->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
|
|
$this->_ci->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
|
|
|
$this->_ci->load->library('VariableLib', ['uid' => $this->_uid]);
|
|
|
|
$this->loadPhrases(
|
|
array(
|
|
'ui'
|
|
)
|
|
);
|
|
}
|
|
|
|
public function getByEmp($studiensemester_kurzbz = null, $mitarbeiter_uid = null, $stg_kz = null)
|
|
{
|
|
|
|
if (is_null($mitarbeiter_uid))
|
|
$this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
|
|
|
$studiensemester_kurzbz = $this->getStudiensemesterKurzbz($studiensemester_kurzbz);
|
|
|
|
$lehrveranstaltungen = $this->_ci->LehreinheitModel->getLvsByEmployee($mitarbeiter_uid, $studiensemester_kurzbz, $stg_kz);
|
|
$lehrveranstaltungen_data = $this->getDataOrTerminateWithError($lehrveranstaltungen);
|
|
|
|
$tree = [];
|
|
|
|
foreach ($lehrveranstaltungen_data as $lehrveranstaltung)
|
|
{
|
|
$lehreinheiten = $this->_ci->LehreinheitModel->getByLvidStudiensemester($lehrveranstaltung->lehrveranstaltung_id, $studiensemester_kurzbz, $mitarbeiter_uid);
|
|
$lehreinheiten_data = $this->getDataOrTerminateWithError($lehreinheiten);
|
|
|
|
if (!isset($lehrveranstaltung->_children))
|
|
{
|
|
$lehrveranstaltung->_children = $lehreinheiten_data;
|
|
}
|
|
$tree[] = $lehrveranstaltung;
|
|
}
|
|
|
|
$this->terminateWithSuccess($tree);
|
|
}
|
|
public function getByStg($studiensemester_kurzbz = null, $studiengang_kz = null, $semester = null)
|
|
{
|
|
if (is_null($studiengang_kz) || !preg_match("/^-?[1-9][0-9]*$/", (string)$studiengang_kz))
|
|
$this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
|
|
|
$verband = null;
|
|
if (!is_null($semester) && !is_numeric($semester))
|
|
{
|
|
$verband = $semester;
|
|
$semester = null;
|
|
}
|
|
|
|
$this->_ci->load->model('organisation/Studienplan_model', 'StudienplanModel');
|
|
|
|
$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();
|
|
|
|
$tree = [];
|
|
foreach ($lehrveranstaltungen_data as $row)
|
|
{
|
|
$rowData = $row;
|
|
|
|
$lehreinheiten_data = $this->_ci->LehreinheitModel->getByLvidStudiensemester($row->lehrveranstaltung_id, $studiensemester_kurzbz);
|
|
|
|
if (hasData($lehreinheiten_data))
|
|
{
|
|
$lehreinheiten = getData($lehreinheiten_data);
|
|
|
|
if (!isset($row->_children))
|
|
{
|
|
$row->_children = $lehreinheiten;
|
|
}
|
|
else
|
|
{
|
|
if (!is_array($row->_children))
|
|
{
|
|
$row->_children = [$row->_children];
|
|
}
|
|
$row->_children = array_merge($row->_children, $lehreinheiten);
|
|
}
|
|
}
|
|
|
|
if (!isEmptyString($row->studienplan_lehrveranstaltung_id_parent))
|
|
{
|
|
$child = $this->_ci->StudienplanModel->loadStudienplanLehrveranstaltung($row->studienplan_lehrveranstaltung_id_parent);
|
|
|
|
if (hasData($child))
|
|
{
|
|
$child = getData($child)[0];
|
|
$searchId = $child->lehrveranstaltung_id;
|
|
|
|
foreach ($lehrveranstaltungen_data as &$searchParent)
|
|
{
|
|
if ($searchParent->lehrveranstaltung_id === $searchId)
|
|
{
|
|
if (!isset($searchParent->_children))
|
|
{
|
|
$searchParent->_children = [];
|
|
}
|
|
|
|
if (is_array($searchParent->_children))
|
|
{
|
|
$searchParent->_children[] = $row;
|
|
}
|
|
else
|
|
{
|
|
$searchParent->_children = [$searchParent->_children, $row];
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$tree[] = $rowData;
|
|
}
|
|
}
|
|
|
|
$counter = 0;
|
|
$this->assignUniqueIndex($tree, $counter);
|
|
$this->terminateWithSuccess($tree);
|
|
}
|
|
|
|
|
|
public function loadByLV($lehrveranstaltung_id = null)
|
|
{
|
|
if (is_null($lehrveranstaltung_id) || !ctype_digit((string)$lehrveranstaltung_id))
|
|
$this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
|
|
|
$this->_ci->LehrveranstaltungModel->addSelect('lehrveranstaltung_id, lehrform_kurzbz, lehre, bezeichnung as lvbezeichnung, sprache');
|
|
$lehrveranstaltung_result = $this->_ci->LehrveranstaltungModel->loadWhere(array('lehrveranstaltung_id' => $lehrveranstaltung_id));
|
|
$lehrveranstaltung_result = $this->getDataOrTerminateWithError($lehrveranstaltung_result);
|
|
$lehrveranstaltung = $lehrveranstaltung_result[0];
|
|
|
|
$this->_ci->LehreinheitModel->addSelect('lehrveranstaltung_id_kompatibel');
|
|
$this->_ci->LehreinheitModel->addJoin('lehre.tbl_lehrveranstaltung_kompatibel', 'lehrveranstaltung_id');
|
|
$lehrfaecher = $this->_ci->LehreinheitModel->loadWhere(array('lehrveranstaltung_id' => $lehrveranstaltung->lehrveranstaltung_id));
|
|
|
|
$lehrfaecher_array = [];
|
|
if (hasData($lehrfaecher))
|
|
$lehrfaecher_array = array_merge($lehrfaecher_array, array_column(getData($lehrfaecher), 'lehrveranstaltung_id_kompatibel'));
|
|
|
|
$lehrfaecher_array[] = $lehrveranstaltung->lehrveranstaltung_id;
|
|
|
|
$this->_ci->LehrveranstaltungModel->addDistinct('lehrfach_id');
|
|
$this->_ci->LehrveranstaltungModel->addSelect("tbl_lehrveranstaltung.lehrveranstaltung_id, CONCAT(tbl_lehrveranstaltung.bezeichnung || '(' || tbl_lehrveranstaltung.oe_kurzbz || ')') as lehrfach");
|
|
$this->_ci->LehrveranstaltungModel->db->where_in('tbl_lehrveranstaltung.lehrveranstaltung_id', $lehrfaecher_array);
|
|
$lehrfaecher_result = $this->_ci->LehrveranstaltungModel->load();
|
|
|
|
$lehrfaecher_array = hasData($lehrfaecher_result) ? getData($lehrfaecher_result) : array();
|
|
|
|
$lehrveranstaltung->lehrfaecher = $lehrfaecher_array;
|
|
$this->terminateWithSuccess($lehrveranstaltung);
|
|
}
|
|
|
|
/*
|
|
* (david) ggf. im naechsten release
|
|
* public function loadByOrganization($oe_kurzbz)
|
|
{
|
|
$studiensemester_kurzbz = $this->variablelib->getVar('semester_aktuell');
|
|
|
|
$lehrveranstaltungen = $this->LehrveranstaltungModel->getLvsByOrganization($oe_kurzbz);
|
|
$lehrveranstaltungen_data = $this->getDataOrTerminateWithError($lehrveranstaltungen);
|
|
$tree = [];
|
|
|
|
foreach ($lehrveranstaltungen_data as $lehrveranstaltung)
|
|
{
|
|
$lehreinheiten = $this->LehreinheitModel->getByLvidStudiensemester($lehrveranstaltung->lehrveranstaltung_id, $studiensemester_kurzbz);
|
|
$lehreinheiten_data = $this->getDataOrTerminateWithError($lehreinheiten);
|
|
|
|
if (!isset($lehrveranstaltung->_children))
|
|
{
|
|
|
|
$lehrveranstaltung->_children = $lehreinheiten_data;
|
|
}
|
|
$tree[] = $lehrveranstaltung;
|
|
}
|
|
$this->terminateWithSuccess($tree);
|
|
}*/
|
|
|
|
/*public function loadByFachbereich($fachbereich, $mitarbeiter_uid = null)
|
|
{
|
|
$studiensemester_kurzbz = $this->variablelib->getVar('semester_aktuell');
|
|
|
|
$this->LehreinheitModel->getLvsByFachbereich($fachbereich, $studiensemester_kurzbz, $mitarbeiter_uid);
|
|
}*/
|
|
private function _setAuthUID()
|
|
{
|
|
$this->_uid = getAuthUID();
|
|
|
|
if (!$this->_uid)
|
|
show_error('User authentification failed');
|
|
}
|
|
|
|
private function assignUniqueIndex(&$nodes, &$counter)
|
|
{
|
|
foreach ($nodes as &$node)
|
|
{
|
|
$node->uniqueindex = $counter++;
|
|
if (!empty($node->_children) && is_array($node->_children))
|
|
{
|
|
$this->assignUniqueIndex($node->_children, $counter);
|
|
}
|
|
}
|
|
}
|
|
|
|
private function getStudiensemesterKurzbz($studiensemester_kurzbz = null)
|
|
{
|
|
if (!is_null($studiensemester_kurzbz))
|
|
{
|
|
$studiensemester_result = $this->_ci->StudiensemesterModel->load($studiensemester_kurzbz);
|
|
|
|
if (isError($studiensemester_result) || !hasData($studiensemester_result))
|
|
$this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
|
|
|
return getData($studiensemester_result)[0]->studiensemester_kurzbz;
|
|
}
|
|
|
|
$this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
|
}
|
|
}
|