mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-21 17:02:19 +00:00
Merge branch 'master' into feature-53938/StV_Tab_Noten_fertigstellen
This commit is contained in:
@@ -299,6 +299,91 @@ class Vertrag_model extends DB_Model
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prueft ob ein Mitarbeiter einen erteilten Vertrag zu einer Lehrveranstaltung besitzt.
|
||||
* @param $lehrveranstaltung_id ID der Lehrveranstaltung
|
||||
* @param $studiensemester_kurzbz Studiensemester das geprueft wird
|
||||
* @param $mitarbeiter_uid UID des Mitarbeiters
|
||||
*/
|
||||
public function isVertragErteiltLV($lehrveranstaltung_id, $studiensemester_kurzbz, $mitarbeiter_uid)
|
||||
{
|
||||
if (defined('CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON')
|
||||
&& CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON != '')
|
||||
{
|
||||
// Liegt das Studiensemester vor dem Pruefdatum, wird die LV immer als Erteilt angezeigt
|
||||
$stsemquery = "
|
||||
SELECT
|
||||
tbl_studiensemester.start
|
||||
FROM
|
||||
public.tbl_studiensemester
|
||||
WHERE
|
||||
studiensemester_kurzbz = " . $this->escape($studiensemester_kurzbz)."
|
||||
AND tbl_studiensemester.start < (
|
||||
SELECT
|
||||
start
|
||||
FROM
|
||||
public.tbl_studiensemester stsem
|
||||
WHERE
|
||||
stsem.studiensemester_kurzbz = " . $this->escape(CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON)."
|
||||
)";
|
||||
|
||||
if ($stsemresult = $this->execReadOnlyQuery($stsemquery))
|
||||
{
|
||||
$stsemdata = getData($stsemresult);
|
||||
if ($stsemdata && count($stsemdata) > 0)
|
||||
{
|
||||
// Wenn das Studiensemester vor dem Pruefdatum liegt, gilt der Vertrag immer als erteilt.
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
$query = "
|
||||
SELECT
|
||||
1
|
||||
FROM
|
||||
lehre.tbl_lehreinheitmitarbeiter
|
||||
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
|
||||
JOIN lehre.tbl_vertrag USING(vertrag_id)
|
||||
JOIN lehre.tbl_vertrag_vertragsstatus USING(vertrag_id)
|
||||
WHERE
|
||||
tbl_lehreinheitmitarbeiter.mitarbeiter_uid = " . $this->escape($mitarbeiter_uid) . "
|
||||
AND tbl_lehreinheit.studiensemester_kurzbz = " . $this->escape($studiensemester_kurzbz) . "
|
||||
AND tbl_lehreinheit.lehrveranstaltung_id = " . $this->escape(intval($lehrveranstaltung_id)) . "
|
||||
AND tbl_vertrag_vertragsstatus.vertragsstatus_kurzbz='erteilt'
|
||||
AND NOT EXISTS(
|
||||
SELECT
|
||||
1
|
||||
FROM
|
||||
lehre.tbl_vertrag_vertragsstatus vstatus
|
||||
WHERE
|
||||
vstatus.vertrag_id = tbl_vertrag.vertrag_id
|
||||
AND vstatus.vertragsstatus_kurzbz = 'storno'
|
||||
)
|
||||
";
|
||||
|
||||
if ($result = $this->execReadOnlyQuery($query))
|
||||
{
|
||||
$data = getData($result);
|
||||
if ($data && count($data) > 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
// Private methods
|
||||
|
||||
|
||||
@@ -20,6 +20,31 @@ class Gemeinde_model extends DB_Model
|
||||
return $this->loadWhere(array("plz" => $plz));
|
||||
}
|
||||
|
||||
public function getGemeindeByNation($nation, $zip)
|
||||
{
|
||||
$this->addSelect(["name"]);
|
||||
|
||||
if ($nation == "A")
|
||||
{
|
||||
if (isset($zip) && $zip > 999 && $zip < 32000)
|
||||
{
|
||||
$gemeinde_res = $this->GemeindeModel->loadWhere(['plz' => $zip]);
|
||||
if (isError($gemeinde_res))
|
||||
{
|
||||
show_error("error while trying to query bis.tbl_gemeinde");
|
||||
}
|
||||
$gemeinde_res = hasData($gemeinde_res) ? getData($gemeinde_res) : null;
|
||||
$gemeinde_res = array_map(function ($obj) {
|
||||
return $obj->name;
|
||||
}, $gemeinde_res);
|
||||
echo json_encode($gemeinde_res);
|
||||
|
||||
} else {
|
||||
echo json_encode(error("ortschaftskennziffer code was not valid"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function checkLocation($plz, $gemeinde, $ort)
|
||||
{
|
||||
$this->db->where('ortschaftsname', $ort);
|
||||
@@ -28,4 +53,4 @@ class Gemeinde_model extends DB_Model
|
||||
|
||||
return (boolean)$this->db->count_all_results($this->dbTable);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
class Ampel_Benutzer_Bestaetigt_model extends DB_Model
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'public.tbl_ampel_benutzer_bestaetigt';
|
||||
$this->pk = 'ampel_benutzer_bestaetigt_id';
|
||||
}
|
||||
|
||||
}
|
||||
@@ -16,37 +16,95 @@ class Ampel_model extends DB_Model
|
||||
* 1. not after the deadline date
|
||||
* 2. not before the vorlaufszeit
|
||||
* @param bool $email If true, then only ampeln are retrieved that are marked to be sent by mail.
|
||||
* @return array Returns array of objects.
|
||||
* @return stdClass Returns array of objects.
|
||||
*/
|
||||
public function active($email = false)
|
||||
public function active($email = false, $uid = null)
|
||||
{
|
||||
$parametersArray = null;
|
||||
$query = '
|
||||
SELECT *
|
||||
FROM public.tbl_ampel
|
||||
WHERE';
|
||||
|
||||
if ($email === true)
|
||||
{
|
||||
$parametersArray['email'] = $email;
|
||||
$query .= ' email = ? AND';
|
||||
$userLanguage = getUserLanguage();
|
||||
$selectStatement='*,beschreibung[('.$this->getLanguageIndex($this->escape($userLanguage)).')] as beschreibung_trans, buttontext[('.$this->getLanguageIndex($this->escape($userLanguage)).')] as buttontext_trans';
|
||||
|
||||
if($uid != null ){
|
||||
$selectStatement .= ',
|
||||
COALESCE((
|
||||
SELECT true
|
||||
FROM public.tbl_ampel_benutzer_bestaetigt a
|
||||
WHERE a.ampel_id = ' . $this->dbTable . '.ampel_id
|
||||
AND uid = ' . $this->escape($uid) . ' LIMIT 1), false) as bestaetigt';
|
||||
}
|
||||
|
||||
$query .= '(
|
||||
(NOW()<(deadline+(COALESCE(verfallszeit,0) || \' days\')::interval)::date)
|
||||
OR (verfallszeit IS NULL)
|
||||
AND (NOW()>(deadline-(COALESCE(vorlaufzeit,0) || \' days\')::interval)::date)
|
||||
OR (vorlaufzeit IS NULL AND NOW() < deadline))';
|
||||
$this->addSelect($selectStatement);
|
||||
$whereStatement='';
|
||||
|
||||
$query .= ' ORDER BY deadline DESC';
|
||||
if ($email === true) {
|
||||
$whereStatement .= ' email = '.$this->escape($email).' AND';
|
||||
}
|
||||
|
||||
$whereStatement .=
|
||||
'(
|
||||
(
|
||||
(NOW()<(deadline+(COALESCE(verfallszeit,0) || \' days\')::interval)::date)
|
||||
OR (verfallszeit IS NULL)
|
||||
)
|
||||
AND
|
||||
(
|
||||
(NOW()>(deadline-(COALESCE(vorlaufzeit,0) || \' days\')::interval)::date)
|
||||
OR (vorlaufzeit IS NULL AND NOW() < deadline)
|
||||
)
|
||||
)';
|
||||
|
||||
$this->addOrder('deadline', 'DESC');
|
||||
return $this->loadWhere($whereStatement);
|
||||
|
||||
}
|
||||
|
||||
public function openActive($uid, $email = false)
|
||||
{
|
||||
$userLanguage = getUserLanguage();
|
||||
$selectStatement = '*,beschreibung[(' . $this->getLanguageIndex($this->escape($userLanguage)) . ')] as beschreibung_trans, buttontext[(' . $this->getLanguageIndex($this->escape($userLanguage)) . ')] as buttontext_trans';
|
||||
|
||||
|
||||
$selectStatement .= ',
|
||||
COALESCE((
|
||||
SELECT true
|
||||
FROM public.tbl_ampel_benutzer_bestaetigt a
|
||||
WHERE a.ampel_id = ' . $this->dbTable . '.ampel_id
|
||||
AND uid = ' . $this->escape($uid) . ' LIMIT 1), false) as bestaetigt';
|
||||
|
||||
$this->addSelect($selectStatement);
|
||||
$whereStatement = '';
|
||||
|
||||
if ($email === true) {
|
||||
$whereStatement .= ' email = ' . $this->escape($email) . ' AND';
|
||||
}
|
||||
|
||||
$whereStatement .=
|
||||
'
|
||||
(COALESCE((
|
||||
SELECT true
|
||||
FROM public.tbl_ampel_benutzer_bestaetigt a
|
||||
WHERE a.ampel_id = ' . $this->dbTable . '.ampel_id
|
||||
AND uid = ' . $this->escape($uid) . ' LIMIT 1), false) = FALSE) AND
|
||||
(
|
||||
(
|
||||
(NOW()<(deadline+(COALESCE(verfallszeit,0) || \' days\')::interval)::date)
|
||||
OR (verfallszeit IS NULL)
|
||||
)
|
||||
AND
|
||||
(
|
||||
(NOW()>(deadline-(COALESCE(vorlaufzeit,0) || \' days\')::interval)::date)
|
||||
OR (vorlaufzeit IS NULL AND NOW() < deadline)
|
||||
)
|
||||
)';
|
||||
|
||||
$this->addOrder('deadline', 'DESC');
|
||||
return $this->loadWhere($whereStatement);
|
||||
|
||||
return $this->execQuery($query, $parametersArray);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all Ampel-receiver of a specific Ampel.
|
||||
* @param string $benutzer_select SQL Statement which defines the Ampel-receiver.
|
||||
* @return array Returns array of objects with property 'uid'.
|
||||
* @return stdClass Returns array of objects with property 'uid'.
|
||||
*/
|
||||
public function execBenutzerSelect($benutzer_select)
|
||||
{
|
||||
@@ -90,4 +148,101 @@ class Ampel_model extends DB_Model
|
||||
else
|
||||
return $result; //will contain the error-msg from execQuery
|
||||
}
|
||||
|
||||
/**
|
||||
* checks if a user is assigned to an ampel
|
||||
* @param string $uid userID
|
||||
* @param string $benutzer_select the select query which gets all the user that are assigned to an ampel
|
||||
* @return stdClass
|
||||
*/
|
||||
public function isZugeteilt($uid, $benutzer_select){
|
||||
$zugeteilt = $this->execReadOnlyQuery("
|
||||
SELECT
|
||||
CASE WHEN ? IN (".$benutzer_select.")
|
||||
THEN true
|
||||
ELSE false
|
||||
END as zugeteilt
|
||||
", [$uid]);
|
||||
|
||||
if(isError($zugeteilt)){
|
||||
return $zugeteilt;
|
||||
}
|
||||
|
||||
$zugeteilt = getData($zugeteilt);
|
||||
|
||||
return success(current($zugeteilt)->zugeteilt);
|
||||
}
|
||||
|
||||
// THIS FUNCTION IS NOT IN USE
|
||||
// fetches all ampeln that were assigned to the user after the working start_date
|
||||
function alleAmpeln($uid){
|
||||
$userLanguage = getUserLanguage();
|
||||
|
||||
$zugeteile_ampeln = [];
|
||||
|
||||
$datum = new datum();
|
||||
$now = $datum->mktime_fromdate(date('Y-m-d'));
|
||||
|
||||
// start date of user
|
||||
$benutzerStartDate = $this->execReadOnlyQuery("
|
||||
SELECT insertamum FROM public.tbl_benutzer WHERE uid = ?", [$uid]);
|
||||
$benutzerStartDate = $datum->mktime_fromdate(date(current(getData($benutzerStartDate))->insertamum));
|
||||
|
||||
$allAmpeln = $this->execReadOnlyQuery("
|
||||
SELECT *, beschreibung[(".$this->getLanguageIndex($this->escape($userLanguage)).")] as beschreibung_trans, buttontext[(".$this->getLanguageIndex($this->escape($userLanguage)).")] as buttontext_trans FROM
|
||||
public.tbl_ampel");
|
||||
|
||||
if(isError($allAmpeln)) return error(getError($allAmpeln));
|
||||
|
||||
$allAmpeln = getData($allAmpeln);
|
||||
foreach($allAmpeln as $ampel){
|
||||
|
||||
// check if the ampel is assigned to the user
|
||||
$zugeteilt = $this->execReadOnlyQuery("
|
||||
SELECT
|
||||
CASE WHEN ? IN (".$ampel->benutzer_select.")
|
||||
THEN true
|
||||
ELSE false
|
||||
END as zugeteilt
|
||||
", [$uid]);
|
||||
|
||||
if(isError($zugeteilt)) return error(getError($zugeteilt));
|
||||
|
||||
$zugeteilt = current(getData($zugeteilt))->zugeteilt;
|
||||
|
||||
|
||||
// abgelaufen check
|
||||
// $now > strtotime('+' . $ampel->verfallszeit . ' day', $ampel->deadline)
|
||||
|
||||
if(
|
||||
// aktuelles datum liegt vor der Vorlaufzeit der Ampel
|
||||
(isset($ampel->vorlaufzeit) && $now < strtotime('-' . $ampel->vorlaufzeit . ' day', $datum->mktime_fromdate($ampel->deadline)))
|
||||
||
|
||||
// ampel ist vor Arbeitsstart abgelaufen
|
||||
(isset($ampel->verfallszeit) && $benutzerStartDate > strtotime('+' . $ampel->verfallszeit . ' day', $datum->mktime_fromdate($ampel->deadline)))
|
||||
||
|
||||
// ampel ist vor Arbeitsstart abgelaufen (verfallszeit nicht vorhanden)
|
||||
($benutzerStartDate > strtotime('+' . $ampel->verfallszeit . ' day', $datum->mktime_fromdate($ampel->deadline)))
|
||||
){
|
||||
// continue iteration if ampel is expired before work start or shouldn't be visible yet
|
||||
continue;
|
||||
}
|
||||
|
||||
$ampel->zugeteilt = $zugeteilt;
|
||||
|
||||
if($zugeteilt) $zugeteile_ampeln[] = $ampel;
|
||||
|
||||
}
|
||||
|
||||
return success($zugeteile_ampeln);
|
||||
}
|
||||
|
||||
private function getLanguageIndex($userLanguage)
|
||||
{
|
||||
return "
|
||||
SELECT index
|
||||
FROM public.tbl_sprache
|
||||
WHERE sprache = " . $userLanguage;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -11,4 +11,316 @@ class Content_model extends DB_Model
|
||||
$this->dbTable = 'campus.tbl_content';
|
||||
$this->pk = 'content_id';
|
||||
}
|
||||
|
||||
/**
|
||||
* Laedt den Content in der angegebenen Sprache
|
||||
* Sollte der Content in dieser Sprache nicht vorhanden sein, wird der Content in der Default Sprache geladen
|
||||
*
|
||||
* @param integer $content_id
|
||||
* @param string $sprache optional
|
||||
* @param integer $version optional
|
||||
* @param boolean | null $sichtbar optional
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getContent($content_id, $sprache = DEFAULT_LANGUAGE, $version = null, $sichtbar = null, $load_default_language = false)
|
||||
{
|
||||
$this->load->model('content/Contentsprache_model', 'ContentspracheModel');
|
||||
$spracheExists = $this->ContentspracheModel->exists($content_id, $sprache, $version, $sichtbar);
|
||||
if (isError($spracheExists))
|
||||
return $spracheExists;
|
||||
|
||||
if(!getData($spracheExists))
|
||||
{
|
||||
if($load_default_language)
|
||||
$sprache = DEFAULT_LANGUAGE;
|
||||
else
|
||||
return error('Der Content existiert in dieser Sprache nicht ');
|
||||
}
|
||||
|
||||
$condition = ['content_id' => $content_id, 'sprache' => $sprache];
|
||||
|
||||
if ($sichtbar === true || $sichtbar === false)
|
||||
$condition['sichtbar'] = $sichtbar;
|
||||
if ($version)
|
||||
$condition['version'] = $version;
|
||||
|
||||
$this->addSelect([
|
||||
'*',
|
||||
'tbl_contentsprache.insertamum',
|
||||
'tbl_contentsprache.insertvon',
|
||||
'tbl_contentsprache.updateamum',
|
||||
'tbl_contentsprache.updatevon'
|
||||
]);
|
||||
$this->addJoin('campus.tbl_contentsprache', 'content_id');
|
||||
$this->addOrder('version', 'DESC');
|
||||
$this->addLimit(1);
|
||||
|
||||
$result = $this->loadWhere($condition);
|
||||
|
||||
if (isError($result))
|
||||
return $result;
|
||||
if (!getData($result))
|
||||
return error('Dieser Eintrag wurde nicht gefunden');
|
||||
|
||||
return success(current(getData($result)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Sucht die content_id fuer den CIS4_Root Menu content
|
||||
*
|
||||
* @return integer|null content_id of the Cis4_Root Menu
|
||||
*/
|
||||
public function getMenuContentID(){
|
||||
// early return if the CIS4_MENU_ENTRY constant is defined
|
||||
if(defined('CIS4_MENU_ENTRY'))
|
||||
{
|
||||
return CIS4_MENU_ENTRY;
|
||||
}
|
||||
|
||||
// load the CIS4 Menu content_id from the database using the column 'beschreibugn' of the campus.tbl_content table
|
||||
$CIS4_ROOT_CONTENT = $this->loadWhere(["beschreibung"=>"CIS4_ROOT"]);
|
||||
|
||||
if(isError($CIS4_ROOT_CONTENT))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
$CIS4_ROOT_CONTENT = getData($CIS4_ROOT_CONTENT);
|
||||
|
||||
if(count($CIS4_ROOT_CONTENT) > 0)
|
||||
{
|
||||
return current($CIS4_ROOT_CONTENT)->content_id ?? null;
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Laedt alle Content Eintraege unterhalb eines Contents
|
||||
* (Ohne Newseintraege)
|
||||
*
|
||||
* @param integer $root_content_id
|
||||
* @param string $uid
|
||||
* @param string $sprache optional
|
||||
*
|
||||
* @return stdClass on success an array with menu objects
|
||||
*/
|
||||
public function getMenu($root_content_id, $uid, $sprache = DEFAULT_LANGUAGE)
|
||||
{
|
||||
|
||||
/*,
|
||||
{
|
||||
"content_id": 1000007,
|
||||
"template_kurzbz": "redirect",
|
||||
"titel": "Anrechnung",
|
||||
"content": "<content><url><![CDATA[' . site_url('/lehre/anrechnung/RequestAnrechnung') . ']]></url><target><![CDATA[]]></target></content>",
|
||||
"menu_open": false,
|
||||
"aktiv": true,
|
||||
"childs": []
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
{
|
||||
"content_id": 1000003,
|
||||
"template_kurzbz": "redirect",
|
||||
"titel": "COVID-19",
|
||||
"content": "<content><url><![CDATA[' . site_url('/CisVue/Cms/content/10012') . ']]></url><target><![CDATA[]]></target></content>",
|
||||
"menu_open": false,
|
||||
"aktiv": true,
|
||||
"childs": []
|
||||
},
|
||||
*/
|
||||
|
||||
if ($root_content_id === null) {
|
||||
$res = json_decode('{
|
||||
"content_id": 1000000,
|
||||
"template_kurzbz": "contentmittitel",
|
||||
"titel": "CIS4",
|
||||
"content": "<content></content>",
|
||||
"menu_open": true,
|
||||
"aktiv": true,
|
||||
"childs": [
|
||||
{
|
||||
"content_id": 1000001,
|
||||
"template_kurzbz": "redirect",
|
||||
"titel": "News",
|
||||
"content": "<content><url><![CDATA[' . site_url('/CisVue/Cms/news') . ']]></url><target><![CDATA[]]></target></content>",
|
||||
"menu_open": false,
|
||||
"aktiv": true,
|
||||
"childs": []
|
||||
},
|
||||
{
|
||||
"content_id": 1000002,
|
||||
"template_kurzbz": "redirect",
|
||||
"titel": "Profil",
|
||||
"content": "<content><url><![CDATA[' . site_url('/Cis/Profil') . ']]></url><target><![CDATA[]]></target></content>",
|
||||
"menu_open": false,
|
||||
"aktiv": true,
|
||||
"childs": []
|
||||
},
|
||||
{
|
||||
"content_id": 1000004,
|
||||
"template_kurzbz": "redirect",
|
||||
"titel": "Meine LV",
|
||||
"content": "<content><url><![CDATA[' . site_url('/Cis/MyLv') . ']]></url><target><![CDATA[]]></target></content>",
|
||||
"menu_open": false,
|
||||
"aktiv": true,
|
||||
"childs": []
|
||||
},
|
||||
{
|
||||
"content_id": 1000005,
|
||||
"template_kurzbz": "redirect",
|
||||
"titel": "Stundenplan",
|
||||
"content": "<content><url><![CDATA[' . site_url('/Cis/Stundenplan') . ']]></url><target><![CDATA[]]></target></content>",
|
||||
"menu_open": false,
|
||||
"aktiv": true,
|
||||
"childs": []
|
||||
},
|
||||
{
|
||||
"content_id": 1000006,
|
||||
"template_kurzbz": "redirect",
|
||||
"titel": "Dokumente",
|
||||
"content": "<content><url><![CDATA[' . site_url('/Cis/Documents') . ']]></url><target><![CDATA[]]></target></content>",
|
||||
"menu_open": false,
|
||||
"aktiv": true,
|
||||
"childs": []
|
||||
},
|
||||
{
|
||||
"content_id": 1000007,
|
||||
"template_kurzbz": "redirect",
|
||||
"titel": "Studierendenstatus",
|
||||
"content": "<content><url><![CDATA[' . site_url('/lehre/Studierendenantrag') . ']]></url><target><![CDATA[]]></target></content>",
|
||||
"menu_open": false,
|
||||
"aktiv": true,
|
||||
"childs": []
|
||||
}
|
||||
|
||||
]
|
||||
}');
|
||||
return success($res);
|
||||
}
|
||||
$sql = "
|
||||
SELECT
|
||||
c.content_id,
|
||||
c.template_kurzbz,
|
||||
s.titel,
|
||||
s.content,
|
||||
c.menu_open,
|
||||
c.aktiv,
|
||||
k.child_content_id,
|
||||
k.sort FROM (
|
||||
SELECT
|
||||
c.content_id,
|
||||
s.contentsprache_id
|
||||
FROM
|
||||
campus.tbl_content c
|
||||
JOIN (
|
||||
SELECT
|
||||
s5.content_id,
|
||||
s5.contentsprache_id
|
||||
FROM (
|
||||
SELECT
|
||||
content_id,
|
||||
sprache,
|
||||
MAX(version) AS version
|
||||
FROM (
|
||||
SELECT
|
||||
c1.content_id,
|
||||
COALESCE(s1.sprache, ?) AS sprache
|
||||
FROM
|
||||
campus.tbl_content c1
|
||||
LEFT JOIN
|
||||
campus.tbl_contentsprache s1 ON c1.content_id=s1.content_id AND s1.sprache=?
|
||||
WHERE
|
||||
sichtbar=true
|
||||
) s2
|
||||
LEFT JOIN
|
||||
campus.tbl_contentsprache s3 USING(content_id, sprache)
|
||||
WHERE
|
||||
sichtbar=true
|
||||
GROUP BY
|
||||
content_id,
|
||||
sprache
|
||||
) s4
|
||||
LEFT JOIN
|
||||
campus.tbl_contentsprache s5 USING(content_id, sprache, version)
|
||||
WHERE
|
||||
version IS NOT NULL
|
||||
) t USING (content_id)
|
||||
JOIN
|
||||
campus.tbl_contentsprache s USING (contentsprache_id)
|
||||
WHERE
|
||||
c.template_kurzbz<>'news'
|
||||
AND
|
||||
c.content_id IN (
|
||||
WITH RECURSIVE childs(content_id, child_content_id) as
|
||||
(
|
||||
SELECT content_id, child_content_id FROM campus.tbl_contentchild
|
||||
WHERE content_id=?
|
||||
UNION ALL
|
||||
SELECT cc.child_content_id, null FROM campus.tbl_contentchild cc, childs
|
||||
WHERE cc.content_id=childs.content_id
|
||||
)
|
||||
SELECT content_id
|
||||
FROM childs
|
||||
GROUP BY content_id
|
||||
)
|
||||
GROUP BY c.content_id,
|
||||
s.contentsprache_id
|
||||
) m
|
||||
JOIN
|
||||
campus.tbl_content c USING(content_id)
|
||||
JOIN
|
||||
campus.tbl_contentsprache s USING(contentsprache_id)
|
||||
LEFT JOIN
|
||||
campus.tbl_contentchild k ON(m.content_id=k.content_id)
|
||||
WHERE EXISTS (
|
||||
SELECT 1
|
||||
FROM campus.tbl_contentgruppe
|
||||
JOIN public.vw_gruppen USING(gruppe_kurzbz)
|
||||
WHERE (
|
||||
tbl_contentgruppe.content_id=c.content_id
|
||||
OR NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM campus.tbl_contentgruppe
|
||||
WHERE content_id=c.content_id
|
||||
)
|
||||
)
|
||||
AND vw_gruppen.uid=?
|
||||
)
|
||||
ORDER BY content_id, sort";
|
||||
|
||||
$result = $this->execQuery($sql, [DEFAULT_LANGUAGE, $sprache, $root_content_id, $uid]);
|
||||
|
||||
if (isError($result))
|
||||
return $result;
|
||||
|
||||
$contents = getData($result) ?? [];
|
||||
$result = [];
|
||||
foreach ($contents as $content) {
|
||||
if (!isset($result[$content->content_id])) {
|
||||
$result[$content->content_id] = clone($content);
|
||||
unset($result[$content->content_id]->child_content_id);
|
||||
unset($result[$content->content_id]->sort);
|
||||
$result[$content->content_id]->childs = [];
|
||||
}
|
||||
if ($content->child_content_id !== null)
|
||||
$result[$content->content_id]->childs[] = $content->child_content_id;
|
||||
}
|
||||
foreach ($result as $content) {
|
||||
foreach ($content->childs as $k => $v) {
|
||||
if (isset($result[$v])) {
|
||||
$content->childs[$k] = $result[$v];
|
||||
} else {
|
||||
unset($content->childs[$k]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return success(isset($result[$root_content_id]) ? $result[$root_content_id] : null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,4 +11,50 @@ class Contentgruppe_model extends DB_Model
|
||||
$this->dbTable = 'campus.tbl_contentgruppe';
|
||||
$this->pk = array('gruppe_kurzbz', 'content_id');
|
||||
}
|
||||
|
||||
/**
|
||||
* Prueft ob der Zugriff auf den Content eingeschraenkt ist auf
|
||||
* eine bestimmte Benutzergruppe
|
||||
*
|
||||
* @param int $content_id
|
||||
*
|
||||
* @return stdClass success(true) wenn eingeschraenkt sonst success(false)
|
||||
*/
|
||||
public function islocked($content_id)
|
||||
{
|
||||
$islocked = $this->loadWhere(['content_id' => $content_id]);
|
||||
|
||||
if (isError($islocked))
|
||||
return $islocked;
|
||||
return success(!!getData($islocked));
|
||||
}
|
||||
|
||||
/**
|
||||
* Prueft ob ein User die Berechtigung fuer das Anzeigen des
|
||||
* Contents besitzt
|
||||
*
|
||||
* @param int $content_id ID des Contents
|
||||
* @param string $uid User der versucht auf den Content zuzugreifen
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function berechtigt($content_id, $uid)
|
||||
{
|
||||
$islocked = $this->islocked($content_id);
|
||||
if (isError($islocked))
|
||||
return $islocked;
|
||||
|
||||
$condition = ['uid' => $uid];
|
||||
if (getData($islocked)) {
|
||||
$condition['content_id'] = $content_id;
|
||||
}
|
||||
$this->addJoin('public.vw_gruppen', 'gruppe_kurzbz');
|
||||
|
||||
$result = $this->loadWhere($condition);
|
||||
|
||||
if (isError($result))
|
||||
return $result;
|
||||
return success(!!getData($result));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -11,4 +11,32 @@ class Contentsprache_model extends DB_Model
|
||||
$this->dbTable = 'campus.tbl_contentsprache';
|
||||
$this->pk = 'contentsprache_id';
|
||||
}
|
||||
|
||||
/**
|
||||
* Prueft ob der Content in der angegeben Sprache vorhanden ist
|
||||
*
|
||||
* @param int $content_id
|
||||
* @param string $sprache
|
||||
* @param int | null $version (optional)
|
||||
* @param boolean | null $sichtbar (optional)
|
||||
* @return stdClass
|
||||
*/
|
||||
public function exists($content_id, $sprache, $version=null, $sichtbar=null)
|
||||
{
|
||||
$condition = ['content_id' => $content_id, 'sprache' => $sprache];
|
||||
|
||||
if ($version)
|
||||
$condition['version'] = $version;
|
||||
|
||||
if ($sichtbar !== null)
|
||||
$condition['sichtbar'] = $sichtbar;
|
||||
|
||||
$result = $this->loadWhere($condition);
|
||||
|
||||
if (isError($result))
|
||||
return $result;
|
||||
|
||||
return success(!!getData($result));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -11,4 +11,124 @@ class News_model extends DB_Model
|
||||
$this->dbTable = 'campus.tbl_news';
|
||||
$this->pk = 'news_id';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all News ordered by date. (most actual on top)
|
||||
* @param null $limit Amount of news.
|
||||
* @return array
|
||||
*/
|
||||
public function getAll($limit = null)
|
||||
{
|
||||
$this->addJoin("campus.tbl_content","content_id");
|
||||
return $this->execReadOnlyQuery('
|
||||
SELECT *
|
||||
FROM campus.tbl_news
|
||||
JOIN campus.tbl_content content ON content.content_id = campus.tbl_news.content_id
|
||||
WHERE
|
||||
--text IS NOT NULL AND
|
||||
datum <= NOW() AND (datum_bis IS NULL OR datum_bis >= now()::date)
|
||||
ORDER BY datum DESC
|
||||
LIMIT ' . $this->escape($limit)
|
||||
);
|
||||
}
|
||||
|
||||
public function getNewsContentIDs($limit=10){
|
||||
$this->addSelect(['content_id']);
|
||||
return $this->loadWhere("datum <= NOW() AND (datum_bis IS NULL OR datum_bis >= now()::date)
|
||||
ORDER BY datum DESC
|
||||
LIMIT " . $this->escape($limit));
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @param string $sprache
|
||||
* @param string $studiengang_kz
|
||||
* @param integer | null $semester
|
||||
* @param string $fachbereich_kurzbz
|
||||
* @param boolean $sichtbar
|
||||
* @param integer $maxalter
|
||||
* @param integer $page
|
||||
* @param integer $page_size
|
||||
* @param boolean $all
|
||||
* @param boolean $mischen
|
||||
*
|
||||
* TODO(chris): this is not a good function -> the params are all over the place
|
||||
*
|
||||
*/
|
||||
protected function prepareNewsWithContent($sprache, $studiengang_kz, $semester, $fachbereich_kurzbz = null, $sichtbar = true, $maxalter = 0, $page = 1, $page_size = 10, $all = false, $mischen = true)
|
||||
{
|
||||
|
||||
$this->addOrder('datum', 'DESC');
|
||||
|
||||
$studiengang_kz = trim($studiengang_kz);
|
||||
$fachbereich_kurzbz = trim($fachbereich_kurzbz);
|
||||
|
||||
$where = [];
|
||||
if (trim($maxalter) != '0') {
|
||||
$where[] = "(now()-datum) < interval " . $this->db->escape($maxalter) . " days";
|
||||
|
||||
}
|
||||
if (!$all) {
|
||||
$where[] = "datum <= now()";
|
||||
$where[] = "(datum_bis >= now()::date OR datum_bis IS NULL)";
|
||||
}
|
||||
if ($fachbereich_kurzbz != '*') {
|
||||
if ($fachbereich_kurzbz == '') {
|
||||
$where[] = "fachbereich_kurzbz IS NULL";
|
||||
} else {
|
||||
$where[] = "fachbereich_kurzbz = " . $this->db->escape($fachbereich_kurzbz);
|
||||
|
||||
}
|
||||
}
|
||||
if ($studiengang_kz == '0') {
|
||||
$where[] = "studiengang_kz = " . $this->db->escape($studiengang_kz);
|
||||
|
||||
if ($semester === NULL)
|
||||
$where[] = "semester IS NULL";
|
||||
elseif ($semester === 0)
|
||||
$where[] = "semester = 0";
|
||||
} elseif ($studiengang_kz != '') {
|
||||
$add = $mischen === true ? " OR (studiengang_kz = 0 AND semester IS NULL)" : "";
|
||||
$where[] = "((studiengang_kz = " . $this->db->escape($studiengang_kz) . " AND semester = " . $this->db->escape($semester) . ") OR (studiengang_kz = " . $this->db->escape($studiengang_kz) . " AND semester = 0) OR (studiengang_kz = 0 AND semester = " . $this->db->escape($semester) . ")" . $add . ")";
|
||||
|
||||
}
|
||||
$this->addJoin('campus.tbl_contentsprache cs', 'content_id');
|
||||
|
||||
$where[] = "cs.sichtbar = " . ($sichtbar ? "true" : "false");
|
||||
|
||||
$where[] = "cs.sprache = (CASE WHEN EXISTS(SELECT 1 FROM campus.tbl_contentsprache cs2 WHERE cs2.content_id=" . $this->dbTable . ".content_id AND sprache=" . $this->db->escape($sprache) . ") THEN " . $this->db->escape($sprache) . " ELSE " . $this->db->escape(DEFAULT_LANGUAGE) . " END)";
|
||||
|
||||
|
||||
$where[] = "cs.version = (SELECT MAX(version) FROM campus.tbl_contentsprache cs3 WHERE cs3.content_id=" . $this->dbTable . ".content_id AND cs3.sprache = (CASE WHEN EXISTS(SELECT 1 FROM campus.tbl_contentsprache cs2 WHERE cs2.content_id=" . $this->dbTable . ".content_id AND sprache=" . $this->db->escape($sprache) . ") THEN " . $this->db->escape($sprache) . " ELSE " . $this->db->escape(DEFAULT_LANGUAGE) . " END))";
|
||||
|
||||
|
||||
$where = implode(" AND ", $where);
|
||||
|
||||
$this->db->where($where, NULL, FALSE);
|
||||
|
||||
}
|
||||
|
||||
public function getNewsWithContent($sprache, $studiengang_kz, $semester, $fachbereich_kurzbz = null, $sichtbar = true, $maxalter = 0, $page = 1, $page_size = 10, $all = false, $mischen = true)
|
||||
{
|
||||
$this->prepareNewsWithContent($sprache, $studiengang_kz, $semester, $fachbereich_kurzbz, $sichtbar, $maxalter, $page, $page_size, $all, $mischen);
|
||||
|
||||
// getting the number of rows of the query and adding pagination to the query result
|
||||
$num_rows = $this->getNumRows(true);
|
||||
$this->addPagination($page, $page_size, $num_rows);
|
||||
|
||||
// preparing the query again because every call to get_compiled_select or cour_all_results will add the from clause to the query
|
||||
$this->prepareNewsWithContent($sprache, $studiengang_kz, $semester, $fachbereich_kurzbz, $sichtbar, $maxalter, $page, $page_size, $all, $mischen);
|
||||
|
||||
return $this->load();
|
||||
}
|
||||
|
||||
public function countNewsWithContent($sprache, $studiengang_kz, $semester, $fachbereich_kurzbz = null, $sichtbar = true, $maxalter = 0, $page = 1, $page_size = 10, $all = false, $mischen = true)
|
||||
{
|
||||
$this->prepareNewsWithContent($sprache, $studiengang_kz, $semester, $fachbereich_kurzbz, $sichtbar, $maxalter, $page, $page_size, $all, $mischen);
|
||||
return $this->getNumRows();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -193,4 +193,55 @@ class Akte_model extends DB_Model
|
||||
|
||||
return success($dokumente->retval);
|
||||
}
|
||||
|
||||
/**
|
||||
* Liefert die Archivdokumente einer Person
|
||||
*
|
||||
* @param integer $person_id
|
||||
* @param boolean|null $signiert Wenn true werden nur Dokumente geliefert die digital signiert wurden.
|
||||
* @param boolean|null $stud_selfservice Wenn true werden nur Dokumente geliefert die Studierende selbst herunterladen duerfen.
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getArchiv($person_id, $signiert = null, $stud_selfservice = null)
|
||||
{
|
||||
$this->addSelect('akte_id');
|
||||
$this->addSelect('person_id');
|
||||
$this->addSelect('dokument_kurzbz');
|
||||
$this->addSelect('mimetype');
|
||||
$this->addSelect('erstelltam');
|
||||
$this->addSelect('gedruckt');
|
||||
$this->addSelect('titel_intern');
|
||||
$this->addSelect('anmerkung_intern');
|
||||
$this->addSelect('titel');
|
||||
$this->addSelect('bezeichnung');
|
||||
$this->addSelect('updateamum');
|
||||
$this->addSelect('insertamum');
|
||||
$this->addSelect('updatevon');
|
||||
$this->addSelect('insertvon');
|
||||
$this->addSelect('uid');
|
||||
$this->addSelect('dms_id');
|
||||
$this->addSelect('anmerkung');
|
||||
$this->addSelect('nachgereicht');
|
||||
$this->addSelect('CASE WHEN inhalt is not null THEN true ELSE false END as inhalt_vorhanden', false);
|
||||
$this->addSelect('nachgereicht_am');
|
||||
$this->addSelect('ausstellungsnation');
|
||||
$this->addSelect('formal_geprueft_amum');
|
||||
$this->addSelect('archiv');
|
||||
$this->addSelect('signiert');
|
||||
$this->addSelect('stud_selfservice');
|
||||
$this->addSelect('akzeptiertamum');
|
||||
|
||||
if ($signiert !== null)
|
||||
$this->db->where('signiert', (boolean)$signiert);
|
||||
if ($stud_selfservice !== null)
|
||||
$this->db->where('stud_selfservice', (boolean)$stud_selfservice);
|
||||
|
||||
$this->addOrder('erstelltam', 'DESC');
|
||||
|
||||
return $this->loadWhere([
|
||||
'person_id' => $person_id,
|
||||
'archiv' => true
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -340,6 +340,34 @@ class Konto_model extends DB_Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @param integer $prestudent_id
|
||||
* @param string $stsem
|
||||
* @param array $buchungstypen
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function checkStudienbeitragFromPrestudent($prestudent_id, $stsem, $buchungstypen)
|
||||
{
|
||||
$this->addSelect($this->dbTable . '.buchungsnr');
|
||||
$this->addSelect($this->dbTable . '.buchungsdatum');
|
||||
|
||||
$this->addJoin('public.tbl_prestudent s', $this->dbTable . '.person_id=s.person_id AND ' . $this->dbTable . '.studiengang_kz=s.studiengang_kz');
|
||||
|
||||
$this->db->where_in('buchungstyp_kurzbz', $buchungstypen);
|
||||
$this->db->where('0 >= (
|
||||
SELECT sum(betrag)
|
||||
FROM ' . $this->dbTable . ' skonto
|
||||
WHERE skonto.buchungsnr = ' . $this->dbTable . '.buchungsnr_verweis
|
||||
OR skonto.buchungsnr_verweis = ' . $this->dbTable . '.buchungsnr_verweis
|
||||
)', null, false);
|
||||
|
||||
return $this->loadWhere([
|
||||
'prestudent_id' => $prestudent_id,
|
||||
'studiensemester_kurzbz' => $stsem
|
||||
]);
|
||||
}
|
||||
|
||||
/*
|
||||
* check if student has paid studienbeitrag for certain semester
|
||||
*
|
||||
* @param $person_id person_id
|
||||
|
||||
@@ -26,6 +26,77 @@ class Prestudentstatus_model extends DB_Model
|
||||
$this->hasSequence = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* loadWhereUid
|
||||
*
|
||||
* loads all rows for a student_uid
|
||||
*
|
||||
* @param string $uid
|
||||
* @param array $where Optional. Default empty array
|
||||
* @param boolean $withPrestudent Optional. Default true
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function loadWhereUid($uid, $where = null, $withPrestudent = false)
|
||||
{
|
||||
$this->addSelect($this->dbTable . '.*');
|
||||
$this->addJoin('public.tbl_student', 'prestudent_id');
|
||||
|
||||
if ($withPrestudent) {
|
||||
$this->addJoin('public.tbl_prestudent s', 'prestudent_id');
|
||||
$this->addSelect('s.aufmerksamdurch_kurzbz');
|
||||
$this->addSelect('s.person_id');
|
||||
$this->addSelect('s.studiengang_kz');
|
||||
$this->addSelect('s.berufstaetigkeit_code');
|
||||
$this->addSelect('s.ausbildungcode');
|
||||
$this->addSelect('s.zgv_code');
|
||||
$this->addSelect('s.zgvort');
|
||||
$this->addSelect('s.zgvdatum');
|
||||
$this->addSelect('s.zgvmas_code');
|
||||
$this->addSelect('s.zgvmaort');
|
||||
$this->addSelect('s.zgvmadatum');
|
||||
$this->addSelect('s.aufnahmeschluessel');
|
||||
$this->addSelect('s.facheinschlberuf');
|
||||
$this->addSelect('s.reihungstest_id');
|
||||
$this->addSelect('s.anmeldungreihungstest');
|
||||
$this->addSelect('s.reihungstestangetreten');
|
||||
$this->addSelect('s.rt_gesamtpunkte');
|
||||
$this->addSelect('s.bismelden');
|
||||
$this->addSelect('s.dual');
|
||||
$this->addSelect('s.rt_punkte1');
|
||||
$this->addSelect('s.rt_punkte2');
|
||||
$this->addSelect('s.ausstellungsstaat');
|
||||
$this->addSelect('s.rt_punkte3');
|
||||
$this->addSelect('s.zgvdoktor_code');
|
||||
$this->addSelect('s.zgvdoktorort');
|
||||
$this->addSelect('s.zgvdoktordatum');
|
||||
$this->addSelect('s.mentor');
|
||||
$this->addSelect('s.zgvnation');
|
||||
$this->addSelect('s.zgvmanation');
|
||||
$this->addSelect('s.zgvdoktornation');
|
||||
$this->addSelect('s.gsstudientyp_kurzbz');
|
||||
$this->addSelect('s.aufnahmegruppe_kurzbz');
|
||||
$this->addSelect('s.udf_values');
|
||||
$this->addSelect('s.priorisierung');
|
||||
$this->addSelect('s.foerderrelevant');
|
||||
$this->addSelect('s.standort_code');
|
||||
$this->addSelect('s.zgv_erfuellt');
|
||||
$this->addSelect('s.zgvmas_erfuellt');
|
||||
$this->addSelect('s.zgvdoktor_erfuellt');
|
||||
}
|
||||
|
||||
|
||||
$this->addOrder('datum');
|
||||
$this->addOrder('insertamum');
|
||||
|
||||
if (!$where)
|
||||
$where = [];
|
||||
|
||||
$where['student_uid'] = $uid;
|
||||
|
||||
return $this->loadWhere($where);
|
||||
}
|
||||
|
||||
/**
|
||||
* getLastStatus
|
||||
*/
|
||||
|
||||
@@ -17,6 +17,28 @@ class Student_model extends DB_Model
|
||||
$this->hasSequence = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the user is a Student.
|
||||
* @param string $uid
|
||||
* @return array
|
||||
*/
|
||||
public function isStudent($uid)
|
||||
{
|
||||
$this->addSelect('1');
|
||||
|
||||
$result = $this->loadWhere(array('student_uid' => $uid));
|
||||
|
||||
|
||||
if(hasData($result))
|
||||
{
|
||||
return success(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
return success(false);
|
||||
}
|
||||
}
|
||||
|
||||
// ****
|
||||
// * Generiert die Matrikelnummer
|
||||
// * FORMAT: 0710254001
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
class Bookmark_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'dashboard.tbl_bookmark';
|
||||
$this->pk = 'bookmark_id';
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
class Dashboard_Override_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'dashboard.tbl_dashboard_benutzer_override';
|
||||
$this->pk = 'override_id';
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get Overrides of given uid.
|
||||
* @param integer dashboard_id
|
||||
* @param string $uid
|
||||
* @return array
|
||||
*/
|
||||
public function getOverride($dashboard_id, $uid)
|
||||
{
|
||||
return $this->loadWhere(array('dashboard_id' => $dashboard_id, 'uid'=> $uid));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
class Dashboard_Preset_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'dashboard.tbl_dashboard_preset';
|
||||
$this->pk = 'preset_id';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Presets of given uid.
|
||||
* @param integer dashboard_id
|
||||
* @param string $uid
|
||||
* @return array
|
||||
*/
|
||||
public function getPresets($dashboard_id, $uid)
|
||||
{
|
||||
// TODO: get Funktionen for uid and load all preset for all funktionen for uid
|
||||
//return $this->loadWhere(array('dashboard_id' => $dashboard_id, 'funktion_kurzbz'=> null));
|
||||
$sql = <<<EOSQL
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
dashboard.tbl_dashboard_preset
|
||||
WHERE
|
||||
dashboard_id = ?
|
||||
AND (
|
||||
funktion_kurzbz IN (
|
||||
SELECT
|
||||
DISTINCT funktion_kurzbz
|
||||
FROM
|
||||
public.tbl_benutzerfunktion
|
||||
WHERE
|
||||
uid = ?
|
||||
AND
|
||||
NOW()::date
|
||||
BETWEEN
|
||||
COALESCE(datum_von, '1970-01-01')
|
||||
AND
|
||||
COALESCE(datum_bis, '2170-12-31')
|
||||
)
|
||||
OR
|
||||
funktion_kurzbz IS NULL
|
||||
)
|
||||
ORDER BY
|
||||
funktion_kurzbz DESC
|
||||
EOSQL;
|
||||
|
||||
return $this->execQuery($sql, array($dashboard_id, $uid));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Preset by Dashboard and Funktion
|
||||
* @param integer dashboard_id
|
||||
* @param string funktion_kurzbz
|
||||
* @return array
|
||||
*/
|
||||
public function getPresetByDashboardAndFunktion($dashboard_id, $funktion_kurzbz)
|
||||
{
|
||||
return $this->loadWhere(array('dashboard_id' => $dashboard_id, 'funktion_kurzbz' => $funktion_kurzbz));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
class Dashboard_Widget_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'dashboard.tbl_dashboard_widget';
|
||||
$this->pk = ['dashboard_id', 'widget_id'];
|
||||
$this->hasSequence = false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
class Dashboard_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'dashboard.tbl_dashboard';
|
||||
$this->pk = 'dashboard_id';
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get Dashboard by kurzbz.
|
||||
* @param string dashboard_kurzbz
|
||||
* @return array
|
||||
*/
|
||||
public function getDashboardByKurzbz($dashboard_kurzbz)
|
||||
{
|
||||
return $this->loadWhere(array('dashboard_kurzbz' => $dashboard_kurzbz));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
class Widget_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'dashboard.tbl_widget';
|
||||
$this->pk = 'widget_id';
|
||||
}
|
||||
|
||||
public function getWithAllowedForDashboard($dashboard_id)
|
||||
{
|
||||
$this->addSelect($this->dbTable . '.*');
|
||||
$this->addSelect('CASE WHEN dashboard_id IS NULL THEN 0 ELSE 1 END AS allowed', false);
|
||||
$this->db->join('dashboard.tbl_dashboard_widget dw', $this->dbTable . '.widget_id=dw.widget_id AND dashboard_id = ?', 'LEFT', false);
|
||||
|
||||
return $this->execQuery($this->db->get_compiled_select($this->dbTable), [$dashboard_id]);
|
||||
}
|
||||
|
||||
public function getForDashboard($db)
|
||||
{
|
||||
$this->addSelect($this->dbTable . '.*');
|
||||
$this->addJoin('dashboard.tbl_dashboard_widget', 'widget_id');
|
||||
$this->addJoin('dashboard.tbl_dashboard', 'dashboard_id');
|
||||
|
||||
return $this->loadWhere(['dashboard_kurzbz' => $db]);
|
||||
}
|
||||
}
|
||||
@@ -113,4 +113,135 @@ class Lehreinheit_model extends DB_Model
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,4 +41,38 @@ class Lehreinheitmitarbeiter_model extends DB_Model
|
||||
return error ('Incorrect parameter type');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param integer $lehrveranstaltung_id
|
||||
* @param string $studiensemester_kurzbz
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getForLv($lehrveranstaltung_id, $studiensemester_kurzbz)
|
||||
{
|
||||
$this->addSelect('ma.uid, ma.vorname, ma.nachname, ma.titelpre, ma.titelpost, lehrfunktion_kurzbz');
|
||||
$this->addGroupBy('ma.uid, ma.vorname, ma.nachname, ma.titelpre, ma.titelpost, lehrfunktion_kurzbz');
|
||||
|
||||
$this->addJoin('lehre.tbl_lehreinheit le', 'lehreinheit_id');
|
||||
$this->addJoin('campus.vw_mitarbeiter ma', $this->dbTable . '.mitarbeiter_uid=ma.uid');
|
||||
|
||||
$this->addOrder('nachname');
|
||||
$this->addOrder('vorname');
|
||||
|
||||
if (defined('CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON') && CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON != '')
|
||||
{
|
||||
$this->addJoin('(SELECT vertrag_id, CASE WHEN vertragsstatus_kurzbz=\'storno\' THEN 0 WHEN vertragsstatus_kurzbz=\'erteilt\' THEN 1 ELSE 2 END AS vertragsstatus_kurzbz FROM lehre.tbl_vertrag_vertragsstatus) v', 'vertrag_id', 'LEFT');
|
||||
$having = $this->db->compile_binds('(EXISTS (SELECT 1 FROM public.tbl_studiensemester WHERE studiensemester_kurzbz=? AND tbl_studiensemester.start < (SELECT start FROM public.tbl_studiensemester stsem WHERE stsem.studiensemester_kurzbz=?)) OR MIN(vertragsstatus_kurzbz)=1)', [
|
||||
$studiensemester_kurzbz,
|
||||
CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON
|
||||
]);
|
||||
$this->db->having($having);
|
||||
}
|
||||
|
||||
return $this->loadWhere([
|
||||
'lehrveranstaltung_id' => $lehrveranstaltung_id,
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz
|
||||
]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
class LehrveranstaltungFaktor_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'lehre.tbl_lehrveranstaltung_faktor';
|
||||
$this->pk = 'lehrveranstaltung_faktor_id';
|
||||
}
|
||||
}
|
||||
@@ -544,6 +544,113 @@ class Lehrveranstaltung_model extends DB_Model
|
||||
return $this->execQuery($qry, $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets Lehrveranstaltungen of a student with grades if available
|
||||
*
|
||||
* @param string $student_uid
|
||||
* @param string $studiensemester_kurzbz
|
||||
* @param string|null $sprache
|
||||
* @param number|null $lvid - returns only information about that single lv if the parameter is set
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getLvsByStudentWithGrades($student_uid, $studiensemester_kurzbz, $sprache = null, $lvid=null)
|
||||
{
|
||||
if ($sprache) {
|
||||
$sprache_qry = $this->db->compile_binds('SELECT index FROM public.tbl_sprache WHERE sprache = ?', [$sprache]);
|
||||
$bezeichnung = 'bezeichnung_mehrsprachig[(' . $sprache_qry . ')]';
|
||||
$sgbezeichnung = $sprache == 'English' ? 'COALESCE(sg.english, sg.bezeichnung)' : 'sg.bezeichnung';
|
||||
$lvbezeichnung = $sprache == 'English' ? 'COALESCE(v.bezeichnung_english, v.bezeichnung)' : 'v.bezeichnung';
|
||||
} else {
|
||||
$bezeichnung = 'bezeichnung';
|
||||
$sgbezeichnung = 'sg.bezeichnung';
|
||||
$lvbezeichnung = 'v.bezeichnung';
|
||||
}
|
||||
|
||||
$this->addDistinct();
|
||||
// TODO(chris): selects
|
||||
/*
|
||||
semester (?)
|
||||
module
|
||||
bezeichnung
|
||||
sg_bezeichnung
|
||||
studiengang_kuerzel
|
||||
lvnote
|
||||
znote
|
||||
studiengang_kz
|
||||
lehrveranstaltung_id
|
||||
benotung
|
||||
lvinfo
|
||||
farbe
|
||||
|
||||
sprache (?)
|
||||
ects (?)
|
||||
incoming (?)
|
||||
orgform_kurzbz (?)
|
||||
*/
|
||||
// TODO(chris): module or kf
|
||||
#$this->addSelect($this->dbTable . '.*');
|
||||
#$this->addSelect('v.*');
|
||||
$this->addSelect($this->dbTable . '.benotung');
|
||||
$this->addSelect($this->dbTable . '.lvinfo');
|
||||
$this->addSelect($this->dbTable . '.farbe');
|
||||
$this->addSelect($this->dbTable . '.incoming');
|
||||
$this->addSelect($this->dbTable . '.orgform_kurzbz');
|
||||
$this->addSelect('v.studiengang_kz');
|
||||
$this->addSelect('v.lehrveranstaltung_id');
|
||||
$this->addSelect('v.semester');
|
||||
|
||||
$this->addSelect('v.sprache');
|
||||
$this->addSelect('v.ects');
|
||||
$this->addSelect('znn.positiv');
|
||||
|
||||
#$this->addSelect('splv.module');
|
||||
$this->addSelect($lvbezeichnung . ' AS bezeichnung');
|
||||
$this->addSelect($sgbezeichnung . ' AS sg_bezeichnung');
|
||||
$this->addSelect('UPPER(sg.typ::VARCHAR(1) || sg.kurzbz) AS studiengang_kuerzel');
|
||||
|
||||
$this->addSelect('COALESCE(gnn.' . $bezeichnung . ', gnn.bezeichnung, gn.note::text) AS lvnote');
|
||||
$this->addSelect('COALESCE(znn.' . $bezeichnung . ', znn.bezeichnung, zn.note::text) AS znote');
|
||||
|
||||
// TODO(chris): Potentielle Anpassung "Eine UID"
|
||||
$this->addJoin('campus.vw_student_lehrveranstaltung v', 'lehrveranstaltung_id');
|
||||
$this->addJoin('public.tbl_studiengang sg', $this->dbTable . '.studiengang_kz = sg.studiengang_kz');
|
||||
$this->db->where("v.lehreverzeichnis<>''");
|
||||
if(isset($lvid))
|
||||
{
|
||||
$this->db->where("v.lehrveranstaltung_id", $lvid);
|
||||
}
|
||||
|
||||
$this->addJoin('campus.tbl_lvgesamtnote gn', 'gn.lehrveranstaltung_id=v.lehrveranstaltung_id AND gn.student_uid=v.uid AND gn.studiensemester_kurzbz=v.studiensemester_kurzbz', 'LEFT');
|
||||
$this->addJoin('lehre.tbl_note gnn', 'gn.note=gnn.note', 'LEFT');
|
||||
|
||||
$this->addJoin('lehre.tbl_zeugnisnote zn', 'zn.lehrveranstaltung_id=v.lehrveranstaltung_id AND zn.student_uid=v.uid AND zn.studiensemester_kurzbz=v.studiensemester_kurzbz', 'LEFT');
|
||||
$this->addJoin('lehre.tbl_note znn', 'zn.note=znn.note', 'LEFT');
|
||||
|
||||
$this->addOrder('bezeichnung');
|
||||
|
||||
/*if (!defined("CIS_PROFIL_STUDIENPLAN_MODULE_AUSBLENDEN") || !CIS_PROFIL_STUDIENPLAN_MODULE_AUSBLENDEN) {
|
||||
$modulebezeichnung = str_replace('v.', 'm.', $lvbezeichnung);
|
||||
$modulesql = '
|
||||
LEFT JOIN lehre.tbl_studienplan_lehrveranstaltung p ON(lv.studienplan_lehrveranstaltung_id_parent=p.studienplan_lehrveranstaltung_id)
|
||||
LEFT JOIN lehre.tbl_lehrveranstaltung m ON(m.lehrveranstaltung_id = p.lehrveranstaltung_id)';
|
||||
} else {
|
||||
$modulebezeichnung = 'NULL';
|
||||
$modulesql = '';
|
||||
}
|
||||
|
||||
$this->addJoin('(
|
||||
SELECT lv.lehrveranstaltung_id, sps.studiensemester_kurzbz, so.studiengang_kz, lv.semester, ' . $modulebezeichnung . ' AS module
|
||||
FROM lehre.tbl_studienplan_lehrveranstaltung lv
|
||||
LEFT JOIN lehre.tbl_studienplan sp ON(sp.studienplan_id=lv.studienplan_id)
|
||||
JOIN lehre.tbl_studienplan_semester sps ON(sp.studienplan_id=sps.studienplan_id AND sps.semester=lv.semester)
|
||||
JOIN lehre.tbl_studienordnung so ON(so.studienordnung_id=sp.studienordnung_id)
|
||||
' . $modulesql . '
|
||||
) splv', 'splv.lehrveranstaltung_id=v.lehrveranstaltung_id AND splv.studiensemester_kurzbz=v.studiensemester_kurzbz AND splv.studiengang_kz=v.studiengang_kz', 'LEFT');*/
|
||||
|
||||
return $this->loadWhere(['v.uid' => $student_uid, 'v.lehre' => true, 'v.studiensemester_kurzbz' => $studiensemester_kurzbz]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets valid Lehrveranstaltungen with incoming places for a Studiensemester.
|
||||
* Only
|
||||
@@ -816,10 +923,124 @@ class Lehrveranstaltung_model extends DB_Model
|
||||
return $this->execQuery($qry, array($student_uid));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param integer $lehrveranstaltung_id
|
||||
* @param string $studiensemester_kurzbz
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getKoordinator($lehrveranstaltung_id, $studiensemester_kurzbz = null)
|
||||
{
|
||||
$binds = [
|
||||
$lehrveranstaltung_id,
|
||||
$lehrveranstaltung_id,
|
||||
$lehrveranstaltung_id,
|
||||
$lehrveranstaltung_id
|
||||
];
|
||||
$qry = "
|
||||
SELECT
|
||||
a.uid, vorname, nachname, titelpre, titelpost
|
||||
FROM (
|
||||
SELECT
|
||||
koordinator as uid
|
||||
FROM
|
||||
lehre.tbl_lehrveranstaltung
|
||||
WHERE
|
||||
lehrveranstaltung_id = ?
|
||||
UNION
|
||||
SELECT
|
||||
uid
|
||||
FROM
|
||||
lehre.tbl_lehreinheit
|
||||
JOIN lehre.tbl_lehrveranstaltung AS lehrfach ON(tbl_lehreinheit.lehrfach_id = lehrfach.lehrveranstaltung_id)
|
||||
JOIN public.tbl_fachbereich ON(lehrfach.oe_kurzbz=tbl_fachbereich.oe_kurzbz)
|
||||
JOIN public.tbl_benutzerfunktion ON(tbl_fachbereich.fachbereich_kurzbz=tbl_benutzerfunktion.fachbereich_kurzbz)
|
||||
WHERE
|
||||
tbl_benutzerfunktion.funktion_kurzbz='fbk'
|
||||
AND (tbl_benutzerfunktion.datum_von IS null OR tbl_benutzerfunktion.datum_von <= now())
|
||||
AND (tbl_benutzerfunktion.datum_bis IS null OR tbl_benutzerfunktion.datum_bis >= now())
|
||||
AND tbl_lehreinheit.lehrveranstaltung_id = ?
|
||||
AND tbl_benutzerfunktion.oe_kurzbz = (
|
||||
SELECT
|
||||
tbl_studiengang.oe_kurzbz
|
||||
FROM
|
||||
lehre.tbl_lehrveranstaltung
|
||||
JOIN public.tbl_studiengang USING(studiengang_kz)
|
||||
WHERE lehrveranstaltung_id = ?
|
||||
)
|
||||
AND EXISTS (
|
||||
SELECT
|
||||
lehrveranstaltung_id
|
||||
FROM
|
||||
lehre.tbl_lehrveranstaltung
|
||||
WHERE
|
||||
lehrveranstaltung_id = ?
|
||||
AND koordinator IS null
|
||||
)
|
||||
";
|
||||
|
||||
if ($studiensemester_kurzbz !== null)
|
||||
{
|
||||
$qry .= " AND tbl_lehreinheit.studiensemester_kurzbz = ?";
|
||||
$binds[] = $studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
$qry .= "
|
||||
) AS a
|
||||
JOIN campus.vw_mitarbeiter ON(a.uid=vw_mitarbeiter.uid)
|
||||
WHERE vw_mitarbeiter.aktiv
|
||||
";
|
||||
|
||||
return $this->execQuery($qry, $binds);
|
||||
}
|
||||
|
||||
public function getStg($lehrveranstaltung_id)
|
||||
{
|
||||
$this->addSelect('stg.*');
|
||||
$this->addJoin('public.tbl_studiengang stg', 'studiengang_kz');
|
||||
return $this->load($lehrveranstaltung_id);
|
||||
}
|
||||
|
||||
//Berechtigungen auf Fachbereichsebene
|
||||
public function getBerechtigungenAufFachberechsebene($lvid, $angezeigtes_stsem)
|
||||
{
|
||||
$query = "
|
||||
SELECT
|
||||
DISTINCT lehrfach.oe_kurzbz
|
||||
FROM
|
||||
lehre.tbl_lehrveranstaltung
|
||||
JOIN
|
||||
lehre.tbl_lehreinheit USING(lehrveranstaltung_id)
|
||||
JOIN
|
||||
lehre.tbl_lehrveranstaltung as lehrfach ON(tbl_lehreinheit.lehrfach_id=lehrfach.lehrveranstaltung_id)
|
||||
WHERE
|
||||
tbl_lehrveranstaltung.lehrveranstaltung_id = " . $this->escape(intval($lvid));
|
||||
|
||||
if(isset($angezeigtes_stsem) && $angezeigtes_stsem != ''){
|
||||
$query .= " AND studiensemester_kurzbz = " . $this->escape($angezeigtes_stsem);
|
||||
}
|
||||
|
||||
$res = $this->execReadOnlyQuery($query);
|
||||
return $res;
|
||||
}
|
||||
|
||||
public function getStudentEMail($lvid, $angezeigtes_stsem)
|
||||
{
|
||||
$query = "
|
||||
SELECT
|
||||
DISTINCT 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
|
||||
FROM
|
||||
campus.vw_lehreinheit
|
||||
LEFT JOIN
|
||||
public.tbl_gruppe USING(gruppe_kurzbz)
|
||||
WHERE
|
||||
lehrveranstaltung_id = " . $this->escape(intval($lvid)) . "
|
||||
AND studiensemester_kurzbz = " . $this->escape($angezeigtes_stsem);
|
||||
|
||||
$res = $this->execReadOnlyQuery($query);
|
||||
return $res;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,4 +11,39 @@ class Lvangebot_model extends DB_Model
|
||||
$this->dbTable = 'lehre.tbl_lvangebot';
|
||||
$this->pk = 'lvangebot_id';
|
||||
}
|
||||
|
||||
/**
|
||||
* Prueft ob eine Abmeldung von einer Lehrveranstaltung moeglich ist
|
||||
* und liefert die Gruppen von denen sich abgemeldet werden kann
|
||||
* @param $lehrveranstaltung_id
|
||||
* @param $studiensemester_kurzbz
|
||||
* @param $uid
|
||||
* @return $gruppen Array mit den Gruppen
|
||||
*/
|
||||
public function AbmeldungMoeglich($lehrveranstaltung_id, $studiensemester_kurzbz, $uid)
|
||||
{
|
||||
$query = "SELECT
|
||||
gruppe_kurzbz
|
||||
FROM
|
||||
lehre.tbl_lvangebot
|
||||
JOIN public.tbl_benutzergruppe USING(studiensemester_kurzbz, gruppe_kurzbz)
|
||||
WHERE
|
||||
tbl_lvangebot.studiensemester_kurzbz = " . $this->escape($studiensemester_kurzbz)."
|
||||
AND tbl_benutzergruppe.uid = " . $this->escape($uid)."
|
||||
AND (tbl_lvangebot.lehrveranstaltung_id = " . $this->escape(intval($lehrveranstaltung_id))."
|
||||
OR tbl_lvangebot.lehrveranstaltung_id IN(SELECT lehrveranstaltung_id_kompatibel
|
||||
FROM lehre.tbl_lehrveranstaltung_kompatibel
|
||||
WHERE lehrveranstaltung_id = " . $this->escape(intval($lehrveranstaltung_id))."
|
||||
)
|
||||
)";
|
||||
$res = $this->execReadOnlyQuery($query);
|
||||
$rows = (hasData($res)) ? getData($res) : array();
|
||||
|
||||
$gruppen=array();
|
||||
foreach($rows as $row)
|
||||
{
|
||||
$gruppen[] = $row->gruppe_kurzbz;
|
||||
}
|
||||
return $gruppen;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,6 +37,35 @@ class Pruefung_model extends DB_Model
|
||||
return $this->execQuery($qry, array($person_id, $studiensemester_kurzbz));
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets Pruefungen of a student for a Lehrveranstaltung.
|
||||
*
|
||||
* @param string $uid
|
||||
* @param string $lehrveranstaltung_id
|
||||
* @param string|null $sprache
|
||||
*
|
||||
* @return object
|
||||
*/
|
||||
public function getByStudentAndLv($uid, $lehrveranstaltung_id, $sprache = null)
|
||||
{
|
||||
// TODO(chris): Potentielle Anpassung "Eine UID"
|
||||
$this->dbTable = 'lehre.tbl_pruefung';
|
||||
|
||||
if ($sprache) {
|
||||
$sprache_qry = $this->db->compile_binds('SELECT index FROM public.tbl_sprache WHERE sprache = ?', [$sprache]);
|
||||
$bezeichnung = 'bezeichnung_mehrsprachig[(' . $sprache_qry . ')]';
|
||||
} else {
|
||||
$bezeichnung = 'bezeichnung';
|
||||
}
|
||||
|
||||
$this->addSelect($this->dbTable . '.pruefung_id, ' . $this->dbTable . '.pruefungstyp_kurzbz, ' . $this->dbTable . '.datum, COALESCE(n.' . $bezeichnung . ', n.note::text) AS note');
|
||||
|
||||
$this->addJoin('lehre.tbl_lehreinheit le', 'lehreinheit_id');
|
||||
$this->addJoin('lehre.tbl_lehrveranstaltung lv', 'lehrveranstaltung_id');
|
||||
$this->addJoin('lehre.tbl_note n', 'note');
|
||||
|
||||
return $this->loadWhere(['lehrveranstaltung_id' => $lehrveranstaltung_id, 'student_uid' => $uid]);
|
||||
}
|
||||
|
||||
/**
|
||||
* NOTE(chris): not used
|
||||
|
||||
@@ -189,6 +189,19 @@ class Organisationseinheit_model extends DB_Model
|
||||
return $this->loadWhere($condition);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $oe_kurzbz
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getWithType($oe_kurzbz)
|
||||
{
|
||||
$this->addSelect($this->dbTable . '.*, t.bezeichnung AS organisationseinheittyp');
|
||||
$this->addJoin('public.tbl_organisationseinheittyp t', 'organisationseinheittyp_kurzbz');
|
||||
|
||||
return $this->load($oe_kurzbz);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get OEs by eventQuery string. Use with autocomplete event queries.
|
||||
* @param $eventQuery String
|
||||
|
||||
@@ -457,7 +457,7 @@ class Studiengang_model extends DB_Model
|
||||
*/
|
||||
public function getLeitung($studiengang_kz = null)
|
||||
{
|
||||
$this->addSelect('uid, studiengang_kz, oe_kurzbz, vorname, nachname, email');
|
||||
$this->addSelect('uid, studiengang_kz, oe_kurzbz, vorname, nachname, email, titelpre, titelpost, alias');
|
||||
$this->addJoin('public.tbl_benutzerfunktion', 'oe_kurzbz');
|
||||
$this->addJoin('public.tbl_benutzer', 'uid');
|
||||
$this->addJoin('public.tbl_person', 'person_id');
|
||||
@@ -493,6 +493,53 @@ class Studiengang_model extends DB_Model
|
||||
return $this->loadWhere($condition);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Studiengangsleitung/en of Studiengang/Studiengaenge. With Details
|
||||
*
|
||||
* @param null $studiengang_kz Numeric or Array
|
||||
* @return array
|
||||
*/
|
||||
public function getLeitungDetailed($studiengang_kz = null)
|
||||
{
|
||||
$this->addSelect('studiengang_kz, email, f.oe_kurzbz, b.uid, b.alias, b.aktiv, p.vorname, p.nachname, p.titelpre, p.titelpost, m.telefonklappe, k.kontakt, o.planbezeichnung');
|
||||
$this->addJoin('public.tbl_benutzerfunktion f', 'oe_kurzbz');
|
||||
$this->addJoin('public.tbl_benutzer b', 'uid');
|
||||
$this->addJoin('public.tbl_person p', 'person_id');
|
||||
$this->addJoin('public.tbl_mitarbeiter m', 'mitarbeiter_uid=uid', 'LEFT');
|
||||
$this->addJoin('public.tbl_kontakt k', 'k.standort_id=m.standort_id AND kontakttyp=\'telefon\'', 'LEFT');
|
||||
$this->addJoin('public.tbl_ort o', 'ort_kurzbz', 'LEFT');
|
||||
|
||||
if (!is_numeric($studiengang_kz) && !is_array($studiengang_kz))
|
||||
{
|
||||
return error('Studiengangskennzahl ungültig');
|
||||
}
|
||||
|
||||
if (is_null($studiengang_kz))
|
||||
{
|
||||
$condition = '
|
||||
funktion_kurzbz = \'Leitung\'
|
||||
AND ( datum_von <= NOW() OR datum_von IS NULL )
|
||||
AND ( datum_bis >= NOW() OR datum_bis IS NULL )
|
||||
';
|
||||
}
|
||||
elseif (is_numeric($studiengang_kz) || is_array($studiengang_kz))
|
||||
{
|
||||
if (is_array($studiengang_kz))
|
||||
{
|
||||
$studiengang_kz = array_map(array($this,'escape'), $studiengang_kz);
|
||||
$studiengang_kz = implode(', ', $studiengang_kz);
|
||||
}
|
||||
$condition = '
|
||||
funktion_kurzbz = \'Leitung\'
|
||||
AND ( datum_von <= NOW() OR datum_von IS NULL )
|
||||
AND ( datum_bis >= NOW() OR datum_bis IS NULL )
|
||||
AND studiengang_kz IN (' . $studiengang_kz. ')';
|
||||
;
|
||||
}
|
||||
|
||||
return $this->loadWhere($condition);
|
||||
}
|
||||
|
||||
public function getStudiengaengeWithOrgForm($typ, $semester)
|
||||
{
|
||||
$query = "SELECT DISTINCT (UPPER(so.studiengangkurzbzlang || ':' || sp.orgform_kurzbz)) AS Studiengang
|
||||
|
||||
@@ -205,6 +205,25 @@ class Studiensemester_model extends DB_Model
|
||||
return $this->execQuery($query, array($studiensemester_kurzbz));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $student_uid
|
||||
*
|
||||
* @return StdClass
|
||||
*/
|
||||
public function getWhereStudentHasLvs($student_uid)
|
||||
{
|
||||
$this->addDistinct();
|
||||
$this->addSelect($this->dbTable . '.*');
|
||||
|
||||
// TODO(chris): Potentielle Anpassung "Eine UID"
|
||||
$this->addJoin('campus.vw_student_lehrveranstaltung v', 'studiensemester_kurzbz');
|
||||
$this->db->where("v.lehreverzeichnis<>''");
|
||||
|
||||
$this->addOrder($this->dbTable . '.start');
|
||||
|
||||
return $this->loadWhere(['uid' => $student_uid, 'v.lehre' => true]);
|
||||
}
|
||||
|
||||
public function getAktAndFutureSemester()
|
||||
{
|
||||
$query = 'SELECT studiensemester_kurzbz
|
||||
@@ -253,4 +272,19 @@ class Studiensemester_model extends DB_Model
|
||||
if (is_numeric($studienjahrNumber) && mb_substr($studiensemester_kurzbz, 0, 2) == 'SS') (int)$studienjahrNumber -= 1;
|
||||
return $studienjahrNumber;
|
||||
}
|
||||
|
||||
/**
|
||||
* Holt Start und Ende des Studiensemester_kurzbz
|
||||
* @param studiensemester_kurzbz
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getStartEndeFromStudiensemester($studiensemester_kurzbz)
|
||||
{
|
||||
return $this->execReadOnlyQuery("
|
||||
SELECT
|
||||
start, ende
|
||||
FROM public.tbl_studiensemester
|
||||
WHERE studiensemester_kurzbz = ?",[$studiensemester_kurzbz]);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -194,6 +194,38 @@ class Benutzerfunktion_model extends DB_Model
|
||||
return $this->execQuery($query, $parametersArray);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all Benutzer with details for a given Benutzerfunktion and optionally specified Oe and semester
|
||||
*
|
||||
* @param string $funktion_kurzbz
|
||||
* @param string $oe_kurzbz
|
||||
* @param integer | null $semester
|
||||
* @return array|null
|
||||
*/
|
||||
public function getBenutzerFunktionenDetailed($funktion_kurzbz, $oe_kurzbz = null, $semester = null)
|
||||
{
|
||||
$this->addSelect($this->dbTable . '.funktion_kurzbz, ' . $this->dbTable . '.oe_kurzbz, ' . $this->dbTable . '.semester, ' . $this->dbTable . '.bezeichnung, f.beschreibung, b.uid, b.alias, b.aktiv, p.vorname, p.nachname, p.titelpre, p.titelpost, m.telefonklappe, k.kontakt, o.planbezeichnung');
|
||||
$this->addJoin('public.tbl_funktion f', 'funktion_kurzbz');
|
||||
$this->addJoin('public.tbl_benutzer b', 'uid');
|
||||
$this->addJoin('public.tbl_person p', 'person_id');
|
||||
$this->addJoin('public.tbl_mitarbeiter m', 'mitarbeiter_uid=uid', 'LEFT');
|
||||
$this->addJoin('public.tbl_kontakt k', 'k.standort_id=m.standort_id AND kontakttyp=\'telefon\'', 'LEFT');
|
||||
$this->addJoin('public.tbl_ort o', 'ort_kurzbz', 'LEFT');
|
||||
|
||||
$this->addOrder('LOWER(uid)');
|
||||
|
||||
$where = [$this->dbTable . '.funktion_kurzbz' => $funktion_kurzbz];
|
||||
if ($oe_kurzbz !== null)
|
||||
$where[$this->dbTable . '.oe_kurzbz'] = $oe_kurzbz;
|
||||
if ($semester !== null)
|
||||
$where[$this->dbTable . '.semester'] = $semester;
|
||||
|
||||
$this->db->where('(' . $this->dbTable . '.datum_bis >= NOW() OR ' . $this->dbTable . '.datum_bis IS NULL)', NULL, FALSE);
|
||||
$this->db->where('(' . $this->dbTable . '.datum_von <= NOW() OR ' . $this->dbTable . '.datum_von IS NULL)', NULL, FALSE);
|
||||
|
||||
return $this->loadWhere($where);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get active Studiengangsleitung(en) of the user by UID.
|
||||
* @param $uid
|
||||
|
||||
@@ -12,4 +12,25 @@ class Benutzergruppe_model extends DB_Model
|
||||
$this->pk = array('gruppe_kurzbz', 'uid');
|
||||
$this->hasSequence = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Laedt die User in einer Benutzergruppe
|
||||
* @param gruppe_kurzbz, stsem
|
||||
* @return array
|
||||
*/
|
||||
public function getUids($gruppe_kurzbz, $stsem)
|
||||
{
|
||||
$query = "
|
||||
SELECT
|
||||
uid
|
||||
FROM
|
||||
public.tbl_benutzergruppe
|
||||
WHERE
|
||||
gruppe_kurzbz = " . $this->escape($gruppe_kurzbz) . "
|
||||
AND studiensemester_kurzbz = " . $this->escape($stsem);
|
||||
|
||||
$res = $this->execReadOnlyQuery($query);
|
||||
$uids = (hasData($res)) ? getData($res) : array();
|
||||
return $uids;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
class Gruppe_manager_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'public.tbl_gruppe_manager';
|
||||
$this->pk = 'gruppe_manager_id';
|
||||
}
|
||||
}
|
||||
@@ -142,7 +142,7 @@ class Notiz_model extends DB_Model
|
||||
$this->addSelect('public.tbl_notiz.*');
|
||||
$this->addJoin('public.tbl_notizzuordnung', 'notiz_id');
|
||||
|
||||
return $this->loadWhere(array('person_id' => $person_id));
|
||||
return $this->loadWhere(array('person_id' => $person_id, 'tbl_notiz.typ' => NULL));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -290,6 +290,21 @@ class Person_model extends DB_Model
|
||||
return success($result->vorname. ' '. $result->nachname);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get first name of given uid. (Vorname Nachname)
|
||||
* @param $uid
|
||||
* @return array
|
||||
*/
|
||||
public function getFirstName($uid)
|
||||
{
|
||||
$result = getData($this->getByUid($uid))[0];
|
||||
if (!$result) {
|
||||
show_error('Failed loading person');
|
||||
}
|
||||
|
||||
return success($result->vorname);
|
||||
}
|
||||
|
||||
public function checkDuplicate($person_id)
|
||||
{
|
||||
$qry = "SELECT person_id
|
||||
|
||||
@@ -0,0 +1,187 @@
|
||||
<?php
|
||||
|
||||
class Profil_update_model extends DB_Model
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'public.tbl_profil_update';
|
||||
$this->pk = ['profil_update_id'];
|
||||
$this->hasSequence = true;
|
||||
|
||||
|
||||
$this->load->model('crm/Student_model', 'StudentModel');
|
||||
$this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
|
||||
|
||||
$this->load->library('PermissionLib');
|
||||
}
|
||||
|
||||
/**
|
||||
* getTimestamp
|
||||
* returns insert or update timestamp of a certain profil update
|
||||
*
|
||||
* @param boolean $update: conditional whether to return insertamum or updateamum
|
||||
*/
|
||||
//TODO: function wird nicht verwendet
|
||||
public function getTimestamp($id, $update = false)
|
||||
{
|
||||
$selectStatement = $update ? 'updateamum' : 'insertamum';
|
||||
$this->addSelect([$selectStatement]);
|
||||
$res = $this->load([$id]);
|
||||
return hasData($res) ? getData($res)[0]->$selectStatement : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* getFilesFromChangeRequest
|
||||
*
|
||||
* returns all files associated to a profil update request in the following format:
|
||||
* {dms_id:123 , name:"test"}
|
||||
*
|
||||
* @param boolean $profil_update_id primary key of the profil update request
|
||||
* @return array
|
||||
*/
|
||||
//TODO: function wird nicht verwendet
|
||||
public function getFilesFromChangeRequest($profil_update_id)
|
||||
{
|
||||
$this->addSelect(["requested_change"]);
|
||||
$res = $this->load([$profil_update_id]);
|
||||
$res = hasData($res) ? getData($res)[0] : null;
|
||||
return json_decode($res->requested_change)->files ?: [];
|
||||
}
|
||||
|
||||
|
||||
//? queries the tbl_profil_updates without permissions of the user
|
||||
public function getProfilUpdatesWhere($whereClause)
|
||||
{
|
||||
if (array_key_exists("uid", $whereClause)) {
|
||||
$whereClause["public.tbl_profil_update.uid"] = $whereClause["uid"];
|
||||
unset($whereClause["uid"]);
|
||||
}
|
||||
$this->addSelect(["public.tbl_profil_update.*", "public.tbl_person.vorname"]);
|
||||
$this->addJoin("public.tbl_benutzer", "public.tbl_benutzer.uid = public.tbl_profil_update.uid");
|
||||
$this->addJoin("public.tbl_person", "public.tbl_person.person_id = public.tbl_benutzer.person_id");
|
||||
$res = $this->loadWhere($whereClause);
|
||||
if (isError($res)) {
|
||||
return $res;
|
||||
}
|
||||
if (hasData($res)) {
|
||||
foreach (getData($res) as $request) {
|
||||
$this->formatProfilRequest($request);
|
||||
}
|
||||
}
|
||||
|
||||
return $res;
|
||||
|
||||
}
|
||||
|
||||
//? remove File from the Profil Update
|
||||
public function removeFileFromProfilUpdate($dms_id)
|
||||
{
|
||||
|
||||
if(!is_int($dms_id) || $dms_id < 0){
|
||||
return error("not valid dms_id");
|
||||
}
|
||||
|
||||
return $this->execReadOnlyQuery("
|
||||
UPDATE public.tbl_profil_update
|
||||
SET attachment_id = NULL
|
||||
WHERE attachment_id = ?", [$dms_id]);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* getProfilUpdateWithPermission
|
||||
*
|
||||
* queries the profil updates and checks if the user trying to query the data has permissions to get the profil updates
|
||||
*
|
||||
* @param string $whereClause additional where clause that will be appended to the db query
|
||||
* @return array array with all the profil updates that the user is eligible to see
|
||||
*/
|
||||
public function getProfilUpdateWithPermission($whereClause = null)
|
||||
{
|
||||
|
||||
$studentBerechtigung = $this->permissionlib->isBerechtigt('student/stammdaten', 's');
|
||||
$mitarbeiterBerechtigung = $this->permissionlib->isBerechtigt('mitarbeiter/stammdaten', 's');
|
||||
$oe_berechtigung = $this->permissionlib->getOE_isEntitledFor('student/stammdaten');
|
||||
|
||||
$lang = "select index from public.tbl_sprache where sprache =" . $this->escape(getUserLanguage());
|
||||
$res = [];
|
||||
|
||||
if ($studentBerechtigung) {
|
||||
|
||||
|
||||
//? Nur wenn der/die AssistentIn auch die Berechtigung in der gleichen Organisationseinheit des Studenten hat
|
||||
$parameters = [];
|
||||
$query = "
|
||||
SELECT
|
||||
profil_update_id, tbl_profil_update.uid, (tbl_person.vorname || ' ' || tbl_person.nachname) AS name , topic, requested_change, tbl_profil_update.updateamum, tbl_profil_update.updatevon, tbl_profil_update.insertamum, tbl_profil_update.insertvon, status, public.tbl_profil_update_status.bezeichnung_mehrsprachig[(" . $lang . ")] as status_translated, status_timestamp, status_message, attachment_id
|
||||
FROM public.tbl_profil_update
|
||||
JOIN public.tbl_profil_update_status ON public.tbl_profil_update_status.status_kurzbz = public.tbl_profil_update.status
|
||||
JOIN public.tbl_student ON public.tbl_student.student_uid=public.tbl_profil_update.uid
|
||||
JOIN public.tbl_benutzer ON public.tbl_benutzer.uid = public.tbl_student.student_uid
|
||||
JOIN public.tbl_person ON public.tbl_benutzer.person_id=public.tbl_person.person_id
|
||||
JOIN public.tbl_studiengang ON public.tbl_studiengang.studiengang_kz=public.tbl_student.studiengang_kz
|
||||
Where public.tbl_studiengang.oe_kurzbz IN ? ";
|
||||
$parameters[] = $oe_berechtigung;
|
||||
if ($whereClause) {
|
||||
foreach ($whereClause as $key => $value) {
|
||||
$parameters[] = $value;
|
||||
$query .= " AND " . $key . " = ?";
|
||||
}
|
||||
}
|
||||
|
||||
$studentRequests = $this->execReadOnlyQuery($query, $parameters);
|
||||
|
||||
if (isError($studentRequests))
|
||||
return error("db error: " . getData($studentRequests));
|
||||
$studentRequests = getData($studentRequests) ?: [];
|
||||
foreach ($studentRequests as $request) {
|
||||
array_push($res, $request);
|
||||
}
|
||||
}
|
||||
if ($mitarbeiterBerechtigung) {
|
||||
$this->addSelect(["profil_update_id", "tbl_profil_update.uid", "(tbl_person.vorname || ' ' || tbl_person.nachname) AS name", "topic", "requested_change", "tbl_profil_update.updateamum", "tbl_profil_update.updatevon", "tbl_profil_update.insertamum", "tbl_profil_update.insertvon", "status", "public.tbl_profil_update_status.bezeichnung_mehrsprachig[(" . $lang . ")] AS status_translated", "status_timestamp", "status_message", "attachment_id"]);
|
||||
$this->addJoin('tbl_profil_update_status', 'tbl_profil_update_status.status_kurzbz=tbl_profil_update.status');
|
||||
$this->addJoin('tbl_mitarbeiter', 'tbl_mitarbeiter.mitarbeiter_uid=tbl_profil_update.uid');
|
||||
$this->addJoin('tbl_benutzer', 'tbl_benutzer.uid=tbl_profil_update.uid');
|
||||
$this->addJoin('tbl_person', 'tbl_benutzer.person_id=tbl_person.person_id');
|
||||
$mitarbeiterRequests = $this->loadWhere($whereClause);
|
||||
if (isError($mitarbeiterRequests))
|
||||
return error("db error: " . getData($mitarbeiterRequests));
|
||||
$mitarbeiterRequests = getData($mitarbeiterRequests) ?: [];
|
||||
foreach ($mitarbeiterRequests as $request) {
|
||||
array_push($res, $request);
|
||||
}
|
||||
}
|
||||
if ($res) {
|
||||
|
||||
foreach ($res as $request) {
|
||||
$this->formatProfilRequest($request);
|
||||
}
|
||||
}
|
||||
|
||||
return $res;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* formatProfilRequest
|
||||
*
|
||||
* formats the the properties of a profilUpdate request row result
|
||||
*
|
||||
* @param stdClass $request unflitered profilUpdate row result from the database
|
||||
* @return void
|
||||
*/
|
||||
private function formatProfilRequest($request)
|
||||
{
|
||||
$request->requested_change = json_decode($request->requested_change);
|
||||
$request->insertamum = !is_null($request->insertamum) ? date_create($request->insertamum)->format('d.m.Y') : null;
|
||||
$request->updateamum = !is_null($request->updateamum) ? date_create($request->updateamum)->format('d.m.Y') : null;
|
||||
$request->status_timestamp = !is_null($request->status_timestamp) ? date_create($request->status_timestamp)->format('d.m.Y') : null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
class Profil_update_status_model extends DB_Model
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'public.tbl_profil_update_status';
|
||||
$this->pk = ['status_kurzbz'];
|
||||
$this->hasSequence = false;
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
class Profil_update_topic_model extends DB_Model
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'public.tbl_profil_update_topic';
|
||||
$this->pk = ['topic_kurzbz'];
|
||||
$this->hasSequence = false;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
class Projects_Employees_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'sync.tbl_projects_employees';
|
||||
$this->pk = 'projects_employees_id';
|
||||
}
|
||||
|
||||
public function deleteByProjectTaskId($ids)
|
||||
{
|
||||
$qry = "DELETE FROM " . $this->dbTable . "
|
||||
WHERE project_task_id IN ?";
|
||||
|
||||
return $this->execQuery($qry, array($ids));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
<?php
|
||||
class Lehretools_model extends DB_Model
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'campus.tbl_lehre_tools';
|
||||
$this->pk = 'lehre_tools_id';
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Laedt die Tools zu einer Lehrveranstaltung
|
||||
* @param $lehrveranstaltung_id
|
||||
* @param $studiensemester_kurzbz
|
||||
*/
|
||||
public function getTools($lehrveranstaltung_id, $studiensemester_kurzbz, $sprache)
|
||||
{
|
||||
$query = "SELECT
|
||||
lehre_tools_id,
|
||||
bezeichnung[(SELECT index FROM public.tbl_sprache WHERE sprache = " . $this->escape($sprache) . ")] AS bezeichnung,
|
||||
kurzbz,
|
||||
basis_url,
|
||||
logo_dms_id
|
||||
FROM
|
||||
campus.tbl_lehre_tools
|
||||
JOIN campus.tbl_lehre_tools_organisationseinheit USING(lehre_tools_id)
|
||||
WHERE
|
||||
campus.tbl_lehre_tools_organisationseinheit.aktiv AND
|
||||
(
|
||||
oe_kurzbz IN(
|
||||
SELECT
|
||||
tbl_studiengang.oe_kurzbz
|
||||
FROM
|
||||
lehre.tbl_lehrveranstaltung
|
||||
JOIN public.tbl_studiengang USING(studiengang_kz)
|
||||
WHERE
|
||||
tbl_lehrveranstaltung.lehrveranstaltung_id = " . $this->escape(intval($lehrveranstaltung_id)) . "
|
||||
)
|
||||
OR
|
||||
oe_kurzbz IN(
|
||||
SELECT
|
||||
lehrfach.oe_kurzbz
|
||||
FROM
|
||||
lehre.tbl_lehreinheit
|
||||
JOIN lehre.tbl_lehrveranstaltung as lehrfach ON(lehrfach_id=lehrfach.lehrveranstaltung_id)
|
||||
WHERE
|
||||
tbl_lehreinheit.studiensemester_kurzbz = " . $this->escape($studiensemester_kurzbz) . "
|
||||
AND tbl_lehreinheit.lehrveranstaltung_id = " . $this->escape(intval($lehrveranstaltung_id)) . "
|
||||
)
|
||||
)
|
||||
ORDER BY lehre_tools_id";
|
||||
|
||||
$toolsres = $this->execReadOnlyQuery($query);
|
||||
$tools = (hasData($toolsres)) ? getData($toolsres) : array();
|
||||
|
||||
return $tools;
|
||||
}
|
||||
}
|
||||
@@ -20,4 +20,16 @@ class Ort_model extends DB_Model
|
||||
|
||||
return $this->OrtModel->loadWhere(array("raumtyp_kurzbz" => $raumtyp_kurzbz));
|
||||
}
|
||||
|
||||
public function getContentID($ort_kurzbz)
|
||||
{
|
||||
|
||||
return $this->execReadOnlyQuery("
|
||||
SELECT content_id
|
||||
FROM public.tbl_ort
|
||||
WHERE ort_kurzbz = ?;
|
||||
",[$ort_kurzbz]);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -11,4 +11,84 @@ class Reservierung_model extends DB_Model
|
||||
$this->dbTable = 'campus.tbl_reservierung';
|
||||
$this->pk = 'reservierung_id';
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $uid
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getReservierungen($start_date, $end_date, $ort_kurzbz = null)
|
||||
{
|
||||
|
||||
$stundenplan_reservierungen_query="SELECT r.* , stund.beginn, stund.ende,
|
||||
CASE
|
||||
WHEN r.gruppe_kurzbz IS NOT NULL THEN r.gruppe_kurzbz
|
||||
ELSE CONCAT(UPPER(studg.typ),UPPER(studg.kurzbz),'-',COALESCE(CAST(r.semester AS varchar),'/'),COALESCE(CAST(r.verband AS varchar),'/'))
|
||||
END as gruppen_kuerzel
|
||||
FROM campus.vw_reservierung r
|
||||
JOIN public.tbl_studiengang studg ON studg.studiengang_kz=r.studiengang_kz
|
||||
JOIN lehre.tbl_stunde stund ON stund.stunde = r.stunde
|
||||
LEFT JOIN public.tbl_benutzergruppe bg ON r.gruppe_kurzbz=bg.gruppe_kurzbz AND bg.uid=?
|
||||
LEFT JOIN public.tbl_studiensemester ss1 ON bg.studiensemester_kurzbz=ss1.studiensemester_kurzbz AND ss1.start <= r.datum AND ss1.ende >= r.datum
|
||||
LEFT JOIN public.tbl_studentlehrverband slv ON r.studiengang_kz=slv.studiengang_kz AND slv.student_uid=? AND (slv.semester=r.semester OR r.semester IS NULL) AND (slv.verband=r.verband OR r.verband IS NULL OR r.verband='' OR r.verband='0') AND (slv.gruppe=r.gruppe OR r.gruppe IS NULL OR r.gruppe ='' OR r.gruppe ='0') AND r.gruppe_kurzbz IS NULL
|
||||
LEFT JOIN public.tbl_studiensemester ss2 ON slv.studiensemester_kurzbz = ss2.studiensemester_kurzbz AND ss2.start <=r.datum AND ss2.ende >= r.datum
|
||||
WHERE datum >= ? AND datum <= ? AND (ss1.studiensemester_kurzbz IS NOT NULL
|
||||
OR ss2.studiensemester_kurzbz IS NOT NULL)";
|
||||
|
||||
$raum_reservierungen_query = "SELECT res.*, beginn, ende,
|
||||
CASE
|
||||
WHEN res.gruppe_kurzbz IS NOT NULL THEN res.gruppe_kurzbz
|
||||
ELSE CONCAT(UPPER(studg.typ),UPPER(studg.kurzbz),'-',COALESCE(CAST(res.semester AS varchar),'/'),COALESCE(CAST(res.verband AS varchar),'/'))
|
||||
END as gruppen_kuerzel
|
||||
FROM campus.vw_reservierung res
|
||||
JOIN public.tbl_studiengang studg ON studg.studiengang_kz=res.studiengang_kz
|
||||
JOIN lehre.tbl_stunde ON lehre.tbl_stunde.stunde = res.stunde
|
||||
WHERE res.ort_kurzbz = ? AND datum >= ? AND datum <= ?";
|
||||
|
||||
$subquery = is_null($ort_kurzbz)? $stundenplan_reservierungen_query:$raum_reservierungen_query;
|
||||
|
||||
$query_result= $this->execReadOnlyQuery("
|
||||
SELECT
|
||||
'reservierung' as type, beginn, ende, datum,
|
||||
COALESCE(titel, beschreibung) as topic,
|
||||
array_agg(DISTINCT mitarbeiter_kurzbz) as lektor,
|
||||
array_agg(DISTINCT (gruppe,verband,semester,studiengang_kz,gruppen_kuerzel)) as gruppe,
|
||||
|
||||
ort_kurzbz, 'FFFFFF' as farbe
|
||||
|
||||
FROM
|
||||
(
|
||||
". $subquery ."
|
||||
) AS subquery
|
||||
|
||||
GROUP BY datum, beginn, ende, ort_kurzbz, titel, beschreibung
|
||||
|
||||
ORDER BY datum, beginn
|
||||
", is_null($ort_kurzbz) ?[getAuthUID(), getAuthUID(),$start_date,$end_date]: [$ort_kurzbz, $start_date, $end_date]);
|
||||
|
||||
|
||||
return $query_result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $uid
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function loadForUid($uid)
|
||||
{
|
||||
$this->addSelect('r.*');
|
||||
$this->db->join('public.tbl_benutzergruppe bg', 'r.gruppe_kurzbz=bg.gruppe_kurzbz AND bg.uid=?', 'LEFT', false);
|
||||
$this->addJoin('public.tbl_studiensemester ss1', 'bg.studiensemester_kurzbz=ss1.studiensemester_kurzbz AND ss1.start<=r.datum AND ss1.ende>=r.datum', 'LEFT');
|
||||
$this->db->join('public.tbl_studentlehrverband slv', "r.studiengang_kz=slv.studiengang_kz AND slv.student_uid=? AND (slv.semester=r.semester OR r.semester IS NULL) AND (slv.verband=r.verband OR r.verband IS NULL OR r.verband='' OR r.verband='0') AND (slv.gruppe=r.gruppe OR r.gruppe IS NULL OR r.gruppe='' OR r.gruppe='0') AND r.gruppe_kurzbz IS NULL", 'LEFT', false);
|
||||
$this->addJoin('public.tbl_studiensemester ss2', 'slv.studiensemester_kurzbz=ss2.studiensemester_kurzbz AND ss2.start<=r.datum AND ss2.ende>=r.datum', 'LEFT');
|
||||
$this->db->or_where('ss1.studiensemester_kurzbz IS NOT NULL', null, false);
|
||||
$this->db->or_where('ss2.studiensemester_kurzbz IS NOT NULL', null, false);
|
||||
|
||||
$query = $this->db->get_compiled_select('campus.vw_reservierung r');
|
||||
|
||||
return $this->execQuery($query, [$uid, $uid]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -11,4 +11,318 @@ class Stundenplan_model extends DB_Model
|
||||
$this->dbTable = 'lehre.tbl_stundenplan';
|
||||
$this->pk = 'stundenplan_id';
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $ort_kurzbz
|
||||
* @param string $date
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getRoomDataOnInterval($ort_kurzbz,$start_date,$end_date){
|
||||
|
||||
|
||||
|
||||
/*$raum_stundenplan= $this->execReadOnlyQuery("
|
||||
-- merging all reservierungs information with the stundenplan information but with different types
|
||||
SELECT 'stundenplan_eintrag' as eintrags_type, CONCAT(UPPER(sp.stg_typ),UPPER(sp.stg_kurzbz),'-',COALESCE(CAST(sp.semester AS varchar),'/'),COALESCE(CAST(sp.verband AS varchar),'/')) AS stg, CONCAT(lehrfach,'-',lehrform) AS lv_info, ort_kurzbz, studiengang_kz, uid, stunde, datum, titel, semester, verband, gruppe, gruppe_kurzbz, stg_kurzbz, * FROM lehre.vw_stundenplan sp
|
||||
WHERE ort_kurzbz = ? AND datum >= ? AND datum <= ?
|
||||
UNION ALL
|
||||
SELECT 'reservierungs_eintrag' as eintrags_type, NULL, NULL, ort_kurzbz, studiengang_kz, uid, stunde, datum, titel, semester, verband, gruppe, gruppe_kurzbz, stg_kurzbz, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL FROM lehre.vw_reservierung res
|
||||
WHERE ort_kurzbz = ? AND datum >= ? AND datum <= ?
|
||||
", [$ort_kurzbz, $start_date, $end_date,$ort_kurzbz, $start_date, $end_date]);
|
||||
*/
|
||||
|
||||
|
||||
$raum_stundenplan= $this->execReadOnlyQuery("
|
||||
SELECT CONCAT(UPPER(sp.stg_typ),UPPER(sp.stg_kurzbz),'-',COALESCE(CAST(sp.semester AS varchar),'/'),COALESCE(CAST(sp.verband AS varchar),'/')) AS stg, CONCAT(lehrfach,'-',lehrform) AS lv_info, * FROM lehre.vw_stundenplan sp
|
||||
WHERE ort_kurzbz = ? AND datum >= ? AND datum <= ?
|
||||
", [$ort_kurzbz, $start_date, $end_date]);
|
||||
|
||||
return $raum_stundenplan;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $ort_kurzbz The room to query the planning for
|
||||
* @param string $start_date The start date of the query interval
|
||||
* @param string $end_date The end date of the query interval
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function groupedCalendarEvents($ort_kurzbz,$start_date,$end_date){
|
||||
|
||||
|
||||
$gruppierteEvents= $this->execReadOnlyQuery("
|
||||
SELECT
|
||||
|
||||
'reservierung' as type,
|
||||
NULL as unr,datum, stunde,
|
||||
titel AS topic,
|
||||
beschreibung as beschreibung,
|
||||
string_agg(DISTINCT gruppe, '/') as gruppe,
|
||||
string_agg(DISTINCT lektor, '/') as lektor,
|
||||
res.ort_kurzbz,res.studiengang_kz, res.titel, res.beschreibung,NULL as lehreinheit_id,NULL as lehrfach_id,NULL as anmerkung, NULL as fix,NULL as lehrveranstaltung_id,NULL as stg_kurzbzlang,NULL as stg_bezeichnung,NULL as stg_typ, NULL as fachbereich_kurzbz,NULL as lehrfach,NULL as lehrfach_bez,NULL as farbe,NULL as lehrform, NULL as anmerkung_lehreinheit
|
||||
|
||||
FROM
|
||||
|
||||
(
|
||||
SELECT
|
||||
NULL as unr,datum, stunde,
|
||||
CASE
|
||||
WHEN gruppe_kurzbz IS NOT NULL THEN gruppe_kurzbz
|
||||
ELSE CONCAT(UPPER(studg.typ),UPPER(res.stg_kurzbz),'-',COALESCE(CAST(res.semester AS varchar),'/'),COALESCE(CAST(res.verband AS varchar),'/'))
|
||||
END as gruppe,
|
||||
CASE
|
||||
WHEN mit.kurzbz IS NOT NULL THEN mit.kurzbz
|
||||
ELSE uid
|
||||
END as lektor,
|
||||
res.ort_kurzbz,res.studiengang_kz, res.titel, res.beschreibung,NULL as lehreinheit_id,NULL as lehrfach_id,NULL as anmerkung, NULL as fix,NULL as lehrveranstaltung_id,NULL as stg_kurzbzlang,NULL as stg_bezeichnung,NULL as stg_typ, NULL as fachbereich_kurzbz,NULL as lehrfach,NULL as lehrfach_bez,NULL as farbe,NULL as lehrform, NULL as anmerkung_lehreinheit
|
||||
FROM lehre.vw_reservierung res
|
||||
|
||||
LEFT JOIN public.tbl_mitarbeiter mit ON mit.mitarbeiter_uid=uid
|
||||
JOIN public.tbl_studiengang studg ON studg.studiengang_kz=res.studiengang_kz
|
||||
|
||||
WHERE
|
||||
res.ort_kurzbz = ?
|
||||
AND res.datum >= ?
|
||||
AND res.datum <= ?
|
||||
) as res
|
||||
|
||||
GROUP BY res.ort_kurzbz,res.studiengang_kz, res.datum, res.stunde, res.titel, res.beschreibung
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
|
||||
'stundenplan' as type,
|
||||
unr,datum, stunde,
|
||||
CONCAT(lehrfach,'-',lehrform) as topic,
|
||||
'' as beschreibung,
|
||||
string_agg(DISTINCT gruppe, '/') as gruppe,
|
||||
string_agg(DISTINCT lektor, '/') as lektor,
|
||||
ort_kurzbz, studiengang_kz, titel,'' as beschreibung,lehreinheit_id,lehrfach_id,anmerkung,fix,lehrveranstaltung_id,stg_kurzbzlang,stg_bezeichnung,stg_typ,fachbereich_kurzbz,lehrfach,lehrfach_bez,farbe,lehrform,anmerkung_lehreinheit
|
||||
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
unr,datum, stunde,
|
||||
CASE
|
||||
WHEN gruppe_kurzbz IS NOT NULL THEN gruppe_kurzbz
|
||||
ELSE CONCAT(UPPER(sp.stg_typ),UPPER(sp.stg_kurzbz),'-',COALESCE(CAST(sp.semester AS varchar),'/'),COALESCE(CAST(sp.verband AS varchar),'/'))
|
||||
END as gruppe,
|
||||
CASE
|
||||
WHEN sp.mitarbeiter_kurzbz IS NOT NULL THEN sp.mitarbeiter_kurzbz
|
||||
ELSE lektor
|
||||
END as lektor,
|
||||
ort_kurzbz, studiengang_kz, titel,'' as beschreibung,lehreinheit_id,lehrfach_id,anmerkung,fix,lehrveranstaltung_id,stg_kurzbzlang,stg_bezeichnung,stg_typ,fachbereich_kurzbz,lehrfach,lehrfach_bez,farbe,lehrform,anmerkung_lehreinheit
|
||||
|
||||
FROM lehre.vw_stundenplan sp
|
||||
|
||||
WHERE ort_kurzbz = ?
|
||||
AND datum >= ?
|
||||
AND datum <= ?
|
||||
|
||||
) as sp
|
||||
|
||||
GROUP BY
|
||||
|
||||
ort_kurzbz,unr, datum, stunde, lehreinheit_id, lehrfach_id,studiengang_kz,titel,anmerkung,fix,lehrveranstaltung_id,stg_kurzbzlang,stg_bezeichnung,stg_typ,fachbereich_kurzbz,lehrfach,lehrfach_bez,farbe,lehrform,anmerkung_lehreinheit
|
||||
|
||||
ORDER BY datum, stunde
|
||||
", [$ort_kurzbz, $start_date, $end_date, $ort_kurzbz, $start_date, $end_date]);
|
||||
|
||||
return $gruppierteEvents;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* groups rows of a subquery that fetches data from the lehre.vw_stundenplan table
|
||||
* @param string $stundenplanViewQuery the subquery used to group the result
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function stundenplanGruppierung($stundenplanViewQuery)
|
||||
{
|
||||
$query_result = $this->execReadOnlyQuery("
|
||||
SELECT
|
||||
'lehreinheit' as type, beginn, ende, datum,
|
||||
CONCAT(lehrfach,'-',lehrform) as topic,
|
||||
array_agg(DISTINCT lektor) as lektor,
|
||||
array_agg(DISTINCT (gruppe,verband,semester,studiengang_kz,gruppen_kuerzel)) as gruppe,
|
||||
string_agg(DISTINCT ort_kurzbz, '/') as ort_kurzbz,
|
||||
array_agg(DISTINCT lehreinheit_id) as lehreinheit_id,
|
||||
|
||||
titel, lehrfach, lehrform, lehrfach_bez, organisationseinheit, farbe, lehrveranstaltung_id
|
||||
|
||||
FROM
|
||||
(
|
||||
SELECT unr,datum,beginn, ende,
|
||||
CASE
|
||||
WHEN sp.mitarbeiter_kurzbz IS NOT NULL THEN sp.mitarbeiter_kurzbz
|
||||
ELSE lektor
|
||||
END as lektor,
|
||||
CASE
|
||||
WHEN gruppe_kurzbz IS NOT NULL THEN gruppe_kurzbz
|
||||
ELSE CONCAT(UPPER(sp.stg_typ),UPPER(sp.stg_kurzbz),'-',COALESCE(CAST(sp.semester AS varchar),'/'),COALESCE(CAST(sp.verband AS varchar),'/'))
|
||||
END as gruppen_kuerzel,
|
||||
(SELECT bezeichnung
|
||||
FROM public.tbl_organisationseinheit
|
||||
WHERE oe_kurzbz IN(
|
||||
SELECT oe_kurzbz
|
||||
FROM lehre.tbl_lehrveranstaltung
|
||||
WHERE lehrveranstaltung_id = sp.lehrveranstaltung_id
|
||||
)) as organisationseinheit,
|
||||
ort_kurzbz, studiengang_kz, titel,lehreinheit_id,lehrfach_id,anmerkung,fix,lehrveranstaltung_id,stg_kurzbzlang,stg_bezeichnung,stg_typ,fachbereich_kurzbz,lehrfach,lehrfach_bez,farbe,lehrform,anmerkung_lehreinheit,gruppe, verband, semester,stg_kurzbz
|
||||
|
||||
FROM (".$stundenplanViewQuery.") sp
|
||||
JOIN lehre.tbl_stunde ON lehre.tbl_stunde.stunde = sp.stunde
|
||||
|
||||
) as subquery
|
||||
|
||||
GROUP BY unr, datum, beginn, ende, ort_kurzbz, titel, lehrform, lehrfach, lehrfach_bez, organisationseinheit, farbe, lehrveranstaltung_id
|
||||
|
||||
ORDER BY datum, beginn
|
||||
");
|
||||
|
||||
return $query_result;
|
||||
}
|
||||
|
||||
/**
|
||||
* NO STANDALONE FUNCTION - Generates a SQL query string to fetch 'stundenplan' events for a specific student within the current semester.
|
||||
* @param string $uid the user id that is used to fetch the stundenplan rows from the lehre.vw_stundenplan table
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function getStundenplanQuery($start_date, $end_date,$semester,$gruppen,$studentlehrverbaende){
|
||||
|
||||
// helper function to check if either $gruppen or $studentlehrverbaende are empty for each semester
|
||||
$emptyCheck = function($toBeCheckedArray) use ($semester){
|
||||
$result = true;
|
||||
$sem = array_keys($semester);
|
||||
foreach($sem as $s){
|
||||
if(count($toBeCheckedArray[$s]) > 0){
|
||||
$result = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return $result;
|
||||
};
|
||||
|
||||
// if both the gruppen and the studentlehrverbaende are empty we early return
|
||||
if($emptyCheck($gruppen) && $emptyCheck($studentlehrverbaende))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$query =
|
||||
"select sp.*
|
||||
from lehre.vw_stundenplan sp
|
||||
WHERE
|
||||
sp.datum >= ".$this->escape($start_date)."
|
||||
AND sp.datum <= ".$this->escape($end_date);
|
||||
|
||||
// adds the AND sql chain only if both $gruppen and $studentlehrverbaende are not empty
|
||||
if(!$emptyCheck($gruppen) || !$emptyCheck($studentlehrverbaende))
|
||||
{
|
||||
$query .= " AND ( ";
|
||||
}
|
||||
|
||||
foreach($semester as $sem => $semester_date_range)
|
||||
{
|
||||
|
||||
foreach($semester_date_range as $sem_date => $sem_date_range)
|
||||
{
|
||||
// if there are not groups for the semester skip the iteration step
|
||||
if(!array_key_exists($sem_date,$gruppen) || count($gruppen[$sem_date]) == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
// converts the array of gruppen strings into a sql IN (_,_,_) chain
|
||||
$query .="(sp.gruppe_kurzbz IN (" .implode(',',$gruppen[$sem_date]).") AND sp.datum BETWEEN ".$this->escape($sem_date_range->start)." AND ".$this->escape($sem_date_range->ende)." )";
|
||||
|
||||
$query .="OR";
|
||||
}
|
||||
}
|
||||
|
||||
// if there are no studentlehrverbaende and the gruppen are not empty, we can remove the last OR added after the groups
|
||||
if($emptyCheck($studentlehrverbaende) && !$emptyCheck($gruppen))
|
||||
{
|
||||
$query = substr($query, 0, -2);
|
||||
}
|
||||
|
||||
foreach($semester as $sem=>$semester_date_range)
|
||||
{
|
||||
foreach($semester_date_range as $sem_date => $sem_date_range)
|
||||
{
|
||||
if(!array_key_exists($sem_date,$studentlehrverbaende) || count($studentlehrverbaende[$sem_date]) == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
foreach($studentlehrverbaende[$sem_date] as $key=>$lehrverband)
|
||||
{
|
||||
$query .= "((sp.studiengang_kz = ".$this->escape($lehrverband->studiengang_kz)." AND sp.semester = ".$this->escape($lehrverband->semester)." AND sp.verband = ".$this->escape($lehrverband->verband)." AND sp.gruppe = ".$this->escape($lehrverband->gruppe)." AND sp.datum BETWEEN ".$this->escape($sem_date_range->start)." AND ".$this->escape($sem_date_range->ende).")";
|
||||
// Eintraege fuer den ganzen Verband
|
||||
$query .= "OR (sp.studiengang_kz = ".$this->escape($lehrverband->studiengang_kz)." AND sp.semester = ".$this->escape($lehrverband->semester)." AND sp.verband = ".$this->escape($lehrverband->verband)." AND (sp.gruppe is null OR sp.gruppe='') AND sp.datum BETWEEN ".$this->escape($sem_date_range->start)." AND ".$this->escape($sem_date_range->ende).")";
|
||||
// Eintraege fuer das ganze Semester
|
||||
$query .= "OR (sp.studiengang_kz = ".$this->escape($lehrverband->studiengang_kz)." AND sp.semester = ".$this->escape($lehrverband->semester)." AND (sp.verband is null OR sp.verband='') AND sp.datum BETWEEN ".$this->escape($sem_date_range->start)." AND ".$this->escape($sem_date_range->ende).") AND gruppe_kurzbz is null)";
|
||||
|
||||
$query .="OR";
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// if the studentlehrverbaende is not empty we can remove the last OR that was added to the query
|
||||
if(!$emptyCheck($studentlehrverbaende))
|
||||
{
|
||||
$query = substr($query, 0, -2);
|
||||
}
|
||||
|
||||
// closes the AND sql chain only if it was opened previously
|
||||
if(!$emptyCheck($gruppen) || !$emptyCheck($studentlehrverbaende))
|
||||
{
|
||||
$query .= ")";
|
||||
}
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
/**
|
||||
* NO STANDALONE FUNCTION - Generates a SQL query string to fetch 'stundenplan' events for a specific room within a date range.
|
||||
* @param string $ort_kurzbz the ort from which we want to query the stundenplan events
|
||||
* @param string $start_date (inclusive) the minimum date that an event should have to be fetched
|
||||
* @param string $end_date (inclusive) the maximum date that an event should not extend to be fetched
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getRoomQuery($ort_kurzbz, $start_date, $end_date)
|
||||
{
|
||||
return
|
||||
"select sp.*
|
||||
FROM lehre.vw_stundenplan sp
|
||||
WHERE ort_kurzbz = ".$this->escape($ort_kurzbz)."
|
||||
AND datum >= ".$this->escape($start_date)."
|
||||
AND datum <= ".$this->escape($end_date);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $uid
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function loadForUid($uid)
|
||||
{
|
||||
$this->addSelect(['sp.*','le.studiensemester_kurzbz']);
|
||||
$this->db->join('public.tbl_benutzergruppe bg', 'sp.gruppe_kurzbz=bg.gruppe_kurzbz AND bg.uid=?', 'LEFT', false);
|
||||
$this->addJoin('public.tbl_studiensemester ss1', 'bg.studiensemester_kurzbz=ss1.studiensemester_kurzbz AND ss1.start<=sp.datum AND ss1.ende>=sp.datum', 'LEFT');
|
||||
$this->db->join('public.tbl_studentlehrverband slv', "sp.studiengang_kz=slv.studiengang_kz AND slv.student_uid=? AND (slv.semester=sp.semester OR sp.semester IS NULL) AND (slv.verband=sp.verband OR sp.verband IS NULL OR sp.verband='' OR sp.verband='0') AND (slv.gruppe=sp.gruppe OR sp.gruppe IS NULL OR sp.gruppe='' OR sp.gruppe='0') AND sp.gruppe_kurzbz IS NULL", 'LEFT', false);
|
||||
$this->addJoin('public.tbl_studiensemester ss2', 'slv.studiensemester_kurzbz=ss2.studiensemester_kurzbz AND ss2.start<=sp.datum AND ss2.ende>=sp.datum', 'LEFT');
|
||||
$this->db->join('lehre.tbl_lehreinheit le', 'le.lehreinheit_id=sp.lehreinheit_id', 'LEFT');
|
||||
$this->db->or_where('ss1.studiensemester_kurzbz IS NOT NULL', null, false);
|
||||
$this->db->or_where('ss2.studiensemester_kurzbz IS NOT NULL', null, false);
|
||||
|
||||
$query = $this->db->get_compiled_select('lehre.vw_stundenplan sp');
|
||||
|
||||
return $this->execQuery($query, [$uid, $uid]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -12,6 +12,8 @@ class Stundenplandev_model extends DB_Model
|
||||
$this->pk = 'stundenplandev_id';
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function getMissingDirectGroups($studiensemester_kurzbz = null)
|
||||
{
|
||||
$qry = "
|
||||
|
||||
@@ -13,5 +13,33 @@ class Stundensatz_model extends DB_Model
|
||||
$this->pk = 'stundensatz_id';
|
||||
$this->hasSequence = true;
|
||||
}
|
||||
|
||||
|
||||
public function getStundensatzByDatum($uid, $beginn, $ende = null, $typ = null)
|
||||
{
|
||||
$qry = "SELECT
|
||||
*
|
||||
FROM
|
||||
hr.tbl_stundensatz
|
||||
WHERE
|
||||
uid = ?
|
||||
AND (gueltig_bis >= ? OR gueltig_bis is null)";
|
||||
|
||||
$params = array($uid, $beginn);
|
||||
|
||||
if (!is_null($ende))
|
||||
{
|
||||
$qry .= " AND (gueltig_von <= ?)";
|
||||
$params[] = $ende;
|
||||
}
|
||||
|
||||
if (!is_null($typ))
|
||||
{
|
||||
$qry .= " AND stundensatztyp = ?";
|
||||
$params[] = $typ;
|
||||
}
|
||||
|
||||
$qry .= " ORDER BY gueltig_bis DESC NULLS FIRST, gueltig_von DESC NULLS LAST LIMIT 1;";
|
||||
|
||||
return $this->execQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
class Notiztyp_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'public.tbl_notiz_typ';
|
||||
$this->pk = 'typ_kurzbz';
|
||||
}
|
||||
}
|
||||
@@ -11,4 +11,19 @@ class Sprache_model extends DB_Model
|
||||
$this->dbTable = 'public.tbl_sprache';
|
||||
$this->pk = 'sprache';
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $sprachen
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function loadMultiple($sprachen)
|
||||
{
|
||||
$this->db->where_in('sprache', $sprachen);
|
||||
|
||||
$this->addOrder('index');
|
||||
|
||||
return $this->load();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -66,6 +66,15 @@ class Variable_model extends DB_Model
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!isset($vardata['emailadressentrennzeichen']))
|
||||
{
|
||||
$vardata['emailadressentrennzeichen'] =
|
||||
(defined('DEFAULT_EMAILADRESSENTRENNZEICHEN'))
|
||||
? DEFAULT_EMAILADRESSENTRENNZEICHEN
|
||||
: ',';
|
||||
}
|
||||
|
||||
$result = success($vardata);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user