mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-21 17:02:19 +00:00
307 lines
9.6 KiB
PHP
307 lines
9.6 KiB
PHP
<?php
|
|
class Lehreinheit_model extends DB_Model
|
|
{
|
|
|
|
/**
|
|
* Constructor
|
|
*/
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
$this->dbTable = 'lehre.tbl_lehreinheit';
|
|
$this->pk = 'lehreinheit_id';
|
|
|
|
$this->load->model('education/lehrveranstaltung_model', 'LehrveranstaltungModel');
|
|
$this->load->model('education/lehreinheitgruppe_model', 'LehreinheitgruppeModel');
|
|
$this->load->model('education/lehreinheitmitarbeiter_model', 'LehreinheitmitarbeiterModel');
|
|
$this->load->model('organisation/studiengang_model', 'StudiengangModel');
|
|
}
|
|
|
|
/**
|
|
* Gets Lehreinheiten for a Lehrveranstaltung in a Studiensemester.
|
|
* Includes Lehrfach, Lehreinheitgruppen and Lektoren.
|
|
* @param $lehrveranstaltung_id
|
|
* @param $studiensemester
|
|
* @return array with Lehreinheiten and their Lehreinheitgruppen
|
|
*/
|
|
public function getLesForLv($lehrveranstaltung_id, $studiensemester)
|
|
{
|
|
$lehreinheiten = array();
|
|
|
|
$this->addOrder('lehreinheit_id');
|
|
$les = $this->loadWhere(
|
|
array('lehrveranstaltung_id' => $lehrveranstaltung_id,
|
|
'studiensemester_kurzbz' => $studiensemester)
|
|
);
|
|
|
|
if (hasData($les))
|
|
{
|
|
$this->LehrveranstaltungModel->addSelect('kurzbz, bezeichnung');
|
|
foreach ($les->retval as $le)
|
|
{
|
|
$lehrfach = $this->LehrveranstaltungModel->load($le->lehrfach_id);
|
|
if (hasData($lehrfach))
|
|
{
|
|
$letoadd = $le;
|
|
$letoadd->lehrfach_bezeichnung = $lehrfach->retval[0]->bezeichnung;
|
|
$letoadd->lehrfach_kurzbz = $lehrfach->retval[0]->kurzbz;
|
|
|
|
// add lehreinheitgruppen, each lehreinheitid
|
|
// having (maybe multiple) lehreinheitgruppen
|
|
$letoadd->lehreinheitgruppen = array();
|
|
|
|
$this->LehreinheitgruppeModel->addSelect('lehre.tbl_lehreinheitgruppe.*, tbl_gruppe.bezeichnung, tbl_gruppe.direktinskription');
|
|
$this->LehreinheitgruppeModel->addJoin('public.tbl_gruppe', 'gruppe_kurzbz', 'LEFT');
|
|
|
|
$lehreinheitgruppen = $this->LehreinheitgruppeModel->loadWhere(array('lehreinheit_id' => $le->lehreinheit_id));
|
|
|
|
if (hasData($lehreinheitgruppen))
|
|
{
|
|
foreach ($lehreinheitgruppen->retval as $lehreinheitgruppe)
|
|
{
|
|
$studiengangresponse = $this->StudiengangModel->load($lehreinheitgruppe->studiengang_kz);
|
|
if (hasData($studiengangresponse))
|
|
{
|
|
$studiengang = $studiengangresponse->retval[0];
|
|
$stgkuerzel = mb_strtoupper($studiengang->typ.$studiengang->kurzbz);
|
|
|
|
$letoadd->lehreinheitgruppen[] = array(
|
|
'semester' => $lehreinheitgruppe->semester,
|
|
'verband' => $lehreinheitgruppe->verband,
|
|
'gruppe' => $lehreinheitgruppe->gruppe,
|
|
'gruppe_kurzbz' => $lehreinheitgruppe->gruppe_kurzbz,
|
|
'direktinskription' => $lehreinheitgruppe->direktinskription,
|
|
'studiengang_kz' => $lehreinheitgruppe->studiengang_kz,
|
|
'studiengang_kuerzel' => $stgkuerzel
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
// add lektoren
|
|
$letoadd->lektoren = array();
|
|
$lehreinheitmitarbeiter = $this->LehreinheitmitarbeiterModel->loadWhere(array('lehreinheit_id' => $le->lehreinheit_id));
|
|
if (hasData($lehreinheitmitarbeiter))
|
|
{
|
|
foreach ($lehreinheitmitarbeiter->retval as $lehreinheitma)
|
|
{
|
|
$letoadd->lektoren[] = $lehreinheitma->mitarbeiter_uid;
|
|
}
|
|
}
|
|
|
|
$lehreinheiten[] = $letoadd;
|
|
}
|
|
}
|
|
}
|
|
|
|
return $lehreinheiten;
|
|
}
|
|
|
|
/**
|
|
* Gets students of a Lehreinheit
|
|
* @param int $lehreinheit_id
|
|
* @return array
|
|
*/
|
|
public function getStudenten($lehreinheit_id)
|
|
{
|
|
$query = 'SELECT uid, vorname, nachname, prestudent_id '
|
|
. 'FROM campus.vw_student_lehrveranstaltung '
|
|
. 'JOIN campus.vw_student '
|
|
. 'USING (uid) '
|
|
. 'WHERE lehreinheit_id = ?'
|
|
. ' ORDER BY nachname';
|
|
|
|
return $this->execQuery($query, array($lehreinheit_id));
|
|
}
|
|
|
|
/**
|
|
* Gets emails of all Studierende in a lehrveranstaltung
|
|
* @param int $lehreinheit_id
|
|
* @return array
|
|
*/
|
|
public function getStudentenMail($lehreinheit_id)
|
|
{
|
|
|
|
// logic used from cis_menu_lv.inc.php line 335
|
|
return $this->execReadOnlyQuery("
|
|
SELECT
|
|
gruppe_kurzbz,
|
|
CASE
|
|
WHEN nomail = TRUE THEN 'nomail'
|
|
WHEN gruppe_kurzbz !='' THEN LOWER(gruppe_kurzbz || '@' || ?)
|
|
ELSE LOWER(stg_typ || stg_kurzbz || semester || TRIM(verband) || TRIM(gruppe) || '@' || ?)
|
|
END AS mail
|
|
|
|
FROM
|
|
(
|
|
SELECT
|
|
distinct vw_lehreinheit.studiensemester_kurzbz, vw_lehreinheit.stg_kurzbz, vw_lehreinheit.stg_typ, vw_lehreinheit.semester,
|
|
COALESCE(vw_lehreinheit.verband,'') as verband, COALESCE(vw_lehreinheit.gruppe,'') as gruppe, vw_lehreinheit.gruppe_kurzbz, tbl_gruppe.mailgrp,
|
|
CASE
|
|
WHEN mailgrp = TRUE OR mailgrp IS NULL THEN FALSE
|
|
ELSE TRUE
|
|
END as nomail
|
|
FROM campus.vw_lehreinheit
|
|
LEFT JOIN public.tbl_gruppe USING(gruppe_kurzbz)
|
|
WHERE
|
|
vw_lehreinheit.lehrveranstaltung_id=
|
|
(select distinct lehrveranstaltung_id from campus.vw_lehreinheit where lehreinheit_id=?)
|
|
AND
|
|
vw_lehreinheit.studiensemester_kurzbz =
|
|
(select distinct studiensemester_kurzbz from campus.vw_lehreinheit where lehreinheit_id=?)
|
|
AND (vw_lehreinheit.gruppe_kurzbz IS NULL OR
|
|
(vw_lehreinheit.gruppe_kurzbz IS NOT NULL AND (SELECT COUNT(*) FROM public.tbl_benutzergruppe where gruppe_kurzbz = vw_lehreinheit.gruppe_kurzbz AND studiensemester_kurzbz = vw_lehreinheit.studiensemester_kurzbz) > 0))
|
|
|
|
|
|
) AS subquery
|
|
",[DOMAIN,DOMAIN,$lehreinheit_id,$lehreinheit_id ]);
|
|
}
|
|
|
|
public function getLehreinheitenForStudentAndStudienSemester($lehrveranstaltung_id, $student_uid, $studiensemester_kurzbz)
|
|
{
|
|
$query = <<<EOSQL
|
|
SELECT
|
|
le.*
|
|
FROM
|
|
lehre.tbl_lehreinheit le
|
|
JOIN
|
|
campus.vw_student_lehrveranstaltung vslv USING(lehreinheit_id)
|
|
WHERE
|
|
vslv.lehrveranstaltung_id = {$this->escape($lehrveranstaltung_id)} AND
|
|
vslv.uid = {$this->escape($student_uid)} AND
|
|
vslv.studiensemester_kurzbz = {$this->escape($studiensemester_kurzbz)}
|
|
EOSQL;
|
|
|
|
$res = $this->execReadOnlyQuery($query);
|
|
return $res;
|
|
}
|
|
|
|
public function getLehrfachIdMitarbeiter($angezeigtes_stsem,$user,$lvid)
|
|
{
|
|
$query = "
|
|
SELECT
|
|
distinct lehrfach_id
|
|
FROM
|
|
lehre.tbl_lehreinheit
|
|
JOIN lehre.tbl_lehreinheitmitarbeiter USING(lehreinheit_id)
|
|
WHERE
|
|
studiensemester_kurzbz=" . $this->escape($angezeigtes_stsem) . "
|
|
AND mitarbeiter_uid=" . $this->escape($user)."
|
|
AND lehrveranstaltung_id=" . $this->escape(intval($lvid));
|
|
|
|
$res = $this->execReadOnlyQuery($query);
|
|
return $res;
|
|
}
|
|
|
|
public function getLehrfachIdStudierender($angezeigtes_stsem,$user,$lvid)
|
|
{
|
|
$query = "
|
|
SELECT
|
|
distinct lehrfach_id
|
|
FROM
|
|
campus.vw_student_lehrveranstaltung
|
|
WHERE
|
|
lehrveranstaltung_id=" . $this->escape(intval($lvid))."
|
|
AND studiensemester_kurzbz=" . $this->escape($angezeigtes_stsem)."
|
|
AND uid=" . $this->escape($user);
|
|
|
|
$res = $this->execReadOnlyQuery($query);
|
|
return $res;
|
|
}
|
|
|
|
public function getLehreinheitInfo($lvid, $angezeigtes_stsem, $lehrfach_id)
|
|
{
|
|
$query = "
|
|
SELECT
|
|
*
|
|
FROM (
|
|
SELECT
|
|
distinct on(uid) vorname, nachname, tbl_benutzer.uid as uid,
|
|
CASE
|
|
WHEN lehrfunktion_kurzbz='LV-Leitung' THEN true
|
|
ELSE false
|
|
END as lvleiter
|
|
FROM
|
|
lehre.tbl_lehreinheit, lehre.tbl_lehreinheitmitarbeiter,
|
|
public.tbl_benutzer, public.tbl_person
|
|
WHERE
|
|
tbl_lehreinheit.lehreinheit_id = tbl_lehreinheitmitarbeiter.lehreinheit_id
|
|
AND tbl_lehreinheitmitarbeiter.mitarbeiter_uid = tbl_benutzer.uid
|
|
AND tbl_person.person_id = tbl_benutzer.person_id
|
|
AND lehrveranstaltung_id = " . $this->escape(intval($lvid)) . "
|
|
AND tbl_lehreinheitmitarbeiter.mitarbeiter_uid NOT like '_Dummy%'
|
|
AND tbl_benutzer.aktiv = true
|
|
AND tbl_person.aktiv = true
|
|
AND studiensemester_kurzbz = " . $this->escape($angezeigtes_stsem);
|
|
|
|
if($lehrfach_id != '')
|
|
{
|
|
$query .= " AND tbl_lehreinheit.lehrfach_id = " . $this->escape(intval($lehrfach_id));
|
|
}
|
|
|
|
$query .= " ORDER BY uid, lvleiter desc) as a ORDER BY lvleiter desc, nachname, vorname";
|
|
|
|
$res = $this->execReadOnlyQuery($query);
|
|
return $res;
|
|
}
|
|
|
|
/**
|
|
* Gets Lehreinheiten for Lehrveranstaltungen in a Studiensemester.
|
|
* Without using tbl_lehrfach: bezeichnung and kurzbz ALWAYS from lehrveranstaltung
|
|
* @param $lehrveranstaltung_id
|
|
* @param $studiensemester
|
|
* @return array with Lehreinheiten and their Lehreinheitgruppen
|
|
*/
|
|
public function getLesFromLvIds($lehrveranstaltung_id, $studiensemester_kurzbz = null)
|
|
{
|
|
$params = array($lehrveranstaltung_id);
|
|
|
|
$query = "
|
|
SELECT
|
|
lv.lehrveranstaltung_id,
|
|
le.lehreinheit_id,
|
|
le.lehrform_kurzbz,
|
|
lv.kurzbz,
|
|
lv.bezeichnung,
|
|
lv.semester,
|
|
(
|
|
SELECT
|
|
STRING_AGG(CONCAT(leg.semester, leg.verband, leg.gruppe), ' ')
|
|
FROM lehre.tbl_lehreinheitgruppe leg
|
|
WHERE leg.lehreinheit_id = le.lehreinheit_id
|
|
) AS gruppe,
|
|
STRING_AGG(tma.kurzbz, ' ') as kuerzel
|
|
FROM
|
|
lehre.tbl_lehreinheit le
|
|
JOIN
|
|
lehre.tbl_lehrveranstaltung lv ON lv.lehrveranstaltung_id = le.lehrveranstaltung_id
|
|
JOIN
|
|
lehre.tbl_lehreinheitmitarbeiter ma USING (lehreinheit_id)
|
|
JOIN
|
|
public.tbl_mitarbeiter tma USING (mitarbeiter_uid)
|
|
WHERE
|
|
lv.lehrveranstaltung_id = ?
|
|
";
|
|
|
|
if (isset($studiensemester_kurzbz))
|
|
{
|
|
$query .= " AND le.studiensemester_kurzbz = ?";
|
|
$params[] = $studiensemester_kurzbz;
|
|
}
|
|
|
|
$query .="
|
|
GROUP BY
|
|
lv.lehrveranstaltung_id,
|
|
le.lehreinheit_id,
|
|
le.lehrform_kurzbz,
|
|
lv.kurzbz,
|
|
lv.bezeichnung,
|
|
lv.semester
|
|
ORDER BY
|
|
le.lehreinheit_id;
|
|
";
|
|
|
|
return $this->execQuery($query, $params);
|
|
}
|
|
}
|