diff --git a/application/controllers/api/frontend/v1/stv/Students.php b/application/controllers/api/frontend/v1/stv/Students.php
index f87e527e0..047652452 100644
--- a/application/controllers/api/frontend/v1/stv/Students.php
+++ b/application/controllers/api/frontend/v1/stv/Students.php
@@ -25,9 +25,6 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
*/
class Students extends FHCAPI_Controller
{
- private $allowedStgs = [];
-
-
public function __construct()
{
$permissions = [];
@@ -35,16 +32,17 @@ class Students extends FHCAPI_Controller
$permissions[$router->method] = ['admin:r', 'assistenz:r'];
parent::__construct($permissions);
- $this->allowedStgs = $this->permissionlib->getSTG_isEntitledFor('admin') ?: [];
- $this->allowedStgs = array_merge($this->allowedStgs, $this->permissionlib->getSTG_isEntitledFor('assistenz') ?: []);
+ $allowedStgs = $this->permissionlib->getSTG_isEntitledFor('admin') ?: [];
+ $allowedStgs = array_merge($allowedStgs, $this->permissionlib->getSTG_isEntitledFor('assistenz') ?: []);
- if (!$this->allowedStgs) {
+ if (!$allowedStgs) {
$this->_outputAuthError([$router->method => ['admin:r', 'assistenz:r']]);
exit;
}
// Load Libraries
$this->load->library('PhrasesLib');
+ $this->load->library('stv/StudentListLib', ['allowedStgs' => $allowedStgs]);
$this->loadPhrases(
array(
'lehre'
@@ -111,23 +109,19 @@ class Students extends FHCAPI_Controller
]);
- $this->load->model('crm/Prestudent_model', 'PrestudentModel');
-
-
- $this->PrestudentModel->addJoin(
+ $this->studentlistlib->addJoin(
"(
SELECT prestudent_id
FROM public.tbl_prestudentstatus
WHERE status_kurzbz = 'Incoming'
AND studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
) test",
- "prestudent_id"
+ "prestudent_id",
+ "",
+ "start"
);
-
- $this->prepareQuery($studiensemester_kurzbz);
-
- $this->PrestudentModel->addSelect("COALESCE(
+ $this->studentlistlib->addSelect("COALESCE(
v.semester::text,
CASE
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
@@ -135,16 +129,13 @@ class Students extends FHCAPI_Controller
ELSE ''::text
END
) AS semester", false);
- $this->PrestudentModel->addSelect("COALESCE(v.verband::text, ''::text)");
- $this->PrestudentModel->addSelect("COALESCE(v.gruppe::text, ''::text)");
-
- $this->addSelectPrioRel();
+ $this->studentlistlib->addSelect("COALESCE(v.verband::text, ''::text) AS verband");
+ $this->studentlistlib->addSelect("COALESCE(v.gruppe::text, ''::text) AS gruppe");
+
$this->addFilter($studiensemester_kurzbz);
-
- $result = $this->PrestudentModel->load();
-
+ $result = $this->studentlistlib->execute($studiensemester_kurzbz);
$data = $this->getDataOrTerminateWithError($result);
@@ -164,10 +155,7 @@ class Students extends FHCAPI_Controller
]);
- $this->load->model('crm/Prestudent_model', 'PrestudentModel');
-
-
- $this->PrestudentModel->addJoin(
+ $this->studentlistlib->addJoin(
"(
SELECT prestudent_id
FROM bis.tbl_bisio bis
@@ -187,14 +175,12 @@ class Students extends FHCAPI_Controller
) AND stdsem.studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
GROUP BY prestudent_id
) test",
- "prestudent_id"
+ "prestudent_id",
+ "",
+ "start"
);
-
- $this->prepareQuery($studiensemester_kurzbz);
-
-
- $this->PrestudentModel->addSelect("COALESCE(
+ $this->studentlistlib->addSelect("COALESCE(
v.semester::text,
CASE
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
@@ -202,16 +188,13 @@ class Students extends FHCAPI_Controller
ELSE ''::text
END
) AS semester", false);
- $this->PrestudentModel->addSelect("COALESCE(v.verband::text, ''::text)");
- $this->PrestudentModel->addSelect("COALESCE(v.gruppe::text, ''::text)");
+ $this->studentlistlib->addSelect("COALESCE(v.verband::text, ''::text) AS verband");
+ $this->studentlistlib->addSelect("COALESCE(v.gruppe::text, ''::text) AS gruppe");
- $this->addSelectPrioRel();
$this->addFilter($studiensemester_kurzbz);
-
- $result = $this->PrestudentModel->load();
-
+ $result = $this->studentlistlib->execute($studiensemester_kurzbz);
$data = $this->getDataOrTerminateWithError($result);
@@ -231,23 +214,18 @@ class Students extends FHCAPI_Controller
]);
- $this->load->model('crm/Prestudent_model', 'PrestudentModel');
-
-
- $this->PrestudentModel->addJoin(
+ $this->studentlistlib->addJoin(
"(
SELECT prestudent_id
FROM bis.tbl_mobilitaet
WHERE studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
) bis",
- "prestudent_id"
+ "prestudent_id",
+ "",
+ "start"
);
-
- $this->prepareQuery($studiensemester_kurzbz);
-
-
- $this->PrestudentModel->addSelect("COALESCE(
+ $this->studentlistlib->addSelect("COALESCE(
v.semester::text,
CASE
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
@@ -255,16 +233,13 @@ class Students extends FHCAPI_Controller
ELSE ''::text
END
) AS semester", false);
- $this->PrestudentModel->addSelect("COALESCE(v.verband::text, ''::text)");
- $this->PrestudentModel->addSelect("COALESCE(v.gruppe::text, ''::text)");
+ $this->studentlistlib->addSelect("COALESCE(v.verband::text, ''::text) AS verband");
+ $this->studentlistlib->addSelect("COALESCE(v.gruppe::text, ''::text) AS gruppe");
- $this->addSelectPrioRel();
$this->addFilter($studiensemester_kurzbz);
-
- $result = $this->PrestudentModel->load();
-
+ $result = $this->studentlistlib->execute($studiensemester_kurzbz);
$data = $this->getDataOrTerminateWithError($result);
@@ -313,8 +288,6 @@ class Students extends FHCAPI_Controller
*/
protected function fetchPrestudents($studiengang_kz, $studiensemester_kurzbz = null, $filter = null, $orgform_kurzbz = null)
{
- $this->load->model('crm/Prestudent_model', 'PrestudentModel');
-
$stdsemEsc = $studiensemester_kurzbz ? $this->PrestudentModel->escape($studiensemester_kurzbz) : 'NULL';
$selectRT = "
@@ -331,38 +304,38 @@ class Students extends FHCAPI_Controller
AND r.studiensemester_kurzbz=" . $stdsemEsc;
- $where = ['tbl_prestudent.studiengang_kz' => $studiengang_kz];
+ $this->studentlistlib->addWhere('tbl_prestudent.studiengang_kz', $studiengang_kz);
if ($orgform_kurzbz) {
- $where['ps.orgform_kurzbz'] = $orgform_kurzbz;
+ $this->studentlistlib->addWhere('ps.orgform_kurzbz', $orgform_kurzbz);
}
switch ($filter) {
case "interessenten":
- $where['ps.status_kurzbz'] = 'Interessent';
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
break;
case "bewerbungnichtabgeschickt":
- $where['ps.status_kurzbz'] = 'Interessent';
- $where['ps.bewerbung_abgeschicktamum'] = null;
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
+ $this->studentlistlib->addWhere('ps.bewerbung_abgeschicktamum IS NULL');
break;
case "bewerbungabgeschickt":
- $where['ps.status_kurzbz'] = 'Interessent';
- $where['ps.bewerbung_abgeschicktamum IS NOT NULL'] = null;
- $where['ps.bestaetigtam'] = null;
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
+ $this->studentlistlib->addWhere('ps.bewerbung_abgeschicktamum IS NOT NULL');
+ $this->studentlistlib->addWhere('ps.bestaetigtam IS NULL');
break;
case "statusbestaetigt":
- $where['ps.status_kurzbz'] = 'Interessent';
- $where['ps.bestaetigtam IS NOT NULL'] = null;
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
+ $this->studentlistlib->addWhere('ps.bestaetigtam IS NOT NULL');
break;
case "statusbestaetigtrtnichtangemeldet":
- $where['ps.status_kurzbz'] = 'Interessent';
- $where['ps.bestaetigtam IS NOT NULL'] = null;
- $this->PrestudentModel->db->where('NOT EXISTS(' . $selectRT . ')', null, false);
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
+ $this->studentlistlib->addWhere('ps.bestaetigtam IS NOT NULL');
+ $this->studentlistlib->addWhere('NOT EXISTS(' . $selectRT . ')', null, false);
break;
case "statusbestaetigtrtangemeldet":
- $where['ps.status_kurzbz'] = 'Interessent';
- $where['ps.bestaetigtam IS NOT NULL'] = null;
- $this->PrestudentModel->db->where('EXISTS(' . $selectRT . ')', null, false);
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
+ $this->studentlistlib->addWhere('ps.bestaetigtam IS NOT NULL');
+ $this->studentlistlib->addWhere('EXISTS(' . $selectRT . ')', null, false);
break;
case "zgv":
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
@@ -374,69 +347,69 @@ class Students extends FHCAPI_Controller
$this->terminateWithSuccess([]);
$stg = current($stg);
- $where['ps.status_kurzbz'] = 'Interessent';
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
if ($stg->typ == 'm') {
- $where['zgvmas_code IS NOT NULL'] = null;
+ $this->studentlistlib->addWhere('zgvmas_code IS NOT NULL');
if (defined('ZGV_ERFUELLT_ANZEIGEN') && ZGV_ERFUELLT_ANZEIGEN)
- $where['zgvmas_erfuellt'] = true;
+ $this->studentlistlib->addWhere('zgvmas_erfuellt', true);
} elseif ($stg->typ == 'p') {
- $where['zgvdoktor_code IS NOT NULL'] = null;
+ $this->studentlistlib->addWhere('zgvdoktor_code IS NOT NULL');
if (defined('ZGV_DOKTOR_ANZEIGEN') && ZGV_DOKTOR_ANZEIGEN)
- $where['zgvdoktor_erfuellt'] = true;
+ $this->studentlistlib->addWhere('zgvdoktor_erfuellt', true);
} else {
- $where['zgv_code IS NOT NULL'] = null;
+ $this->studentlistlib->addWhere('zgv_code IS NOT NULL');
if (defined('ZGV_ERFUELLT_ANZEIGEN') && ZGV_ERFUELLT_ANZEIGEN)
- $where['zgv_erfuellt'] = true;
+ $this->studentlistlib->addWhere('zgv_erfuellt', true);
}
break;
case "reihungstestangemeldet":
- $where['ps.status_kurzbz'] = 'Interessent';
- $this->PrestudentModel->db->where('EXISTS(' . $selectRT . ')', null, false);
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
+ $this->studentlistlib->addWhere('EXISTS(' . $selectRT . ')', null, false);
break;
case "reihungstestnichtangemeldet":
- $where['ps.status_kurzbz'] = 'Interessent';
- $this->PrestudentModel->db->where('NOT EXISTS(' . $selectRT . ')', null, false);
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
+ $this->studentlistlib->addWhere('NOT EXISTS(' . $selectRT . ')', null, false);
break;
case "bewerber":
- $where['ps.status_kurzbz'] = 'Bewerber';
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Bewerber');
break;
case "bewerberrtnichtangemeldet":
- $where['ps.status_kurzbz'] = 'Bewerber';
- $this->PrestudentModel->db->where('NOT EXISTS(' . $selectRT . ')', null, false);
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Bewerber');
+ $this->studentlistlib->addWhere('NOT EXISTS(' . $selectRT . ')', null, false);
break;
case "bewerberrtangemeldet":
- $where['ps.status_kurzbz'] = 'Bewerber';
- $this->PrestudentModel->db->where('EXISTS(' . $selectRT . ')', null, false);
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Bewerber');
+ $this->studentlistlib->addWhere('EXISTS(' . $selectRT . ')', null, false);
break;
case "bewerberrtangemeldetteilgenommen":
- $where['ps.status_kurzbz'] = 'Bewerber';
- $this->PrestudentModel->db->where('EXISTS(' . $selectRT . ')', null, false);
- $where['reihungstestangetreten'] = true;
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Bewerber');
+ $this->studentlistlib->addWhere('EXISTS(' . $selectRT . ')', null, false);
+ $this->studentlistlib->addWhere('reihungstestangetreten', true);
break;
case "bewerberrtangemeldetnichtteilgenommen":
- $where['ps.status_kurzbz'] = 'Bewerber';
- $this->PrestudentModel->db->where('EXISTS(' . $selectRT . ')', null, false);
- $where['reihungstestangetreten'] = false;
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Bewerber');
+ $this->studentlistlib->addWhere('EXISTS(' . $selectRT . ')', null, false);
+ $this->studentlistlib->addWhere('reihungstestangetreten', false);
break;
case "aufgenommen":
- $where['ps.status_kurzbz'] = 'Aufgenommener';
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Aufgenommener');
break;
case "warteliste":
- $where['ps.status_kurzbz'] = 'Wartender';
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Wartender');
break;
case "absage":
- $where['ps.status_kurzbz'] = 'Abgewiesener';
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Abgewiesener');
break;
case "incoming":
// NOTE(chris): in FAS it was not filtered for studiengang_kz
- $where['ps.status_kurzbz'] = 'Incoming';
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Incoming');
break;
case "absolvent":
- $where['ps.status_kurzbz'] = 'Absolvent';
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Absolvent');
break;
case "diplomand":
- $where['ps.status_kurzbz'] = 'Diplomand';
+ $this->studentlistlib->addWhere('ps.status_kurzbz', 'Diplomand');
break;
default:
if (!$studiensemester_kurzbz) {
@@ -444,9 +417,9 @@ class Students extends FHCAPI_Controller
* show all prestudents in this stg who don't have a status
* $orgform_kurzbz does not change the results since orgform is stored in the status table
*/
- $where['ps.status_kurzbz'] = null;
+ $this->studentlistlib->addWhere('ps.status_kurzbz IS NULL');
} else {
- $this->PrestudentModel->db->where_in('ps.status_kurzbz', [
+ $this->studentlistlib->addWhere('ps.status_kurzbz', [
'Interessent',
'Bewerber',
'Aufgenommener',
@@ -457,21 +430,19 @@ class Students extends FHCAPI_Controller
break;
}
- $this->prepareQuery($studiensemester_kurzbz);
-
- $this->PrestudentModel->addSelect("
+ $this->studentlistlib->addSelect("
CASE
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
THEN ps.ausbildungssemester::text
ELSE ''::text
END AS semester", false);
- $this->PrestudentModel->addSelect("'' AS verband");
- $this->PrestudentModel->addSelect("'' AS gruppe");
- $this->addSelectPrioRel();
+ $this->studentlistlib->addSelect("'' AS verband");
+ $this->studentlistlib->addSelect("'' AS gruppe");
+
$this->addFilter($studiensemester_kurzbz);
- $result = $this->PrestudentModel->loadWhere($where);
+ $result = $this->studentlistlib->execute($studiensemester_kurzbz);
$data = $this->getDataOrTerminateWithError($result);
@@ -574,7 +545,6 @@ class Students extends FHCAPI_Controller
$gruppe_kurzbz = null,
$orgform_kurzbz = null
) {
- $this->load->model('crm/Prestudent_model', 'PrestudentModel');
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
if (!$this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz))
@@ -582,34 +552,29 @@ class Students extends FHCAPI_Controller
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
}
- $this->prepareQuery($studiensemester_kurzbz, '');
+ // NOTE(chris): overwrite 'LEFT JOIN' with 'JOIN'
+ $this->studentlistlib->addJoin("public.tbl_student s", "prestudent_id");
- $this->PrestudentModel->addSelect('v.semester');
- $this->PrestudentModel->addSelect('v.verband');
- $this->PrestudentModel->addSelect('v.gruppe');
- $this->PrestudentModel->addSelect("'' AS priorisierung_relativ");
-
-
- $where = [];
+ $this->studentlistlib->addSelect("'' AS priorisierung_relativ");
if ($gruppe_kurzbz !== null) {
- $this->PrestudentModel->addJoin('public.tbl_benutzergruppe g', 'uid');
- $where['g.gruppe_kurzbz'] = $gruppe_kurzbz;
- $where['g.studiensemester_kurzbz'] = $studiensemester_kurzbz;
+ $this->studentlistlib->addJoin('public.tbl_benutzergruppe g', 'uid', '', 'after_b');
+ $this->studentlistlib->addWhere('g.gruppe_kurzbz', $gruppe_kurzbz);
+ $this->studentlistlib->addWhere('g.studiensemester_kurzbz', $studiensemester_kurzbz);
} else {
- $where['v.studiengang_kz'] = $studiengang_kz;
+ $this->studentlistlib->addWhere('v.studiengang_kz', $studiengang_kz);
if ($semester !== null)
- $where['v.semester'] = $semester;
+ $this->studentlistlib->addWhere('v.semester', $semester);
if ($verband !== null)
- $where['v.verband'] = $verband;
+ $this->studentlistlib->addWhere('v.verband', $verband);
if ($gruppe !== null)
- $where['v.gruppe'] = $gruppe;
+ $this->studentlistlib->addWhere('v.gruppe', $gruppe);
if (!$verband && !$gruppe && $orgform_kurzbz !== null) {
- $this->PrestudentModel->db->where(
+ $this->studentlistlib->addWhere(
"(
SELECT orgform_kurzbz
FROM public.tbl_prestudentstatus
@@ -623,9 +588,10 @@ class Students extends FHCAPI_Controller
}
}
+
$this->addFilter($studiensemester_kurzbz);
- $result = $this->PrestudentModel->loadWhere($where);
+ $result = $this->studentlistlib->execute($studiensemester_kurzbz);
$data = $this->getDataOrTerminateWithError($result);
@@ -652,11 +618,8 @@ class Students extends FHCAPI_Controller
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
}
- $this->load->model('crm/Prestudent_model', 'PrestudentModel');
-
- $this->prepareQuery($studiensemester_kurzbz);
-
- $this->PrestudentModel->addSelect("COALESCE(
+
+ $this->studentlistlib->addSelect("COALESCE(
v.semester::text,
CASE
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
@@ -664,16 +627,15 @@ class Students extends FHCAPI_Controller
ELSE ''::text
END
) AS semester", false);
- $this->PrestudentModel->addSelect("COALESCE(v.verband::text, ''::text)");
- $this->PrestudentModel->addSelect("COALESCE(v.gruppe::text, ''::text)");
+ $this->studentlistlib->addSelect("COALESCE(v.verband::text, ''::text) AS verband");
+ $this->studentlistlib->addSelect("COALESCE(v.gruppe::text, ''::text) AS gruppe");
+
+ $this->studentlistlib->addWhere('tbl_prestudent.prestudent_id', $prestudent_id);
- $this->addSelectPrioRel();
$this->addFilter($studiensemester_kurzbz);
- $result = $this->PrestudentModel->loadWhere([
- 'tbl_prestudent.prestudent_id' => $prestudent_id
- ]);
+ $result = $this->studentlistlib->execute($studiensemester_kurzbz);
$data = $this->getDataOrTerminateWithError($result);
@@ -700,23 +662,13 @@ class Students extends FHCAPI_Controller
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
}
- $this->load->model('crm/Prestudent_model', 'PrestudentModel');
-
- $this->prepareQuery($studiensemester_kurzbz);
-
- $this->PrestudentModel->addSelect('v.semester');
- $this->PrestudentModel->addSelect('v.verband');
- $this->PrestudentModel->addSelect('v.gruppe');
-
- $this->addSelectPrioRel();
-
+ $this->studentlistlib->addWhere('s.student_uid', $student_uid);
+
$this->addFilter($studiensemester_kurzbz);
- $result = $this->PrestudentModel->loadWhere([
- 's.student_uid' => $student_uid
- ]);
+ $result = $this->studentlistlib->execute($studiensemester_kurzbz);
$data = $this->getDataOrTerminateWithError($result);
@@ -744,21 +696,13 @@ class Students extends FHCAPI_Controller
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
}
- $this->load->model('crm/Prestudent_model', 'PrestudentModel');
- $this->prepareQuery($studiensemester_kurzbz);
-
- $this->PrestudentModel->addSelect('v.semester');
- $this->PrestudentModel->addSelect('v.verband');
- $this->PrestudentModel->addSelect('v.gruppe');
-
- $this->addSelectPrioRel();
+ $this->studentlistlib->addWhere('p.person_id', $person_id);
+
$this->addFilter($studiensemester_kurzbz);
- $result = $this->PrestudentModel->loadWhere([
- 'p.person_id' => $person_id
- ]);
+ $result = $this->studentlistlib->execute($studiensemester_kurzbz);
$data = $this->getDataOrTerminateWithError($result);
@@ -790,29 +734,8 @@ class Students extends FHCAPI_Controller
$data = $this->getDataOrTerminateWithError($result);
-
- $this->load->model('crm/Prestudent_model', 'PrestudentModel');
-
- $this->prepareQuery($studiensemester_kurzbz);
-
- $this->PrestudentModel->addSelect("COALESCE(v.semester::text, CASE WHEN public.get_rolle_prestudent(tbl_prestudent.prestudent_id, NULL) IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent') THEN public.get_absem_prestudent(tbl_prestudent.prestudent_id, NULL)::text ELSE ''::text END) AS semester", false);
- $this->PrestudentModel->addSelect('v.verband');
- $this->PrestudentModel->addSelect('v.gruppe');
-
- //add status per semester
- $this->PrestudentModel->addSelect(
- "public.get_rolle_prestudent(public.tbl_prestudent.prestudent_id, "
- . $this->PrestudentModel->escape($studiensemester_kurzbz)
- . ") AS statusofsemester"
- );
-
- $this->addSelectPrioRel();
-
- $this->addFilter($studiensemester_kurzbz);
-
$prestudent_ids = [];
$student_uids = [];
- $this->addMeta('data', $data);
foreach ($data as $row) {
$dataset = json_decode($row->data);
if ($row->type == 'prestudent') {
@@ -822,197 +745,38 @@ class Students extends FHCAPI_Controller
}
}
+
+ $this->studentlistlib->addSelect("COALESCE(
+ v.semester::text,
+ CASE
+ WHEN public.get_rolle_prestudent(tbl_prestudent.prestudent_id, NULL) IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
+ THEN public.get_absem_prestudent(tbl_prestudent.prestudent_id, NULL)::text
+ ELSE ''::text
+ END
+ ) AS semester", false);
+
+
if ($prestudent_ids && $student_uids) {
- $this->PrestudentModel->db->where_in('tbl_prestudent.prestudent_id', $prestudent_ids);
- $this->PrestudentModel->db->or_where_in('s.student_uid', $student_uids);
+ $this->studentlistlib->addWhere('tbl_prestudent.prestudent_id', $prestudent_ids);
+ $this->studentlistlib->addOrWhere('s.student_uid', $student_uids);
} elseif ($prestudent_ids) {
- $this->PrestudentModel->db->where_in('tbl_prestudent.prestudent_id', $prestudent_ids);
+ $this->studentlistlib->addWhere('tbl_prestudent.prestudent_id', $prestudent_ids);
} elseif ($student_uids) {
- $this->PrestudentModel->db->where_in('s.student_uid', $student_uids);
+ $this->studentlistlib->addWhere('s.student_uid', $student_uids);
} else {
$this->terminateWithSuccess([]);
}
- $result = $this->PrestudentModel->load();
+
+ $this->addFilter($studiensemester_kurzbz);
+
+ $result = $this->studentlistlib->execute($studiensemester_kurzbz);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
- /**
- * @param string|null $studiensemester_kurzbz
- * @param string $type
- *
- * @return void
- */
- protected function prepareQuery($studiensemester_kurzbz, $type = 'LEFT')
- {
- $stdsemEsc = $studiensemester_kurzbz ? $this->PrestudentModel->escape($studiensemester_kurzbz) : 'NULL';
-
- $this->load->config('stv');
-
- if(defined('STV_TAGS_ENABLED') && STV_TAGS_ENABLED)
- {
- $tags = $this->config->item('stv_prestudent_tags');
-
- $whereTags = '';
- if (is_array($tags) && !isEmptyArray($tags)) {
- $tags = array_keys($tags);
-
- foreach ($tags as $key => $tag) {
- $tags[$key] = $this->db->escape($tag);
- }
- $whereTags = " AND nt.typ_kurzbz IN (" . implode(",", $tags) . ")";
- }
- $subQueryTag = "
- (
- SELECT
- tag.prestudent_id,
- COALESCE(json_agg(tag ORDER BY tag.done), '[]'::json) AS tags
- FROM (
- SELECT DISTINCT ON (n.notiz_id)
- n.notiz_id AS id,
- nt.typ_kurzbz,
- array_to_json(nt.bezeichnung_mehrsprachig)->>0 AS beschreibung,
- n.text AS notiz,
- nt.style,
- n.erledigt AS done,
- nz.prestudent_id
- FROM public.tbl_notizzuordnung AS nz
- JOIN public.tbl_notiz AS n ON nz.notiz_id = n.notiz_id
- JOIN public.tbl_notiz_typ AS nt ON n.typ = nt.typ_kurzbz "
- . $whereTags .
- "
- ) AS tag
- GROUP BY tag.prestudent_id
- ) AS tag_data_agg
- ";
- }
-
- $this->PrestudentModel->addJoin('public.tbl_studiengang stg', 'studiengang_kz', 'LEFT');
- $this->PrestudentModel->addJoin('public.tbl_person p', 'person_id');
- $this->PrestudentModel->addJoin('public.tbl_student s', 'prestudent_id', $type);
- $this->PrestudentModel->addJoin('public.tbl_prestudentstatus pls', '
- pls.status_kurzbz=public.get_rolle_prestudent(tbl_prestudent.prestudent_id, NULL)
- AND pls.prestudent_id=tbl_prestudent.prestudent_id
- AND pls.studiensemester_kurzbz=public.get_stdsem_prestudent(tbl_prestudent.prestudent_id, NULL)
- AND pls.ausbildungssemester=public.get_absem_prestudent(tbl_prestudent.prestudent_id, NULL)', 'LEFT');
- $this->PrestudentModel->addJoin('lehre.tbl_studienplan sp', 'studienplan_id', 'LEFT');
- $this->PrestudentModel->addJoin('public.tbl_benutzer b', 's.student_uid=b.uid', 'LEFT');
- $this->PrestudentModel->addJoin(
- 'public.tbl_studentlehrverband v',
- 'v.student_uid=s.student_uid AND v.studiensemester_kurzbz' . ($studiensemester_kurzbz ? '=' . $stdsemEsc : ' IS NULL'),
- $type
- );
- $this->PrestudentModel->addJoin('public.tbl_prestudentstatus ps', '
- ps.status_kurzbz=public.get_rolle_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')
- AND ps.prestudent_id=tbl_prestudent.prestudent_id
- AND ps.studiensemester_kurzbz=public.get_stdsem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')
- AND ps.ausbildungssemester=public.get_absem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')', 'LEFT');
-
- if(defined('STV_TAGS_ENABLED') && STV_TAGS_ENABLED)
- {
- $this->PrestudentModel->addJoin($subQueryTag, 'tag_data_agg.prestudent_id = tbl_prestudent.prestudent_id', 'LEFT');
- }
-
-
- $this->PrestudentModel->addSelect("b.uid");
- if(defined('STV_TAGS_ENABLED') && STV_TAGS_ENABLED)
- {
- $this->PrestudentModel->addSelect('tag_data_agg.tags');
- }
- $this->PrestudentModel->addSelect('titelpre');
- $this->PrestudentModel->addSelect('nachname');
- $this->PrestudentModel->addSelect('vorname');
- $this->PrestudentModel->addSelect('wahlname');
- $this->PrestudentModel->addSelect('vornamen');
- $this->PrestudentModel->addSelect('titelpost');
- $this->PrestudentModel->addSelect('ersatzkennzeichen');
- $this->PrestudentModel->addSelect('gebdatum');
- $this->PrestudentModel->addSelect('geschlecht');
- $this->PrestudentModel->addSelect('foto');
- $this->PrestudentModel->addSelect('foto_sperre');
-
- // semester
- // verband
- // gruppe
-
- //add status per semester
- $this->PrestudentModel->addSelect(
- "public.get_rolle_prestudent(public.tbl_prestudent.prestudent_id, "
- . $this->PrestudentModel->escape($studiensemester_kurzbz)
- . ") AS statusofsemester"
- );
-
- $this->PrestudentModel->addSelect('UPPER(stg.typ || stg.kurzbz) AS studiengang');
- $this->PrestudentModel->addSelect('tbl_prestudent.studiengang_kz');
- $this->PrestudentModel->addSelect('stg.bezeichnung AS stg_bezeichnung');
- $this->PrestudentModel->addSelect("s.matrikelnr");
- $this->PrestudentModel->addSelect('p.person_id');
- $this->PrestudentModel->addSelect('pls.status_kurzbz AS status');
- $this->PrestudentModel->addSelect('pls.datum AS status_datum');
- $this->PrestudentModel->addSelect('pls.bestaetigtam AS status_bestaetigung');
- $this->PrestudentModel->addSelect(
- "(SELECT kontakt FROM public.tbl_kontakt WHERE kontakttyp='email' AND person_id=p.person_id AND zustellung LIMIT 1) AS mail_privat",
- false
- );
- $this->PrestudentModel->addSelect("
- CASE WHEN b.uid IS NOT NULL AND b.uid<>''
- THEN CONCAT(b.uid, '@', " . $this->PrestudentModel->escape(DOMAIN) . ")
- ELSE '' END AS mail_intern", false);
- $this->PrestudentModel->addSelect('p.anmerkung AS anmerkungen');
- $this->PrestudentModel->addSelect('tbl_prestudent.anmerkung');
- $this->PrestudentModel->addSelect('pls.orgform_kurzbz');
- $this->PrestudentModel->addSelect('aufmerksamdurch_kurzbz');
- $this->PrestudentModel->addSelect(
- "(SELECT rt_gesamtpunkte AS punkte FROM public.tbl_prestudent WHERE prestudent_id=ps.prestudent_id) AS punkte",
- false
- );
- $this->PrestudentModel->addSelect('tbl_prestudent.aufnahmegruppe_kurzbz');
- $this->PrestudentModel->addSelect('tbl_prestudent.dual');
- $this->PrestudentModel->addSelect('p.matr_nr');
- $this->PrestudentModel->addSelect('sp.bezeichnung AS studienplan_bezeichnung');
- $this->PrestudentModel->addSelect('tbl_prestudent.prestudent_id');
-
- // priorisierung_relativ
-
- $this->PrestudentModel->addSelect('mentor');
- $this->PrestudentModel->addSelect('b.aktiv AS bnaktiv');
- $this->PrestudentModel->addSelect('unruly');
-
- $this->PrestudentModel->db->where_in('tbl_prestudent.studiengang_kz', $this->allowedStgs);
-
- $this->PrestudentModel->addOrder('nachname');
- $this->PrestudentModel->addOrder('vorname');
- }
-
- /**
- * @return void
- */
- protected function addSelectPrioRel()
- {
- $this->PrestudentModel->addSelect("(
- SELECT count(*)
- FROM (
- SELECT *, public.get_rolle_prestudent(pss.prestudent_id, NULL) AS laststatus
- FROM public.tbl_prestudent pss
- JOIN public.tbl_prestudentstatus USING (prestudent_id)
- WHERE person_id = p.person_id
- AND studiensemester_kurzbz = (
- SELECT studiensemester_kurzbz
- FROM public.tbl_prestudentstatus
- WHERE prestudent_id = tbl_prestudent.prestudent_id
- AND status_kurzbz = 'Interessent'
- LIMIT 1
- )
- AND status_kurzbz = 'Interessent'
- ) prest
- WHERE laststatus NOT IN ('Abbrecher', 'Abgewiesener', 'Absolvent')
- AND priorisierung <= tbl_prestudent.priorisierung
- ) || ' (' || COALESCE(tbl_prestudent.priorisierung::text, ' '::text) || ')' AS priorisierung_relativ", false);
- }
-
/**
* Adds additional filters to the query
*
diff --git a/application/libraries/stv/StudentListLib.php b/application/libraries/stv/StudentListLib.php
new file mode 100644
index 000000000..bb44c8bb0
--- /dev/null
+++ b/application/libraries/stv/StudentListLib.php
@@ -0,0 +1,363 @@
+.
+ */
+
+if (! defined('BASEPATH')) exit('No direct script access allowed');
+
+/**
+ * This generates a list of students and or prestudents used for Studierendenverwaltung
+ */
+class StudentListLib
+{
+ private $_ci; // Code igniter instance
+
+ private $_allowedStgs = [];
+ private $_selects = [];
+ private $_joins = [];
+
+ /**
+ * Gets the CI instance, loads model and prepares default values
+ *
+ * @param array $params
+ *
+ * @return void
+ */
+ public function __construct($params = null)
+ {
+ $this->_ci =& get_instance(); // get code igniter instance
+
+ $this->_ci->load->model('crm/Prestudent_model', 'PrestudentModel');
+
+ if (isset($params['allowedStgs']))
+ $this->_allowedStgs = $params['allowedStgs'];
+
+ // Add default SELECTs
+ $this->addSelect("b.uid");
+ if (defined('STV_TAGS_ENABLED') && STV_TAGS_ENABLED)
+ $this->addSelect('tag_data_agg.tags');
+ $this->addSelect('titelpre');
+ $this->addSelect('nachname');
+ $this->addSelect('vorname');
+ $this->addSelect('wahlname');
+ $this->addSelect('vornamen');
+ $this->addSelect('titelpost');
+ $this->addSelect('ersatzkennzeichen');
+ $this->addSelect('gebdatum');
+ $this->addSelect('geschlecht');
+ $this->addSelect('foto');
+ $this->addSelect('foto_sperre');
+ $this->addSelect('v.semester');
+ $this->addSelect('v.verband');
+ $this->addSelect('v.gruppe');
+ $this->addSelect("statusofsemester"); // Will be replaced later
+ $this->addSelect('UPPER(stg.typ || stg.kurzbz) AS studiengang');
+ $this->addSelect('tbl_prestudent.studiengang_kz');
+ $this->addSelect('stg.bezeichnung AS stg_bezeichnung');
+ $this->addSelect("s.matrikelnr");
+ $this->addSelect('p.person_id');
+ $this->addSelect('pls.status_kurzbz AS status');
+ $this->addSelect('pls.datum AS status_datum');
+ $this->addSelect('pls.bestaetigtam AS status_bestaetigung');
+ $this->addSelect(
+ "(SELECT kontakt FROM public.tbl_kontakt WHERE kontakttyp='email' AND person_id=p.person_id AND zustellung LIMIT 1) AS mail_privat",
+ false
+ );
+ $this->addSelect("
+ CASE WHEN b.uid IS NOT NULL AND b.uid<>''
+ THEN CONCAT(b.uid, '@', " . $this->_ci->PrestudentModel->escape(DOMAIN) . ")
+ ELSE '' END AS mail_intern", false);
+ $this->addSelect('p.anmerkung AS anmerkungen');
+ $this->addSelect('tbl_prestudent.anmerkung');
+ $this->addSelect('pls.orgform_kurzbz');
+ $this->addSelect('aufmerksamdurch_kurzbz');
+ $this->addSelect(
+ "(SELECT rt_gesamtpunkte AS punkte FROM public.tbl_prestudent WHERE prestudent_id=ps.prestudent_id) AS punkte",
+ false
+ );
+ $this->addSelect('tbl_prestudent.aufnahmegruppe_kurzbz');
+ $this->addSelect('tbl_prestudent.dual');
+ $this->addSelect('p.matr_nr');
+ $this->addSelect('sp.bezeichnung AS studienplan_bezeichnung');
+ $this->addSelect('tbl_prestudent.prestudent_id');
+ $this->addSelect("(
+ SELECT count(*)
+ FROM (
+ SELECT *, public.get_rolle_prestudent(pss.prestudent_id, NULL) AS laststatus
+ FROM public.tbl_prestudent pss
+ JOIN public.tbl_prestudentstatus USING (prestudent_id)
+ WHERE person_id = p.person_id
+ AND studiensemester_kurzbz = (
+ SELECT studiensemester_kurzbz
+ FROM public.tbl_prestudentstatus
+ WHERE prestudent_id = tbl_prestudent.prestudent_id
+ AND status_kurzbz = 'Interessent'
+ LIMIT 1
+ )
+ AND status_kurzbz = 'Interessent'
+ ) prest
+ WHERE laststatus NOT IN ('Abbrecher', 'Abgewiesener', 'Absolvent')
+ AND priorisierung <= tbl_prestudent.priorisierung
+ ) || ' (' || COALESCE(tbl_prestudent.priorisierung::text, ' '::text) || ')' AS priorisierung_relativ", false); // TODO(chris): overwrite in fetchStudents
+ $this->addSelect('mentor');
+ $this->addSelect('b.aktiv AS bnaktiv');
+ $this->addSelect('unruly');
+
+ // Add default JOINs
+ $this->addJoin('public.tbl_studiengang stg', 'studiengang_kz', 'LEFT');
+ $this->addJoin('public.tbl_person p', 'person_id');
+ $this->addJoin('public.tbl_student s', 'prestudent_id', 'LEFT'); // TODO(chris): overwrite in fetchStudents
+ $this->addJoin('public.tbl_prestudentstatus pls', '
+ pls.status_kurzbz=public.get_rolle_prestudent(tbl_prestudent.prestudent_id, NULL)
+ AND pls.prestudent_id=tbl_prestudent.prestudent_id
+ AND pls.studiensemester_kurzbz=public.get_stdsem_prestudent(tbl_prestudent.prestudent_id, NULL)
+ AND pls.ausbildungssemester=public.get_absem_prestudent(tbl_prestudent.prestudent_id, NULL)', 'LEFT');
+ $this->addJoin('lehre.tbl_studienplan sp', 'studienplan_id', 'LEFT');
+ $this->addJoin('public.tbl_benutzer b', 's.student_uid=b.uid', 'LEFT');
+ $this->addJoin("v", "", ""); // Will be replaced later
+ $this->addJoin("ps", "", ""); // Will be replaced later
+ if (defined('STV_TAGS_ENABLED') && STV_TAGS_ENABLED) {
+ $this->_ci->load->config('stv');
+ $tags = $this->_ci->config->item('stv_prestudent_tags');
+
+ $whereTags = '';
+ if (is_array($tags) && !isEmptyArray($tags)) {
+ $tags = array_keys($tags);
+
+ foreach ($tags as $key => $tag) {
+ $tags[$key] = $this->_ci->PrestudentModel->escape($tag);
+ }
+ $whereTags = " AND nt.typ_kurzbz IN (" . implode(",", $tags) . ")";
+ }
+ $subQueryTag = "(
+ SELECT
+ tag.prestudent_id,
+ COALESCE(json_agg(tag ORDER BY tag.done), '[]'::json) AS tags
+ FROM (
+ SELECT DISTINCT ON (n.notiz_id)
+ n.notiz_id AS id,
+ nt.typ_kurzbz,
+ array_to_json(nt.bezeichnung_mehrsprachig)->>0 AS beschreibung,
+ n.text AS notiz,
+ nt.style,
+ n.erledigt AS done,
+ nz.prestudent_id
+ FROM public.tbl_notizzuordnung AS nz
+ JOIN public.tbl_notiz AS n ON nz.notiz_id = n.notiz_id
+ JOIN public.tbl_notiz_typ AS nt ON n.typ = nt.typ_kurzbz " . $whereTags . "
+ ) AS tag
+ GROUP BY tag.prestudent_id
+ ) AS tag_data_agg";
+
+ $this->addJoin($subQueryTag, 'tag_data_agg.prestudent_id = tbl_prestudent.prestudent_id', 'LEFT');
+ }
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ // Public methods
+
+ /**
+ * Adds a SELECT statement to the query.
+ *
+ * @param string|array $select
+ * @param boolean $escape (optional)
+ *
+ * @return void
+ */
+ public function addSelect($select, $escape = true)
+ {
+ if (is_array($select)) {
+ foreach ($select as $s)
+ $this->addSelect($s, $escape);
+ return;
+ }
+ $alias = $this->getAliasFromSelect($select);
+ $this->_selects[$alias] = [$select, $escape];
+ }
+
+ /**
+ * Joins a table to the query.
+ *
+ * @param string $table
+ * @param string $cond
+ * @param string $type (optional)
+ * @param string $position (optional)
+ *
+ * @return void
+ */
+ public function addJoin($table, $cond, $type = '', $position = 'end')
+ {
+ $alias = $this->getAliasFromTable($table);
+
+ if ($position == 'end') {
+ return $this->_joins[$alias] = [$table, $cond, $type];
+ }
+
+ if ($position == 'start') {
+ return $this->_joins = [$alias => [$table, $cond, $type]] + $this->_joins;
+ }
+
+ if (substr($position, 0, 7) == 'before_') {
+ $ref = substr($position, 7);
+ $index = 0;
+ } elseif (substr($position, 0, 6) == 'after_') {
+ $ref = substr($position, 6);
+ $index = 1;
+ } else {
+ return $this->addJoin($table, $cond, $type);
+ }
+ if (!isset($this->_joins[$ref]))
+ return $this->addJoin($table, $cond, $type);
+
+ $key_indeces = array_flip(array_keys($this->_joins));
+ $index += $key_indeces[$ref];
+
+ if (!$index)
+ return $this->addJoin($table, $cond, $type, 'start');
+
+ $front_part = array_slice($this->_joins, 0, $index, true);
+ $back_part = array_slice($this->_joins, $index, null, true);
+
+ if (isset($front_part[$alias])) {
+ unset($front_part[$alias]);
+ }
+
+ $this->_joins = $front_part + [$alias => [$table, $cond, $type]] + $back_part;
+ }
+
+ /**
+ * Adds a WHERE clause to the query.
+ *
+ * @param string|array $key
+ * @param string|array $value
+ * @param boolean $escape
+ *
+ * @return void
+ */
+ public function addWhere($key, $value = null, $escape = true)
+ {
+ if (!is_array($key) && is_array($value)) {
+ $this->_ci->PrestudentModel->db->where_in($key, $value, $escape);
+ } else {
+ $this->_ci->PrestudentModel->db->where($key, $value, $escape);
+ }
+ }
+
+ /**
+ * Adds a OR WHERE clause to the query.
+ *
+ * @param string|array $key
+ * @param string|array $value
+ * @param boolean $escape
+ *
+ * @return void
+ */
+ public function addOrWhere($key, $value = null, $escape = true)
+ {
+ if (!is_array($key) && is_array($value)) {
+ $this->_ci->PrestudentModel->db->or_where_in($key, $value, $escape);
+ } else {
+ $this->_ci->PrestudentModel->db->or_where($key, $value, $escape);
+ }
+ }
+
+ /**
+ * Generates the query and executes it.
+ *
+ * @param string|null $studiensemester_kurzbz
+ *
+ * @return stdClass result of the query
+ */
+ public function execute($studiensemester_kurzbz)
+ {
+ $stdsemEsc = $studiensemester_kurzbz ? $this->_ci->PrestudentModel->escape($studiensemester_kurzbz) : 'NULL';
+
+
+ $this->addSelect(
+ "public.get_rolle_prestudent(
+ public.tbl_prestudent.prestudent_id,
+ " . $this->_ci->PrestudentModel->escape($studiensemester_kurzbz) . "
+ ) AS statusofsemester"
+ );
+ $this->addJoin(
+ 'public.tbl_studentlehrverband v',
+ 'v.student_uid=s.student_uid AND v.studiensemester_kurzbz' . ($studiensemester_kurzbz ? '=' . $stdsemEsc : ' IS NULL'),
+ 'LEFT'
+ );
+ $this->addJoin(
+ 'public.tbl_prestudentstatus ps',
+ 'ps.status_kurzbz=public.get_rolle_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')
+ AND ps.prestudent_id=tbl_prestudent.prestudent_id
+ AND ps.studiensemester_kurzbz=public.get_stdsem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')
+ AND ps.ausbildungssemester=public.get_absem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')
+ ',
+ 'LEFT'
+ );
+
+ $this->addWhere('tbl_prestudent.studiengang_kz', $this->_allowedStgs);
+
+ foreach ($this->_joins as $join)
+ $this->_ci->PrestudentModel->addJoin($join[0], $join[1], $join[2]);
+
+ foreach ($this->_selects as $select)
+ $this->_ci->PrestudentModel->addSelect($select[0], $select[1]);
+
+ $this->_ci->PrestudentModel->addOrder('nachname');
+ $this->_ci->PrestudentModel->addOrder('vorname');
+
+ return $this->_ci->PrestudentModel->load();
+ }
+
+
+ //------------------------------------------------------------------------------------------------------------------
+ // Protected methods
+
+ /**
+ * Get alias of a table or select statement
+ *
+ * @param string $select
+ *
+ * @return string
+ */
+ final protected function getAliasFromSelect($select)
+ {
+ if (strpos($select, ' ') !== false) {
+ return trim(strrchr($select, ' '));
+ }
+
+ if (strpos($select, '.') !== false) {
+ return substr(strrchr($select, '.'), 1);
+ }
+
+ return $select;
+ }
+
+ /**
+ * Get alias of a table or select statement
+ *
+ * @param string|array $table
+ *
+ * @return string|array
+ */
+ final protected function getAliasFromTable($table)
+ {
+ if (strpos($table, ' ') !== false) {
+ return trim(strrchr($table, ' '));
+ }
+
+ return $table;
+ }
+}
diff --git a/content/statistik/notenspiegel_erweitert.php b/content/statistik/notenspiegel_erweitert.php
index 67097ed22..264324154 100644
--- a/content/statistik/notenspiegel_erweitert.php
+++ b/content/statistik/notenspiegel_erweitert.php
@@ -95,37 +95,37 @@ foreach ($result_student as $row)
if ($uids == '')
die('Es befinden sich keine Studierende in diesem Semester');
-$qry = "SELECT
- lehrveranstaltung_id, bezeichnung, studiengang_kz, semester, ects
- FROM
- lehre.tbl_lehrveranstaltung
- WHERE
- lehrveranstaltung_id IN
- (
- SELECT
- distinct lehrveranstaltung_id
- FROM
- campus.vw_student_lehrveranstaltung, public.tbl_studentlehrverband
- WHERE
- tbl_studentlehrverband.studiengang_kz=".$db->db_add_param($studiengang_kz, FHC_INTEGER)." AND
- tbl_studentlehrverband.semester=".$db->db_add_param($semester, FHC_INTEGER)." AND
- vw_student_lehrveranstaltung.studiensemester_kurzbz=".$db->db_add_param($semester_aktuell)." AND
- uid=student_uid AND
- vw_student_lehrveranstaltung.studiensemester_kurzbz=tbl_studentlehrverband.studiensemester_kurzbz
+$qry = "SELECT
+ lehrveranstaltung_id, bezeichnung, studiengang_kz, semester, ects
+ FROM
+ lehre.tbl_lehrveranstaltung
+ WHERE
+ lehrveranstaltung_id IN (
+ SELECT
+ DISTINCT lehrveranstaltung_id
+ FROM
+ campus.vw_student_lehrveranstaltung
+ JOIN public.tbl_studentlehrverband ON(student_uid = uid)
+ WHERE
+ tbl_studentlehrverband.studiengang_kz = ".$db->db_add_param($studiengang_kz, FHC_INTEGER)."
+ AND tbl_studentlehrverband.semester = ".$db->db_add_param($semester, FHC_INTEGER)."
+ AND vw_student_lehrveranstaltung.studiensemester_kurzbz = ".$db->db_add_param($semester_aktuell)."
+ AND vw_student_lehrveranstaltung.studiensemester_kurzbz = tbl_studentlehrverband.studiensemester_kurzbz
)
- AND studiengang_kz<>0
+ AND studiengang_kz != 0
AND zeugnis
- UNION
- SELECT
- lehrveranstaltung_id, bezeichnung, studiengang_kz, semester, ects
- FROM
- lehre.tbl_lehrveranstaltung JOIN lehre.tbl_zeugnisnote USING(lehrveranstaltung_id)
- WHERE
- tbl_lehrveranstaltung.studiengang_kz=".$db->db_add_param($studiengang_kz, FHC_INTEGER)." AND
- tbl_zeugnisnote.student_uid in($uids) AND
- tbl_zeugnisnote.studiensemester_kurzbz=".$db->db_add_param($semester_aktuell)." AND
- zeugnis
- ORDER BY bezeichnung";
+ UNION
+ SELECT
+ lehrveranstaltung_id, bezeichnung, studiengang_kz, semester, ects
+ FROM
+ lehre.tbl_lehrveranstaltung
+ JOIN lehre.tbl_zeugnisnote USING(lehrveranstaltung_id)
+ WHERE
+ tbl_lehrveranstaltung.studiengang_kz = ".$db->db_add_param($studiengang_kz, FHC_INTEGER)."
+ AND tbl_zeugnisnote.student_uid IN ($uids)
+ AND tbl_zeugnisnote.studiensemester_kurzbz = ".$db->db_add_param($semester_aktuell)."
+ AND zeugnis
+ ORDER BY bezeichnung";
if (!$result_lva = $db->db_query($qry))
die('Fehler beim Ermitteln der Lehrveranstaltungen');
@@ -338,6 +338,10 @@ if ($typ == 'xls')
}
$anzahl_lvspalten = $spalte - 2;
+ $worksheet->write($zeile, ++$spalte, 'ECTS Summe zugeteilt', $format_bold);
+ $maxlength[$spalte] = 20;
+ $worksheet->write($zeile, ++$spalte, 'ECTS Summe gewichtet', $format_bold);
+ $maxlength[$spalte] = 20;
$worksheet->write($zeile, ++$spalte, 'Notendurchschnitt', $format_bold);
$maxlength[$spalte] = 15;
$worksheet->write($zeile, ++$spalte, "Gewichteter\nNotendurchschnitt", $format_bold_wrap);
@@ -372,9 +376,12 @@ if ($typ == 'xls')
$worksheet->write($zeile, ++$spalte, $row_student->gruppe, $format_bold_left);
$worksheet->write($zeile, ++$spalte, $row_student->matrikelnr, $format_bold);
- //Alle Zeugnisnoten des Studierenden holen
+ // Alle Zeugnisnoten des Studierenden holen
$noten = array();
- $qry = "SELECT * FROM lehre.tbl_zeugnisnote WHERE student_uid=".$db->db_add_param($row_student->uid)." AND studiensemester_kurzbz=".$db->db_add_param($semester_aktuell);
+ $qry = "SELECT lehrveranstaltung_id, note
+ FROM lehre.tbl_zeugnisnote
+ WHERE student_uid = ".$db->db_add_param($row_student->uid)."
+ AND studiensemester_kurzbz = ".$db->db_add_param($semester_aktuell);
if ($result = $db->db_query($qry))
while ($row = $db->db_fetch_object($result))
$noten[$row->lehrveranstaltung_id] = $row->note;
@@ -382,15 +389,16 @@ if ($typ == 'xls')
//Zu jeder Lehrveranstaltungsnote Prüfungstyp (Anzahl der Antritte) holen
$pruefungstypen = array();
$qry = "SELECT tbl_lehrveranstaltung.lehrveranstaltung_id, pruefungstyp_kurzbz, sort, datum
- FROM
- lehre.tbl_pruefung
- JOIN
- lehre.tbl_lehreinheit using(lehreinheit_id)
- JOIN
- lehre.tbl_lehrveranstaltung using(lehrveranstaltung_id)
- WHERE
- student_uid=".$db->db_add_param($row_student->uid)." AND studiensemester_kurzbz=".$db->db_add_param($semester_aktuell)."
- ORDER BY lehrveranstaltung_id, sort, datum";
+ FROM
+ lehre.tbl_pruefung
+ JOIN
+ lehre.tbl_lehreinheit USING(lehreinheit_id)
+ JOIN
+ lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
+ WHERE
+ student_uid = ".$db->db_add_param($row_student->uid)."
+ AND studiensemester_kurzbz = ".$db->db_add_param($semester_aktuell)."
+ ORDER BY lehrveranstaltung_id, sort, datum";
if ($result = $db->db_query($qry))
{
while ($row = $db->db_fetch_object($result))
@@ -399,15 +407,14 @@ if ($typ == 'xls')
}
}
- //Alle LVs holen zu denen der Studierende zugeteilt ist
+ // Alle LVs holen zu denen der Studierende zugeteilt ist
$zugeteilte_lvs = array();
- $qry = "SELECT distinct lehrveranstaltung_id
- FROM
- campus.vw_student_lehrveranstaltung
- WHERE
- uid=".$db->db_add_param($row_student->uid)." AND
- studiensemester_kurzbz=".$db->db_add_param($semester_aktuell);
-
+ $qry = "SELECT DISTINCT lehrveranstaltung_id
+ FROM
+ campus.vw_student_lehrveranstaltung
+ WHERE
+ uid = ".$db->db_add_param($row_student->uid)."
+ AND studiensemester_kurzbz = ".$db->db_add_param($semester_aktuell);
if ($result = $db->db_query($qry))
while ($row = $db->db_fetch_object($result))
$zugeteilte_lvs[] = $row->lehrveranstaltung_id;
@@ -416,17 +423,20 @@ if ($typ == 'xls')
$summe = 0;
$rowcount = 0;
$summeects = 0;
+ $total_ects = 0;
$gewichtetenote = 0;
while ($rowcount < $db->db_num_rows($result_lva))
{
$row_lva = $db->db_fetch_object($result_lva, $rowcount);
$rowcount++;
+
//wenn es eine Note gibt
if (isset($noten[$row_lva->lehrveranstaltung_id]))
{
$note = $noten[$row_lva->lehrveranstaltung_id];
$format = 0;
+ $total_ects += $row_lva->ects;
//wenn für die LV der Studierende eine Nachprüfung hat (z.B. 2 Termin, kommissionelle...)
if (isset($pruefungstypen[$row_lva->lehrveranstaltung_id]))
@@ -472,6 +482,7 @@ if ($typ == 'xls')
//Keine Note fuer diese LV vorhanden
if (in_array($row_lva->lehrveranstaltung_id, $zugeteilte_lvs))
{
+ $total_ects += $row_lva->ects;
$worksheet->write($zeile, ++$spalte, '', $format_colored_nichteingetragen);
}
else
@@ -489,6 +500,8 @@ if ($typ == 'xls')
if ($summeects != 0)
$gewichtetenote /= $summeects;
+ $worksheet->write($zeile, ++$spalte, sprintf("%.2f", $total_ects), $format_number);
+ $worksheet->write($zeile, ++$spalte, sprintf("%.2f", $summeects), $format_number);
$worksheet->write($zeile, ++$spalte, sprintf("%.2f", $schnitt), $format_number);
$worksheet->write($zeile, ++$spalte, sprintf("%.2f", $gewichtetenote), $format_number);
if ($gewichtetenote != 0)
@@ -529,6 +542,8 @@ if ($typ == 'xls')
$schnitt = $summe_schnitt / $anzahl_schnitt;
else
$schnitt = 0;
+ $worksheet->write($zeile, ++$spalte, '-', $format_bold_center);
+ $worksheet->write($zeile, ++$spalte, '-', $format_bold_center);
$worksheet->write($zeile, ++$spalte, sprintf("%.2f", $schnitt), $format_number);
if ($anzahlgewichtet != 0)
$summegewichtet = $summegewichtet / $anzahlgewichtet;
diff --git a/rdf/diplomasupplement.xml.php b/rdf/diplomasupplement.xml.php
index d5eb11c26..4b30b8691 100644
--- a/rdf/diplomasupplement.xml.php
+++ b/rdf/diplomasupplement.xml.php
@@ -705,7 +705,72 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml")
}
echo ' ';
+ //Berufliche Kompetenzen
+ $studienplan = new studienplan();
+ $studienplan->loadStudienplan($studienplan_id);
+ $regelstudiendauer = $studienplan->regelstudiendauer;
+ $studienplan_ects = $studienplan->ects_stpl;
+ $ects_berufliche_kompetenzen = 0;
+
+ //bei masterlehrgängen und $studienplan_ects >= 120 ECTS: Andruck der beruflichen Kompetenzen, wenn die Lv angerechnet wurde
+ //TODO(Manu) check if rule still valid
+ if ($row->typ == 'l' && $regelstudiendauer >= 4)
+ {
+ $ects_berufliche_kompetenzen = 0;
+ echo '';
+ echo 'Validierung von beruflich erworbenen Kompetenzen';
+
+ $qry_sem_0="
+ SELECT
+ lehrveranstaltung_id,
+ lehrform_kurzbz,
+ sws,
+ lehre.tbl_lehrveranstaltung.bezeichnung,
+ bezeichnung_english,
+ ects,
+ benotungsdatum,
+ note,
+ positiv,
+ offiziell,
+ note.anmerkung
+ FROM
+ lehre.tbl_zeugnisnote zeugnis
+ JOIN lehre.tbl_note note USING(note)
+ JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
+ JOIN public.tbl_student student USING(student_uid)
+ WHERE
+ student_uid =".$db->db_add_param($uid_arr[$i])."
+ AND
+ lehre.tbl_lehrveranstaltung.semester = '0'
+ ";
+
+ if($result_sem_0 = $db->db_query($qry_sem_0))
+ {
+ while ($row_sem_0 = $db->db_fetch_object($result_sem_0))
+ {
+ $benotungsdatum = $datum->formatDatum($row_sem_0->benotungsdatum, 'd/m/Y');
+ $note = $db->db_parse_bool($row_sem_0->offiziell) ? $row_sem_0->anmerkung : $row_sem_0->note;
+ $ects_berufliche_kompetenzen += $row_sem_0->ects;
+
+ echo '
+ ' . $row_sem_0->lehrveranstaltung_id . '
+ ' . $row_sem_0->lehrform_kurzbz . '
+ bezeichnung . ']]>
+ bezeichnung_english . ']]>
+ '.$row_sem_0->sws.'
+ '.$row_sem_0->ects.'
+ '.$db->db_parse_bool($row_sem_0->positiv).'
+ '.$note.'
+ '.$benotungsdatum.'
+ ';
+ }
+ }
+ echo ''.$ects_berufliche_kompetenzen.'';
+ echo '';
+ }
+
echo "";
+
for($start = $semesterNumberStart; $start <= $semesterNumberEnd; $start++)
{
$semester_ects = 0;
@@ -728,6 +793,7 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml")
AND zeugnis = true
AND status.ausbildungssemester = ".$db->db_add_param($start)."
AND status.status_kurzbz NOT IN('Unterbrecher', 'Interessent','Bewerber','Aufgenommener','Abgewiesener','Wartender')
+ --AND lehre.tbl_lehrveranstaltung.semester != '0'
ORDER BY datum ASC";
$semester_kurzbz = array();
@@ -776,6 +842,7 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml")
WHERE
student_uid = ".$db->db_add_param($uid_arr[$i])."
AND zeugnis = true
+ AND lehre.tbl_lehrveranstaltung.semester != '0'
AND studiensemester_kurzbz in (".$sqlStudent->implode4SQL($aktuellesSemester).")";
if (defined('ZEUGNISNOTE_NICHT_ANZEIGEN'))
@@ -1134,10 +1201,19 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml")
}
}
}
+
echo ''.$semester_ects.'';
echo ''.$semester_ects_positiv.'';
echo "";
}
+
+ //TODO(Manu) check if rule still valid
+ if ($row->typ == 'l' && $regelstudiendauer >= 4)
+ {
+ $ects_total += $ects_berufliche_kompetenzen;
+ $ects_total_positiv += $ects_berufliche_kompetenzen;
+ }
+
echo "";
echo " $ects_total";
echo " $ects_total_positiv";