mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-01 12:19:28 +00:00
Merge branch 'master' into feature-63468/Studierendenverwaltung_Neuanlage_von_Interessenten_ueberarbeiten
This commit is contained in:
@@ -336,3 +336,24 @@ $config['navigation_menu']['system/issues/Issues/*'] = array(
|
||||
'requiredPermissions' => array('admin:rw')
|
||||
),
|
||||
);
|
||||
|
||||
$config['navigation_menu']['apps'] = [
|
||||
'stv' => [
|
||||
'link' => site_url('studentenverwaltung'),
|
||||
'description' => 'Studierendenverwaltung',
|
||||
#'icon' => 'users',
|
||||
'requiredPermissions' => array('admin:r', 'assistenz:r')
|
||||
],
|
||||
'lvv' => [
|
||||
'link' => site_url('lVVerwaltung'),
|
||||
'description' => 'LV Verwaltung',
|
||||
#'icon' => 'person-chalkboard',
|
||||
'requiredPermissions' => array('admin:r', 'assistenz:r')
|
||||
],
|
||||
'lav' => [
|
||||
'link' => site_url('lehre/lehrauftrag/Lehrauftrag/Dashboard'),
|
||||
'description' => 'Lehraufträge',
|
||||
#'icon' => 'person-chalkboard',
|
||||
'requiredPermissions' => array('lehre/lehrauftrag_bestellen:r', 'lehre/lehrauftrag_erteilen:r')
|
||||
]
|
||||
];
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/*
|
||||
| -------------------------------------------------------------------------
|
||||
@@ -51,7 +51,7 @@ defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
| my-controller/my-method -> my_controller/my_method
|
||||
*/
|
||||
$route['default_controller'] = defined('CIS4') && CIS4 ? 'Cis4' : 'Vilesci';
|
||||
$route['translate_uri_dashes'] = FALSE;
|
||||
$route['translate_uri_dashes'] = false;
|
||||
|
||||
// Class name conflicts
|
||||
$route['api/v1/organisation/[S|s]tudiengang/(:any)'] = 'api/v1/organisation/studiengang2/$1';
|
||||
@@ -71,9 +71,9 @@ $route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})'] = 'api/frontend/v1/stv
|
||||
|
||||
// (studiensemester_kurzbz)/inout[/(incoming|outgoing|gemeinsamestudien)]
|
||||
$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/inout'] = 'api/frontend/v1/stv/Students/index';
|
||||
$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/inout/incoming'] = 'api/frontend/v1/stv/Students/getIncoming';
|
||||
$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/inout/outgoing'] = 'api/frontend/v1/stv/Students/getOutgoing';
|
||||
$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/inout/gemeinsamestudien'] = 'api/frontend/v1/stv/Students/getGemeinsamestudien';
|
||||
$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/inout/incoming'] = 'api/frontend/v1/stv/Students/getIncoming/$1';
|
||||
$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/inout/outgoing'] = 'api/frontend/v1/stv/Students/getOutgoing/$1';
|
||||
$route['api/frontend/v1/stv/[sS]tudents/([WS]S[0-9]{4})/inout/gemeinsamestudien'] = 'api/frontend/v1/stv/Students/getGemeinsamestudien/$1';
|
||||
|
||||
// (studiengang_kz)/prestudent[/(studiensemester_kurzbz)[/(filter)[/(otherfilter)]]]
|
||||
$route['api/frontend/v1/stv/[sS]tudents/(-?[0-9]+)/prestudent'] = 'api/frontend/v1/stv/Students/getPrestudents/$1';
|
||||
|
||||
@@ -29,7 +29,7 @@ $config['similar'] = [
|
||||
|
||||
$config['vector'] = [
|
||||
'priority' => 1,
|
||||
'rank' => "ts_rank({field}, to_tsquery('simple', {word}))",
|
||||
'compare' => "to_tsquery('simple', {word}) @@ {field}"
|
||||
'rank' => "ts_rank({field}, plainto_tsquery('simple', {word}))",
|
||||
'compare' => "plainto_tsquery('simple', {word}) @@ {field}"
|
||||
];
|
||||
|
||||
|
||||
@@ -7,5 +7,43 @@ $CI =& get_instance();
|
||||
|
||||
|
||||
$config['student'] = $CI->config->item('student', 'search');
|
||||
$config['student']['searchfields']['pkz'] = [
|
||||
'alias' => ['personenkennzeichen', 'personalid'],
|
||||
'comparison' => 'equals',
|
||||
'field' => 'matrikelnr'
|
||||
];
|
||||
$config['student']['searchfields']['matrnr'] = [
|
||||
'alias' => ['matrikelnr', 'matrikelnummer', 'matrno', 'matriculationno', 'matriculationnumber', 'studno', 'studentno', 'studentnumber'],
|
||||
'comparison' => 'equals',
|
||||
'field' => 'matr_nr',
|
||||
'join' => [
|
||||
[
|
||||
'table' => "public.tbl_prestudent",
|
||||
'using' => "prestudent_id"
|
||||
],
|
||||
[
|
||||
'table' => "public.tbl_person",
|
||||
'using' => "person_id"
|
||||
]
|
||||
]
|
||||
];
|
||||
|
||||
$config['prestudent'] = $CI->config->item('prestudent', 'search');
|
||||
$config['prestudent']['searchfields']['pkz'] = [
|
||||
'alias' => ['personenkennzeichen', 'personalid'],
|
||||
'comparison' => 'equals',
|
||||
'field' => 'matrikelnr',
|
||||
'join' => [
|
||||
'table' => "public.tbl_student",
|
||||
'using' => "prestudent_id"
|
||||
]
|
||||
];
|
||||
$config['prestudent']['searchfields']['matrnr'] = [
|
||||
'alias' => ['matrikelnr', 'matrikelnummer', 'matrno', 'matriculationno', 'matriculationnumber', 'studno', 'studentno', 'studentnumber'],
|
||||
'comparison' => 'equals',
|
||||
'field' => 'matr_nr',
|
||||
'join' => [
|
||||
'table' => "public.tbl_person",
|
||||
'using' => "person_id"
|
||||
]
|
||||
];
|
||||
|
||||
@@ -61,7 +61,11 @@ $config['tabs'] =
|
||||
'notes' => [
|
||||
//if true, the count of Messages will be shown in the header of the Tab Messages
|
||||
'showCountNotes' => true
|
||||
]
|
||||
],
|
||||
'combinePeople' => [
|
||||
//multitab should only be shown with this length of selection
|
||||
'validCountMulti' => 2,
|
||||
],
|
||||
];
|
||||
|
||||
// List of fields to show when ZGV_DOKTOR_ANZEIGEN is defined
|
||||
@@ -102,6 +106,7 @@ $config['student_tab_order'] = [
|
||||
'grades',
|
||||
'exam',
|
||||
'exemptions',
|
||||
'projektarbeit',
|
||||
'finalexam',
|
||||
'mobility',
|
||||
'jointstudies',
|
||||
@@ -116,5 +121,6 @@ $config['students_tab_order'] = [
|
||||
'status',
|
||||
'groups',
|
||||
'finalexam',
|
||||
'combinePeople',
|
||||
'archive',
|
||||
];
|
||||
|
||||
@@ -72,7 +72,7 @@ class Documents extends Auth_Controller
|
||||
|
||||
$stgs = [];
|
||||
$stsemArray = [];
|
||||
$buchungstypen = implode('\',\'', defined("CIS_DOKUMENTE_STUDIENBEITRAG_TYPEN") ? unserialize(CIS_DOKUMENTE_STUDIENBEITRAG_TYPEN) : []);
|
||||
$buchungstypen = defined("CIS_DOKUMENTE_STUDIENBEITRAG_TYPEN") ? unserialize(CIS_DOKUMENTE_STUDIENBEITRAG_TYPEN) : [];
|
||||
$person_ids = [];
|
||||
foreach ($stati as $status) {
|
||||
$person_ids[] = $status->person_id;
|
||||
|
||||
@@ -13,7 +13,7 @@ class ProfilUpdate extends Auth_Controller
|
||||
{
|
||||
parent::__construct([
|
||||
'index' => ['student/stammdaten:r', 'mitarbeiter/stammdaten:r'],
|
||||
'show' => ['basis/cis:r'],
|
||||
'show' => ['student/stammdaten:r', 'mitarbeiter/stammdaten:r', 'basis/cis:r'],
|
||||
'id' => ['student/stammdaten:r', 'mitarbeiter/stammdaten:r']
|
||||
]);
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ class Pub extends Auth_Controller
|
||||
{
|
||||
parent::__construct(
|
||||
array(
|
||||
'bild' => ['basis/cis:r']
|
||||
'bild' => ['basis/cis:r', 'assistenz:r']
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -119,7 +119,19 @@ class Lehrveranstaltung extends FHCAPI_Controller
|
||||
if (hasData($lehreinheiten_data))
|
||||
{
|
||||
$lehreinheiten = getData($lehreinheiten_data);
|
||||
$rowData->_children = $lehreinheiten;
|
||||
|
||||
if (!isset($row->_children))
|
||||
{
|
||||
$row->_children = $lehreinheiten;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!is_array($row->_children))
|
||||
{
|
||||
$row->_children = [$row->_children];
|
||||
}
|
||||
$row->_children = array_merge($row->_children, $lehreinheiten);
|
||||
}
|
||||
}
|
||||
|
||||
if (!isEmptyString($row->studienplan_lehrveranstaltung_id_parent))
|
||||
|
||||
@@ -637,7 +637,7 @@ class ProfilUpdate extends FHCAPI_Controller
|
||||
//? Send email to the Studiengangsassistentinnen
|
||||
$this->StudentModel->addSelect(["public.tbl_studiengang.email"]);
|
||||
$this->StudentModel->addJoin("public.tbl_benutzer", "public.tbl_benutzer.uid = public.tbl_student.student_uid");
|
||||
$this->StudentModel->addJoin("public.tbl_prestudent", "public.tbl_benutzer.person_id = public.tbl_prestudent.person_id");
|
||||
$this->StudentModel->addJoin("public.tbl_prestudent", "public.tbl_benutzer.person_id = public.tbl_prestudent.person_id and public.tbl_student.studiengang_kz = public.tbl_prestudent.studiengang_kz");
|
||||
$this->StudentModel->addJoin("public.tbl_prestudentstatus", "public.tbl_prestudentstatus.prestudent_id = public.tbl_prestudent.prestudent_id");
|
||||
$this->StudentModel->addJoin("public.tbl_studiengang", "public.tbl_studiengang.studiengang_kz = public.tbl_prestudent.studiengang_kz");
|
||||
$this->StudentModel->addGroupBy(["public.tbl_studiengang.email"]);
|
||||
@@ -706,7 +706,13 @@ class ProfilUpdate extends FHCAPI_Controller
|
||||
|
||||
private function setStatusOnUpdateRequest($id, $status, $status_message)
|
||||
{
|
||||
return $this->ProfilUpdateModel->update([$id], ["status" => $status, "status_timestamp" => "NOW()", "status_message" => $status_message]);
|
||||
return $this->ProfilUpdateModel->update([$id], [
|
||||
"status" => $status,
|
||||
"status_timestamp" => "NOW()",
|
||||
"status_message" => $status_message,
|
||||
"updateamum" => "NOW()",
|
||||
"updatevon" => getAuthUID()
|
||||
]);
|
||||
}
|
||||
|
||||
private function updateRequestedChange($id, $requested_change)
|
||||
@@ -716,13 +722,12 @@ class ProfilUpdate extends FHCAPI_Controller
|
||||
|
||||
private function deleteOldVersionFile($dms_id)
|
||||
{
|
||||
if (!isset($dms_id)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// starting the transaction
|
||||
$this->db->trans_start();
|
||||
|
||||
|
||||
if (!isset($dms_id)) {
|
||||
return;
|
||||
}
|
||||
|
||||
//? delete the file from the profilUpdate first
|
||||
$profilUpdateFileDelete = $this->ProfilUpdateModel->removeFileFromProfilUpdate($dms_id);
|
||||
@@ -777,13 +782,8 @@ class ProfilUpdate extends FHCAPI_Controller
|
||||
|
||||
$res = $this->StudentModel->execReadOnlyQuery($query, [$student_uid]);
|
||||
$res = $this->getDataOrTerminateWithError($res, $this->p->t('profilUpdate', 'profilUpdate_loadingOE_error'));
|
||||
$res = array_map(
|
||||
function ($item) {
|
||||
return $item->oe_kurzbz;
|
||||
},
|
||||
$res
|
||||
);
|
||||
return $res;
|
||||
$oe = ($res[0])->oe_kurzbz;
|
||||
return $oe;
|
||||
}
|
||||
|
||||
private function handleAdresse($requested_change, $personID)
|
||||
@@ -813,7 +813,7 @@ class ProfilUpdate extends FHCAPI_Controller
|
||||
$insert_adresse_id = $insertID;
|
||||
$insert_adresse_id = $this->getDataOrTerminateWithError($insert_adresse_id, $this->p->t('profilUpdate', 'profilUpdate_insertAdresse_error'));
|
||||
if ($insert_adresse_id) {
|
||||
$this->handleDupplicateZustellAdressen($requested_change['zustelladresse'], $insert_adresse_id);
|
||||
$this->handleDupplicateZustellAdressen($requested_change['zustelladresse'], $insert_adresse_id, $personID);
|
||||
}
|
||||
}
|
||||
//! DELETE
|
||||
@@ -825,12 +825,33 @@ class ProfilUpdate extends FHCAPI_Controller
|
||||
}
|
||||
//! UPDATE
|
||||
else {
|
||||
$requested_change['updateamum'] = "NOW()";
|
||||
$requested_change['updatevon'] = getAuthUID();
|
||||
$update_adresse_id = $this->AdresseModel->update($adresse_id, $requested_change);
|
||||
$update_adresse_id = $this->getDataOrTerminateWithError($update_adresse_id, $this->p->t('profilUpdate', 'profilUpdate_updateAdresse_error'));
|
||||
$this->handleDupplicateZustellAdressen($requested_change['zustelladresse'], $update_adresse_id);
|
||||
$curadresse_res = $this->AdresseModel->load($adresse_id);
|
||||
$curadresse = ($this->getDataOrTerminateWithError($curadresse_res))[0];
|
||||
|
||||
if($curadresse->heimatadresse)
|
||||
{
|
||||
$tmpadresse = array_merge((array) $curadresse, $requested_change);
|
||||
unset($tmpadresse["adresse_id"]);
|
||||
$tmpadresse['insertamum'] = "NOW()";
|
||||
$tmpadresse['insertvon'] = getAuthUID();
|
||||
$tmpadresse['person_id'] = $personID;
|
||||
unset($tmpadresse["heimatadresse"]);
|
||||
unset($tmpadresse["updateamum"]);
|
||||
unset($tmpadresse["updatevon"]);
|
||||
|
||||
$tmpadresse_res = $this->AdresseModel->insert($tmpadresse);
|
||||
$tmpadresse_id = $this->getDataOrTerminateWithError($tmpadresse_res, $this->p->t('profilUpdate', 'profilUpdate_insertAdresse_error'));
|
||||
$this->handleDupplicateZustellAdressen($requested_change['zustelladresse'], $tmpadresse_id, $personID);
|
||||
}
|
||||
else
|
||||
{
|
||||
$requested_change['updateamum'] = "NOW()";
|
||||
$requested_change['updatevon'] = getAuthUID();
|
||||
|
||||
$update_adresse_id = $this->AdresseModel->update($adresse_id, $requested_change);
|
||||
$update_adresse_id = $this->getDataOrTerminateWithError($update_adresse_id, $this->p->t('profilUpdate', 'profilUpdate_updateAdresse_error'));
|
||||
$this->handleDupplicateZustellAdressen($requested_change['zustelladresse'], $update_adresse_id, $personID);
|
||||
}
|
||||
}
|
||||
return $insertID ?? null;
|
||||
}
|
||||
@@ -852,7 +873,7 @@ class ProfilUpdate extends FHCAPI_Controller
|
||||
$insert_kontakt_id = $insertID;
|
||||
$insert_kontakt_id = $this->getDataOrTerminateWithError($insert_kontakt_id, $this->p->t('profilUpdate', 'profilUpdate_insertKontakt_error'));
|
||||
if ($insert_kontakt_id) {
|
||||
$this->handleDupplicateZustellKontakte($requested_change['zustellung'], $insert_kontakt_id);
|
||||
$this->handleDupplicateZustellKontakte($requested_change['zustellung'], $insert_kontakt_id, $requested_change['kontakttyp'], $personID);
|
||||
}
|
||||
}
|
||||
//! DELETE
|
||||
@@ -869,18 +890,18 @@ class ProfilUpdate extends FHCAPI_Controller
|
||||
$update_kontakt_id = $this->KontaktModel->update($kontakt_id, $requested_change);
|
||||
$update_kontakt_id = $this->getDataOrTerminateWithError($update_kontakt_id, $this->p->t('profilUpdate', 'profilUpdate_updateKontakt_error'));
|
||||
if ($update_kontakt_id) {
|
||||
$this->handleDupplicateZustellKontakte($requested_change['zustellung'], $update_kontakt_id);
|
||||
$this->handleDupplicateZustellKontakte($requested_change['zustellung'], $update_kontakt_id, $requested_change['kontakttyp'], $personID);
|
||||
}
|
||||
}
|
||||
return isset($insertID) ? $insertID : null;
|
||||
}
|
||||
|
||||
private function handleDupplicateZustellAdressen($zustellung, $adresse_id)
|
||||
private function handleDupplicateZustellAdressen($zustellung, $adresse_id, $person_id)
|
||||
{
|
||||
if ($zustellung) {
|
||||
$this->PersonModel->addSelect("public.tbl_adresse.adresse_id");
|
||||
$this->PersonModel->addJoin("public.tbl_adresse", "public.tbl_adresse.person_id = public.tbl_person.person_id");
|
||||
$zustellAdressenArray = $this->PersonModel->loadWhere(["public.tbl_person.person_id" => $this->pid, "zustelladresse" => TRUE]);
|
||||
$zustellAdressenArray = $this->PersonModel->loadWhere(["public.tbl_person.person_id" => $person_id, "zustelladresse" => TRUE]);
|
||||
if (isError($zustellAdressenArray)) {
|
||||
$this->terminateWithError($this->p->t('profilUpdate', 'profilUpdate_loadingZustellAdressen_error'));
|
||||
}
|
||||
@@ -893,6 +914,8 @@ class ProfilUpdate extends FHCAPI_Controller
|
||||
return $adresse->adresse_id != $adresse_id;
|
||||
});
|
||||
|
||||
$this->addMeta('bhzustelladressen', $zustellAdressenArray);
|
||||
|
||||
// remove the zustelladresse from all other zustelladressen
|
||||
foreach ($zustellAdressenArray as $adresse) {
|
||||
$this->AdresseModel->update($adresse->adresse_id, ["zustelladresse" => FALSE]);
|
||||
@@ -902,12 +925,16 @@ class ProfilUpdate extends FHCAPI_Controller
|
||||
}
|
||||
}
|
||||
|
||||
private function handleDupplicateZustellKontakte($zustellung, $kontakt_id)
|
||||
private function handleDupplicateZustellKontakte($zustellung, $kontakt_id, $kontakttyp, $person_id)
|
||||
{
|
||||
if ($zustellung) {
|
||||
$this->PersonModel->addSelect("public.tbl_kontakt.kontakt_id");
|
||||
$this->PersonModel->addJoin("public.tbl_kontakt", "public.tbl_kontakt.person_id = public.tbl_person.person_id");
|
||||
$zustellKontakteArray = $this->PersonModel->loadWhere(["public.tbl_person.person_id" => $this->pid, "zustellung" => TRUE]);
|
||||
$zustellKontakteArray = $this->PersonModel->loadWhere([
|
||||
"public.tbl_person.person_id" => $person_id,
|
||||
"zustellung" => TRUE,
|
||||
"kontakttyp" => $kontakttyp
|
||||
]);
|
||||
if (!isSuccess($zustellKontakteArray)) {
|
||||
return error($this->p->t('profilUpdate', 'profilUpdate_loadingZustellkontakte_error'));
|
||||
}
|
||||
|
||||
@@ -12,8 +12,8 @@ class Gruppe extends FHCAPI_Controller
|
||||
'add' => ['admin:rw', 'assistenz:rw'],
|
||||
'delete' => ['admin:rw', 'assistenz:rw'],
|
||||
'deleteFromLVPlan' => ['admin:rw', 'assistenz:rw'],
|
||||
'getBenutzer' => ['admin:r', 'assistenz:r'],
|
||||
'getAll' => ['admin:r', 'assistenz:r'],
|
||||
'getBenutzerSearch' => ['admin:r', 'assistenz:r'],
|
||||
'getAllSearch' => ['admin:r', 'assistenz:r'],
|
||||
'getByLehreinheit' => ['admin:r', 'assistenz:r'],
|
||||
]);
|
||||
|
||||
@@ -22,7 +22,8 @@ class Gruppe extends FHCAPI_Controller
|
||||
$this->_ci->load->library('PhrasesLib');
|
||||
$this->loadPhrases(
|
||||
array(
|
||||
'ui'
|
||||
'ui',
|
||||
'lehre'
|
||||
)
|
||||
);
|
||||
|
||||
@@ -91,11 +92,11 @@ class Gruppe extends FHCAPI_Controller
|
||||
$lehreinheitgruppe_id = $this->input->post('lehreinheitgruppe_id');
|
||||
|
||||
if (is_null($lehreinheit_id) || !ctype_digit((string)$lehreinheit_id) || is_null($lehreinheitgruppe_id) || !ctype_digit((string)$lehreinheitgruppe_id))
|
||||
$this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||
$this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||
|
||||
$lehreinheitgruppe_result = $this->_ci->LehreinheitgruppeModel->loadWhere(array('lehreinheitgruppe_id' => $lehreinheitgruppe_id));
|
||||
if (!hasData($lehreinheitgruppe_result) || isError($lehreinheitgruppe_result))
|
||||
$this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||
$this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||
|
||||
$this->checkPermission($lehreinheit_id);
|
||||
|
||||
@@ -108,15 +109,33 @@ class Gruppe extends FHCAPI_Controller
|
||||
}
|
||||
|
||||
|
||||
public function getAll()
|
||||
public function getAllSearch()
|
||||
{
|
||||
$query = $this->input->get('query');
|
||||
|
||||
if (is_null($query))
|
||||
$this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||
|
||||
$query_words = explode(' ', $query);
|
||||
|
||||
$this->_ci->GruppeModel->addSelect('gruppe_kurzbz,
|
||||
studiengang_kz,
|
||||
semester,
|
||||
bezeichnung,
|
||||
gid,
|
||||
\'false\' as lehrverband');
|
||||
$gruppen_result = $this->_ci->GruppeModel->loadWhere(array('sichtbar' => true, 'aktiv' => true, 'lehre' => true, 'direktinskription' => false, 'semester IS NOT NULL' => null));
|
||||
$this->_ci->GruppeModel->db->where(array('sichtbar' => true, 'aktiv' => true, 'lehre' => true, 'direktinskription' => false, 'semester IS NOT NULL' => null));
|
||||
$this->_ci->GruppeModel->db->group_start();
|
||||
foreach ($query_words as $word)
|
||||
{
|
||||
$this->_ci->GruppeModel->db->group_start();
|
||||
$this->_ci->GruppeModel->db->where('gruppe_kurzbz ILIKE', "%" . $word . "%");
|
||||
$this->_ci->GruppeModel->db->or_where('bezeichnung ILIKE', "%" . $word . "%");
|
||||
$this->_ci->GruppeModel->db->group_end();
|
||||
}
|
||||
$this->_ci->GruppeModel->db->group_end();
|
||||
|
||||
$gruppen_result = $this->_ci->GruppeModel->load();
|
||||
|
||||
$gruppen_array = array();
|
||||
|
||||
@@ -135,7 +154,18 @@ class Gruppe extends FHCAPI_Controller
|
||||
$this->_ci->LehrverbandModel->addJoin('public.tbl_studiengang', 'studiengang_kz');
|
||||
$this->_ci->LehrverbandModel->addOrder('verband');
|
||||
$this->_ci->LehrverbandModel->addOrder('gruppe');
|
||||
$lehrverband_result = $this->_ci->LehrverbandModel->loadWhere(array('tbl_lehrverband.aktiv' => true));
|
||||
$this->_ci->LehrverbandModel->db->where(array('tbl_lehrverband.aktiv' => true));
|
||||
|
||||
$this->_ci->LehrverbandModel->db->group_start();
|
||||
foreach ($query_words as $word)
|
||||
{
|
||||
$this->_ci->LehrverbandModel->db->group_start();
|
||||
$this->_ci->LehrverbandModel->db->where('CONCAT(CONCAT(typ, kurzbz), \'\', semester, verband, COALESCE(gruppe,\'\')) ILIKE', "%" . $word . "%");
|
||||
$this->_ci->LehrverbandModel->db->or_where('tbl_lehrverband.bezeichnung ILIKE', "%" . $word . "%");
|
||||
$this->_ci->LehrverbandModel->db->group_end();
|
||||
}
|
||||
$this->_ci->LehrverbandModel->db->group_end();
|
||||
$lehrverband_result = $this->_ci->LehrverbandModel->load();
|
||||
|
||||
$lehrverband_array = array();
|
||||
|
||||
@@ -150,15 +180,40 @@ class Gruppe extends FHCAPI_Controller
|
||||
$this->terminateWithSuccess($all_gruppen);
|
||||
}
|
||||
|
||||
public function getBenutzer()
|
||||
public function getBenutzerSearch()
|
||||
{
|
||||
$query = $this->input->get('query');
|
||||
|
||||
if (is_null($query))
|
||||
$this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||
|
||||
$query_words = explode(' ', $query);
|
||||
|
||||
$this->_ci->PersonModel->addSelect('vorname, nachname, uid, semester, UPPER(CONCAT(tbl_studiengang.typ, tbl_studiengang.kurzbz)) as studiengang');
|
||||
$this->_ci->PersonModel->addJoin('public.tbl_benutzer', 'person_id');
|
||||
$this->_ci->PersonModel->addJoin('public.tbl_mitarbeiter', 'uid = mitarbeiter_uid', 'LEFT');
|
||||
$this->_ci->PersonModel->addJoin('public.tbl_student', 'uid = student_uid', 'LEFT');
|
||||
$this->_ci->PersonModel->addJoin('public.tbl_studiengang', 'studiengang_kz', 'LEFT');
|
||||
|
||||
$personen = $this->_ci->PersonModel->loadWhere(array('tbl_benutzer.aktiv' => true));
|
||||
$this->_ci->PersonModel->db->where(array('tbl_benutzer.aktiv' => true));
|
||||
|
||||
$this->_ci->PersonModel->db->group_start();
|
||||
foreach ($query_words as $word)
|
||||
{
|
||||
$this->_ci->PersonModel->db->group_start();
|
||||
$this->_ci->PersonModel->db->where('tbl_person.vorname ILIKE', "%" . $word . "%");
|
||||
$this->_ci->PersonModel->db->or_where('tbl_person.nachname ILIKE', "%" . $word . "%");
|
||||
$this->_ci->PersonModel->db->or_where('uid ILIKE', "%" . $word . "%");
|
||||
$this->_ci->PersonModel->db->or_where('CONCAT(tbl_studiengang.typ, tbl_studiengang.kurzbz) ILIKE', "%" . $word . "%");
|
||||
|
||||
if (is_numeric($word))
|
||||
{
|
||||
$this->_ci->PersonModel->db->or_where('semester', $word);
|
||||
}
|
||||
$this->_ci->PersonModel->db->group_end();
|
||||
}
|
||||
$this->_ci->PersonModel->db->group_end();
|
||||
$personen = $this->_ci->PersonModel->load();
|
||||
$this->terminateWithSuccess(hasData($personen) ? getData($personen) : array());
|
||||
}
|
||||
|
||||
|
||||
@@ -169,6 +169,10 @@ class Lehreinheit extends FHCAPI_Controller
|
||||
{
|
||||
$value = $this->input->post($field);
|
||||
|
||||
if ($field === 'lehre')
|
||||
{
|
||||
$value = (bool)$value;
|
||||
}
|
||||
if ($value !== null)
|
||||
{
|
||||
$updateData[$field] = $value;
|
||||
@@ -281,15 +285,43 @@ class Lehreinheit extends FHCAPI_Controller
|
||||
public function delete()
|
||||
{
|
||||
$lehreinheit_id = $this->input->post('lehreinheit_id');
|
||||
$lehreinheit = $this->checkLehreinheit($lehreinheit_id);
|
||||
$this->checkPermission($lehreinheit->lehreinheit_id);
|
||||
|
||||
$result = $this->_ci->LehreinheitModel->deleteLehreinheit($lehreinheit->lehreinheit_id);
|
||||
$errors = array();
|
||||
if (is_array($lehreinheit_id))
|
||||
{
|
||||
foreach ($lehreinheit_id as $le_id)
|
||||
{
|
||||
$lehreinheit = $this->checkLehreinheit($le_id);
|
||||
$this->checkPermission($lehreinheit->lehreinheit_id);
|
||||
|
||||
if (isError($result))
|
||||
$this->terminateWithValidationErrors(getError($result));
|
||||
$result = $this->_ci->LehreinheitModel->deleteLehreinheit($lehreinheit->lehreinheit_id);
|
||||
|
||||
$this->terminateWithSuccess('Erfolgreich geloescht');
|
||||
if (isError($result))
|
||||
{
|
||||
$errors[] = getError($result);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$lehreinheit = $this->checkLehreinheit($lehreinheit_id);
|
||||
$this->checkPermission($lehreinheit->lehreinheit_id);
|
||||
|
||||
$result = $this->_ci->LehreinheitModel->deleteLehreinheit($lehreinheit->lehreinheit_id);
|
||||
|
||||
if (isError($result))
|
||||
$this->terminateWithError(getError($result));
|
||||
}
|
||||
|
||||
if (!isEmptyArray($errors))
|
||||
{
|
||||
if (count($errors) !== count($lehreinheit_id))
|
||||
$this->terminateWithSuccess(array('errors' => $errors));
|
||||
else
|
||||
$this->terminateWithError($errors);
|
||||
}
|
||||
else
|
||||
$this->terminateWithSuccess('Erfolgreich geloescht');
|
||||
}
|
||||
|
||||
public function update()
|
||||
|
||||
@@ -15,7 +15,7 @@ class Lektor extends FHCAPI_Controller
|
||||
'deleteLVPlan' => ['admin:rw', 'assistenz:rw'],
|
||||
'deletePerson' => ['admin:rw', 'assistenz:rw'],
|
||||
'getLehrfunktionen' => ['admin:r', 'assistenz:r'],
|
||||
'getLektoren' => ['admin:r', 'assistenz:r'],
|
||||
'getLektorenSearch' => ['admin:r', 'assistenz:r'],
|
||||
'getLektorenByLE' => ['admin:r', 'assistenz:r'],
|
||||
'getLektorDaten' => ['admin:r', 'assistenz:r'],
|
||||
'getLektorVertrag' => ['admin:r', 'assistenz:r'],
|
||||
@@ -208,12 +208,35 @@ class Lektor extends FHCAPI_Controller
|
||||
$this->terminateWithSuccess(getData($this->_ci->LehrfunktionModel->load()));
|
||||
}
|
||||
|
||||
public function getLektoren()
|
||||
public function getLektorenSearch()
|
||||
{
|
||||
$query = $this->input->get('query');
|
||||
|
||||
if (is_null($query))
|
||||
$this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||
|
||||
$query_words = explode(' ', $query);
|
||||
|
||||
$this->_ci->MitarbeiterModel->addSelect('uid, person_id, vorname, nachname');
|
||||
$this->_ci->MitarbeiterModel->addJoin('public.tbl_benutzer', 'uid = mitarbeiter_uid');
|
||||
$this->_ci->MitarbeiterModel->addJoin('public.tbl_person', 'person_id');
|
||||
$this->terminateWithSuccess(getData($this->_ci->MitarbeiterModel->loadWhere(array('public.tbl_benutzer.aktiv' => true))));
|
||||
|
||||
$this->_ci->MitarbeiterModel->db->where('public.tbl_benutzer.aktiv', true);
|
||||
|
||||
$this->_ci->MitarbeiterModel->db->group_start();
|
||||
foreach ($query_words as $word)
|
||||
{
|
||||
$this->_ci->MitarbeiterModel->db->group_start();
|
||||
$this->_ci->MitarbeiterModel->db->where('tbl_person.vorname ILIKE', "%" . $word . "%");
|
||||
$this->_ci->MitarbeiterModel->db->or_where('tbl_person.nachname ILIKE', "%" . $word . "%");
|
||||
$this->_ci->MitarbeiterModel->db->or_where('uid ILIKE', "%" . $word . "%");
|
||||
$this->_ci->MitarbeiterModel->db->group_end();
|
||||
}
|
||||
$this->_ci->MitarbeiterModel->db->group_end();
|
||||
$this->_ci->MitarbeiterModel->addOrder('nachname');
|
||||
$this->_ci->MitarbeiterModel->addOrder('vorname');
|
||||
$result = $this->_ci->MitarbeiterModel->load();
|
||||
$this->terminateWithSuccess(hasData($result) ? getData($result) : array());
|
||||
}
|
||||
|
||||
private function checkLehreinheit($lehreinheit_id)
|
||||
|
||||
@@ -5,7 +5,7 @@ if (!defined('BASEPATH'))
|
||||
|
||||
class Tags extends Tag_Controller
|
||||
{
|
||||
const BERECHTIGUNG_KURZBZ = ['admin:rw', 'assistenz:rw'];
|
||||
const BERECHTIGUNG_KURZBZ = ['admin:rw', 'assistenz:r'];
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
|
||||
@@ -16,7 +16,7 @@ class Messages extends FHCAPI_Controller
|
||||
'getNameOfDefaultRecipient' => ['admin:r', 'assistenz:r'],
|
||||
'sendMessage' => ['admin:r', 'assistenz:r'],
|
||||
'deleteMessage' => ['admin:r', 'assistenz:r'],
|
||||
'getVorlagentext' => ['admin:r', 'assistenz:r'],
|
||||
'getDataVorlage' => ['admin:r', 'assistenz:r'],
|
||||
'getPreviewText' => ['admin:r', 'assistenz:r'],
|
||||
'getReplyData' => ['admin:r', 'assistenz:r'],
|
||||
'getPersonId' => ['admin:r', 'assistenz:r'],
|
||||
@@ -52,11 +52,14 @@ class Messages extends FHCAPI_Controller
|
||||
|
||||
$result = $this->MessageModel->getMessagesForTable($id, $offset, $limit);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
if (hasData($result))
|
||||
{
|
||||
$data = getData($result);
|
||||
$this->addMeta('count', $data['count']);
|
||||
$this->terminateWithSuccess($data['data']);
|
||||
}
|
||||
|
||||
$this->addMeta('count', $data['count']);
|
||||
|
||||
$this->terminateWithSuccess($data['data']);
|
||||
$this->terminateWithSuccess(array());
|
||||
}
|
||||
|
||||
public function getVorlagen()
|
||||
@@ -66,33 +69,23 @@ class Messages extends FHCAPI_Controller
|
||||
$this->load->model('person/Benutzerfunktion_model', 'BenutzerfunktionModel');
|
||||
$result = $this->BenutzerfunktionModel->getBenutzerfunktionByUid($uid, 'oezuordnung');
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
$oe_kurzbz = current($data);
|
||||
if (hasData($result))
|
||||
{
|
||||
$this->load->model('system/Vorlage_model', 'VorlageModel');
|
||||
|
||||
$this->load->model('system/Vorlage_model', 'VorlageModel');
|
||||
$data = getData($result);
|
||||
|
||||
$result = $this->VorlageModel->getAllVorlagenByOe($oe_kurzbz->oe_kurzbz);
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
$oe_kurzbz = array_column($data, 'oe_kurzbz');
|
||||
$result = $this->VorlageModel->getAllVorlagenByOe($oe_kurzbz);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
$this->terminateWithSuccess(hasData($result) ? getData($result) : array());
|
||||
}
|
||||
|
||||
//If admin
|
||||
$this->VorlageModel->addOrder('vorlage_kurzbz', 'ASC');
|
||||
$result = $this->VorlageModel->loadWhere(
|
||||
array(
|
||||
'mimetype' => 'text/html'
|
||||
));
|
||||
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
$this->terminateWithSuccess(array());
|
||||
}
|
||||
|
||||
public function getVorlagentext($vorlage_kurzbz)
|
||||
public function getDataVorlage($vorlage_kurzbz)
|
||||
{
|
||||
//$this->terminateWithError("vor " . $vorlage_kurzbz, self::ERROR_TYPE_GENERAL);
|
||||
//$studiengang_kz = 227; //TODO(Manu) dynamisieren NULL
|
||||
$studiengang_kz = 0;
|
||||
$this->load->model('system/Vorlagestudiengang_model', 'VorlagestudiengangModel');
|
||||
$this->VorlagestudiengangModel->addOrder('version', 'DESC');
|
||||
@@ -104,12 +97,8 @@ class Messages extends FHCAPI_Controller
|
||||
]);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
//not correct with Vorlage
|
||||
$vorlage = current($data);
|
||||
|
||||
//$this->terminateWithSuccess($data);
|
||||
$this->terminateWithSuccess($vorlage->text);
|
||||
$this->terminateWithSuccess($vorlage);
|
||||
}
|
||||
|
||||
public function getMessageVarsPerson($id, $typeId)
|
||||
@@ -154,7 +143,7 @@ class Messages extends FHCAPI_Controller
|
||||
public function sendMessage($recipient_id)
|
||||
{
|
||||
//has to be uid
|
||||
// $this->terminateWithError("uid", $recipient_id, self::ERROR_TYPE_GENERAL);
|
||||
// $this->terminateWithError("uid", $recipient_id, self::ERROR_TYPE_GENERAL);
|
||||
|
||||
//default setting
|
||||
$receiversPersonId = $this->_getPersonId($recipient_id, 'uid');
|
||||
@@ -223,8 +212,6 @@ class Messages extends FHCAPI_Controller
|
||||
}
|
||||
elseif($typeId == 'prestudent_id')
|
||||
{
|
||||
// $this->terminateWithError("prestudent_id ", self::ERROR_TYPE_GENERAL);
|
||||
|
||||
$result = $this->MessagesModel->parseMessageTextPrestudent($id, $body);
|
||||
$bodyParsed = $this->getDataOrTerminateWithError($result);
|
||||
}
|
||||
@@ -429,7 +416,7 @@ class Messages extends FHCAPI_Controller
|
||||
|
||||
private function _getPrestudentIdFromUid($uid)
|
||||
{
|
||||
// $this->terminateWithError($uid, self::ERROR_TYPE_GENERAL);
|
||||
// $this->terminateWithError($uid, self::ERROR_TYPE_GENERAL);
|
||||
$this->load->model('crm/Student_model', 'StudentModel');
|
||||
$result = $this->StudentModel->loadWhere(
|
||||
['student_uid' => $uid]
|
||||
@@ -463,4 +450,4 @@ class Messages extends FHCAPI_Controller
|
||||
date_format(date_create($sentDate), 'd.m.Y H:i'), $receiverName, $receiverSurname, $body
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,8 +20,6 @@ class Abschlusspruefung extends FHCAPI_Controller
|
||||
'getBeurteilungen' => ['admin:rw', 'assistenz:rw'],
|
||||
'getAkadGrade' => ['admin:rw', 'assistenz:rw'],
|
||||
'getMitarbeiter' => ['admin:rw', 'assistenz:rw'],
|
||||
'getAllMitarbeiter' => ['admin:rw', 'assistenz:rw'],
|
||||
'getAllPersons' => ['admin:rw', 'assistenz:rw'],
|
||||
'getPruefer' => ['admin:rw', 'assistenz:rw'],
|
||||
'getTypStudiengang' => ['admin:rw', 'assistenz:rw'],
|
||||
'checkForExistingExams' => ['admin:rw', 'assistenz:rw'],
|
||||
@@ -102,35 +100,45 @@ class Abschlusspruefung extends FHCAPI_Controller
|
||||
{
|
||||
$abschlusspruefung_id = $this->input->post('id');
|
||||
|
||||
$this->AbschlusspruefungModel->addSelect('lehre.tbl_abschlusspruefung.*');
|
||||
$this->AbschlusspruefungModel->addSelect("
|
||||
CASE
|
||||
WHEN pruefer1 IS NOT NULL
|
||||
THEN CONCAT(p1.nachname, ' ', p1.vorname, COALESCE(' ' || p1.titelpre, ''))
|
||||
ELSE NULL
|
||||
END AS p1
|
||||
");
|
||||
$this->AbschlusspruefungModel->addSelect("
|
||||
CASE
|
||||
WHEN pruefer2 IS NOT NULL
|
||||
THEN CONCAT(p2.nachname, ' ', p2.vorname, COALESCE(' ' || p2.titelpre, ''))
|
||||
ELSE NULL
|
||||
END AS p2
|
||||
");
|
||||
$this->AbschlusspruefungModel->addSelect("
|
||||
CASE
|
||||
WHEN pruefer3 IS NOT NULL
|
||||
THEN CONCAT(p3.nachname, ' ', p3.vorname, COALESCE(' ' || p3.titelpre, ''))
|
||||
ELSE NULL
|
||||
END AS p3
|
||||
");
|
||||
$this->AbschlusspruefungModel->addSelect("
|
||||
CASE
|
||||
WHEN vorsitz IS NOT NULL
|
||||
THEN CONCAT(pv.nachname, ' ', pv.vorname, COALESCE(' ' || pv.titelpre, ''), ' (', ben.uid , ')' )
|
||||
ELSE NULL
|
||||
END AS pv
|
||||
");
|
||||
$this->AbschlusspruefungModel->addSelect(
|
||||
'lehre.tbl_abschlusspruefung.*,
|
||||
p1.person_id AS p1_person_id, p1.vorname AS p1_vorname, p1.nachname AS p1_nachname,
|
||||
p1.titelpre AS p1_titelpre, p1.titelpost AS p1_titelpost,
|
||||
p2.person_id AS p2_person_id, p2.vorname AS p2_vorname, p2.nachname AS p2_nachname,
|
||||
p2.titelpre AS p2_titelpre, p2.titelpost AS p2_titelpost,
|
||||
p3.person_id AS p3_person_id, p3.vorname AS p3_vorname, p3.nachname AS p3_nachname,
|
||||
p3.titelpre AS p3_titelpre, p3.titelpost AS p3_titelpost,
|
||||
pv.person_id AS pv_person_id, pv.vorname AS pv_vorname, pv.nachname AS pv_nachname,
|
||||
pv.titelpre AS pv_titelpre, pv.titelpost AS pv_titelpost, ben.uid AS pv_uid'
|
||||
);
|
||||
//~ $this->AbschlusspruefungModel->addSelect("
|
||||
//~ CASE
|
||||
//~ WHEN pruefer1 IS NOT NULL
|
||||
//~ THEN CONCAT(p1.nachname, ' ', p1.vorname, COALESCE(' ' || p1.titelpre, ''))
|
||||
//~ ELSE NULL
|
||||
//~ END AS p1
|
||||
//~ ");
|
||||
//~ $this->AbschlusspruefungModel->addSelect("
|
||||
//~ CASE
|
||||
//~ WHEN pruefer2 IS NOT NULL
|
||||
//~ THEN CONCAT(p2.nachname, ' ', p2.vorname, COALESCE(' ' || p2.titelpre, ''))
|
||||
//~ ELSE NULL
|
||||
//~ END AS p2
|
||||
//~ ");
|
||||
//~ $this->AbschlusspruefungModel->addSelect("
|
||||
//~ CASE
|
||||
//~ WHEN pruefer3 IS NOT NULL
|
||||
//~ THEN CONCAT(p3.nachname, ' ', p3.vorname, COALESCE(' ' || p3.titelpre, ''))
|
||||
//~ ELSE NULL
|
||||
//~ END AS p3
|
||||
//~ ");
|
||||
//~ $this->AbschlusspruefungModel->addSelect("
|
||||
//~ CASE
|
||||
//~ WHEN vorsitz IS NOT NULL
|
||||
//~ THEN CONCAT(pv.nachname, ' ', pv.vorname, COALESCE(' ' || pv.titelpre, ''), ' (', ben.uid , ')' )
|
||||
//~ ELSE NULL
|
||||
//~ END AS pv
|
||||
//~ ");
|
||||
$this->AbschlusspruefungModel->addJoin('public.tbl_benutzer ben', 'ON (ben.uid = lehre.tbl_abschlusspruefung.vorsitz)', 'LEFT');
|
||||
$this->AbschlusspruefungModel->addJoin('public.tbl_person pv', 'ON (pv.person_id = ben.person_id)', 'LEFT');
|
||||
$this->AbschlusspruefungModel->addJoin('public.tbl_person p1', 'ON (p1.person_id = lehre.tbl_abschlusspruefung.pruefer1)', 'LEFT');
|
||||
@@ -220,8 +228,10 @@ class Abschlusspruefung extends FHCAPI_Controller
|
||||
$this->terminateWithSuccess($typStudiengang);
|
||||
}
|
||||
|
||||
public function getMitarbeiter($searchString)
|
||||
public function getMitarbeiter()
|
||||
{
|
||||
$searchString = $this->input->get('searchString') ?? '';
|
||||
|
||||
$this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
|
||||
|
||||
$result = $this->MitarbeiterModel->searchMitarbeiter($searchString, 'mitAkadGrad');
|
||||
@@ -232,8 +242,10 @@ class Abschlusspruefung extends FHCAPI_Controller
|
||||
$this->terminateWithSuccess($result ?: []);
|
||||
}
|
||||
|
||||
public function getPruefer($searchString)
|
||||
public function getPruefer()
|
||||
{
|
||||
$searchString = $this->input->get('searchString') ?? '';
|
||||
|
||||
$this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
|
||||
|
||||
$result = $this->MitarbeiterModel->searchMitarbeiter($searchString, 'ohneMaUid');
|
||||
@@ -444,58 +456,4 @@ class Abschlusspruefung extends FHCAPI_Controller
|
||||
}
|
||||
$this->terminateWithSuccess('step3');
|
||||
}
|
||||
|
||||
/*
|
||||
* returns list of all Mitarbeiter
|
||||
* as key value list to be used in select or autocomplete
|
||||
*/
|
||||
public function getAllMitarbeiter()
|
||||
{
|
||||
$this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
|
||||
|
||||
$sql = "
|
||||
SELECT
|
||||
ma.mitarbeiter_uid as mitarbeiter_uid,
|
||||
CONCAT(p.nachname, ' ', p.vorname, ' (', ma.mitarbeiter_uid, ')') as label
|
||||
FROM
|
||||
public.tbl_mitarbeiter ma
|
||||
JOIN public.tbl_benutzer bn ON (bn.uid = ma.mitarbeiter_uid)
|
||||
JOIN public.tbl_person p ON (p.person_id = bn.person_id)
|
||||
ORDER BY
|
||||
p.nachname ASC
|
||||
";
|
||||
|
||||
$result = $this->MitarbeiterModel->execReadOnlyQuery($sql);
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
/*
|
||||
* returns list of all Persons
|
||||
* as key value list to be used in select or autocomplete
|
||||
*/
|
||||
public function getAllPersons()
|
||||
{
|
||||
$this->load->model('person/Person_model', 'PersonModel');
|
||||
|
||||
$sql = "
|
||||
SELECT
|
||||
p.vorname, p.nachname, p.person_id,
|
||||
CONCAT(p.nachname, ' ', p.vorname) as label
|
||||
FROM
|
||||
public.tbl_person p
|
||||
-- JOIN public.tbl_benutzer bn ON (p.person_id = bn.person_id)
|
||||
-- and bn.aktiv = 'true'
|
||||
ORDER BY
|
||||
p.nachname ASC
|
||||
";
|
||||
|
||||
//TODO(manu) check if filter active benutzer
|
||||
|
||||
$result = $this->PersonModel->execReadOnlyQuery($sql);
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ class Archiv extends FHCAPI_Controller
|
||||
'archive' => ['admin:w', 'assistenz:w'],
|
||||
'download' => ['admin:w', 'assistenz:w'],
|
||||
'update' => ['admin:w'],
|
||||
'delete' => ['admin:w', 'assistenz:w']
|
||||
'delete' => ['admin:w', 'assistenz:w'],
|
||||
]);
|
||||
|
||||
// Load models
|
||||
|
||||
@@ -298,7 +298,7 @@ class Aufnahmetermine extends FHCAPI_Controller
|
||||
$reihungstestangetreten =
|
||||
(isset($formData['reihungstestangetreten']) && !empty($formData['reihungstestangetreten']))
|
||||
? $formData['reihungstestangetreten']
|
||||
: null;
|
||||
: false;
|
||||
$aufnahmegruppe_kurzbz =
|
||||
(isset($formData['aufnahmegruppe_kurzbz']) && !empty($formData['aufnahmegruppe_kurzbz']))
|
||||
? $formData['aufnahmegruppe_kurzbz']
|
||||
|
||||
@@ -33,6 +33,9 @@ class Config extends FHCAPI_Controller
|
||||
{
|
||||
// TODO(chris): permissions
|
||||
parent::__construct([
|
||||
'get' => ['admin:r', 'assistenz:r'],
|
||||
'set' => ['admin:r', 'assistenz:r'],
|
||||
'filter' => ['admin:r', 'assistenz:r'],
|
||||
'student' => ['admin:r', 'assistenz:r'],
|
||||
'students' => ['admin:r', 'assistenz:r']
|
||||
]);
|
||||
@@ -53,6 +56,247 @@ class Config extends FHCAPI_Controller
|
||||
$this->load->config('stv');
|
||||
}
|
||||
|
||||
/**
|
||||
* get App config
|
||||
*/
|
||||
public function get()
|
||||
{
|
||||
$this->load->model('system/Variable_model', 'VariableModel');
|
||||
$this->load->config('stv');
|
||||
|
||||
$config = [];
|
||||
|
||||
#number_displayed_past_studiensemester
|
||||
$result = $this->VariableModel->getVariables(getAuthUID(), ['number_displayed_past_studiensemester']);
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$number_displayed_past_studiensemester_default = $this->config->item('number_displayed_past_studiensemester_default');
|
||||
|
||||
$config['number_displayed_past_studiensemester'] = [
|
||||
"type" => "number",
|
||||
"label" => $this->p->t('stv', 'settings_no_displayed_past_sem'),
|
||||
"value" => $data['number_displayed_past_studiensemester']
|
||||
?? $number_displayed_past_studiensemester_default
|
||||
];
|
||||
|
||||
#font_size
|
||||
$result = $this->VariableModel->getVariables(getAuthUID(), ['stv_font_size']);
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
$config['font_size'] = [
|
||||
"type" => "select",
|
||||
"label" => $this->p->t('stv', 'settings_fontsize'),
|
||||
"value" => $data['stv_font_size'] ?? "fs_normal",
|
||||
"options" => [
|
||||
"fs_xx-small" => $this->p->t('stv', 'settings_fontsize_xx-small'),
|
||||
"fs_x-small" => $this->p->t('stv', 'settings_fontsize_x-small'),
|
||||
"fs_small" => $this->p->t('stv', 'settings_fontsize_small'),
|
||||
"fs_normal" => $this->p->t('stv', 'settings_fontsize_normal'),
|
||||
"fs_big" => $this->p->t('stv', 'settings_fontsize_big'),
|
||||
"fs_huge" => $this->p->t('stv', 'settings_fontsize_huge')
|
||||
]
|
||||
];
|
||||
|
||||
#others
|
||||
Events::trigger('stv_config_get', function & () use (&$config) {
|
||||
return $config;
|
||||
});
|
||||
|
||||
$this->terminateWithSuccess($config);
|
||||
}
|
||||
|
||||
/**
|
||||
* set App config
|
||||
*/
|
||||
public function set()
|
||||
{
|
||||
$this->load->model('system/Variable_model', 'VariableModel');
|
||||
$this->load->library('form_validation');
|
||||
|
||||
$this->form_validation->set_rules(
|
||||
'number_displayed_past_studiensemester',
|
||||
$this->p->t('stv', 'settings_no_displayed_past_sem'),
|
||||
'required|integer'
|
||||
);
|
||||
$this->form_validation->set_rules(
|
||||
'font_size',
|
||||
$this->p->t('stv', 'settings_fontsize'),
|
||||
'required|in_list[fs_xx-small,fs_x-small,fs_small,fs_normal,fs_big,fs_huge]'
|
||||
);
|
||||
|
||||
Events::trigger('stv_config_validation', $this->form_validation);
|
||||
|
||||
if (!$this->form_validation->run())
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
|
||||
|
||||
$this->VariableModel->setVariable(
|
||||
getAuthUID(),
|
||||
'number_displayed_past_studiensemester',
|
||||
$this->input->post('number_displayed_past_studiensemester')
|
||||
);
|
||||
$this->VariableModel->setVariable(
|
||||
getAuthUID(),
|
||||
'stv_font_size',
|
||||
$this->input->post('font_size')
|
||||
);
|
||||
|
||||
Events::trigger('stv_config_set', $this->input);
|
||||
|
||||
$this->terminateWithSuccess();
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the config for the student filters
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function filter()
|
||||
{
|
||||
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||
|
||||
$this->load->model('crm/Buchungstyp_model', 'BuchungstypModel');
|
||||
|
||||
$this->BuchungstypModel->addOrder('beschreibung');
|
||||
|
||||
$result = $this->BuchungstypModel->load();
|
||||
|
||||
$buchungstyp_kurzbz = $this->getDataOrTerminateWithError($result);
|
||||
$buchungstyp_kurzbz_plus_all = array_merge([[
|
||||
'buchungstyp_kurzbz' => 'all',
|
||||
'beschreibung' => $this->p->t('stv', 'konto_all_types')
|
||||
]], $buchungstyp_kurzbz);
|
||||
|
||||
$this->load->model('crm/Statusgrund_model', 'StatusgrundModel');
|
||||
|
||||
$result = $this->StatusgrundModel->getAktiveGruende();
|
||||
|
||||
$statusgruende = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$result = [];
|
||||
|
||||
$result[] = [
|
||||
'id' => 'filter_konto_count_0',
|
||||
'label' => $this->p->t('stv', 'filter_konto_count_0'),
|
||||
'type' => 'konto',
|
||||
'fixed' => [
|
||||
'missing' => true,
|
||||
'usestdsem' => true
|
||||
],
|
||||
'dynamic' => [
|
||||
'buchungstyp_kurzbz' => [
|
||||
'type' => 'select',
|
||||
'values' => $buchungstyp_kurzbz,
|
||||
'value_key' => 'buchungstyp_kurzbz',
|
||||
'label_key' => 'beschreibung'
|
||||
]
|
||||
]
|
||||
];
|
||||
$result[] = [
|
||||
'id' => 'filter_konto_missing_counter',
|
||||
'label' => $this->p->t('stv', 'filter_konto_missing_counter'),
|
||||
'type' => 'konto_counter',
|
||||
'dynamic' => [
|
||||
'buchungstyp_kurzbz' => [
|
||||
'type' => 'select',
|
||||
'values' => $buchungstyp_kurzbz_plus_all,
|
||||
'value_key' => 'buchungstyp_kurzbz',
|
||||
'label_key' => 'beschreibung'
|
||||
],
|
||||
'samestg' => [
|
||||
'type' => 'bool',
|
||||
'label' => $this->p->t('stv', 'filter_konto_samestg'),
|
||||
'default' => $this->variablelib->getVar('kontofilterstg') == 'true'
|
||||
]
|
||||
]
|
||||
];
|
||||
$result[] = [
|
||||
'id' => 'filter_documents',
|
||||
'label' => $this->p->t('stv', 'filter_documents'),
|
||||
'type' => 'documents'
|
||||
];
|
||||
$result[] = [
|
||||
'id' => 'filter_konto_missing_counter_past',
|
||||
'label' => $this->p->t('stv', 'filter_konto_missing_counter_past'),
|
||||
'type' => 'konto_counter',
|
||||
'fixed' => [
|
||||
'past' => true
|
||||
],
|
||||
'dynamic' => [
|
||||
'buchungstyp_kurzbz' => [
|
||||
'type' => 'select',
|
||||
'values' => $buchungstyp_kurzbz_plus_all,
|
||||
'value_key' => 'buchungstyp_kurzbz',
|
||||
'label_key' => 'beschreibung'
|
||||
],
|
||||
'samestg' => [
|
||||
'type' => 'bool',
|
||||
'label' => $this->p->t('stv', 'filter_konto_samestg'),
|
||||
'default' => $this->variablelib->getVar('kontofilterstg') == 'true'
|
||||
]
|
||||
]
|
||||
];
|
||||
$result[] = [
|
||||
'id' => 'filter_konto_missing_studiengebuehr',
|
||||
'label' => $this->p->t('stv', 'filter_konto_missing_studiengebuehr'),
|
||||
'type' => 'konto',
|
||||
'fixed' => [
|
||||
'missing' => true,
|
||||
'usestdsem' => true
|
||||
],
|
||||
'dynamic' => [
|
||||
'buchungstyp_kurzbz' => [
|
||||
'type' => 'select',
|
||||
'values' => $buchungstyp_kurzbz,
|
||||
'value_key' => 'buchungstyp_kurzbz',
|
||||
'label_key' => 'beschreibung'
|
||||
]
|
||||
]
|
||||
];
|
||||
$result[] = [
|
||||
'id' => 'filter_konto_studiengebuehrerhoeht',
|
||||
'label' => $this->p->t('stv', 'filter_konto_studiengebuehrerhoeht'),
|
||||
'type' => 'konto',
|
||||
'fixed' => [
|
||||
'usestdsem' => true
|
||||
],
|
||||
'dynamic' => [
|
||||
'buchungstyp_kurzbz' => [
|
||||
'type' => 'select',
|
||||
'values' => $buchungstyp_kurzbz,
|
||||
'value_key' => 'buchungstyp_kurzbz',
|
||||
'label_key' => 'beschreibung'
|
||||
]
|
||||
]
|
||||
];
|
||||
$result[] = [
|
||||
'id' => 'filter_zgv_without_date',
|
||||
'label' => $this->p->t('stv', 'filter_zgv_without_date'),
|
||||
'type' => 'zgv'
|
||||
];
|
||||
$result[] = [
|
||||
'id' => 'filter_statusgrund',
|
||||
'label' => $this->p->t('stv', 'filter_statusgrund'),
|
||||
'type' => 'statusgrund',
|
||||
'fixed' => [
|
||||
'usestdsem' => true
|
||||
],
|
||||
'dynamic' => [
|
||||
'statusgrund_id' => [
|
||||
'type' => 'select',
|
||||
'values' => $statusgruende,
|
||||
'value_key' => 'statusgrund_id',
|
||||
'label_key' => 'bezeichnung'
|
||||
]
|
||||
]
|
||||
];
|
||||
|
||||
Events::trigger('stv_conf_filter', function & () use (&$result) {
|
||||
return $result;
|
||||
});
|
||||
|
||||
$this->terminateWithSuccess($result);
|
||||
}
|
||||
|
||||
public function student()
|
||||
{
|
||||
$result = [];
|
||||
@@ -60,21 +304,21 @@ class Config extends FHCAPI_Controller
|
||||
|
||||
$result['details'] = [
|
||||
'title' => $this->p->t('stv', 'tab_details'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/Details.js',
|
||||
'component' => absoluteJsImportUrl('public/js/components/Stv/Studentenverwaltung/Details/Details.js'),
|
||||
'config' => $config['details']
|
||||
];
|
||||
|
||||
$result['notes'] = [
|
||||
'title' => $this->p->t('stv', 'tab_notes'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/Notizen.js',
|
||||
'component' => absoluteJsImportUrl('public/js/components/Stv/Studentenverwaltung/Details/Notizen.js'),
|
||||
'config' => $config['notes'],
|
||||
'showSuffix' => ($config['notes']['showCountNotes'] ?? false),
|
||||
'suffixhelper' => APP_ROOT . 'public/js/helpers/Stv/Studentenverwaltung/Details/Notizen/NotizenSuffixHelper.js'
|
||||
'suffixhelper' => absoluteJsImportUrl('public/js/helpers/Stv/Studentenverwaltung/Details/Notizen/NotizenSuffixHelper.js')
|
||||
];
|
||||
|
||||
$result['contact'] = [
|
||||
'title' => $this->p->t('stv', 'tab_contact'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/Kontakt.js',
|
||||
'component' => absoluteJsImportUrl('public/js/components/Stv/Studentenverwaltung/Details/Kontakt.js'),
|
||||
'config' => [
|
||||
'showBankaccount' => $this->permissionlib->isBerechtigt('mitarbeiter/bankdaten')
|
||||
|| $this->permissionlib->isBerechtigt('student/bankdaten')
|
||||
@@ -82,20 +326,20 @@ class Config extends FHCAPI_Controller
|
||||
];
|
||||
$result['prestudent'] = [
|
||||
'title' => $this->p->t('stv', 'tab_prestudent'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/Prestudent.js',
|
||||
'component' => absoluteJsImportUrl('public/js/components/Stv/Studentenverwaltung/Details/Prestudent.js'),
|
||||
'config' => $config['prestudent']
|
||||
];
|
||||
$result['status'] = [
|
||||
'title' => 'Status',
|
||||
'component' => './Stv/Studentenverwaltung/Details/MultiStatus.js'
|
||||
'component' => absoluteJsImportUrl('public/js/components/Stv/Studentenverwaltung/Details/MultiStatus.js')
|
||||
];
|
||||
$result['documents'] = [
|
||||
'title' => $this->p->t('stv', 'tab_documents'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/Dokumente.js'
|
||||
'component' => absoluteJsImportUrl('public/js/components/Stv/Studentenverwaltung/Details/Dokumente.js')
|
||||
];
|
||||
$result['banking'] = [
|
||||
'title' => $this->p->t('stv', 'tab_banking'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/Konto.js',
|
||||
'component' => absoluteJsImportUrl('public/js/components/Stv/Studentenverwaltung/Details/Konto.js'),
|
||||
'config' => [
|
||||
'showZahlungsbestaetigung' => (defined('ZAHLUNGSBESTAETIGUNG_ANZEIGEN') && ZAHLUNGSBESTAETIGUNG_ANZEIGEN),
|
||||
'showBuchungsnr' => $this->permissionlib->isBerechtigt('admin'),
|
||||
@@ -107,20 +351,23 @@ class Config extends FHCAPI_Controller
|
||||
];
|
||||
$result['resources'] = [
|
||||
'title' => $this->p->t('stv', 'tab_resources'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/Betriebsmittel.js'
|
||||
'component' => absoluteJsImportUrl('public/js/components/Stv/Studentenverwaltung/Details/Betriebsmittel.js'),
|
||||
'showOnlyWithUid' => true
|
||||
];
|
||||
$result['groups'] = [
|
||||
'title' => $this->p->t('stv', 'tab_groups'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/Gruppen.js'
|
||||
'component' => absoluteJsImportUrl('public/js/components/Stv/Studentenverwaltung/Details/Groups.js'),
|
||||
'showOnlyWithUid' => true
|
||||
];
|
||||
$result['messages'] = [
|
||||
'title' => $this->p->t('stv', 'tab_messages'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/Messages.js'
|
||||
'component' => absoluteJsImportUrl('public/js/components/Stv/Studentenverwaltung/Details/Messages.js'),
|
||||
'showOnlyWithUid' => true
|
||||
];
|
||||
|
||||
$result['grades'] = [
|
||||
'title' => $this->p->t('stv', 'tab_grades'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/Noten.js',
|
||||
'component' => absoluteJsImportUrl('public/js/components/Stv/Studentenverwaltung/Details/Noten.js'),
|
||||
'showOnlyWithUid' => true,
|
||||
'config' => [
|
||||
'usePoints' => defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE,
|
||||
@@ -133,24 +380,26 @@ class Config extends FHCAPI_Controller
|
||||
|
||||
$result['exam'] = [
|
||||
'title' => $this->p->t('stv', 'tab_exam'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/Pruefung.js'
|
||||
'component' => absoluteJsImportUrl('public/js/components/Stv/Studentenverwaltung/Details/Pruefung.js'),
|
||||
'showOnlyWithUid' => true
|
||||
];
|
||||
|
||||
$result['exemptions'] = [
|
||||
'title' => $this->p->t('lehre', 'anrechnungen'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/Anrechnungen.js',
|
||||
'component' => absoluteJsImportUrl('public/js/components/Stv/Studentenverwaltung/Details/Anrechnungen.js'),
|
||||
'config' => $config['exemptions']
|
||||
];
|
||||
|
||||
$result['finalexam'] = [
|
||||
'title' => $this->p->t('stv', 'tab_finalexam'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/Abschlusspruefung.js',
|
||||
'component' => absoluteJsImportUrl('public/js/components/Stv/Studentenverwaltung/Details/Abschlusspruefung.js'),
|
||||
'showOnlyWithUid' => true,
|
||||
'config' => $config['finalexam']
|
||||
];
|
||||
|
||||
$result['projektarbeit'] = [
|
||||
'title' => $this->p->t('stv', 'tab_projektarbeit'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/Projektarbeit.js',
|
||||
'component' => absoluteJsImportUrl('public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit.js'),
|
||||
'config' => array_merge(
|
||||
$config['projektarbeit'],
|
||||
['showVertragsdetails' =>
|
||||
@@ -160,12 +409,13 @@ class Config extends FHCAPI_Controller
|
||||
|
||||
$result['mobility'] = [
|
||||
'title' => $this->p->t('stv', 'tab_mobility'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/Mobility.js'
|
||||
'component' => absoluteJsImportUrl('public/js/components/Stv/Studentenverwaltung/Details/Mobility.js'),
|
||||
'showOnlyWithUid' => true
|
||||
];
|
||||
|
||||
$result['archive'] = [
|
||||
'title' => $this->p->t('stv', 'tab_archive'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/Archiv.js',
|
||||
'component' => absoluteJsImportUrl('public/js/components/Stv/Studentenverwaltung/Details/Archiv.js'),
|
||||
'config' => [
|
||||
'showEdit' => $this->permissionlib->isBerechtigt('admin')
|
||||
]
|
||||
@@ -173,22 +423,24 @@ class Config extends FHCAPI_Controller
|
||||
|
||||
$result['jointstudies'] = [
|
||||
'title' => $this->p->t('stv', 'tab_jointstudies'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/JointStudies.js'
|
||||
'component' => absoluteJsImportUrl('public/js/components/Stv/Studentenverwaltung/Details/JointStudies.js'),
|
||||
'showOnlyWithUid' => true
|
||||
];
|
||||
|
||||
$result['coursedates'] = [
|
||||
'title' => $this->p->t('stv', 'tab_courseDates'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/Lehrveranstaltungstermine.js'
|
||||
'component' => absoluteJsImportUrl('public/js/components/Stv/Studentenverwaltung/Details/Lehrveranstaltungstermine.js')
|
||||
];
|
||||
|
||||
$result['admissionDates'] = [
|
||||
'title' => $this->p->t('stv', 'tab_admissionDates'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/Aufnahmetermine.js'
|
||||
'component' => absoluteJsImportUrl('public/js/components/Stv/Studentenverwaltung/Details/Aufnahmetermine.js')
|
||||
];
|
||||
|
||||
$result['functions'] = [
|
||||
'title' => $this->p->t('stv', 'tab_functions'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/Funktionen.js'
|
||||
'component' => absoluteJsImportUrl('public/js/components/Stv/Studentenverwaltung/Details/Funktionen.js'),
|
||||
'showOnlyWithUid' => true
|
||||
];
|
||||
|
||||
Events::trigger('stv_conf_student', function & () use (&$result) {
|
||||
@@ -206,7 +458,7 @@ class Config extends FHCAPI_Controller
|
||||
$config = $this->config->item('tabs');
|
||||
$result['banking'] = [
|
||||
'title' => $this->p->t('stv', 'tab_banking'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/Konto.js',
|
||||
'component' => absoluteJsImportUrl('public/js/components/Stv/Studentenverwaltung/Details/Konto.js'),
|
||||
'config' => [
|
||||
'showZahlungsbestaetigung' => (defined('ZAHLUNGSBESTAETIGUNG_ANZEIGEN') && ZAHLUNGSBESTAETIGUNG_ANZEIGEN),
|
||||
'showBuchungsnr' => $this->permissionlib->isBerechtigt('admin'),
|
||||
@@ -216,9 +468,14 @@ class Config extends FHCAPI_Controller
|
||||
'additionalCols' => []
|
||||
]
|
||||
];
|
||||
$result['groups'] = [
|
||||
'title' => $this->p->t('stv', 'tab_groups'),
|
||||
'component' => absoluteJsImportUrl('public/js/components/Stv/Studentenverwaltung/Details/Groups.js'),
|
||||
'showOnlyWithUid' => true
|
||||
];
|
||||
$result['status'] = [
|
||||
'title' => 'Status',
|
||||
'component' => './Stv/Studentenverwaltung/Details/MultiStatus.js',
|
||||
'component' => absoluteJsImportUrl('public/js/components/Stv/Studentenverwaltung/Details/MultiStatus.js'),
|
||||
'config' => [
|
||||
'changeStatusToAbbrecherStgl' => $this->permissionlib->isBerechtigt('admin'),
|
||||
'changeStatusToAbbrecherStud' => $this->permissionlib->isBerechtigt('admin'),
|
||||
@@ -229,17 +486,32 @@ class Config extends FHCAPI_Controller
|
||||
];
|
||||
$result['finalexam'] = [
|
||||
'title' => $this->p->t('stv', 'tab_finalexam'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/Abschlusspruefung.js',
|
||||
'component' => absoluteJsImportUrl('public/js/components/Stv/Studentenverwaltung/Details/Abschlusspruefung.js'),
|
||||
'showOnlyWithUid' => true,
|
||||
'config' => $config['finalexam']
|
||||
];
|
||||
$result['archive'] = [
|
||||
'title' => $this->p->t('stv', 'tab_archive'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/Archiv.js',
|
||||
'component' => absoluteJsImportUrl('public/js/components/Stv/Studentenverwaltung/Details/Archiv.js'),
|
||||
'config' => [
|
||||
'showEdit' => $this->permissionlib->isBerechtigt('admin')
|
||||
]
|
||||
];
|
||||
|
||||
if($this->permissionlib->isBerechtigt('basis/person'))
|
||||
{
|
||||
$result['combinePeople'] = [
|
||||
'title' => $this->p->t('stv', 'tab_combine_people'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/CombinePeople.js',
|
||||
'config' => $config['combinePeople']
|
||||
];
|
||||
}
|
||||
|
||||
$result['kontaktieren'] = [
|
||||
'title' => $this->p->t('stv', 'tab_kontaktieren'),
|
||||
'component' => absoluteJsImportUrl('public/js/components/Stv/Studentenverwaltung/Details/Kontaktieren.js'),
|
||||
];
|
||||
|
||||
Events::trigger('stv_conf_students', function & () use (&$result) {
|
||||
return $result;
|
||||
});
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
use \CI3_Events as Events;
|
||||
use \DateTime as DateTime;
|
||||
|
||||
class Dokumente extends FHCAPI_Controller
|
||||
@@ -19,6 +20,8 @@ class Dokumente extends FHCAPI_Controller
|
||||
'getDoktypen' => ['admin:r', 'assistenz:r'],
|
||||
'uploadDokument' => ['admin:rw', 'assistenz:rw'],
|
||||
'download' => ['admin:rw', 'assistenz:rw'],
|
||||
'getDocumentDropDown' => ['admin:rw', 'assistenz:rw'],
|
||||
'getDocumentDropDownMulti' => ['admin:rw', 'assistenz:rw'],
|
||||
]);
|
||||
|
||||
// Load Libraries
|
||||
@@ -566,4 +569,422 @@ class Dokumente extends FHCAPI_Controller
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public function getDocumentDropDown($prestudent_id, $studiensemester_kurzbz, $studiengang_kz)
|
||||
{
|
||||
$this->load->helper('hlp_common');
|
||||
//permission to create also odt, and doc outputs of certain documents(menu abschlusspruefung)
|
||||
$hasPermissionOutputformat = $this->permissionlib->isBerechtigt('system/change_outputformat', 's');
|
||||
|
||||
if (!$prestudent_id)
|
||||
$this->terminateWithError($this->p->t('ui', 'errorMissingValue', ['value' => 'Prestudent_id']), self::ERROR_TYPE_GENERAL);
|
||||
if (!$studiensemester_kurzbz)
|
||||
$this->terminateWithError($this->p->t('ui', 'errorMissingValue', ['value' => 'Studiensemester']), self::ERROR_TYPE_GENERAL);
|
||||
if(!$studiengang_kz)
|
||||
$this->terminateWithError($this->p->t('ui', 'errorMissingValue', ['value' => 'Studiengang_kz']), self::ERROR_TYPE_GENERAL);
|
||||
|
||||
|
||||
$uid = $this->_loadUIDFromPrestudent($prestudent_id);
|
||||
$semArray = $this->_getEntriesStudiensemester();
|
||||
$stgTyp = $this->_getStudiengangstyp($studiengang_kz);
|
||||
|
||||
$documents = [
|
||||
buildDropdownEntryPrintArray("accountinfo", "Accountinfoblatt", "xml=accountinfoblatt.xml.php&xsl=AccountInfo&output=pdf", $uid, 10, null),
|
||||
buildDropdownEntryPrintArray("ausbildungsvertrag", "Ausbildungsvertrag", "xml=ausbildungsvertrag.xml.php&xsl=Ausbildungsver&output=pdf", $uid, 20, null),
|
||||
buildDropdownEntryPrintArray("ausbildungsvertrag_en", "Ausbildungsvertrag Zweisprachig", "xml=ausbildungsvertrag.xml.php&xsl=AusbVerEng&output=pdf", $uid, 21, null),
|
||||
|
||||
buildDropdownEntryPrintArray("bescheid", "Bescheid (nur Voransicht)", "xml=abschlusspruefung.rdf.php&xsl_stg_kz=$studiengang_kz&xsl=Bescheid&output=pdf", $uid, 25, null),
|
||||
buildDropdownEntryPrintArray("diplomasupp", "Diploma Supplement (nur Voransicht)", "xml=diplomasupplement.xml.php&xsl_stg_kz=$studiengang_kz&xsl=DiplSupplement&output=pdf", $uid, 26, null),
|
||||
|
||||
buildDropdownEntryPrintArray("studienbestaetigung", "Studienbestätigung", "xml=student.rdf.php&xsl=Inskription&output=pdf", $uid, 50, null),
|
||||
buildDropdownEntryPrintArray("studienbestaetigung_en", "Studienbestätigung Englisch", "xml=student.rdf.php&xsl=InskriptionEng&output=pdf", $uid, 51, null),
|
||||
buildDropdownEntryPrintArray("zutrittskarte", "Zutrittskarte", "xsl=ZutrittskarteStud&output=pdf&data=$uid", $uid,200, "zutrittskarte.php"),
|
||||
buildDropdownEntryPrintArray("studienblatt", "Studienblatt", "xml=studienblatt.xml.php&xsl=Studienblatt&output=pdf&ss=$studiensemester_kurzbz", $uid, 60, null),
|
||||
buildDropdownEntryPrintArray("studienblatt_eng", "Studienblatt Englisch", "xml=studienblatt.xml.php&xsl=StudienblattEng&output=pdf&ss=$studiensemester_kurzbz", $uid, 61, null),
|
||||
|
||||
$this->buildStudienerfolgSubmenu("de", $uid, $semArray, $studiensemester_kurzbz),
|
||||
$this->buildStudienerfolgSubmenu("en", $uid, $semArray, $studiensemester_kurzbz),
|
||||
$this->buildStudienerfolgSubmenu("de", $uid, $semArray, $studiensemester_kurzbz, true),
|
||||
$this->buildStudienerfolgSubmenu("en", $uid, $semArray, $studiensemester_kurzbz, true),
|
||||
|
||||
[
|
||||
"id" => "submenu_studstatus",
|
||||
"type" => "submenu",
|
||||
"name" => "Verwaltung des StudierendenStatus",
|
||||
"order" => 110,
|
||||
"data" => [
|
||||
buildDropdownEntryPrintArray("Abmeldung", "Abmeldung", "xml=AntragAbmeldung.xml.php&xsl=AntragAbmeldung&prestudent_id=$prestudent_id&output=pdf", $uid, null, null),
|
||||
buildDropdownEntryPrintArray("Abmeldung durch Stgl", "AntragAbmeldungStgl", "xml=AntragAbmeldungStgl.xml.php&xsl=AntragAbmeldungStgl&prestudent_id=$prestudent_id&output=pdf", $uid, null, null),
|
||||
buildDropdownEntryPrintArray("Unterbrechung", "Unterbrechung", "xml=AntragUnterbrechung.xml.php&xsl=AntragUnterbrechung&prestudent_id=$prestudent_id&output=pdf", $uid, null, null),
|
||||
buildDropdownEntryPrintArray("Wiederholung", "Abmeldung durch Ablauf der Wiederholungsfrist", "xml=AntragWiederholung.xml.php&xsl=AntragWiederholung&prestudent_id=$prestudent_id&output=pdf", $uid, null, null),
|
||||
]
|
||||
],
|
||||
|
||||
//Bakkzeugnis bzw. Diplomzeugnis is just shown in tab final_exam
|
||||
buildDropdownEntryPrintArray("zeugnis", "Zeugnis", "xml=zeugnis.rdf.php&xsl=Zeugnis&output=pdf&xsl_stg_kz=$studiengang_kz&ss=$studiensemester_kurzbz", $uid, 121, null),
|
||||
buildDropdownEntryPrintArray("zeugnis_en", "Zeugnis Englisch", "xml=zeugnis.rdf.php&xsl=ZeugnisEng&output=pdf&xsl_stg_kz=$studiengang_kz&ss=$studiensemester_kurzbz", $uid, 122, null),
|
||||
|
||||
|
||||
];
|
||||
|
||||
Events::trigger('DocumentGenerationDropDown',
|
||||
// passing $menu per reference
|
||||
function & () use (&$documents) {
|
||||
return $documents;
|
||||
},
|
||||
$prestudent_id,
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz
|
||||
);
|
||||
|
||||
$extraEntries = $this->loadDropDownEntriesBakkOrDipl($stgTyp, $uid);
|
||||
|
||||
$documents = array_merge($documents, $extraEntries);
|
||||
|
||||
usort($documents, function ($a, $b) {
|
||||
$orderA = isset($a['order']) ? (int)$a['order'] : PHP_INT_MAX;
|
||||
$orderB = isset($b['order']) ? (int)$b['order'] : PHP_INT_MAX;
|
||||
return $orderA <=> $orderB;
|
||||
});
|
||||
|
||||
$this->terminateWithSuccess($documents);
|
||||
//return $documents || null;
|
||||
}
|
||||
|
||||
public function getDocumentDropDownMulti($studiensemester_kurzbz,$studiengang_kz)
|
||||
{
|
||||
//permission to create also odt, and doc outputs of certain documents (menu abschlusspruefung)
|
||||
$hasPermissionOutputformat = $this->permissionlib->isBerechtigt('system/change_outputformat', 's');
|
||||
|
||||
$studentUids = $this->input->get('studentUids');
|
||||
$prestudentIds = [];
|
||||
|
||||
if (is_array($studentUids) && !empty($studentUids)) {
|
||||
foreach ($studentUids as $uid) {
|
||||
$prestudent_id = $this-> _loadPrestudentFromUid($uid);
|
||||
$prestudentIds[] = $prestudent_id;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->terminateWithError($this->p->t('ui', 'errorMissingValue', ['value' => 'Array StudentUIDs']), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
|
||||
if (!$studiensemester_kurzbz)
|
||||
$this->terminateWithError($this->p->t('ui', 'errorMissingValue', ['value' => 'Studiensemester']), self::ERROR_TYPE_GENERAL);
|
||||
if(!$studiengang_kz)
|
||||
$this->terminateWithError($this->p->t('ui', 'errorMissingValue', ['value' => 'Studiengang_kz']), self::ERROR_TYPE_GENERAL);
|
||||
|
||||
|
||||
$uidString = implode(";", $studentUids);
|
||||
$prestudentIdsString = implode(";", $prestudentIds);
|
||||
|
||||
$semArray = $this->_getEntriesStudiensemester();
|
||||
$stgTyp = $this->_getStudiengangstyp($studiengang_kz);
|
||||
|
||||
$documents = [
|
||||
buildDropdownEntryPrintArray("accountinfo", "Accountinfoblatt", "xml=accountinfoblatt.xml.php&xsl=AccountInfo&output=pdf", $uidString, 10, null),
|
||||
buildDropdownEntryPrintArray("ausbildungsvertrag", "Ausbildungsvertrag", "xml=ausbildungsvertrag.xml.php&xsl=Ausbildungsver&output=pdf", $uidString, 20, null),
|
||||
buildDropdownEntryPrintArray("ausbildungsvertrag_en", "Ausbildungsvertrag Englisch", "xml=ausbildungsvertrag.xml.php&xsl=AusbVerEng&output=pdf", $uidString, 21, null),
|
||||
buildDropdownEntryPrintArray("studienbestaetigung", "Studienbestätigung", "xml=student.rdf.php&xsl=Inskription&output=pdf", $uidString, 50, null),
|
||||
buildDropdownEntryPrintArray("studienbestaetigung_en", "Studienbestätigung Englisch", "xml=student.rdf.php&xsl=InskriptionEng&output=pdf", $uidString, 51, null),
|
||||
buildDropdownEntryPrintArray("zutrittskarte", "Zutrittskarte", "xsl=ZutrittskarteStud&output=pdf&data=$uidString", $uidString,200, "zutrittskarte.php"),
|
||||
buildDropdownEntryPrintArray("studienblatt", "Studienblatt", "xml=studienblatt.xml.php&xsl=Studienblatt&output=pdf&ss=$studiensemester_kurzbz", $uidString, 60, null),
|
||||
buildDropdownEntryPrintArray("studienblatt_eng", "Studienblatt Englisch", "xml=studienblatt.xml.php&xsl=StudienblattEng&output=pdf&ss=$studiensemester_kurzbz", $uidString, 61, null),
|
||||
|
||||
// Studienerfolg Menüs automatisch
|
||||
$this->buildStudienerfolgSubmenu("de", $uidString, $semArray, $studiensemester_kurzbz),
|
||||
$this->buildStudienerfolgSubmenu("en", $uidString, $semArray, $studiensemester_kurzbz),
|
||||
$this->buildStudienerfolgSubmenu("de", $uidString, $semArray, $studiensemester_kurzbz, true),
|
||||
$this->buildStudienerfolgSubmenu("en", $uidString, $semArray, $studiensemester_kurzbz, true),
|
||||
|
||||
[
|
||||
"id" => "submenu_studstatus",
|
||||
"type" => "submenu",
|
||||
"name" => "Verwaltung des StudierendenStatus",
|
||||
"order" => 110,
|
||||
"data" => [
|
||||
buildDropdownEntryPrintArray("Abmeldung", "Abmeldung", "xml=AntragAbmeldung.xml.php&xsl=AntragAbmeldung&prestudent_id=$prestudentIdsString&output=pdf", $uidString, null, null),
|
||||
buildDropdownEntryPrintArray("Abmeldung durch Stgl", "AntragAbmeldungStgl", "xml=AntragAbmeldungStgl.xml.php&xsl=AntragAbmeldungStgl&prestudent_id=$prestudentIdsString&output=pdf", $uidString, null, null),
|
||||
buildDropdownEntryPrintArray("Unterbrechung", "Unterbrechung", "xml=AntragUnterbrechung.xml.php&xsl=AntragUnterbrechung&prestudent_id=$prestudentIdsString&output=pdf", $uidString, null, null),
|
||||
buildDropdownEntryPrintArray("Wiederholung", "Abmeldung durch Ablauf der Wiederholungsfrist", "xml=AntragWiederholung.xml.php&xsl=AntragWiederholung&prestudent_id=$prestudentIdsString&output=pdf", $uidString, null, null),
|
||||
]
|
||||
],
|
||||
|
||||
buildDropdownEntryPrintArray("diplomasupp", "Diploma Supplement (nur Voransicht)", "xml=diplomasupplement.xml.php&xsl_stg_kz=$studiengang_kz&xsl=DiplSupplement&output=pdf", $uidString, 35, null),
|
||||
buildDropdownEntryPrintArray("zeugnis", "Zeugnis", "xml=zeugnis.rdf.php&xsl=Zeugnis&output=pdf&xsl_stg_kz=$studiengang_kz&ss=$studiensemester_kurzbz", $uidString, 121, null),
|
||||
buildDropdownEntryPrintArray("zeugnis_en", "Zeugnis Englisch", "xml=zeugnis.rdf.php&xsl=ZeugnisEng&output=pdf&xsl_stg_kz=$studiengang_kz&ss=$studiensemester_kurzbz", $uidString, 122, null),
|
||||
];
|
||||
|
||||
Events::trigger('DocumentGenerationDropDownMulti',
|
||||
// passing $menu per reference
|
||||
function & () use (&$documents) {
|
||||
return $documents;
|
||||
},
|
||||
$studentUids,
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz
|
||||
);
|
||||
|
||||
$extraEntries = $this->loadDropDownEntriesBakkOrDipl($stgTyp, $uidString);
|
||||
|
||||
$documents = array_merge($documents, $extraEntries);
|
||||
|
||||
usort($documents, function ($a, $b) {
|
||||
$orderA = isset($a['order']) ? (int)$a['order'] : PHP_INT_MAX;
|
||||
$orderB = isset($b['order']) ? (int)$b['order'] : PHP_INT_MAX;
|
||||
return $orderA <=> $orderB;
|
||||
});
|
||||
|
||||
|
||||
$this->terminateWithSuccess($documents);
|
||||
|
||||
return $documents || null;
|
||||
}
|
||||
|
||||
private function _loadUIDFromPrestudent($prestudent_id)
|
||||
{
|
||||
if(!$prestudent_id){
|
||||
return $this->terminateWithError("no prestudent ID received.");
|
||||
}
|
||||
$this->load->model('crm/Student_model', 'StudentModel');
|
||||
$result = $this->StudentModel->loadWhere(
|
||||
['prestudent_id' => $prestudent_id]
|
||||
);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
$student = current($data);
|
||||
|
||||
return $student->student_uid;
|
||||
}
|
||||
|
||||
private function _loadPrestudentFromUid($studentUid)
|
||||
{
|
||||
|
||||
$this->load->model('crm/Student_model', 'StudentModel');
|
||||
$result = $this->StudentModel->loadWhere(
|
||||
['student_uid' => $studentUid]
|
||||
);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
$student = current($data);
|
||||
|
||||
|
||||
return $student->prestudent_id;
|
||||
}
|
||||
|
||||
/**
|
||||
* is building an array with studiensemesterkurzb
|
||||
* actual studiensemester plus the 5 studiensemester in the past
|
||||
|
||||
* @return Array Studiensemester_kurzbz
|
||||
*/
|
||||
private function _getEntriesStudiensemester(){
|
||||
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||
|
||||
$this->StudiensemesterModel->addPlusMinus(1, 5);
|
||||
$this->StudiensemesterModel->addOrder('ende', 'DESC');
|
||||
$result = $this->StudiensemesterModel->load();
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
foreach($data as $sem)
|
||||
{
|
||||
$semArray[] = $sem->studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
array_shift($semArray);
|
||||
|
||||
return $semArray;
|
||||
}
|
||||
/**
|
||||
* is returning the typ of Studiengang (Bakk oder Master)
|
||||
|
||||
* @return character eg. 'b' or 'm'
|
||||
*/
|
||||
private function _getStudiengangstyp($studiengang_kz)
|
||||
{
|
||||
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||
|
||||
$result = $this->StudiengangModel->loadWhere(
|
||||
array('studiengang_kz' => $studiengang_kz)
|
||||
);
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$typStudiengang = current($data)->typ;
|
||||
|
||||
return $typStudiengang;
|
||||
}
|
||||
|
||||
/**
|
||||
* helper function to create ArrayStructure
|
||||
* actual studiensemester plus the 5 studiensemester in the past
|
||||
|
||||
* @return Array Studiensemester_kurzbz
|
||||
*/
|
||||
private function buildStudienerfolgSubmenu($lang, $uid, $semArray, $studiensemester_kurzbz, $fa = false)
|
||||
{
|
||||
$entries = [];
|
||||
|
||||
$xsl = $lang === "de" ? "Studienerfolg" : "StudienerfolgEng";
|
||||
$idPrefix = "submenu_studienerfolg_" . $lang . ($fa ? "_fa" : "");
|
||||
|
||||
$entries[] = buildDropdownEntryPrintArray(
|
||||
$idPrefix . "_aktuell",
|
||||
"ausgewähltes Semester",
|
||||
"xml=studienerfolg.rdf.php&xsl=$xsl&ss=$studiensemester_kurzbz" . ($fa ? "&typ=finanzamt" : ""),
|
||||
$uid
|
||||
);
|
||||
|
||||
//all semester
|
||||
$entries[] = buildDropdownEntryPrintArray(
|
||||
$idPrefix . "_all",
|
||||
"alle Semester",
|
||||
"xml=studienerfolg.rdf.php&xsl=$xsl&ss=$studiensemester_kurzbz&all=true" . ($fa ? "&typ=finanzamt" : ""),
|
||||
$uid
|
||||
);
|
||||
|
||||
//sem from array
|
||||
foreach ($semArray as $i => $sem) {
|
||||
$entries[] = buildDropdownEntryPrintArray(
|
||||
$idPrefix . ($i === 0 ? "_akt" : "_minus" . $i),
|
||||
$sem,
|
||||
"xml=studienerfolg.rdf.php&xsl=$xsl&ss=$sem" . ($fa ? "&typ=finanzamt" : ""),
|
||||
$uid
|
||||
);
|
||||
|
||||
}
|
||||
$order = 0;
|
||||
if ($lang === "de" && !$fa) $order = 75; // Studienerfolg
|
||||
if ($lang === "en" && !$fa) $order = 76; // Studienerfolg Englisch
|
||||
if ($lang === "de" && $fa) $order = 77; // Studienerfolg Finanzamt
|
||||
if ($lang === "en" && $fa) $order = 78; // Studienerfolg Finanzamt Englisch
|
||||
|
||||
return [
|
||||
"id" => $idPrefix,
|
||||
"type" => "submenu",
|
||||
"name" => "Studienerfolg " . ($fa ? " Finanzamt" : "") . ($lang === "de" ? "" : "Englisch") ,
|
||||
"order" => $order,
|
||||
"data" => $entries,
|
||||
];
|
||||
}
|
||||
|
||||
private function loadDropDownEntriesFinalExam($hasPermissionOutputformat, $stgTyp, $uid)
|
||||
{
|
||||
if ($stgTyp == 'b')
|
||||
$postfix = 'Bakk';
|
||||
else if ($stgTyp == 'm' || $stgTyp == 'd')
|
||||
$postfix = 'Master';
|
||||
else
|
||||
return [];
|
||||
|
||||
$arrayFinalExam = [
|
||||
'pruefungsprotokoll' => [
|
||||
'de' => [
|
||||
'Bakk' => 'PrProtBA',
|
||||
'Master' => 'PrProtMA',
|
||||
],
|
||||
'en' => [
|
||||
'Bakk' => 'PrProtBAEng',
|
||||
'Master' => 'PrProtMAEng',
|
||||
],
|
||||
],
|
||||
'pruefungszeugnis' => [
|
||||
'de' => [
|
||||
'Bakk' => 'Bakkzeugnis',
|
||||
'Master' => 'Diplomzeugnis',
|
||||
],
|
||||
'en' => [
|
||||
'Bakk' => 'BakkzeugnisEng',
|
||||
'Master' => 'DiplomzeugnisEng',
|
||||
],
|
||||
],
|
||||
'urkunde' => [
|
||||
'de' => [
|
||||
'Bakk' => 'Bakkurkunde',
|
||||
'Master' => 'Diplomurkunde',
|
||||
],
|
||||
'en' => [
|
||||
'Bakk' => 'BakkurkundeEng',
|
||||
'Master' => 'DiplomurkundeEng',
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
$langLabels = [
|
||||
"de" => "Deutsch",
|
||||
"en" => "Englisch"
|
||||
];
|
||||
|
||||
$docLabels = [
|
||||
"pruefungsprotokoll" => "Prüfungsprotokoll",
|
||||
"pruefungszeugnis" => "Zeugnis",
|
||||
"urkunde" => "Urkunde"
|
||||
];
|
||||
|
||||
$submenuData = [];
|
||||
if ($hasPermissionOutputformat) {
|
||||
foreach ($arrayFinalExam as $docType => $langs) {
|
||||
foreach ($langs as $lang => $types) {
|
||||
$xsl = $types[$postfix];
|
||||
$idPrefix = $docType . "_" . $lang;
|
||||
|
||||
$baseName = $docLabels[$docType] . " " . $langLabels[$lang];
|
||||
$baseUrl = "xml=abschlusspruefung.rdf.php&xsl={$xsl}";
|
||||
|
||||
//3 outputformates
|
||||
foreach (["pdf", "odt", "docx"] as $format) {
|
||||
$submenuData[] = buildDropdownEntryPrintArray(
|
||||
$idPrefix . "_" . $format,
|
||||
$baseName . " (" . strtoupper($format) . ")",
|
||||
$baseUrl . "&output=" . $format,
|
||||
$uid
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach ($arrayFinalExam as $docType => $langs) {
|
||||
foreach ($langs as $lang => $types) {
|
||||
$xsl = $types[$postfix]; // Auswahl Bakk/Master für jeweilige Sprache
|
||||
$id = $docType . "_" . $lang;
|
||||
|
||||
$name = $docLabels[$docType] . " " . $langLabels[$lang];
|
||||
|
||||
$url = "xml=abschlusspruefung.rdf.php&xsl=" . $xsl . "&output=pdf";
|
||||
|
||||
$submenuData[] = buildDropdownEntryPrintArray($id, $name, $url, $uid);
|
||||
}
|
||||
}
|
||||
}
|
||||
return [
|
||||
"id" => "submenu_finalexam",
|
||||
"type" => "submenu",
|
||||
"name" => "Abschlussprüfung",
|
||||
"data" => $submenuData,
|
||||
"order" => null,
|
||||
"order" => 80,
|
||||
];
|
||||
}
|
||||
|
||||
private function loadDropDownEntriesBakkOrDipl($stgTyp, $uid)
|
||||
{
|
||||
$entries = [];
|
||||
|
||||
if ($stgTyp == 'b')
|
||||
{
|
||||
$entries[] = buildDropdownEntryPrintArray("bakkurkunde", "Bakkurkunde", "xml=abschlusspruefung.rdf.php&xsl=Bakkurkunde&output=pdf", $uid, 22, null);
|
||||
$entries[] = buildDropdownEntryPrintArray("bakkurkundeEng", "Bakkurkunde Englisch", "xml=abschlusspruefung.rdf.php&xsl=BakkurkundeEng&output=pdf", $uid, 23, null);
|
||||
}
|
||||
|
||||
if ($stgTyp == 'm' || $stgTyp == 'd')
|
||||
{
|
||||
$entries[] = buildDropdownEntryPrintArray("diplomurkunde", "Diplomurkunde", "xml=abschlusspruefung.rdf.php&xsl=Diplomurkunde&output=pdf", $uid, 27, null);
|
||||
$entries[] = buildDropdownEntryPrintArray("diplomurkundeEng", "Diplomurkunde Englisch", "xml=abschlusspruefung.rdf.php&xsl=DiplomurkundeEng&output=pdf", $uid, 28, null);
|
||||
}
|
||||
|
||||
return $entries;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -83,7 +83,7 @@ class GemeinsameStudien extends FHCAPI_Controller
|
||||
{
|
||||
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||
|
||||
$this->StudiensemesterModel->addOrder('studienjahr_kurzbz', 'DESC');
|
||||
$this->StudiensemesterModel->addOrder('start', 'DESC');
|
||||
$result = $this->StudiensemesterModel->load();
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
$this->terminateWithSuccess($data);
|
||||
|
||||
@@ -9,6 +9,8 @@ class Gruppen extends FHCAPI_Controller
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct([
|
||||
'add' => ['admin:rw', 'assistenz:rw'],
|
||||
'search' => ['admin:r', 'assistenz:r'],
|
||||
'getGruppen' => ['admin:r', 'assistenz:r'],
|
||||
'deleteGruppe' => ['admin:rw', 'assistenz:rw'],
|
||||
]);
|
||||
@@ -18,7 +20,9 @@ class Gruppen extends FHCAPI_Controller
|
||||
|
||||
// Load language phrases
|
||||
$this->loadPhrases([
|
||||
'ui', 'gruppenmanagement'
|
||||
'ui',
|
||||
'gruppenmanagement',
|
||||
'lehre'
|
||||
]);
|
||||
|
||||
// Load models
|
||||
@@ -26,15 +30,141 @@ class Gruppen extends FHCAPI_Controller
|
||||
$this->load->model('organisation/Gruppe_model', 'GruppeModel');
|
||||
}
|
||||
|
||||
public function add()
|
||||
{
|
||||
$this->load->library("form_validation");
|
||||
|
||||
$this->form_validation->set_rules(
|
||||
'gruppe_kurzbz',
|
||||
$this->p->t('gruppenmanagement', 'gruppe'),
|
||||
'required|is_in_db[organisation/Gruppe_model]',
|
||||
[
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired'),
|
||||
'is_in_db' => $this->p->t('ui', 'error_fieldNotFound')
|
||||
]
|
||||
);
|
||||
$this->form_validation->set_rules(
|
||||
'uid',
|
||||
$this->p->t('ui', 'student_uid'),
|
||||
'required|is_in_db[crm/Student_model:student_uid]',
|
||||
[
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired'),
|
||||
'is_in_db' => $this->p->t('ui', 'error_fieldNotFound')
|
||||
]
|
||||
);
|
||||
$this->form_validation->set_rules(
|
||||
'studiensemester_kurzbz',
|
||||
$this->p->t('lehre', 'studiensemester'),
|
||||
'required|is_in_db[organisation/Studiensemester_model]',
|
||||
[
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired'),
|
||||
'is_in_db' => $this->p->t('ui', 'error_fieldNotFound')
|
||||
]
|
||||
);
|
||||
|
||||
if (!$this->form_validation->run())
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
|
||||
$gruppe_kurzbz = $this->input->post('gruppe_kurzbz');
|
||||
$uid = $this->input->post('uid');
|
||||
$studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz');
|
||||
|
||||
$result = $this->BenutzergruppeModel->load([
|
||||
$gruppe_kurzbz,
|
||||
$uid
|
||||
]);
|
||||
$benutzergruppe = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
if ($benutzergruppe) {
|
||||
$this->terminateWithError(
|
||||
$this->p->t('gruppenmanagement', 'error_alreadyInGroup', [
|
||||
'uid' => $uid,
|
||||
'studiensemester_kurzbz' => current($benutzergruppe)->studiensemester_kurzbz
|
||||
]),
|
||||
self::ERROR_TYPE_GENERAL
|
||||
);
|
||||
}
|
||||
|
||||
$result = $this->BenutzergruppeModel->insert([
|
||||
'uid' => $uid,
|
||||
'gruppe_kurzbz' => $gruppe_kurzbz,
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz,
|
||||
'insertamum' => date('c'),
|
||||
'insertvon' => getAuthUID()
|
||||
]);
|
||||
|
||||
$this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess();
|
||||
}
|
||||
|
||||
public function search()
|
||||
{
|
||||
$query = $this->input->post('query');
|
||||
if (!$query)
|
||||
$this->terminateWithSuccess([]);
|
||||
|
||||
// add query to where clause
|
||||
$query = strtoupper($query);
|
||||
$query = $this->GruppeModel->db->escape_like_str($query);
|
||||
$query = '%' . str_replace(' ', '%', $query) . '%';
|
||||
|
||||
$this->GruppeModel->db->group_start();
|
||||
$this->GruppeModel->db->or_like('UPPER(gruppe_kurzbz)', $query, 'none', false);
|
||||
$this->GruppeModel->db->or_like('UPPER(bezeichnung)', $query, 'none', false);
|
||||
$this->GruppeModel->db->or_like('UPPER(beschreibung)', $query, 'none', false);
|
||||
$this->GruppeModel->db->group_end();
|
||||
|
||||
// add stg sorting 1
|
||||
$studiengang_kz = $this->input->post('studiengang_kz');
|
||||
$sort_stg = $studiengang_kz ? "WHEN studiengang_kz = " . $this->GruppeModel->escape($studiengang_kz) . " THEN 0" : "";
|
||||
|
||||
// add stg sorting 2
|
||||
$studiengang_kzs = [];
|
||||
$result = $this->permissionlib->getSTG_isEntitledFor('admin');
|
||||
if ($result)
|
||||
$studiengang_kzs = array_merge($studiengang_kzs, $result);
|
||||
$result = $this->permissionlib->getSTG_isEntitledFor('assistenz');
|
||||
if ($result)
|
||||
$studiengang_kzs = array_merge($studiengang_kzs, $result);
|
||||
|
||||
// selects
|
||||
$this->GruppeModel->addSelect("*");
|
||||
$this->GruppeModel->addSelect("CASE
|
||||
" . $sort_stg . "
|
||||
WHEN studiengang_kz IN (" . implode(",", $this->GruppeModel->db->escape($studiengang_kzs)) . ")
|
||||
THEN 1
|
||||
ELSE 2
|
||||
END AS sort_stg");
|
||||
|
||||
// ordering
|
||||
$this->GruppeModel->addOrder("sort_stg");
|
||||
$this->GruppeModel->addOrder("sort");
|
||||
$this->GruppeModel->addOrder("gruppe_kurzbz");
|
||||
|
||||
// default where clause & execute
|
||||
$result = $this->GruppeModel->loadWhere([
|
||||
'lehre' => true,
|
||||
'sichtbar' => true,
|
||||
'aktiv' => true,
|
||||
'direktinskription' => false,
|
||||
'generiert' => false
|
||||
]);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function getGruppen($student_uid)
|
||||
{
|
||||
$this->BenutzergruppeModel ->addSelect('gruppe_kurzbz');
|
||||
$this->BenutzergruppeModel ->addSelect('bezeichnung');
|
||||
$this->BenutzergruppeModel ->addSelect('generiert');
|
||||
$this->BenutzergruppeModel ->addSelect('uid');
|
||||
$this->BenutzergruppeModel ->addSelect('studiensemester_kurzbz');
|
||||
$this->BenutzergruppeModel ->addJoin('public.tbl_gruppe', 'gruppe_kurzbz');
|
||||
$this->BenutzergruppeModel-> addOrder('bezeichnung', 'ASC');
|
||||
$this->BenutzergruppeModel->addSelect('gruppe_kurzbz');
|
||||
$this->BenutzergruppeModel->addSelect('bezeichnung');
|
||||
$this->BenutzergruppeModel->addSelect('generiert');
|
||||
$this->BenutzergruppeModel->addSelect('uid');
|
||||
$this->BenutzergruppeModel->addSelect('studiensemester_kurzbz');
|
||||
$this->BenutzergruppeModel->addJoin('public.tbl_gruppe', 'gruppe_kurzbz');
|
||||
$this->BenutzergruppeModel->addOrder('bezeichnung', 'ASC');
|
||||
|
||||
$result = $this->BenutzergruppeModel->loadWhere(
|
||||
array(
|
||||
@@ -49,29 +179,48 @@ class Gruppen extends FHCAPI_Controller
|
||||
|
||||
public function deleteGruppe()
|
||||
{
|
||||
$student_uid = $this->input->post('id');
|
||||
$this->load->library("form_validation");
|
||||
|
||||
$this->form_validation->set_rules(
|
||||
'uid',
|
||||
$this->p->t('person', 'UID'),
|
||||
'required',
|
||||
[
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired')
|
||||
]
|
||||
);
|
||||
|
||||
$this->form_validation->set_rules(
|
||||
'gruppe_kurzbz',
|
||||
$this->p->t('gruppenmanagement', 'gruppe'),
|
||||
'required',
|
||||
[
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired')
|
||||
]
|
||||
);
|
||||
|
||||
if (!$this->form_validation->run())
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
|
||||
$uid = $this->input->post('uid');
|
||||
$gruppe_kurzbz = $this->input->post('gruppe_kurzbz');
|
||||
|
||||
//Validate if automatic group generation
|
||||
$result = $this->GruppeModel-> loadWhere(
|
||||
array(
|
||||
'gruppe_kurzbz' => $gruppe_kurzbz
|
||||
)
|
||||
);
|
||||
// Validate if automatic group generation
|
||||
$result = $this->GruppeModel->loadWhere([
|
||||
'gruppe_kurzbz' => $gruppe_kurzbz
|
||||
]);
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
$generation = current($data);
|
||||
|
||||
if($generation->generiert)
|
||||
if ($generation->generiert)
|
||||
{
|
||||
$this->terminateWithError($this->p->t('gruppenmanagement', 'error_deleteGeneratedGroups'), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
|
||||
$result = $this->BenutzergruppeModel->delete(
|
||||
array(
|
||||
'gruppe_kurzbz' => $gruppe_kurzbz,
|
||||
'uid' => $student_uid
|
||||
)
|
||||
);
|
||||
$result = $this->BenutzergruppeModel->delete([
|
||||
'gruppe_kurzbz' => $gruppe_kurzbz,
|
||||
'uid' => $uid
|
||||
]);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
|
||||
@@ -352,7 +352,7 @@ class Konto extends FHCAPI_Controller
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
|
||||
$result = $this->KontoModel->insert([
|
||||
'person_id' => $buchung['person_id'],
|
||||
'studiengang_kz' => $buchung['studiengang_kz'],
|
||||
@@ -361,7 +361,7 @@ class Konto extends FHCAPI_Controller
|
||||
'buchungstyp_kurzbz' => $buchung['buchungstyp_kurzbz'],
|
||||
'credit_points' => $buchung['credit_points'],
|
||||
'zahlungsreferenz' => $buchung['zahlungsreferenz'],
|
||||
'betrag' => $betrag,
|
||||
'betrag' => number_format($betrag, 2, '.', ''),
|
||||
'buchungsdatum' => $buchungsdatum,
|
||||
'mahnspanne' => '0',
|
||||
'buchungsnr_verweis' => $buchung['buchungsnr'],
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
|
||||
class Lehrverband extends FHCAPI_Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct([
|
||||
'hasOrgforms' => ['admin:r', 'assistenz:r'],
|
||||
'getTree' => ['admin:r', 'assistenz:r'],
|
||||
'getSpecialgroups' => ['admin:r', 'assistenz:r']
|
||||
]);
|
||||
}
|
||||
|
||||
public function hasOrgforms($studiengang_kz)
|
||||
{
|
||||
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||
|
||||
$result = $this->StudiengangModel->load($studiengang_kz);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
if ($data) {
|
||||
$data = current($data)->mischform;
|
||||
}
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function getTree($studiengang_kz)
|
||||
{
|
||||
$this->load->model('organisation/Lehrverband_model', 'LehrverbandModel');
|
||||
|
||||
$result = $this->LehrverbandModel->loadWhere([
|
||||
'studiengang_kz' => $studiengang_kz,
|
||||
'aktiv' => true
|
||||
]);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function getSpecialgroups($studiengang_kz)
|
||||
{
|
||||
$this->load->model('organisation/Gruppe_model', 'GruppeModel');
|
||||
|
||||
$where = [
|
||||
'studiengang_kz' => $studiengang_kz,
|
||||
'lehre' => true,
|
||||
'sichtbar' => true,
|
||||
'aktiv' => true,
|
||||
'direktinskription' => false
|
||||
];
|
||||
|
||||
$result = $this->GruppeModel->loadWhere($where);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
}
|
||||
@@ -268,10 +268,6 @@ class Projektarbeit extends FHCAPI_Controller
|
||||
{
|
||||
$this->form_validation->set_data($formData);
|
||||
|
||||
$this->form_validation->set_rules('titel', 'Titel', 'required', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Titel'])
|
||||
]);
|
||||
|
||||
$this->form_validation->set_rules('projekttyp_kurzbz', 'Projekttyp', 'required', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Projekttyp'])
|
||||
]);
|
||||
|
||||
@@ -18,6 +18,8 @@
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
use \DateTime as DateTime;
|
||||
|
||||
/**
|
||||
* This controller operates between (interface) the JS (GUI) and the back-end
|
||||
* Provides data to the ajax get calls about addresses
|
||||
@@ -111,7 +113,7 @@ class Pruefung extends FHCAPI_Controller
|
||||
|
||||
// Load language phrases
|
||||
$this->loadPhrases([
|
||||
'global', 'ui','lehre'
|
||||
'global', 'ui', 'lehre', 'exam'
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -172,174 +174,11 @@ class Pruefung extends FHCAPI_Controller
|
||||
*
|
||||
* @param lehrveranstaltung_id, student_uid, lehreinheit_id
|
||||
*
|
||||
* @return values on success
|
||||
* retval 0: pruefung inserted
|
||||
* reval 1: pruefung and zeugnisnote inserted
|
||||
* retval 2: pruefung inserted, no insert Zeugnisnote
|
||||
* (change after date of examination)
|
||||
* retval 3: pruefung of type Termin2 inserted
|
||||
* and pruefung of type Termin1 as well
|
||||
* retval 5: prueufungen Termin 2 and 1 inserted
|
||||
* and no insert Zeugnisnote (change after date of examination)
|
||||
* @return void
|
||||
*/
|
||||
public function insertPruefung()
|
||||
{
|
||||
$authUID = getAuthUID();
|
||||
|
||||
$this->load->library('form_validation');
|
||||
|
||||
$this->form_validation->set_rules('lehrveranstaltung_id', $this->p->t('lehre', 'lehrveranstaltung'), 'required', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => $this->p->t('lehre', 'lehrveranstaltung')]),
|
||||
]);
|
||||
$this->form_validation->set_rules('lehreinheit_id', $this->p->t('lehre', 'lehreinheit'), 'required', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => $this->p->t('lehre', 'lehreinheit')]),
|
||||
]);
|
||||
$this->form_validation->set_rules('pruefungstyp_kurzbz', $this->p->t('lehre', 'pruefung'), 'required', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => $this->p->t('global', 'typ')]),
|
||||
]);
|
||||
$this->form_validation->set_rules(
|
||||
'datum',
|
||||
$this->p->t('global', 'datum'),
|
||||
['is_valid_date']
|
||||
);
|
||||
|
||||
if ($this->form_validation->run() == false)
|
||||
{
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
}
|
||||
|
||||
//calculate studiensemester_kurzbz this from lehreinheit (case newPruefung)
|
||||
$studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz');
|
||||
if (!$studiensemester_kurzbz)
|
||||
{
|
||||
$this->load->model('education/Lehreinheit_model', 'LehreinheitModel');
|
||||
|
||||
$result = $this->LehreinheitModel->load($this->input->post('lehreinheit_id'));
|
||||
|
||||
$lehreinheit = $this->getDataOrTerminateWithError($result);
|
||||
$studiensemester_kurzbz = current($lehreinheit)->studiensemester_kurzbz;
|
||||
|
||||
if (isError($result))
|
||||
{
|
||||
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
}
|
||||
|
||||
$result = $this->PruefungModel->insert([
|
||||
'lehreinheit_id' => $this->input->post('lehreinheit_id'),
|
||||
'student_uid' => $this->input->post('student_uid'),
|
||||
'mitarbeiter_uid' => $this->input->post('mitarbeiter_uid'),
|
||||
'datum' => $this->input->post('datum'),
|
||||
'pruefungstyp_kurzbz' => $this->input->post('pruefungstyp_kurzbz'),
|
||||
'note' => $this->input->post('note'),
|
||||
'anmerkung' => $this->input->post('anmerkung'),
|
||||
'insertamum' => date('c'),
|
||||
'insertvon' => $authUID,
|
||||
]);
|
||||
|
||||
$this->getDataOrTerminateWithError($result);
|
||||
|
||||
//check if existing zeugnisnote
|
||||
$this->load->model('education/Zeugnisnote_model', 'ZeugnisnoteModel');
|
||||
|
||||
$result = $this->ZeugnisnoteModel->loadWhere(array(
|
||||
'lehrveranstaltung_id' => $this->input->post('lehrveranstaltung_id'),
|
||||
'student_uid' => $this->input->post('student_uid'),
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz));
|
||||
|
||||
if (isError($result))
|
||||
{
|
||||
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
|
||||
if (!hasData($result))
|
||||
{
|
||||
//insert zeugnisnote, if not existing
|
||||
$result = $this->ZeugnisnoteModel->insert(array(
|
||||
'lehrveranstaltung_id' => $this->input->post('lehrveranstaltung_id'),
|
||||
'student_uid' => $this->input->post('student_uid'),
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz,
|
||||
'note' => $this->input->post('note'),
|
||||
'uebernahmedatum' => date('c'),
|
||||
'benotungsdatum' => $this->input->post('datum'),
|
||||
'insertamum' => date('c'),
|
||||
'insertvon' => $authUID
|
||||
));
|
||||
|
||||
if (isError($result))
|
||||
{
|
||||
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
$this->terminateWithSuccess(1);
|
||||
}
|
||||
|
||||
$return_code = 0;
|
||||
|
||||
//handling Termin1 if not existing
|
||||
if($this->input->post('pruefungstyp_kurzbz') == "Termin2")
|
||||
{
|
||||
$resultP = $this->PruefungModel->loadWhere(array(
|
||||
'lehreinheit_id' => $this->input->post('lehreinheit_id'),
|
||||
'student_uid' => $this->input->post('student_uid'),
|
||||
'pruefungstyp_kurzbz' => 'Termin1'));
|
||||
|
||||
if (isError($resultP))
|
||||
{
|
||||
$this->terminateWithError(getError($resultP), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
if(!hasData($resultP))
|
||||
{
|
||||
//check if existing Zeugnisnote
|
||||
$this->load->model('education/Zeugnisnote_model', 'ZeugnisnoteModel');
|
||||
$this->ZeugnisnoteModel->addJoin('lehre.tbl_lehreinheit', 'lehrveranstaltung_id');
|
||||
|
||||
$resultP = $this->ZeugnisnoteModel->loadWhere(array(
|
||||
'lehrveranstaltung_id' => $this->input->post('lehrveranstaltung_id'),
|
||||
'student_uid' => $this->input->input->post('student_uid'),
|
||||
'lehre.tbl_zeugnisnote.studiensemester_kurzbz' => $studiensemester_kurzbz));
|
||||
if (isError($resultP))
|
||||
{
|
||||
$this->terminateWithError(getError($resultP), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
if (!hasData($resultP))
|
||||
{
|
||||
$this->terminateWithError("Zeugnisnote existiert nicht", self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
$dataNote = current(getData($resultP));
|
||||
|
||||
$resultN = $this->PruefungModel->insert([
|
||||
'lehreinheit_id' => $this->input->post('lehreinheit_id'),
|
||||
'student_uid' => $this->input->post('student_uid'),
|
||||
'mitarbeiter_uid' => $this->input->post('mitarbeiter_uid'),
|
||||
'datum' => $dataNote->benotungsdatum,
|
||||
'pruefungstyp_kurzbz' => 'Termin1',
|
||||
'note' => $dataNote->note,
|
||||
'punkte' => $dataNote->punkte,
|
||||
'anmerkung' => 'automatisiert aus Zeugnisnote erstellt',
|
||||
'insertamum' => date('c'),
|
||||
'insertvon' => $authUID,
|
||||
]);
|
||||
|
||||
if (isError($resultN)) {
|
||||
$this->terminateWithError(getError($resultN), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
$return_code = 3;
|
||||
}
|
||||
}
|
||||
|
||||
$note = current(getData($result));
|
||||
$uebernahmedatum = new DateTime($note->uebernahmedatum);
|
||||
$benotungsdatum = new DateTime($note->benotungsdatum);
|
||||
|
||||
$checkDate = $uebernahmedatum === '' || $benotungsdatum > $uebernahmedatum
|
||||
? $benotungsdatum
|
||||
: $uebernahmedatum;
|
||||
|
||||
if ($checkDate >= $this->input->post('datum') && $note !== $note->note)
|
||||
{
|
||||
$this->terminateWithSuccess($return_code + 2);
|
||||
}
|
||||
$this->terminateWithSuccess($return_code + 2);
|
||||
$this->insertOrUpdatePruefung();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -348,8 +187,6 @@ class Pruefung extends FHCAPI_Controller
|
||||
* @param pruefung_id
|
||||
*
|
||||
* @return success or error
|
||||
*
|
||||
* no impact on lehre.tbl_zeugnisnote
|
||||
*/
|
||||
public function updatePruefung($pruefung_id)
|
||||
{
|
||||
@@ -359,48 +196,7 @@ class Pruefung extends FHCAPI_Controller
|
||||
if (!$oldpruefung)
|
||||
show_404(); // Pruefung that should be updated does not exist
|
||||
|
||||
$authUID = getAuthUID();
|
||||
|
||||
$this->load->library('form_validation');
|
||||
|
||||
$this->form_validation->set_rules('lehrveranstaltung_id', $this->p->t('lehre', 'lehrveranstaltung'), 'required', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => $this->p->t('lehre', 'lehrveranstaltung')]),
|
||||
]);
|
||||
$this->form_validation->set_rules('lehreinheit_id', $this->p->t('lehre', 'lehreinheit'), 'required', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => $this->p->t('lehre', 'lehreinheit')]),
|
||||
]);
|
||||
$this->form_validation->set_rules('pruefungstyp_kurzbz', $this->p->t('lehre', 'pruefung'), 'required', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => $this->p->t('global', 'typ')]),
|
||||
]);
|
||||
$this->form_validation->set_rules(
|
||||
'datum',
|
||||
$this->p->t('global', 'datum'),
|
||||
['is_valid_date']
|
||||
);
|
||||
|
||||
if ($this->form_validation->run() == false)
|
||||
{
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
}
|
||||
|
||||
$result = $this->PruefungModel->update(
|
||||
[
|
||||
'pruefung_id' => $pruefung_id
|
||||
],
|
||||
[ 'lehreinheit_id' => $this->input->post('lehreinheit_id'),
|
||||
'student_uid' => $this->input->post('student_uid'),
|
||||
'mitarbeiter_uid' => $this->input->post('mitarbeiter_uid'),
|
||||
'note' => $this->input->post('note'),
|
||||
'pruefungstyp_kurzbz' => $this->input->post('pruefungstyp_kurzbz'),
|
||||
'datum' => $this->input->post('datum'),
|
||||
'anmerkung' => $this->input->post('anmerkung'),
|
||||
'updatevon' => $authUID,
|
||||
'updateamum' => date('c'),
|
||||
]
|
||||
);
|
||||
$this->getDataOrTerminateWithError($result);
|
||||
|
||||
return $this->outputJsonSuccess(true);
|
||||
$this->insertOrUpdatePruefung($pruefung_id);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -574,4 +370,198 @@ class Pruefung extends FHCAPI_Controller
|
||||
|
||||
return $this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
protected function insertOrUpdatePruefung($pruefung_id=null)
|
||||
{
|
||||
$authUID = getAuthUID();
|
||||
|
||||
$this->load->library('form_validation');
|
||||
|
||||
$this->form_validation->set_rules('lehreinheit_id', $this->p->t('lehre', 'lehreinheit'), 'required', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => $this->p->t('lehre', 'lehreinheit')]),
|
||||
]);
|
||||
$this->form_validation->set_rules('pruefungstyp_kurzbz', $this->p->t('lehre', 'pruefung'), 'required', [
|
||||
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => $this->p->t('global', 'typ')]),
|
||||
]);
|
||||
$this->form_validation->set_rules(
|
||||
'datum',
|
||||
$this->p->t('global', 'datum'),
|
||||
['is_valid_date']
|
||||
);
|
||||
|
||||
if ($this->form_validation->run() == false)
|
||||
{
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
}
|
||||
|
||||
$this->load->model('education/Zeugnisnote_model', 'ZeugnisnoteModel');
|
||||
|
||||
$this->PruefungModel->db->trans_start();
|
||||
|
||||
if ($this->input->post('pruefungstyp_kurzbz') == "Termin2")
|
||||
{
|
||||
//Wenn ein 2. Termin angelegt wird, und kein 1. Termin vorhanden ist,
|
||||
//dann wird auch ein 1. Termin angelegt mit der derzeitigen Zeugnisnote
|
||||
$resultP = $this->PruefungModel->loadWhere(array(
|
||||
'lehreinheit_id' => $this->input->post('lehreinheit_id'),
|
||||
'student_uid' => $this->input->post('student_uid'),
|
||||
'pruefungstyp_kurzbz' => 'Termin1'));
|
||||
|
||||
$termin1 = $this->getDataOrTerminateWithError($resultP);
|
||||
if (!$termin1)
|
||||
{
|
||||
//check if existing Zeugnisnote
|
||||
$this->ZeugnisnoteModel->addJoin('lehre.tbl_lehreinheit', 'lehrveranstaltung_id');
|
||||
|
||||
$this->ZeugnisnoteModel->db->where(
|
||||
'lehre.tbl_zeugnisnote.studiensemester_kurzbz',
|
||||
'lehre.tbl_lehreinheit.studiensemester_kurzbz',
|
||||
false
|
||||
);
|
||||
$resultP = $this->ZeugnisnoteModel->loadWhere(array(
|
||||
'lehrveranstaltung_id' => $this->input->post('lehrveranstaltung_id'),
|
||||
'student_uid' => $this->input->post('student_uid')
|
||||
));
|
||||
|
||||
$zeugnisnoten = $this->getDataOrTerminateWithError($resultP);
|
||||
if ($zeugnisnoten)
|
||||
{
|
||||
$zeugnisnote = current($zeugnisnoten);
|
||||
|
||||
$resultN = $this->PruefungModel->insert([
|
||||
'lehreinheit_id' => $this->input->post('lehreinheit_id'),
|
||||
'student_uid' => $this->input->post('student_uid'),
|
||||
'mitarbeiter_uid' => $this->input->post('mitarbeiter_uid'),
|
||||
'datum' => $zeugnisnote->benotungsdatum,
|
||||
'pruefungstyp_kurzbz' => 'Termin1',
|
||||
'note' => $zeugnisnote->note,
|
||||
'punkte' => $zeugnisnote->punkte,
|
||||
'anmerkung' => 'automatisiert aus Zeugnisnote erstellt',
|
||||
'insertamum' => date('c'),
|
||||
'insertvon' => $authUID,
|
||||
]);
|
||||
|
||||
$this->getDataOrTerminateWithError($resultN);
|
||||
}
|
||||
//Wenn keine Zeugnisnote vorhanden ist, dann wird kein
|
||||
//1.Termin angelegt
|
||||
}
|
||||
}
|
||||
|
||||
if(intval($pruefung_id) > 0)
|
||||
{
|
||||
$result = $this->PruefungModel->update(
|
||||
[
|
||||
'pruefung_id' => $pruefung_id
|
||||
],
|
||||
[ 'lehreinheit_id' => $this->input->post('lehreinheit_id'),
|
||||
'student_uid' => $this->input->post('student_uid'),
|
||||
'mitarbeiter_uid' => $this->input->post('mitarbeiter_uid'),
|
||||
'note' => $this->input->post('note'),
|
||||
'pruefungstyp_kurzbz' => $this->input->post('pruefungstyp_kurzbz'),
|
||||
'datum' => $this->input->post('datum'),
|
||||
'anmerkung' => $this->input->post('anmerkung'),
|
||||
'updatevon' => $authUID,
|
||||
'updateamum' => date('c'),
|
||||
]
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$result = $this->PruefungModel->insert([
|
||||
'lehreinheit_id' => $this->input->post('lehreinheit_id'),
|
||||
'student_uid' => $this->input->post('student_uid'),
|
||||
'mitarbeiter_uid' => $this->input->post('mitarbeiter_uid'),
|
||||
'datum' => $this->input->post('datum'),
|
||||
'pruefungstyp_kurzbz' => $this->input->post('pruefungstyp_kurzbz'),
|
||||
'note' => $this->input->post('note'),
|
||||
'anmerkung' => $this->input->post('anmerkung'),
|
||||
'insertamum' => date('c'),
|
||||
'insertvon' => $authUID,
|
||||
'punkte' => $this->input->post('punkte') ? str_replace(',', '.', $this->input->post('punkte')) : null
|
||||
]);
|
||||
}
|
||||
|
||||
$this->getDataOrTerminateWithError($result);
|
||||
|
||||
//get studiensemester_kurzbz and lehreveranstaltung_id from lehreinheit
|
||||
$this->load->model('education/Lehreinheit_model', 'LehreinheitModel');
|
||||
|
||||
$result = $this->LehreinheitModel->load($this->input->post('lehreinheit_id'));
|
||||
|
||||
$lehreinheiten = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
if (!$lehreinheiten) {
|
||||
$this->terminateWithValidationErrors([
|
||||
'lehreinheit_id' => $this->p->t('ui', 'error_fieldNotFound', [
|
||||
'field' => $this->p->t('lehre', 'lehreinheit')
|
||||
])
|
||||
]);
|
||||
}
|
||||
$lehreinheit = current($lehreinheiten);
|
||||
$studiensemester_kurzbz = $lehreinheit->studiensemester_kurzbz;
|
||||
$lehrveranstaltung_id = $lehreinheit->lehrveranstaltung_id;
|
||||
|
||||
//check if existing zeugnisnote
|
||||
$result = $this->ZeugnisnoteModel->loadWhere(array(
|
||||
'lehrveranstaltung_id' => $lehrveranstaltung_id,
|
||||
'student_uid' => $this->input->post('student_uid'),
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz
|
||||
));
|
||||
|
||||
$zeugnisnoten = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
if (!$zeugnisnoten)
|
||||
{
|
||||
//insert zeugnisnote, if not existing
|
||||
$result = $this->ZeugnisnoteModel->insert(array(
|
||||
'lehrveranstaltung_id' => $lehrveranstaltung_id,
|
||||
'student_uid' => $this->input->post('student_uid'),
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz,
|
||||
'note' => $this->input->post('note'),
|
||||
'uebernahmedatum' => date('c'),
|
||||
'benotungsdatum' => $this->input->post('datum'),
|
||||
'insertamum' => date('c'),
|
||||
'insertvon' => $authUID,
|
||||
'punkte' => $this->input->post('punkte') ? str_replace(',', '.', $this->input->post('punkte')) : null
|
||||
));
|
||||
|
||||
$this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->PruefungModel->db->trans_complete();
|
||||
$this->terminateWithSuccess();
|
||||
}
|
||||
|
||||
$note = current($zeugnisnoten);
|
||||
$uebernahmedatum = new DateTime($note->uebernahmedatum);
|
||||
$benotungsdatum = new DateTime($note->benotungsdatum);
|
||||
$pruefungsdatum = new DateTime($this->input->post('datum'));
|
||||
|
||||
$checkDate = $note->uebernahmedatum === '' || $benotungsdatum > $uebernahmedatum
|
||||
? $benotungsdatum
|
||||
: $uebernahmedatum;
|
||||
|
||||
if ($checkDate > $pruefungsdatum && $this->input->post('note') !== $note->note)
|
||||
{
|
||||
$this->PruefungModel->db->trans_complete();
|
||||
$this->terminateWithSuccess($this->p->t('exam', 'hinweis_changeAfterExamDate'));
|
||||
}
|
||||
|
||||
//update zeugnisnote, if existing and valid datum
|
||||
$result = $this->ZeugnisnoteModel->update([
|
||||
'lehrveranstaltung_id' => $lehrveranstaltung_id,
|
||||
'student_uid' => $this->input->post('student_uid'),
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz
|
||||
], [
|
||||
'note' => $this->input->post('note'),
|
||||
'uebernahmedatum' => date('c'),
|
||||
'benotungsdatum' => $this->input->post('datum'),
|
||||
'updateamum' => date('c'),
|
||||
'updatevon' => $authUID,
|
||||
'punkte' => $this->input->post('punkte') ? str_replace(',', '.', $this->input->post('punkte')) : null
|
||||
]);
|
||||
|
||||
$this->PruefungModel->db->trans_complete();
|
||||
$this->terminateWithSuccess();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -114,9 +114,8 @@ class Status extends FHCAPI_Controller
|
||||
$this->load->model('codex/Bismeldestichtag_model', 'BismeldestichtagModel');
|
||||
|
||||
$result = $this->BismeldestichtagModel->getLastReachedMeldestichtag();
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
$this->terminateWithSuccess(hasData($result) ? getData($result) : array());
|
||||
}
|
||||
|
||||
public function isLastStatus($prestudent_id)
|
||||
@@ -296,7 +295,7 @@ class Status extends FHCAPI_Controller
|
||||
}],
|
||||
//Check if Rolle already exists
|
||||
['rolle_doesnt_exist', function () use ($prestudent_id, $status_kurzbz, $studiensemester_kurzbz, $ausbildungssemester) {
|
||||
if (!$status_kurzbz || !$studiensemester_kurzbz || !$ausbildungssemester)
|
||||
if (!$status_kurzbz || !$studiensemester_kurzbz || !isset($ausbildungssemester) || $ausbildungssemester === '')
|
||||
return true; // Error will be handled by the required statements above
|
||||
|
||||
$result = $this->PrestudentstatusModel->load([$ausbildungssemester, $studiensemester_kurzbz, $status_kurzbz, $prestudent_id]);
|
||||
@@ -903,7 +902,7 @@ class Status extends FHCAPI_Controller
|
||||
|
||||
$this->form_validation->set_rules('_default', '', [
|
||||
['rolle_doesnt_exist', function () use ($prestudent_id, $status_kurzbz, $studiensemester_kurzbz, $ausbildungssemester) {
|
||||
if (!$status_kurzbz || !$studiensemester_kurzbz || !$ausbildungssemester)
|
||||
if (!$status_kurzbz || !$studiensemester_kurzbz || !isset($ausbildungssemester) || $ausbildungssemester === '')
|
||||
return true; // Error will be handled by the required statements above
|
||||
|
||||
$result = $this->PrestudentstatusModel->load([$ausbildungssemester, $studiensemester_kurzbz, $status_kurzbz, $prestudent_id]);
|
||||
@@ -920,7 +919,7 @@ class Status extends FHCAPI_Controller
|
||||
) {
|
||||
if ($isBerechtigtNoStudstatusCheck)
|
||||
return true; // Skip if access right says so
|
||||
if (!$status_kurzbz || !$datum || !$studiensemester_kurzbz || !$ausbildungssemester)
|
||||
if (!$status_kurzbz || !$datum || !$studiensemester_kurzbz || !isset($ausbildungssemester) || $ausbildungssemester === '')
|
||||
return true; // Error will be handled by the required statements above
|
||||
|
||||
$result = $this->prestudentstatuschecklib->checkStatusHistoryTimesequence(
|
||||
@@ -945,7 +944,7 @@ class Status extends FHCAPI_Controller
|
||||
) {
|
||||
if ($isBerechtigtNoStudstatusCheck)
|
||||
return true; // Skip if access right says so
|
||||
if (!$status_kurzbz || !$datum || !$studiensemester_kurzbz || !$ausbildungssemester)
|
||||
if (!$status_kurzbz || !$datum || !$studiensemester_kurzbz || !isset($ausbildungssemester) || $ausbildungssemester === '')
|
||||
return true; // Error will be handled by the required statements above
|
||||
|
||||
$result = $this->prestudentstatuschecklib->checkStatusHistoryLaststatus(
|
||||
@@ -970,7 +969,7 @@ class Status extends FHCAPI_Controller
|
||||
) {
|
||||
if ($isBerechtigtNoStudstatusCheck)
|
||||
return true; // Skip if access right says so
|
||||
if (!$status_kurzbz || !$datum || !$studiensemester_kurzbz || !$ausbildungssemester)
|
||||
if (!$status_kurzbz || !$datum || !$studiensemester_kurzbz || !isset($ausbildungssemester) || $ausbildungssemester === '')
|
||||
return true; // Error will be handled by the required statements above
|
||||
|
||||
$result = $this->prestudentstatuschecklib->checkStatusHistoryUnterbrechersemester(
|
||||
@@ -995,7 +994,7 @@ class Status extends FHCAPI_Controller
|
||||
) {
|
||||
if ($isBerechtigtNoStudstatusCheck)
|
||||
return true; // Skip if access right says so
|
||||
if (!$status_kurzbz || !$datum || !$studiensemester_kurzbz || !$ausbildungssemester)
|
||||
if (!$status_kurzbz || !$datum || !$studiensemester_kurzbz || !isset($ausbildungssemester) || $ausbildungssemester === '')
|
||||
return true; // Error will be handled by the required statements above
|
||||
|
||||
$result = $this->prestudentstatuschecklib->checkStatusHistoryAbbrechersemester(
|
||||
@@ -1020,7 +1019,7 @@ class Status extends FHCAPI_Controller
|
||||
) {
|
||||
if ($isBerechtigtNoStudstatusCheck)
|
||||
return true; // Skip if access right says so
|
||||
if (!$status_kurzbz || !$datum || !$studiensemester_kurzbz || !$ausbildungssemester)
|
||||
if (!$status_kurzbz || !$datum || !$studiensemester_kurzbz || !isset($ausbildungssemester) || $ausbildungssemester === '')
|
||||
return true; // Error will be handled by the required statements above
|
||||
|
||||
$result = $this->prestudentstatuschecklib->checkStatusHistoryDiplomant(
|
||||
|
||||
@@ -36,6 +36,7 @@ class Student extends FHCAPI_Controller
|
||||
parent::__construct([
|
||||
'get' => ['admin:r', 'assistenz:r'],
|
||||
'save' => ['admin:rw', 'assistenz:rw'],
|
||||
'saveStudent' => ['admin:rw', 'assistenz:rw'],
|
||||
'getPerson' => ['admin:rw', 'assistenz:rw'],
|
||||
'add' => ['admin:rw', 'assistenz:rw'] // TODO(chris): extra permissions
|
||||
]);
|
||||
@@ -116,11 +117,23 @@ class Student extends FHCAPI_Controller
|
||||
WHERE kontakttyp='email'
|
||||
AND person_id=p.person_id
|
||||
AND zustellung
|
||||
ORDER BY kontakt_id
|
||||
ORDER BY kontakt_id DESC
|
||||
LIMIT 1
|
||||
) AS email_privat",
|
||||
false
|
||||
);
|
||||
$this->PrestudentModel->addSelect(
|
||||
"(
|
||||
SELECT kontakt
|
||||
FROM public.tbl_kontakt
|
||||
WHERE kontakttyp='email_unverifiziert'
|
||||
AND person_id=p.person_id
|
||||
AND zustellung
|
||||
ORDER BY kontakt_id DESC
|
||||
LIMIT 1
|
||||
) AS email_privat_unverified",
|
||||
false
|
||||
);
|
||||
}
|
||||
$this->PrestudentModel->addSelect(
|
||||
"(
|
||||
@@ -423,6 +436,31 @@ class Student extends FHCAPI_Controller
|
||||
), ''));
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves data to a prestudent using their student_uid
|
||||
*
|
||||
* @param string $student_uid
|
||||
* @param string $studiensemester_kurzbz
|
||||
* @return void
|
||||
*/
|
||||
public function saveStudent($student_uid, $studiensemester_kurzbz)
|
||||
{
|
||||
$this->load->model('crm/Student_model', 'StudentModel');
|
||||
|
||||
$result = $this->StudentModel->load([$student_uid]);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
if (!$data)
|
||||
show_404(); // No Student with that ID
|
||||
|
||||
$student = current($data);
|
||||
|
||||
$this->checkPermissionsForPrestudent($student->prestudent_id, ['admin:rw', 'assistenz:rw']);
|
||||
|
||||
return $this->save($student->prestudent_id, $studiensemester_kurzbz);
|
||||
}
|
||||
|
||||
public function getPerson()
|
||||
{
|
||||
$this->load->library('form_validation');
|
||||
|
||||
@@ -44,14 +44,12 @@ class Students extends FHCAPI_Controller
|
||||
}
|
||||
|
||||
// Load Libraries
|
||||
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||
$this->load->library('PhrasesLib');
|
||||
$this->loadPhrases(
|
||||
array(
|
||||
'lehre'
|
||||
)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -75,7 +73,7 @@ class Students extends FHCAPI_Controller
|
||||
* /(studiengang_kz)/(orgform)/prestudent/(studiensemester_kurzbz)/(filter) => getPrestudentsOrgform
|
||||
* /(studiengang_kz)/(orgform)/prestudent/(studiensemester_kurzbz)/(filter)/(otherfilter) => getPrestudentsOrgform
|
||||
*
|
||||
* /(studiensemester_kurzbz)/(studiengang_kz)/(semester)/grp/(gruppe) => getStudentsSpezialguppe
|
||||
* /(studiensemester_kurzbz)/(studiengang_kz)/(semester)/grp/(gruppe) => getStudentsSpezialgruppe
|
||||
*
|
||||
* /(studiensemester_kurzbz)/(studiengang_kz) => getStudents
|
||||
* /(studiensemester_kurzbz)/(studiengang_kz)/(semester) => getStudents
|
||||
@@ -101,39 +99,183 @@ class Students extends FHCAPI_Controller
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $studiensemester_kurzbz
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function getIncoming()
|
||||
public function getIncoming($studiensemester_kurzbz)
|
||||
{
|
||||
$this->addMeta('ci_method', __FUNCTION__);
|
||||
// TODO(chris): IMPLEMENT!
|
||||
$this->terminateWithSuccess([]);
|
||||
$this->addMeta('ci_params', [
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz
|
||||
]);
|
||||
|
||||
|
||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
||||
|
||||
|
||||
$this->PrestudentModel->addJoin(
|
||||
"(
|
||||
SELECT prestudent_id
|
||||
FROM public.tbl_prestudentstatus
|
||||
WHERE status_kurzbz = 'Incoming'
|
||||
AND studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
|
||||
) test",
|
||||
"prestudent_id"
|
||||
);
|
||||
|
||||
|
||||
$this->prepareQuery($studiensemester_kurzbz);
|
||||
|
||||
$this->PrestudentModel->addSelect("COALESCE(
|
||||
v.semester::text,
|
||||
CASE
|
||||
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
|
||||
THEN pls.ausbildungssemester::text
|
||||
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->addFilter($studiensemester_kurzbz);
|
||||
|
||||
|
||||
$result = $this->PrestudentModel->load();
|
||||
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $studiensemester_kurzbz
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function getOutgoing()
|
||||
public function getOutgoing($studiensemester_kurzbz)
|
||||
{
|
||||
$this->addMeta('ci_method', __FUNCTION__);
|
||||
// TODO(chris): IMPLEMENT!
|
||||
$this->terminateWithSuccess([]);
|
||||
$this->addMeta('ci_params', [
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz
|
||||
]);
|
||||
|
||||
|
||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
||||
|
||||
|
||||
$this->PrestudentModel->addJoin(
|
||||
"(
|
||||
SELECT prestudent_id
|
||||
FROM bis.tbl_bisio bis
|
||||
JOIN public.tbl_student USING (student_uid)
|
||||
JOIN public.tbl_studiensemester stdsem ON (
|
||||
(bis.von >= stdsem.start AND bis.von <= stdsem.ende)
|
||||
OR
|
||||
(bis.bis >= stdsem.start AND bis.bis <= stdsem.ende)
|
||||
OR
|
||||
(bis.von <= stdsem.start AND bis.bis >= stdsem.ende)
|
||||
)
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM public.tbl_prestudentstatus
|
||||
WHERE status_kurzbz = 'Incoming'
|
||||
AND prestudent_id = tbl_student.prestudent_id
|
||||
) AND stdsem.studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
|
||||
GROUP BY prestudent_id
|
||||
) test",
|
||||
"prestudent_id"
|
||||
);
|
||||
|
||||
|
||||
$this->prepareQuery($studiensemester_kurzbz);
|
||||
|
||||
|
||||
$this->PrestudentModel->addSelect("COALESCE(
|
||||
v.semester::text,
|
||||
CASE
|
||||
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
|
||||
THEN pls.ausbildungssemester::text
|
||||
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->addFilter($studiensemester_kurzbz);
|
||||
|
||||
|
||||
$result = $this->PrestudentModel->load();
|
||||
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $studiensemester_kurzbz
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function getGemeinsamestudien()
|
||||
public function getGemeinsamestudien($studiensemester_kurzbz)
|
||||
{
|
||||
$this->addMeta('ci_method', __FUNCTION__);
|
||||
// TODO(chris): IMPLEMENT!
|
||||
$this->terminateWithSuccess([]);
|
||||
$this->addMeta('ci_params', [
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz
|
||||
]);
|
||||
|
||||
|
||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
||||
|
||||
|
||||
$this->PrestudentModel->addJoin(
|
||||
"(
|
||||
SELECT prestudent_id
|
||||
FROM bis.tbl_mobilitaet
|
||||
WHERE studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
|
||||
) bis",
|
||||
"prestudent_id"
|
||||
);
|
||||
|
||||
|
||||
$this->prepareQuery($studiensemester_kurzbz);
|
||||
|
||||
|
||||
$this->PrestudentModel->addSelect("COALESCE(
|
||||
v.semester::text,
|
||||
CASE
|
||||
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
|
||||
THEN pls.ausbildungssemester::text
|
||||
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->addFilter($studiensemester_kurzbz);
|
||||
|
||||
|
||||
$result = $this->PrestudentModel->load();
|
||||
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function getPrestudents($studiengang_kz,
|
||||
$studiensemester_kurzbz = null, $filter = null
|
||||
)
|
||||
{
|
||||
public function getPrestudents(
|
||||
$studiengang_kz,
|
||||
$studiensemester_kurzbz = null,
|
||||
$filter = null
|
||||
) {
|
||||
$this->addMeta('ci_method', __FUNCTION__);
|
||||
$this->addMeta('ci_params', array(
|
||||
'studiengang_kz' => $studiengang_kz,
|
||||
@@ -144,10 +286,12 @@ class Students extends FHCAPI_Controller
|
||||
$this->fetchPrestudents($studiengang_kz, $studiensemester_kurzbz, $filter);
|
||||
}
|
||||
|
||||
public function getPrestudentsOrgform($studiengang_kz, $orgform_kurzbz,
|
||||
$studiensemester_kurzbz = null, $filter = null
|
||||
)
|
||||
{
|
||||
public function getPrestudentsOrgform(
|
||||
$studiengang_kz,
|
||||
$orgform_kurzbz,
|
||||
$studiensemester_kurzbz = null,
|
||||
$filter = null
|
||||
) {
|
||||
$this->addMeta('ci_method', __FUNCTION__);
|
||||
$this->addMeta('ci_params', array(
|
||||
'studiengang_kz' => $studiengang_kz,
|
||||
@@ -227,7 +371,7 @@ class Students extends FHCAPI_Controller
|
||||
|
||||
$stg = $this->getDataOrTerminateWithError($result);
|
||||
if (!$stg)
|
||||
$this->terminateWithValidationErrors(['' => 'Studiengang does not exist']); // TODO(chris): phrase
|
||||
$this->terminateWithSuccess([]);
|
||||
$stg = current($stg);
|
||||
|
||||
$where['ps.status_kurzbz'] = 'Interessent';
|
||||
@@ -296,7 +440,10 @@ class Students extends FHCAPI_Controller
|
||||
break;
|
||||
default:
|
||||
if (!$studiensemester_kurzbz) {
|
||||
// TODO(chris): this does not work with $orgform_kurzbz != null
|
||||
/** NOTE(chris):
|
||||
* 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;
|
||||
} else {
|
||||
$this->PrestudentModel->db->where_in('ps.status_kurzbz', [
|
||||
@@ -310,42 +457,18 @@ class Students extends FHCAPI_Controller
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
$this->PrestudentModel->addJoin('public.tbl_studiengang stg', 'studiengang_kz', 'LEFT');
|
||||
$this->PrestudentModel->addJoin('public.tbl_person p', 'person_id');
|
||||
$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_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->prepareQuery($studiensemester_kurzbz);
|
||||
|
||||
$this->PrestudentModel->addSelect("
|
||||
CASE WHEN ps.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
|
||||
THEN ps.ausbildungssemester::text
|
||||
ELSE ''::text END AS semester", false);
|
||||
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();
|
||||
|
||||
//add status per semester
|
||||
$this->PrestudentModel->addSelect(
|
||||
"(
|
||||
SELECT status_kurzbz
|
||||
FROM public.tbl_prestudentstatus pss
|
||||
WHERE pss.prestudent_id = public.tbl_prestudent.prestudent_id
|
||||
AND pss.studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
|
||||
ORDER BY GREATEST(pss.datum, '0001-01-01') DESC
|
||||
LIMIT 1
|
||||
) AS statusofsemester"
|
||||
);
|
||||
|
||||
$this->addFilter($studiensemester_kurzbz);
|
||||
|
||||
$result = $this->PrestudentModel->loadWhere($where);
|
||||
@@ -355,10 +478,13 @@ class Students extends FHCAPI_Controller
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function getStudents($studiensemester_kurzbz,
|
||||
$studiengang_kz, $semester = null, $verband = null, $gruppe = null
|
||||
)
|
||||
{
|
||||
public function getStudents(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
$semester = null,
|
||||
$verband = null,
|
||||
$gruppe = null
|
||||
) {
|
||||
$this->addMeta('ci_method', __FUNCTION__);
|
||||
$this->addMeta('ci_params', array(
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz,
|
||||
@@ -371,10 +497,14 @@ class Students extends FHCAPI_Controller
|
||||
$this->fetchStudents($studiensemester_kurzbz, $studiengang_kz, $semester, $verband, $gruppe, null, null);
|
||||
}
|
||||
|
||||
public function getStudentsOrgform($studiensemester_kurzbz,
|
||||
$studiengang_kz, $orgform_kurzbz, $semester = null, $verband = null, $gruppe = null
|
||||
)
|
||||
{
|
||||
public function getStudentsOrgform(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
$orgform_kurzbz,
|
||||
$semester = null,
|
||||
$verband = null,
|
||||
$gruppe = null
|
||||
) {
|
||||
$this->addMeta('ci_method', __FUNCTION__);
|
||||
$this->addMeta('ci_params', array(
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz,
|
||||
@@ -388,10 +518,12 @@ class Students extends FHCAPI_Controller
|
||||
$this->fetchStudents($studiensemester_kurzbz, $studiengang_kz, $semester, $verband, $gruppe, null, $orgform_kurzbz);
|
||||
}
|
||||
|
||||
public function getStudentsSpezialgruppe($studiensemester_kurzbz,
|
||||
$studiengang_kz, $semester, $gruppe_kurzbz,
|
||||
$orgform_kurzbz = null)
|
||||
{
|
||||
public function getStudentsSpezialgruppe(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
$semester,
|
||||
$gruppe_kurzbz
|
||||
) {
|
||||
$this->addMeta('ci_method', __FUNCTION__);
|
||||
$this->addMeta('ci_params', array(
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz,
|
||||
@@ -403,10 +535,13 @@ class Students extends FHCAPI_Controller
|
||||
$this->fetchStudents($studiensemester_kurzbz, $studiengang_kz, $semester, null, null, $gruppe_kurzbz, null);
|
||||
}
|
||||
|
||||
public function getStudentsOrgformSpezialgruppe($studiensemester_kurzbz,
|
||||
$orgform_kurzbz, $studiengang_kz, $semester, $gruppe_kurzbz
|
||||
)
|
||||
{
|
||||
public function getStudentsOrgformSpezialgruppe(
|
||||
$studiensemester_kurzbz,
|
||||
$orgform_kurzbz,
|
||||
$studiengang_kz,
|
||||
$semester,
|
||||
$gruppe_kurzbz
|
||||
) {
|
||||
$this->addMeta('ci_method', __FUNCTION__);
|
||||
$this->addMeta('ci_params', array(
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz,
|
||||
@@ -430,8 +565,15 @@ class Students extends FHCAPI_Controller
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function fetchStudents($studiensemester_kurzbz, $studiengang_kz, $semester = null, $verband = null, $gruppe = null, $gruppe_kurzbz = null, $orgform_kurzbz = null)
|
||||
{
|
||||
protected function fetchStudents(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
$semester = null,
|
||||
$verband = null,
|
||||
$gruppe = null,
|
||||
$gruppe_kurzbz = null,
|
||||
$orgform_kurzbz = null
|
||||
) {
|
||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
||||
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||
|
||||
@@ -440,21 +582,6 @@ class Students extends FHCAPI_Controller
|
||||
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
|
||||
}
|
||||
|
||||
/*
|
||||
$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');
|
||||
$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');
|
||||
$this->PrestudentModel->addJoin(
|
||||
'public.tbl_studentlehrverband v',
|
||||
'v.student_uid=s.student_uid AND v.studiensemester_kurzbz=' . $this->PrestudentModel->escape($studiensemester_kurzbz)
|
||||
);*/
|
||||
$this->prepareQuery($studiensemester_kurzbz, '');
|
||||
|
||||
$this->PrestudentModel->addSelect('v.semester');
|
||||
@@ -462,18 +589,6 @@ class Students extends FHCAPI_Controller
|
||||
$this->PrestudentModel->addSelect('v.gruppe');
|
||||
$this->PrestudentModel->addSelect("'' AS priorisierung_relativ");
|
||||
|
||||
//add status per semester
|
||||
$this->PrestudentModel->addSelect(
|
||||
"(
|
||||
SELECT status_kurzbz
|
||||
FROM public.tbl_prestudentstatus pss
|
||||
WHERE pss.prestudent_id = public.tbl_prestudent.prestudent_id
|
||||
AND pss.studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
|
||||
ORDER BY GREATEST(pss.datum, '0001-01-01') DESC
|
||||
LIMIT 1
|
||||
) AS statusofsemester"
|
||||
);
|
||||
|
||||
|
||||
$where = [];
|
||||
|
||||
@@ -506,7 +621,6 @@ class Students extends FHCAPI_Controller
|
||||
false
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$this->addFilter($studiensemester_kurzbz);
|
||||
@@ -540,39 +654,18 @@ class Students extends FHCAPI_Controller
|
||||
|
||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
||||
|
||||
/*
|
||||
$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', 'LEFT');
|
||||
$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=' . $this->PrestudentModel->escape($studiensemester_kurzbz),
|
||||
'LEFT'
|
||||
);*/
|
||||
$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(
|
||||
"(
|
||||
SELECT status_kurzbz
|
||||
FROM public.tbl_prestudentstatus pss
|
||||
WHERE pss.prestudent_id = public.tbl_prestudent.prestudent_id
|
||||
AND pss.studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
|
||||
ORDER BY GREATEST(pss.datum, '0001-01-01') DESC
|
||||
LIMIT 1
|
||||
) AS statusofsemester"
|
||||
);
|
||||
$this->PrestudentModel->addSelect("COALESCE(
|
||||
v.semester::text,
|
||||
CASE
|
||||
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
|
||||
THEN pls.ausbildungssemester::text
|
||||
ELSE ''::text
|
||||
END
|
||||
) AS semester", false);
|
||||
$this->PrestudentModel->addSelect("COALESCE(v.verband::text, ''::text)");
|
||||
$this->PrestudentModel->addSelect("COALESCE(v.gruppe::text, ''::text)");
|
||||
|
||||
$this->addSelectPrioRel();
|
||||
|
||||
@@ -609,40 +702,12 @@ class Students extends FHCAPI_Controller
|
||||
|
||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
||||
|
||||
/*
|
||||
$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');
|
||||
$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');
|
||||
$this->PrestudentModel->addJoin(
|
||||
'public.tbl_studentlehrverband v',
|
||||
'v.student_uid=s.student_uid AND v.studiensemester_kurzbz=' . $this->PrestudentModel->escape($studiensemester_kurzbz),
|
||||
'LEFT'
|
||||
);*/
|
||||
$this->prepareQuery($studiensemester_kurzbz);
|
||||
|
||||
$this->PrestudentModel->addSelect('v.semester');
|
||||
$this->PrestudentModel->addSelect('v.verband');
|
||||
$this->PrestudentModel->addSelect('v.gruppe');
|
||||
|
||||
//add status per semester
|
||||
$this->PrestudentModel->addSelect(
|
||||
"(
|
||||
SELECT status_kurzbz
|
||||
FROM public.tbl_prestudentstatus pss
|
||||
WHERE pss.prestudent_id = public.tbl_prestudent.prestudent_id
|
||||
AND pss.studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
|
||||
ORDER BY GREATEST(pss.datum, '0001-01-01') DESC
|
||||
LIMIT 1
|
||||
) AS statusofsemester"
|
||||
);
|
||||
|
||||
$this->addSelectPrioRel();
|
||||
|
||||
|
||||
@@ -681,21 +746,59 @@ class Students extends FHCAPI_Controller
|
||||
|
||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
||||
|
||||
/*
|
||||
$this->PrestudentModel->addJoin('public.tbl_person p', 'person_id');
|
||||
$this->PrestudentModel->addJoin('public.tbl_student s', 'prestudent_id');
|
||||
$this->PrestudentModel->addJoin('public.tbl_benutzer b', 's.student_uid=b.uid');
|
||||
$this->PrestudentModel->addJoin(
|
||||
'public.tbl_studentlehrverband v',
|
||||
'v.student_uid=s.student_uid AND v.studiensemester_kurzbz=' . $this->PrestudentModel->escape($studiensemester_kurzbz),
|
||||
'LEFT'
|
||||
);*/
|
||||
$this->prepareQuery($studiensemester_kurzbz);
|
||||
|
||||
$this->PrestudentModel->addSelect('v.semester');
|
||||
$this->PrestudentModel->addSelect('v.verband');
|
||||
$this->PrestudentModel->addSelect('v.gruppe');
|
||||
|
||||
$this->addSelectPrioRel();
|
||||
|
||||
$this->addFilter($studiensemester_kurzbz);
|
||||
|
||||
$result = $this->PrestudentModel->loadWhere([
|
||||
'p.person_id' => $person_id
|
||||
]);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $studiensemester_kurzbz
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function search($studiensemester_kurzbz)
|
||||
{
|
||||
$this->addMeta('ci_method', __FUNCTION__);
|
||||
$this->addMeta('ci_params', array(
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz
|
||||
));
|
||||
|
||||
$this->load->library('SearchLib', [ 'config' => 'searchstv' ]);
|
||||
$this->load->library('form_validation');
|
||||
|
||||
$this->form_validation->set_rules('searchstr', 'searchstr', 'required');
|
||||
$this->form_validation->set_rules('types[]', 'types', 'required');
|
||||
|
||||
if (!$this->form_validation->run())
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
|
||||
$result = $this->searchlib->search($this->input->post('searchstr'), $this->input->post('types'));
|
||||
|
||||
$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(
|
||||
"(
|
||||
@@ -712,10 +815,31 @@ class Students extends FHCAPI_Controller
|
||||
|
||||
$this->addFilter($studiensemester_kurzbz);
|
||||
|
||||
$result = $this->PrestudentModel->loadWhere([
|
||||
'p.person_id' => $person_id
|
||||
]);
|
||||
|
||||
$prestudent_ids = [];
|
||||
$student_uids = [];
|
||||
$this->addMeta('data', $data);
|
||||
foreach ($data as $row) {
|
||||
$dataset = json_decode($row->data);
|
||||
if ($row->type == 'prestudent') {
|
||||
$prestudent_ids[] = $dataset->prestudent_id;
|
||||
} elseif ($row->type == 'student') {
|
||||
$student_uids[] = $dataset->uid;
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
} elseif ($prestudent_ids) {
|
||||
$this->PrestudentModel->db->where_in('tbl_prestudent.prestudent_id', $prestudent_ids);
|
||||
} elseif ($student_uids) {
|
||||
$this->PrestudentModel->db->where_in('s.student_uid', $student_uids);
|
||||
} else {
|
||||
$this->terminateWithSuccess([]);
|
||||
}
|
||||
|
||||
$result = $this->PrestudentModel->load();
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
@@ -771,6 +895,18 @@ class Students extends FHCAPI_Controller
|
||||
// verband
|
||||
// gruppe
|
||||
|
||||
//add status per semester
|
||||
$this->PrestudentModel->addSelect(
|
||||
"(
|
||||
SELECT status_kurzbz
|
||||
FROM public.tbl_prestudentstatus pss
|
||||
WHERE pss.prestudent_id = public.tbl_prestudent.prestudent_id
|
||||
AND pss.studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
|
||||
ORDER BY GREATEST(pss.datum, '0001-01-01') DESC
|
||||
LIMIT 1
|
||||
) 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');
|
||||
@@ -806,13 +942,6 @@ class Students extends FHCAPI_Controller
|
||||
$this->PrestudentModel->addSelect('mentor');
|
||||
$this->PrestudentModel->addSelect('b.aktiv AS bnaktiv');
|
||||
|
||||
/*$this->PrestudentModel->addSelect('tbl_prestudent.reihungstest_id');
|
||||
$this->PrestudentModel->addSelect('tbl_prestudent.anmeldungreihungstest');
|
||||
$this->PrestudentModel->addSelect('tbl_prestudent.gsstudientyp_kurzbz');
|
||||
$this->PrestudentModel->addSelect('tbl_prestudent.priorisierung');
|
||||
$this->PrestudentModel->addSelect('p.zugangscode');
|
||||
$this->PrestudentModel->addSelect('p.bpk');*/
|
||||
|
||||
$this->PrestudentModel->db->where_in('tbl_prestudent.studiengang_kz', $this->allowedStgs);
|
||||
|
||||
$this->PrestudentModel->addOrder('nachname');
|
||||
@@ -827,13 +956,13 @@ class Students extends FHCAPI_Controller
|
||||
$this->PrestudentModel->addSelect("(
|
||||
SELECT count(*)
|
||||
FROM (
|
||||
SELECT *, public.get_rolle_prestudent(tbl_prestudent.prestudent_id, NULL) AS laststatus
|
||||
FROM PUBLIC.tbl_prestudent pss
|
||||
JOIN PUBLIC.tbl_prestudentstatus USING (prestudent_id)
|
||||
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
|
||||
FROM public.tbl_prestudentstatus
|
||||
WHERE prestudent_id = tbl_prestudent.prestudent_id
|
||||
AND status_kurzbz = 'Interessent'
|
||||
LIMIT 1
|
||||
@@ -842,7 +971,7 @@ class Students extends FHCAPI_Controller
|
||||
) prest
|
||||
WHERE laststatus NOT IN ('Abbrecher', 'Abgewiesener', 'Absolvent')
|
||||
AND priorisierung <= tbl_prestudent.priorisierung
|
||||
) || ' (' || tbl_prestudent.priorisierung || ')' AS priorisierung_relativ", false);
|
||||
) || ' (' || COALESCE(tbl_prestudent.priorisierung::text, ' '::text) || ')' AS priorisierung_relativ", false);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -854,40 +983,20 @@ class Students extends FHCAPI_Controller
|
||||
*/
|
||||
protected function addFilter($studiensemester_kurzbz)
|
||||
{
|
||||
$filter = json_decode($this->input->get('filter'), true);
|
||||
$filter = $this->input->post('filter');
|
||||
|
||||
if (!is_array($filter))
|
||||
{
|
||||
$this->addMeta('addfilter', 'invalid filter: ' . $this->input->get('filter'));
|
||||
$this->addMeta('addfilter', 'invalid filter: ' . json_encode($this->input->post('filter')));
|
||||
return;
|
||||
}
|
||||
if (isset($filter['konto_count_0'])) {
|
||||
$bt = $this->PrestudentModel->escape($filter['konto_count_0']);
|
||||
$stdsem = $this->PrestudentModel->escape($studiensemester_kurzbz);
|
||||
|
||||
$this->PrestudentModel->db->where('(
|
||||
SELECT count(*)
|
||||
FROM public.tbl_konto
|
||||
WHERE person_id=tbl_prestudent.person_id
|
||||
AND buchungstyp_kurzbz=' . $bt . '
|
||||
AND studiensemester_kurzbz=' . $stdsem . '
|
||||
) =', 0);
|
||||
$this->PrestudentModel->db->where('get_rolle_prestudent(tbl_prestudent.prestudent_id, NULL) !=', 'Incoming');
|
||||
}
|
||||
if (isset($filter['konto_missing_counter'])) {
|
||||
$bt = $this->PrestudentModel->escape($filter['konto_missing_counter']);
|
||||
$stg = '';
|
||||
if ($this->variablelib->getVar('kontofilterstg') == 'true')
|
||||
$stg = ' AND studiengang_kz=tbl_prestudent.studiengang_kz';
|
||||
|
||||
$bt = $bt == 'alle' ? '' : ' AND buchungstyp_kurzbz=' . $bt;
|
||||
|
||||
$this->PrestudentModel->db->where('(
|
||||
SELECT sum(betrag)
|
||||
FROM public.tbl_konto
|
||||
WHERE person_id=tbl_prestudent.person_id' .
|
||||
$bt .
|
||||
$stg . '
|
||||
) !=', 0);
|
||||
foreach ($filter as $item) {
|
||||
if (isset($item['usestdsem']) && $item['usestdsem'])
|
||||
$item['studiensemester_kurzbz'] = $studiensemester_kurzbz;
|
||||
if (!$this->PrestudentModel->addFilter($item)) {
|
||||
$this->addMeta('addfilter', 'invalid filter: ' . json_encode($item));
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -165,7 +165,17 @@ class Verband extends FHCAPI_Controller
|
||||
|
||||
$this->StudiengangModel->addDistinct();
|
||||
$this->StudiengangModel->addSelect("CONCAT(" . $this->StudiengangModel->escape($link) . ", semester) AS link", false);
|
||||
$this->StudiengangModel->addSelect("CONCAT(UPPER(CONCAT(typ, kurzbz)), '-', semester, (SELECT CASE WHEN bezeichnung IS NULL OR bezeichnung='' THEN ''::TEXT ELSE CONCAT(' (', bezeichnung, ')') END FROM public.tbl_lehrverband WHERE studiengang_kz=v.studiengang_kz AND semester=v.semester ORDER BY verband, gruppe LIMIT 1)) AS name", false);
|
||||
$this->StudiengangModel->addSelect("CONCAT(
|
||||
UPPER(CONCAT(typ, kurzbz)),
|
||||
'-',
|
||||
semester,
|
||||
(
|
||||
SELECT CASE WHEN bezeichnung IS NULL OR bezeichnung='' THEN ''::TEXT ELSE CONCAT(' (', bezeichnung, ')') END
|
||||
FROM public.tbl_lehrverband
|
||||
WHERE studiengang_kz=v.studiengang_kz AND semester=v.semester
|
||||
ORDER BY verband, gruppe LIMIT 1
|
||||
)
|
||||
) AS name", false);
|
||||
|
||||
$this->StudiengangModel->addSelect('semester');
|
||||
$this->StudiengangModel->addSelect($this->StudiengangModel->escape($studiengang_kz) . '::integer AS stg_kz', false);
|
||||
@@ -173,6 +183,7 @@ class Verband extends FHCAPI_Controller
|
||||
$this->StudiengangModel->addOrder('semester');
|
||||
|
||||
if ($org_form !== null) {
|
||||
$this->StudiengangModel->addSelect("v.orgform_kurzbz");
|
||||
$this->StudiengangModel->db->group_start();
|
||||
$this->StudiengangModel->db->where('v.semester', 0);
|
||||
$this->StudiengangModel->db->or_where('v.orgform_kurzbz', $org_form);
|
||||
@@ -188,6 +199,7 @@ class Verband extends FHCAPI_Controller
|
||||
array_unshift($list, [
|
||||
'name' => 'PreStudent',
|
||||
'link' => $link . 'prestudent',
|
||||
'no_sem_reload' => true,
|
||||
'stg_kz' => (int)$studiengang_kz,
|
||||
'children' => $this->getStdSem($link . 'prestudent/', $studiengang_kz)
|
||||
]);
|
||||
@@ -216,7 +228,6 @@ class Verband extends FHCAPI_Controller
|
||||
$list = array_merge($list, $result);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
$this->terminateWithSuccess($list);
|
||||
}
|
||||
@@ -272,6 +283,7 @@ class Verband extends FHCAPI_Controller
|
||||
$this->StudiengangModel->addSelect("CONCAT(UPPER(CONCAT(typ, kurzbz)), '-', semester, verband, (SELECT CASE WHEN bezeichnung IS NULL OR bezeichnung='' THEN ''::TEXT ELSE CONCAT(' (', bezeichnung, ')') END FROM public.tbl_lehrverband WHERE studiengang_kz=v.studiengang_kz AND semester=v.semester AND verband=v.verband ORDER BY gruppe LIMIT 1)) AS name", false);
|
||||
$this->StudiengangModel->addSelect("CASE WHEN MAX(gruppe)='' OR MAX(gruppe)=' ' THEN TRUE ELSE FALSE END AS leaf");
|
||||
|
||||
$this->StudiengangModel->addSelect($this->StudiengangModel->escape($semester) . ' AS semester');
|
||||
$this->StudiengangModel->addSelect('verband');
|
||||
$this->StudiengangModel->addSelect($this->StudiengangModel->escape($studiengang_kz) . '::integer AS stg_kz', false);
|
||||
|
||||
@@ -320,6 +332,8 @@ class Verband extends FHCAPI_Controller
|
||||
$this->StudiengangModel->addSelect("CONCAT(UPPER(CONCAT(typ, kurzbz)), '-', semester, verband, gruppe, (SELECT CASE WHEN bezeichnung IS NULL OR bezeichnung='' THEN ''::TEXT ELSE CONCAT(' (', bezeichnung, ')') END FROM public.tbl_lehrverband WHERE studiengang_kz=v.studiengang_kz AND semester=v.semester AND verband=v.verband AND gruppe=v.gruppe ORDER BY gruppe LIMIT 1)) AS name", false);
|
||||
$this->StudiengangModel->addSelect("TRUE AS leaf", false);
|
||||
|
||||
$this->StudiengangModel->addSelect('v.semester');
|
||||
$this->StudiengangModel->addSelect('v.verband');
|
||||
$this->StudiengangModel->addSelect('gruppe');
|
||||
$this->StudiengangModel->addSelect($this->StudiengangModel->escape($studiengang_kz) . '::integer AS stg_kz', false);
|
||||
|
||||
|
||||
@@ -51,13 +51,17 @@ class Vorlagen extends FHCAPI_Controller
|
||||
$this->load->model('person/Benutzerfunktion_model', 'BenutzerfunktionModel');
|
||||
$result = $this->BenutzerfunktionModel->getBenutzerfunktionByUid($uid, 'oezuordnung');
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
$oe_kurzbz = current($data);
|
||||
if (hasData($result))
|
||||
{
|
||||
$data = getData($result);
|
||||
|
||||
$result = $this->VorlageModel->getAllVorlagenByOe($oe_kurzbz->oe_kurzbz);
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
$oe_kurzbz = array_column($data, 'oe_kurzbz');
|
||||
$result = $this->VorlageModel->getAllVorlagenByOe($oe_kurzbz);
|
||||
|
||||
$this->terminateWithSuccess(hasData($result) ? getData($result) : array());
|
||||
}
|
||||
$this->terminateWithSuccess(array());
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -233,10 +233,10 @@ class Person extends API_Controller
|
||||
//Quersumme bilden
|
||||
for ($i = 0; $i < 10; $i++)
|
||||
{
|
||||
$erg += $gewichtung[$i] * $tmpSvnr{$i};
|
||||
$erg += $gewichtung[$i] * $tmpSvnr[$i];
|
||||
}
|
||||
|
||||
if ($tmpSvnr{3} != ($erg % 11)) //Vergleichen der Pruefziffer mit Quersumme Modulo 11
|
||||
if ($tmpSvnr[3] != ($erg % 11)) //Vergleichen der Pruefziffer mit Quersumme Modulo 11
|
||||
{
|
||||
return error('SVNR ist ungueltig');
|
||||
}
|
||||
@@ -244,7 +244,7 @@ class Person extends API_Controller
|
||||
if (mb_strlen($person['svnr']) == 12)
|
||||
{
|
||||
$last = substr($person['svnr'], 10, 12);
|
||||
if ($last{0} != 'v' || !is_numeric($last{1}))
|
||||
if ($last[0] != 'v' || !is_numeric($last[1]))
|
||||
{
|
||||
return error('SVNR ist ungueltig');
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ class InfoCenter extends Auth_Controller
|
||||
const REIHUNGSTESTABSOLVIERT_PAGE = 'reihungstestAbsolviert';
|
||||
const ABGEWIESEN_PAGE = 'abgewiesen';
|
||||
const AUFGENOMMEN_PAGE = 'aufgenommen';
|
||||
const ONBOARDING_PAGE = 'onboarding';
|
||||
const SHOW_DETAILS_PAGE = 'showDetails';
|
||||
const SHOW_ZGV_DETAILS_PAGE = 'showZGVDetails';
|
||||
const ZGV_UBERPRUEFUNG_PAGE = 'ZGVUeberpruefung';
|
||||
@@ -116,6 +117,7 @@ class InfoCenter extends Auth_Controller
|
||||
'index' => 'infocenter:r',
|
||||
'freigegeben' => 'infocenter:r',
|
||||
'abgewiesen' => 'infocenter:r',
|
||||
'onboarding' => 'infocenter:r',
|
||||
'aufgenommen' => 'infocenter:r',
|
||||
'reihungstestAbsolviert' => 'infocenter:r',
|
||||
'showDetails' => 'infocenter:r',
|
||||
@@ -230,6 +232,13 @@ class InfoCenter extends Auth_Controller
|
||||
|
||||
$this->load->view('system/infocenter/infocenterAbgewiesen.php');
|
||||
}
|
||||
|
||||
public function onboarding()
|
||||
{
|
||||
$this->_setNavigationMenu(self::ONBOARDING_PAGE); // define the navigation menu for this page
|
||||
|
||||
$this->load->view('system/infocenter/onboarding.php');
|
||||
}
|
||||
|
||||
/**
|
||||
* Aufgenommene page of the InfoCenter tool
|
||||
@@ -1553,6 +1562,7 @@ class InfoCenter extends Auth_Controller
|
||||
$reihungstestAbsolviertLink = site_url(self::INFOCENTER_URI.'/'.self::REIHUNGSTESTABSOLVIERT_PAGE);
|
||||
$abgewiesenLink = site_url(self::INFOCENTER_URI.'/'.self::ABGEWIESEN_PAGE);
|
||||
$aufgenommenLink = site_url(self::INFOCENTER_URI.'/'.self::AUFGENOMMEN_PAGE);
|
||||
$onboardingLink = site_url(self::INFOCENTER_URI.'/'.self::ONBOARDING_PAGE);
|
||||
|
||||
$currentFilterId = $this->input->get(self::FILTER_ID);
|
||||
if (isset($currentFilterId))
|
||||
@@ -1561,6 +1571,7 @@ class InfoCenter extends Auth_Controller
|
||||
$reihungstestAbsolviertLink .= '?'.self::PREV_FILTER_ID.'='.$currentFilterId;
|
||||
$abgewiesenLink .= '?'.self::PREV_FILTER_ID.'='.$currentFilterId;
|
||||
$aufgenommenLink .= '?'.self::PREV_FILTER_ID.'='.$currentFilterId;
|
||||
$onboardingLink .= '?'.self::PREV_FILTER_ID.'='.$currentFilterId;
|
||||
}
|
||||
|
||||
$this->navigationlib->setSessionMenu(
|
||||
@@ -1624,6 +1635,18 @@ class InfoCenter extends Auth_Controller
|
||||
'', // target
|
||||
40 // sort
|
||||
),
|
||||
'ohnePrestudent' => $this->navigationlib->oneLevel(
|
||||
'Electronic Onboarding', // description
|
||||
$onboardingLink, // link
|
||||
null, // children
|
||||
'users', // icon
|
||||
null, // subscriptDescription
|
||||
false, // expand
|
||||
null, // subscriptLinkClass
|
||||
null, // subscriptLinkValue
|
||||
'', // target
|
||||
50 // sort
|
||||
),
|
||||
)
|
||||
);
|
||||
}
|
||||
@@ -1650,6 +1673,8 @@ class InfoCenter extends Auth_Controller
|
||||
$link = site_url(self::ZGV_UEBERPRUEFUNG_URI);
|
||||
if ($origin_page === self::ABGEWIESEN_PAGE)
|
||||
$link = site_url(self::INFOCENTER_URI.'/'.self::ABGEWIESEN_PAGE);
|
||||
if ($origin_page === self::ONBOARDING_PAGE)
|
||||
$link = site_url(self::INFOCENTER_URI.'/'.self::ONBOARDING_PAGE);
|
||||
|
||||
if ($origin_page === self::AUFGENOMMEN_PAGE)
|
||||
$link = site_url(self::INFOCENTER_URI.'/'.self::AUFGENOMMEN_PAGE);
|
||||
@@ -1691,6 +1716,7 @@ class InfoCenter extends Auth_Controller
|
||||
$freigegebenLink = site_url(self::INFOCENTER_URI.'/'.self::FREIGEGEBEN_PAGE);
|
||||
$absolviertLink = site_url(self::INFOCENTER_URI.'/'.self::REIHUNGSTESTABSOLVIERT_PAGE);
|
||||
$abgewiesenLink = site_url(self::INFOCENTER_URI.'/'.self::ABGEWIESEN_PAGE);
|
||||
$onboardingLink = site_url(self::INFOCENTER_URI.'/'.self::ONBOARDING_PAGE);
|
||||
$prevFilterId = $this->input->get(self::PREV_FILTER_ID);
|
||||
if (isset($prevFilterId))
|
||||
{
|
||||
@@ -1767,6 +1793,24 @@ class InfoCenter extends Auth_Controller
|
||||
)
|
||||
);
|
||||
}
|
||||
if($page == self::ONBOARDING_PAGE)
|
||||
{
|
||||
$this->navigationlib->setSessionElementMenu(
|
||||
'onboarding',
|
||||
$this->navigationlib->oneLevel(
|
||||
'Electronic Onboarding', // description
|
||||
$onboardingLink, // link
|
||||
null, // children
|
||||
'users', // icon
|
||||
null, // subscriptDescription
|
||||
false, // expand
|
||||
null, // subscriptLinkClass
|
||||
null, // subscriptLinkValue
|
||||
'', // target
|
||||
50 // sort
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -515,3 +515,73 @@ function has_permissions_for_stg($studiengang_kz, $permissions = '')
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* check if an entry exists in the database
|
||||
*/
|
||||
function is_in_db($key, $model = '')
|
||||
{
|
||||
if (!$model)
|
||||
return false;
|
||||
|
||||
$field = strstr($model, ":");
|
||||
if ($field) {
|
||||
$model = strstr($model, ":", true);
|
||||
$field = substr($field, 1);
|
||||
}
|
||||
|
||||
$CI =& get_instance();
|
||||
$CI->load->model($model, $model);
|
||||
|
||||
if ($field) {
|
||||
$result = $CI->$model->loadWhere([
|
||||
$field => $key
|
||||
]);
|
||||
} else {
|
||||
$result = $CI->$model->load($key);
|
||||
}
|
||||
|
||||
return (isSuccess($result) && hasData($result));
|
||||
}
|
||||
|
||||
/**
|
||||
* is building an array for Dropdown Entry in Print Dropdown
|
||||
* @param $id id for the Document to add to the Document Array
|
||||
* @param $name title of the dropdownEntry
|
||||
* @param $parameterUrl url of parameters xml, xsl, format etc as needed
|
||||
* WITHOUT BASEURL eg. "xml=abschlusspruefung.rdf.php&xsl_stg_kz=$studiengang_kz&xsl=Bescheid&output=pdf"
|
||||
* @param $uid default parameter, if null only parameterurl will be added
|
||||
* additional needed parameter: put in the parameterUrl
|
||||
* @param $alternativeBaseUrl: if baseUrl not pdfExport.php, put here alternative without ? char, eg. "zutrittskarte.php"
|
||||
*
|
||||
* @return Array
|
||||
*/
|
||||
function buildDropdownEntryPrintArray($id, $name, $parameterurl, $uid=null, $order=null, $alternativeBaseUrl=null)
|
||||
{
|
||||
//DEFAULT BASEURL
|
||||
$baseurl = "pdfExport.php?";
|
||||
|
||||
$uidString = $uid ? "&uid=" . $uid : "";
|
||||
|
||||
|
||||
|
||||
if($alternativeBaseUrl)
|
||||
{
|
||||
return [
|
||||
"id" => $id,
|
||||
"type" => "documenturl",
|
||||
"name" => $name,
|
||||
"url" => $alternativeBaseUrl . "?" . $parameterurl . $uidString,
|
||||
"order" => $order
|
||||
];
|
||||
}
|
||||
else
|
||||
return [
|
||||
"id" => $id,
|
||||
"type" => "documenturl",
|
||||
"name" => $name,
|
||||
"url" => $baseurl . $parameterurl . "&uid=" . $uid,
|
||||
"order" => $order
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
@@ -246,3 +246,10 @@ function generateSkipLink($skipID)
|
||||
$toPrint.='" class="fhcSkipLink" aria-label="Skip to main content"></a>';
|
||||
echo $toPrint;
|
||||
}
|
||||
|
||||
function absoluteJsImportUrl($relurl)
|
||||
{
|
||||
$ci =& get_instance();
|
||||
$url = base_url($relurl) . '?'. $ci->config->item('fhcomplete_build_version');
|
||||
return $url;
|
||||
}
|
||||
@@ -41,3 +41,4 @@ if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||
$lang['form_validation_has_write_permissions'] = 'You have no rights to edit {field} field.';
|
||||
$lang['form_validation_is_valid_date'] = 'The date format is invalid or out of range.';
|
||||
$lang['form_validation_has_permissions_for_stg'] = 'You have no rights for stg {field}.';
|
||||
$lang['form_validation_is_in_db'] = '{field} does not exist.';
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Copyright (C) 2022 fhcomplete.org
|
||||
* Copyright (C) 2025 fhcomplete.org
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -177,7 +177,7 @@ class FilterCmptLib
|
||||
$session = $this->getSession();
|
||||
|
||||
// If session is NOT empty -> a filter was already loaded
|
||||
if ($session != null)
|
||||
if (!isError($session) && $session != null)
|
||||
{
|
||||
// Retrieve the filterId stored in the session
|
||||
$sessionFilterId = $this->_getSessionElement(FilterCmptLib::FILTER_ID);
|
||||
@@ -219,9 +219,7 @@ class FilterCmptLib
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If the session is empty -> first time that this filter is loaded
|
||||
if ($session == null)
|
||||
else
|
||||
{
|
||||
// Load filter definition data from DB
|
||||
$definition = $this->_loadDefinition(
|
||||
@@ -602,7 +600,7 @@ class FilterCmptLib
|
||||
{
|
||||
$session = getSessionElement(self::SESSION_NAME, $this->_filterUniqueId);
|
||||
|
||||
if (isset($session[$name]))
|
||||
if (!isError($session) && isset($session[$name]))
|
||||
{
|
||||
return $session[$name];
|
||||
}
|
||||
@@ -623,7 +621,7 @@ class FilterCmptLib
|
||||
|
||||
if (!$this->_ci->permissionlib->hasAtLeastOne($this->_requiredPermissions, self::PERMISSION_FILTER_METHOD, self::PERMISSION_TYPE))
|
||||
{
|
||||
$this->_setSession(error('The required permission is not help by the logged user'));
|
||||
$this->_setSession(error('The required permission is not held by the logged user'));
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -904,7 +902,7 @@ class FilterCmptLib
|
||||
$filterCmptsSession = getSession(self::SESSION_NAME);
|
||||
|
||||
// If something is present in session
|
||||
if ($filterCmptsSession != null)
|
||||
if (!isError($filterCmptsSession) && $filterCmptsSession != null)
|
||||
{
|
||||
// Loops in the session for all the filter components
|
||||
foreach ($filterCmptsSession as $filterCmpt => $filterCmptData)
|
||||
@@ -951,9 +949,11 @@ class FilterCmptLib
|
||||
{
|
||||
$session = getSessionElement(self::SESSION_NAME, $this->_filterUniqueId);
|
||||
|
||||
$session[$name] = $value;
|
||||
|
||||
setSessionElement(self::SESSION_NAME, $this->_filterUniqueId, $session); // stores the single value
|
||||
if (!isError($session) && $session != null)
|
||||
{
|
||||
$session[$name] = $value;
|
||||
setSessionElement(self::SESSION_NAME, $this->_filterUniqueId, $session); // stores the single value
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -965,7 +965,7 @@ class FilterCmptLib
|
||||
$filterCmptsSession = getSession(self::SESSION_NAME);
|
||||
|
||||
// If something is present in session
|
||||
if ($filterCmptsSession != null)
|
||||
if (!isError($filterCmptsSession) && $filterCmptsSession != null)
|
||||
{
|
||||
// Loops in the session for all the filter components
|
||||
foreach ($filterCmptsSession as $filterCmpt => $filterCmptData)
|
||||
@@ -1174,3 +1174,4 @@ class FilterCmptLib
|
||||
return $filterName;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@ class LektorLib
|
||||
$this->_ci->load->model('organisation/Organisationseinheit_model', 'OrganisationseinheitModel');
|
||||
$this->_ci->load->model('ressource/mitarbeiter_model', 'MitarbeiterModel');
|
||||
$this->_ci->load->model('person/Benutzer_model', 'BenutzerModel');
|
||||
$this->_ci->load->library('PhrasesLib', array('lehre'));
|
||||
}
|
||||
|
||||
public function addLektorToLehreinheit($lehreinheit_id, $mitarbeiter_uid)
|
||||
@@ -35,7 +36,7 @@ class LektorLib
|
||||
|
||||
if (isError($already_assigned)) return $already_assigned;
|
||||
|
||||
if (hasData($already_assigned)) return error('Lektor already assigned');
|
||||
if (hasData($already_assigned)) return error($this->_ci->phraseslib->t("lehre", "bereitzugeteilt"));
|
||||
|
||||
$studiensemester_result = $this->_ci->StudiensemesterModel->loadWhere(array('studiensemester_kurzbz' => $lehreinheit->studiensemester_kurzbz));
|
||||
if (isError($studiensemester_result)) return $studiensemester_result;
|
||||
@@ -88,6 +89,7 @@ class LektorLib
|
||||
|
||||
$lehreinheit = getData($lehreinheit_result)[0];
|
||||
|
||||
|
||||
//TODO kollision check, wird vorerst nicht implementiert -> nur über das FAS möglich
|
||||
if (isset($new_data['mitarbeiter_uid']) && $new_data['mitarbeiter_uid'] !== $mitarbeiter_uid)
|
||||
{
|
||||
@@ -98,7 +100,13 @@ class LektorLib
|
||||
$verplant = $this->_ci->StundenplandevModel->loadWhere(array('lehreinheit_id' => $lehreinheit_id, 'mitarbeiter_uid' => $mitarbeiter_uid));
|
||||
|
||||
if (hasData($verplant))
|
||||
return error('Wechsel vom Mitarbeiter nicht möglich da er bereits verplant ist!');
|
||||
return error($this->_ci->phraseslib->t("lehre", "lektorbereitsverplant"));
|
||||
|
||||
$lehreinheit_data = $this->_ci->LehreinheitmitarbeiterModel->loadWhere(array('mitarbeiter_uid' => $new_data['mitarbeiter_uid'], 'lehreinheit_id' => $lehreinheit_id));
|
||||
|
||||
if (hasData($lehreinheit_data))
|
||||
return error($this->_ci->phraseslib->t("lehre", "bereitzugeteilt"));
|
||||
|
||||
}
|
||||
$warning = '';
|
||||
if (isset($new_data['semesterstunden']))
|
||||
|
||||
@@ -183,7 +183,10 @@ class ProfilLib{
|
||||
$zutrittskarte_ausgegebenam = $zutrittskarte_ausgegebenam ? current($zutrittskarte_ausgegebenam)->ausgegebenam : null;
|
||||
|
||||
//? formats date from 01-01-2000 to 01.01.2000
|
||||
$zutrittskarte_ausgegebenam = str_replace("-", ".", $zutrittskarte_ausgegebenam);
|
||||
if ($zutrittskarte_ausgegebenam !== NULL)
|
||||
{
|
||||
$zutrittskarte_ausgegebenam = (new DateTime($zutrittskarte_ausgegebenam))->format('d.m.Y');
|
||||
}
|
||||
return $zutrittskarte_ausgegebenam;
|
||||
}
|
||||
|
||||
@@ -196,7 +199,7 @@ class ProfilLib{
|
||||
private function getAdressenInfo($pid)
|
||||
{
|
||||
$this->ci->load->model("person/Adresse_model","AdresseModel");
|
||||
$adresse_res = $this->ci->AdresseModel->addSelect(["adresse_id", "strasse", "tbl_adressentyp.bezeichnung as typ", "plz", "ort", "zustelladresse", "gemeinde", "nation"]);
|
||||
$adresse_res = $this->ci->AdresseModel->addSelect(["adresse_id", "strasse", "tbl_adressentyp.bezeichnung as typ", "plz", "ort", "heimatadresse", "zustelladresse", "gemeinde", "nation"]);
|
||||
$adresse_res = $this->ci->AdresseModel->addOrder("zustelladresse", "DESC");
|
||||
$adresse_res = $this->ci->AdresseModel->addJoin("tbl_adressentyp", "typ=adressentyp_kurzbz");
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
<?php
|
||||
|
||||
use CI3_Events as Events;
|
||||
|
||||
class Prestudent_model extends DB_Model
|
||||
{
|
||||
/**
|
||||
@@ -782,4 +784,118 @@ class Prestudent_model extends DB_Model
|
||||
|
||||
return $this->execQuery($query, array($person_id));
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a filter to the query builder
|
||||
*
|
||||
* @param array $filter
|
||||
* @return boolean
|
||||
*/
|
||||
public function addFilter($filter)
|
||||
{
|
||||
if (!isset($filter['type']))
|
||||
return false;
|
||||
|
||||
switch ($filter['type']) {
|
||||
case 'konto':
|
||||
$bt = '';
|
||||
$stdsem = '';
|
||||
$comp = '!=';
|
||||
|
||||
if (isset($filter['buchungstyp_kurzbz']) && $filter['buchungstyp_kurzbz'] != 'all')
|
||||
$bt = ' AND buchungstyp_kurzbz=' . $this->escape($filter['buchungstyp_kurzbz']);
|
||||
|
||||
if (isset($filter['studiensemester_kurzbz']))
|
||||
$stdsem = ' AND studiensemester_kurzbz=' . $this->escape($filter['studiensemester_kurzbz']);
|
||||
|
||||
if (isset($filter['missing']) && $filter['missing']) {
|
||||
$comp = '=';
|
||||
$this->db->where('get_rolle_prestudent(tbl_prestudent.prestudent_id, NULL) !=', 'Incoming');
|
||||
}
|
||||
|
||||
$this->db->where('(
|
||||
SELECT count(*)
|
||||
FROM public.tbl_konto
|
||||
WHERE person_id=tbl_prestudent.person_id
|
||||
' . $bt . '
|
||||
' . $stdsem . '
|
||||
) ' . $comp, 0);
|
||||
break;
|
||||
|
||||
case 'konto_counter':
|
||||
$bt = '';
|
||||
$samestg = '';
|
||||
$past = '';
|
||||
|
||||
if (isset($filter['buchungstyp_kurzbz']) && $filter['buchungstyp_kurzbz'] != 'all')
|
||||
$bt = ' AND buchungstyp_kurzbz = ' . $this->escape($filter['buchungstyp_kurzbz']);
|
||||
|
||||
if (isset($filter['samestg']) && $filter['samestg'])
|
||||
$samestg = ' AND studiengang_kz = tbl_prestudent.studiengang_kz';
|
||||
|
||||
if (isset($filter['past']) && $filter['past'])
|
||||
$past = ' AND buchungsdatum < NOW()';
|
||||
|
||||
$this->db->where('(
|
||||
SELECT sum(betrag)
|
||||
FROM public.tbl_konto
|
||||
WHERE person_id = tbl_prestudent.person_id
|
||||
' . $bt . '
|
||||
' . $samestg . '
|
||||
' . $past . '
|
||||
) !=', 0);
|
||||
break;
|
||||
|
||||
case 'zgv':
|
||||
$this->db
|
||||
->group_start()
|
||||
->group_start()
|
||||
->where('zgv_code IS NOT NULL')
|
||||
->where('zgvdatum IS NULL')
|
||||
->group_end()
|
||||
->or_group_start()
|
||||
->where('zgvmas_code IS NOT NULL')
|
||||
->where('zgvmadatum IS NULL')
|
||||
->group_end()
|
||||
->or_group_start()
|
||||
->where('zgvdoktor_code IS NOT NULL')
|
||||
->where('zgvdoktordatum IS NULL')
|
||||
->group_end()
|
||||
->group_end();
|
||||
break;
|
||||
|
||||
case 'documents':
|
||||
$this->db->where('(
|
||||
SELECT count(*)
|
||||
FROM public.tbl_dokumentstudiengang
|
||||
WHERE dokument_kurzbz NOT IN (
|
||||
SELECT dokument_kurzbz
|
||||
FROM tbl_dokumentprestudent
|
||||
WHERE prestudent_id=tbl_prestudent.prestudent_id
|
||||
)
|
||||
AND studiengang_kz=tbl_prestudent.studiengang_kz
|
||||
) !=', 0);
|
||||
break;
|
||||
|
||||
case 'statusgrund':
|
||||
if (!isset($filter['statusgrund_id']))
|
||||
return false;
|
||||
|
||||
if (isset($filter['studiensemester_kurzbz']))
|
||||
$stdsem = ' AND studiensemester_kurzbz=' . $this->escape($filter['studiensemester_kurzbz']);
|
||||
|
||||
$this->db->where('(
|
||||
SELECT count(*)
|
||||
FROM public.tbl_prestudentstatus
|
||||
WHERE prestudent_id = tbl_prestudent.prestudent_id
|
||||
AND statusgrund_id = ' . $this->escape($filter['statusgrund_id']) . '
|
||||
' . $stdsem . '
|
||||
) !=', 0);
|
||||
break;
|
||||
}
|
||||
|
||||
Events::trigger('prestudent_add_filter', $filter);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -651,7 +651,13 @@ EOSQL;
|
||||
ELSE NULL
|
||||
END
|
||||
END,
|
||||
' '
|
||||
' '
|
||||
ORDER BY
|
||||
UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz),
|
||||
COALESCE(TRIM(tbl_lehreinheitgruppe.semester::text), ''),
|
||||
COALESCE(TRIM(tbl_lehreinheitgruppe.verband), ''),
|
||||
COALESCE(TRIM(tbl_lehreinheitgruppe.gruppe), ''),
|
||||
COALESCE(tbl_lehreinheitgruppe.gruppe_kurzbz, '')
|
||||
) AS gruppen
|
||||
FROM lehre.tbl_lehreinheitgruppe
|
||||
LEFT JOIN public.tbl_studiengang USING (studiengang_kz)
|
||||
|
||||
@@ -374,7 +374,7 @@ class Lehreinheitgruppe_model extends DB_Model
|
||||
return success('Group assigned successfully to Lehreinheit');
|
||||
}
|
||||
else
|
||||
return error('Group already assigned');
|
||||
return error($this->p->t('lehre', 'grpbereitszugeteilt'));
|
||||
}
|
||||
|
||||
public function deleteGroup($lehreinheit_id, $lehreinheitgruppe_id)
|
||||
@@ -401,7 +401,7 @@ class Lehreinheitgruppe_model extends DB_Model
|
||||
$stundenplan_result = $this->loadWhere(array('tbl_lehreinheitgruppe.lehreinheitgruppe_id' => $lehreinheitgruppe_id));
|
||||
|
||||
if (hasData($stundenplan_result))
|
||||
return error('Gruppe already verplant');
|
||||
return error($this->p->t('lehre', 'grpbereitsverplant'));
|
||||
|
||||
$delete_result = $this->delete($lehreinheitgruppe_id);
|
||||
|
||||
|
||||
@@ -63,6 +63,7 @@ class Profil_update_model extends DB_Model
|
||||
$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");
|
||||
$this->db->order_by('COALESCE(public.tbl_profil_update.updateamum, public.tbl_profil_update.insertamum)', 'DESC', false);
|
||||
$res = $this->loadWhere($whereClause);
|
||||
if (isError($res)) {
|
||||
return $res;
|
||||
@@ -118,13 +119,47 @@ class Profil_update_model extends DB_Model
|
||||
$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
|
||||
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,
|
||||
UPPER(public.tbl_studiengang.typ || public.tbl_studiengang.kurzbz) AS studiengang,
|
||||
COALESCE(of.orgform_kurzbz, public.tbl_studiengang.orgform_kurzbz) AS orgform,
|
||||
NULL as oezuordnung
|
||||
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
|
||||
LEFT JOIN (
|
||||
select
|
||||
pss.prestudent_id, COALESCE(sp.orgform_kurzbz, pss.orgform_kurzbz) as orgform_kurzbz
|
||||
from (
|
||||
select
|
||||
prestudent_id, max(insertamum) as insertamum
|
||||
from
|
||||
public.tbl_prestudentstatus
|
||||
where
|
||||
datum <= NOW()
|
||||
group by
|
||||
prestudent_id
|
||||
) mpss
|
||||
join
|
||||
public.tbl_prestudentstatus pss on pss.prestudent_id = mpss.prestudent_id and pss.insertamum = mpss.insertamum
|
||||
left join
|
||||
lehre.tbl_studienplan sp on pss.studienplan_id = sp.studienplan_id
|
||||
) of ON of.prestudent_id = public.tbl_student.prestudent_id
|
||||
Where public.tbl_studiengang.oe_kurzbz IN ? ";
|
||||
$parameters[] = $oe_berechtigung;
|
||||
if ($whereClause) {
|
||||
@@ -144,12 +179,33 @@ class Profil_update_model extends DB_Model
|
||||
}
|
||||
}
|
||||
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->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",
|
||||
"COALESCE(NULL) as studiengang",
|
||||
"COALESCE(NULL) as orgform",
|
||||
"oe.bezeichnung as oezuordnung"
|
||||
]);
|
||||
$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');
|
||||
$this->addJoin('tbl_benutzerfunktion bf', 'bf.uid = tbl_benutzer.uid AND bf.funktion_kurzbz = \'oezuordnung\' AND NOW() >= COALESCE(bf.datum_von, \'1970-01-01\'::date) AND NOW() <= COALESCE(bf.datum_bis, \'2170-12-31\'::date)', 'LEFT');
|
||||
$this->addJoin('tbl_organisationseinheit oe', 'oe.oe_kurzbz = bf.oe_kurzbz', 'LEFT');
|
||||
$mitarbeiterRequests = $this->loadWhere($whereClause);
|
||||
|
||||
if (isError($mitarbeiterRequests))
|
||||
return error("db error: " . getData($mitarbeiterRequests));
|
||||
$mitarbeiterRequests = getData($mitarbeiterRequests) ?: [];
|
||||
@@ -179,8 +235,11 @@ class Profil_update_model extends DB_Model
|
||||
private function formatProfilRequest($request)
|
||||
{
|
||||
$request->requested_change = json_decode($request->requested_change);
|
||||
$request->insertamum_iso = !is_null($request->insertamum) ? date_create($request->insertamum)->format('Y-m-d') : null;
|
||||
$request->insertamum = !is_null($request->insertamum) ? date_create($request->insertamum)->format('d.m.Y') : null;
|
||||
$request->updateamum_iso = !is_null($request->updateamum) ? date_create($request->updateamum)->format('Y-m-d') : null;
|
||||
$request->updateamum = !is_null($request->updateamum) ? date_create($request->updateamum)->format('d.m.Y') : null;
|
||||
$request->status_timestamp_iso = !is_null($request->status_timestamp) ? date_create($request->status_timestamp)->format('Y-m-d') : null;
|
||||
$request->status_timestamp = !is_null($request->status_timestamp) ? date_create($request->status_timestamp)->format('d.m.Y') : null;
|
||||
}
|
||||
|
||||
|
||||
@@ -353,12 +353,14 @@ class Mitarbeiter_model extends DB_Model
|
||||
{
|
||||
$filter = strtoLower($filter);
|
||||
|
||||
$returnwert = "p.person_id, p.nachname, p.vorname, p.titelpost, p.titelpre";
|
||||
|
||||
if ($mode == "mitAkadGrad")
|
||||
$returnwert = "ma.mitarbeiter_uid, CONCAT(p.nachname, ' ', p.vorname, ' ', p.titelpost, ' ', p.titelpre, ' (', ma.mitarbeiter_uid , ')') as mitarbeiter";
|
||||
$returnwert .= ", ma.mitarbeiter_uid, CONCAT(p.nachname, ' ', p.vorname, ' ', p.titelpost, ' ', p.titelpre, ' (', ma.mitarbeiter_uid , ')') as mitarbeiter";
|
||||
elseif ($mode == "ohneMaUid")
|
||||
$returnwert = "p.person_id, CONCAT(p.nachname, ' ', p.vorname, ' ', p.titelpost, ' ', p.titelpre) as mitarbeiter";
|
||||
$returnwert .= ", CONCAT(p.nachname, ' ', p.vorname, ' ', p.titelpost, ' ', p.titelpre) as mitarbeiter";
|
||||
else
|
||||
$returnwert = "ma.mitarbeiter_uid, CONCAT(p.nachname, ' ', p.vorname, ' (', ma.mitarbeiter_uid , ')') as mitarbeiter";
|
||||
$returnwert .= ", ma.mitarbeiter_uid, CONCAT(p.nachname, ' ', p.vorname, ' (', ma.mitarbeiter_uid , ')') as mitarbeiter";
|
||||
|
||||
$qry = "
|
||||
SELECT " . $returnwert . "
|
||||
@@ -373,7 +375,11 @@ class Mitarbeiter_model extends DB_Model
|
||||
OR
|
||||
lower (p.vorname) LIKE '%". $this->db->escape_like_str($filter)."%'
|
||||
OR
|
||||
(ma.mitarbeiter_uid) LIKE '%". $this->db->escape_like_str($filter)."%'";
|
||||
(ma.mitarbeiter_uid) LIKE '%". $this->db->escape_like_str($filter)."%'
|
||||
OR
|
||||
lower(vorname || ' ' || nachname || ' ' || vorname) like ".$this->db->escape('%'.mb_strtolower($filter).'%')."
|
||||
ORDER BY
|
||||
p.nachname, p.vorname, b.uid, p.person_id";
|
||||
|
||||
return $this->execQuery($qry);
|
||||
}
|
||||
|
||||
@@ -254,22 +254,16 @@ EOSQL;
|
||||
return $dvs;
|
||||
}
|
||||
|
||||
public function existsDienstverhaeltnis($mitarbeiter_uid, $start, $ende = null, $vertragsart_kurzbz = null)
|
||||
public function existsDienstverhaeltnis($mitarbeiter_uid, $start, $ende, $vertragsart_kurzbz)
|
||||
{
|
||||
$this->addOrder('von', 'DESC');
|
||||
$this->db->where('mitarbeiter_uid', $mitarbeiter_uid);
|
||||
if (!is_null($vertragsart_kurzbz))
|
||||
$this->db->where('vertragsart_kurzbz', $this->escape($vertragsart_kurzbz));
|
||||
|
||||
$this->db->where('vertragsart_kurzbz', $vertragsart_kurzbz);
|
||||
$this->db->where('von <=', $ende);
|
||||
|
||||
if (!is_null($ende))
|
||||
{
|
||||
$this->db->group_start();
|
||||
$this->db->where('bis >=', $start);
|
||||
$this->db->or_where('bis IS NULL', null, false);
|
||||
$this->db->group_end();
|
||||
}
|
||||
$this->db->group_start();
|
||||
$this->db->where('bis >=', $start);
|
||||
$this->db->or_where('bis IS NULL', null, false);
|
||||
$this->db->group_end();
|
||||
|
||||
$this->addLimit(1);
|
||||
return $this->load();
|
||||
|
||||
@@ -2,10 +2,14 @@
|
||||
$includesArray = array(
|
||||
'title' => 'Profil Änderungen',
|
||||
'vue3' => true,
|
||||
'primevue3' => true,
|
||||
'bootstrap5' => true,
|
||||
'fontawesome6'=> true,
|
||||
'axios027' => true,
|
||||
'tabulator5' => true,
|
||||
'customJSs' => array(
|
||||
'vendor/moment/luxonjs/luxon.min.js'
|
||||
),
|
||||
'customJSModules' => array(
|
||||
'public/js/apps/Cis/ProfilUpdateRequests.js'
|
||||
),
|
||||
|
||||
@@ -22,7 +22,8 @@
|
||||
'public/css/components/function.css'
|
||||
],
|
||||
'customJSs' => [
|
||||
'vendor/vuejs/vuedatepicker_js/vue-datepicker.iife.js'
|
||||
'vendor/vuejs/vuedatepicker_js/vue-datepicker.iife.js',
|
||||
'vendor/moment/luxonjs/luxon.min.js'
|
||||
#'vendor/npm-asset/primevue/tree/tree.min.js',
|
||||
#'vendor/npm-asset/primevue/toast/toast.min.js'
|
||||
],
|
||||
@@ -53,6 +54,8 @@ $configArray = [
|
||||
active-addons="<?= defined('ACTIVE_ADDONS') ? ACTIVE_ADDONS : ''; ?>"
|
||||
stv-root="<?= site_url('Studentenverwaltung'); ?>"
|
||||
cis-root="<?= CIS_ROOT; ?>"
|
||||
avatar-url="<?= site_url('Cis/Pub/bild/person/' . getAuthPersonId()); ?>"
|
||||
logout-url="<?= site_url('Cis/Auth/logout'); ?>"
|
||||
:permissions="<?= htmlspecialchars(json_encode($permissions)); ?>"
|
||||
:config="<?= htmlspecialchars(json_encode($configArray)); ?>"
|
||||
>
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
$this->load->view(
|
||||
'templates/FHC-Header',
|
||||
array(
|
||||
'title' => 'Info Center',
|
||||
'jquery3' => true,
|
||||
'jqueryui1' => true,
|
||||
'jquerycheckboxes1' => true,
|
||||
'bootstrap3' => true,
|
||||
'fontawesome4' => true,
|
||||
'sbadmintemplate3' => true,
|
||||
'tablesorter2' => true,
|
||||
'ajaxlib' => true,
|
||||
'filterwidget' => true,
|
||||
'navigationwidget' => true,
|
||||
'dialoglib' => true,
|
||||
'phrases' => array(
|
||||
'person' => array('vorname', 'nachname'),
|
||||
'ui' => array('bitteEintragWaehlen')
|
||||
),
|
||||
'customCSSs' => array('public/css/sbadmin2/tablesort_bootstrap.css', 'public/css/infocenter/infocenterPersonDataset.css'),
|
||||
'customJSs' => array('public/js/bootstrapper.js', 'public/js/infocenter/rueckstellung.js', 'public/js/infocenter/infocenterPersonDataset.js')
|
||||
)
|
||||
);
|
||||
?>
|
||||
|
||||
<div id="wrapper">
|
||||
|
||||
<?php echo $this->widgetlib->widget('NavigationWidget'); ?>
|
||||
|
||||
<div id="page-wrapper">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<h3 class="page-header">
|
||||
Electronic Onboarding
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<?php $this->load->view('system/infocenter/onboardingData.php'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php $this->load->view('templates/FHC-Footer'); ?>
|
||||
@@ -0,0 +1,116 @@
|
||||
<?php
|
||||
|
||||
$APP = '\'infocenter\'';
|
||||
$KENNZEICHEN = '\'eobRegistrierungsId\'';
|
||||
|
||||
$query = '
|
||||
SELECT
|
||||
p.person_id AS "PersonId",
|
||||
p.vorname AS "Vorname",
|
||||
p.nachname AS "Nachname",
|
||||
pl.zeitpunkt AS "LockDate",
|
||||
pl.lockuser AS "LockUser",
|
||||
rueck.datum_bis AS "HoldDate",
|
||||
rueck.bezeichnung AS "Rueckstellgrund"
|
||||
FROM public.tbl_person p
|
||||
JOIN tbl_kennzeichen ON p.person_id = tbl_kennzeichen.person_id AND kennzeichentyp_kurzbz = '. $KENNZEICHEN .'
|
||||
LEFT JOIN (
|
||||
SELECT tpl.person_id,
|
||||
tpl.zeitpunkt,
|
||||
sp.nachname AS lockuser
|
||||
FROM system.tbl_person_lock tpl
|
||||
JOIN public.tbl_benutzer sb USING (uid)
|
||||
JOIN public.tbl_person sp ON sb.person_id = sp.person_id
|
||||
WHERE tpl.app = '.$APP.'
|
||||
) pl ON p.person_id = pl.person_id
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
tbl_rueckstellung.person_id,
|
||||
tbl_rueckstellung.datum_bis,
|
||||
tbl_rueckstellung.status_kurzbz,
|
||||
array_to_json(bezeichnung_mehrsprachig::varchar[])->>0 as bezeichnung
|
||||
FROM public.tbl_rueckstellung
|
||||
JOIN public.tbl_rueckstellung_status USING(status_kurzbz)
|
||||
JOIN public.tbl_person sp ON tbl_rueckstellung.person_id = sp.person_id
|
||||
WHERE tbl_rueckstellung.rueckstellung_id =
|
||||
(
|
||||
SELECT srueck.rueckstellung_id
|
||||
FROM public.tbl_rueckstellung srueck
|
||||
WHERE srueck.person_id = tbl_rueckstellung.person_id
|
||||
AND datum_bis >= NOW()
|
||||
ORDER BY srueck.datum_bis DESC LIMIT 1
|
||||
)
|
||||
) rueck ON rueck.person_id = p.person_id
|
||||
WHERE p.person_id NOT IN (SELECT person_id FROM public.tbl_prestudent)';
|
||||
|
||||
$filterWidgetArray = array(
|
||||
'query' => $query,
|
||||
'app' => InfoCenter::APP,
|
||||
'datasetName' => 'onboarding',
|
||||
'filter_id' => $this->input->get('filter_id'),
|
||||
'requiredPermissions' => 'infocenter',
|
||||
'datasetRepresentation' => 'tablesorter',
|
||||
'checkboxes' => 'PersonId',
|
||||
'additionalColumns' => array('Details'),
|
||||
'columnsAliases' => array(
|
||||
'PersonId',
|
||||
ucfirst($this->p->t('person', 'vorname')) ,
|
||||
ucfirst($this->p->t('person', 'nachname')),
|
||||
ucfirst($this->p->t('global', 'sperrdatum')),
|
||||
ucfirst($this->p->t('global', 'gesperrtVon')),
|
||||
ucfirst($this->p->t('infocenter', 'rueckstelldatum')),
|
||||
ucfirst($this->p->t('infocenter', 'rueckstellgrund')),
|
||||
),
|
||||
|
||||
'formatRow' => function($datasetRaw) {
|
||||
/* NOTE: Dont use $this here for PHP Version compatibility */
|
||||
$datasetRaw->{'Details'} = sprintf(
|
||||
'<a href="%s?person_id=%s&origin_page=%s&fhc_controller_id=%s&prev_filter_id=%s">Details</a>',
|
||||
site_url('system/infocenter/InfoCenter/showDetails'),
|
||||
$datasetRaw->{'PersonId'},
|
||||
'onboarding',
|
||||
(isset($_GET['fhc_controller_id']) ? $_GET['fhc_controller_id'] : ''),
|
||||
(isset($_GET['filter_id']) ? $_GET['filter_id'] : '')
|
||||
);
|
||||
|
||||
if ($datasetRaw->{'LockDate'} == null)
|
||||
{
|
||||
$datasetRaw->{'LockDate'} = '-';
|
||||
}
|
||||
|
||||
if ($datasetRaw->{'LockUser'} == null)
|
||||
{
|
||||
$datasetRaw->{'LockUser'} = '-';
|
||||
}
|
||||
|
||||
if ($datasetRaw->{'HoldDate'} == null)
|
||||
{
|
||||
$datasetRaw->{'HoldDate'} = '-';
|
||||
}
|
||||
else
|
||||
{
|
||||
$datasetRaw->{'HoldDate'} = date_format(date_create($datasetRaw->{'HoldDate'}), 'Y-m-d H:i');
|
||||
}
|
||||
|
||||
if ($datasetRaw->{'Rueckstellgrund'} === null)
|
||||
{
|
||||
$datasetRaw->{'Rueckstellgrund'} = '-';
|
||||
}
|
||||
|
||||
return $datasetRaw;
|
||||
},
|
||||
|
||||
'markRow' => function($datasetRaw) {
|
||||
|
||||
if ($datasetRaw->LockDate != null)
|
||||
{
|
||||
return FilterWidget::DEFAULT_MARK_ROW_CLASS;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
);
|
||||
|
||||
echo $this->widgetlib->widget('FilterWidget', $filterWidgetArray);
|
||||
?>
|
||||
@@ -106,6 +106,7 @@
|
||||
<tbody>
|
||||
<?php
|
||||
$lastMailAdress = '';
|
||||
$lastUnverifiedMailAdress = '';
|
||||
foreach ($stammdaten->kontakte as $kontakt): ?>
|
||||
<tr>
|
||||
<?php if ($kontakt->kontakttyp === 'email'): ?>
|
||||
@@ -119,14 +120,16 @@
|
||||
<?php echo '<span class="kontakt '.$kontakt->kontakttyp.'" data-id="'. $kontakt->kontakt_id .'" data-value="' . $kontakt->kontakt .'">';?>
|
||||
<?php if ($kontakt->kontakttyp === 'email'): ?>
|
||||
<a href="mailto:<?php echo $kontakt->kontakt; ?>" target="_top">
|
||||
<?php $lastMailAdress = $kontakt->kontakt;
|
||||
<?php $lastMailAdress = $kontakt->kontakt; ?>
|
||||
<?php elseif ($kontakt->kontakttyp === 'email_unverifiziert'): ?>
|
||||
<?php $lastUnverifiedMailAdress = $kontakt->kontakt;
|
||||
endif;
|
||||
echo $kontakt->kontakt;
|
||||
if ($kontakt->kontakttyp === 'email'):
|
||||
if ($kontakt->kontakttyp === 'email'):
|
||||
?>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
<?php echo '</span>'?>
|
||||
<?php endif; ?>
|
||||
<?php echo '</span>'?>
|
||||
</td>
|
||||
<td><?php echo $kontakt->anmerkung; ?></td>
|
||||
</tr>
|
||||
@@ -140,9 +143,9 @@
|
||||
<?php if (isset($adresse)): ?>
|
||||
<div class="row adresse col-sm-12" data-id="<?php echo $adresse->adresse_id ?>">
|
||||
<div class="float-left" data-value="<?php echo $adresse->strasse ?>" data-type="strasse"><?php echo $adresse->strasse ?></div>
|
||||
|
||||
|
||||
<div class="float-left" data-value="<?php echo $adresse->plz ?>" data-type="plz"><?php echo $adresse->plz ?></div>
|
||||
|
||||
|
||||
<div class="float-left" data-value="<?php echo $adresse->ort ?>" data-type="ort"><?php echo $adresse->ort ?></div>
|
||||
|
||||
<?php if (isset($adresse->nationkurztext)): ?>
|
||||
@@ -182,7 +185,8 @@
|
||||
</div>
|
||||
<?php if (isset($stammdaten->zugangscode)): ?>
|
||||
<div class="col-xs-6 text-right">
|
||||
<a href="<?php echo CIS_ROOT.'addons/bewerbung/cis/registration.php?code='.html_escape($stammdaten->zugangscode).'&emailAdresse='.$lastMailAdress.'&keepEmailUnverified=true' ?>"
|
||||
<a href="<?php echo CIS_ROOT.'addons/bewerbung/cis/registration.php?code='.html_escape($stammdaten->zugangscode)
|
||||
.'&emailAdresse='.(isEmptyString($lastMailAdress)?$lastUnverifiedMailAdress:$lastMailAdress).'&keepEmailUnverified=true' ?>"
|
||||
target='_blank'><i class="glyphicon glyphicon-new-window"></i> <?php echo $this->p->t('infocenter','zugangBewerbung') ?></a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
@@ -382,7 +382,7 @@ function writePruefungsTable(e, data, anmeldung)
|
||||
}
|
||||
else if(new Date() > minimumFrist)
|
||||
{
|
||||
button = "<p><a href='#' title='<?php echo $p->t('pruefung/anmeldenMoeglichBis'); ?> "+frist+"'><input style='width: 140px; background-color: green;' type='button' value='"+termin+" "+time+"' onclick='openDialog(\""+e.lehrveranstaltung[0].lehrveranstaltung_id+"\", \""+d.pruefungstermin_id+"\", \""+e.lehrveranstaltung[0].bezeichnung.replace("'", "'")+"\", \""+d.von+"\", \""+d.bis+"\");'></a></p>";
|
||||
button = "<p><a href='#' title='<?php echo $p->t('pruefung/anmeldenMoeglichBis'); ?> "+frist+"'><input style='width: 140px; background-color: green;' type='button' value='"+termin+" "+time+"' onclick='openDialog(\""+e.lehrveranstaltung[0].lehrveranstaltung_id+"\", \""+d.pruefungstermin_id+"\", \""+e.lehrveranstaltung[0].bezeichnung.replace("'", "'")+"\", \""+d.von+"\", \""+d.bis+"\", \""+e.lehrveranstaltung[0].ects +"\");'></a></p>";
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -479,13 +479,15 @@ function showPruefungsDetails(prfId, lvId)
|
||||
* @param {type} lvBezeichnung Bezeichnung der Lehrveranstaltung
|
||||
* @param {type} terminVon Beginn der Prüfung
|
||||
* @param {type} terminBis Ende der Prüfung
|
||||
* @param {type} ects der LV
|
||||
* @returns {undefined}
|
||||
*/
|
||||
function openDialog(lehrveranstaltung_id, termin_id, lvBezeichnung, terminVon, terminBis)
|
||||
function openDialog(lehrveranstaltung_id, termin_id, lvBezeichnung, terminVon, terminBis, ects)
|
||||
{
|
||||
$("#lehrveranstaltungHidden").val(lehrveranstaltung_id);
|
||||
$("#terminHidden").val(termin_id);
|
||||
$("#lehrveranstaltung").html(lvBezeichnung);
|
||||
$("#ectsangabe").val(ects);
|
||||
|
||||
$.ajax({
|
||||
dataType: 'json',
|
||||
@@ -582,6 +584,12 @@ function saveAnmeldung(lehrveranstaltung_id, termin_id)
|
||||
if($('#prestudent_studiengang').length)
|
||||
studiengang_kz = $('#prestudent_studiengang option:selected').val();
|
||||
|
||||
var ects = null;
|
||||
if ($('#ectsangabe').length)
|
||||
{
|
||||
ects = $('#ectsangabe').val();
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
dataType: 'json',
|
||||
url: "./pruefungsanmeldung.json.php",
|
||||
@@ -593,7 +601,8 @@ function saveAnmeldung(lehrveranstaltung_id, termin_id)
|
||||
bemerkung: bemerkungen,
|
||||
uid: uid,
|
||||
studienverpflichtung_id: studienverpflichtung_id,
|
||||
studiengang_kz: studiengang_kz
|
||||
studiengang_kz: studiengang_kz,
|
||||
ects: ects
|
||||
},
|
||||
error: loadError,
|
||||
success: function(data){
|
||||
@@ -804,6 +813,7 @@ function writeAnmeldungen(data, showMessage = true)
|
||||
var pruefung_id = data.result.anmeldungen[0].pruefung_id;
|
||||
var lehrveranstaltung_id = data.result.anmeldungen[0].lehrveranstaltung_id;
|
||||
var ort_kurzbz = data.result.ort_kurzbz;
|
||||
var anderer_raum = data.result.anderer_raum;
|
||||
var lv_bezeichnung = data.result.lv_bezeichnung;
|
||||
var lv_lehrtyp = data.result.lv_lehrtyp;
|
||||
var prf_termin = data.result.datum;
|
||||
@@ -816,24 +826,33 @@ function writeAnmeldungen(data, showMessage = true)
|
||||
count++;
|
||||
var vorname = d.student.vorname !== "null" ? d.student.vorname : "";
|
||||
var nachname = d.student.nachname !== "null" ? d.student.nachname : "";
|
||||
|
||||
let ects = "";
|
||||
<?php if (defined('CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE') && (CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE === true)): ?>
|
||||
ects = d.ects !== null ? "(" + d.ects + " ECTS) ": "";
|
||||
|
||||
<?php endif; ?>
|
||||
|
||||
switch(d.status_kurzbz)
|
||||
{
|
||||
case 'angemeldet':
|
||||
liste += "<li class='ui-state-default' id='"+d.student.uid+"'><span class='ui-icon ui-icon-arrowthick-2-n-s'></span><a href='#' onclick='showKommentar(\""+vorname+"\",\""+nachname+"\", \""+d.pruefungsanmeldung_id+"\", \""+d.kommentar+"\", \""+terminId+"\", \""+lehrveranstaltung_id+"\");'>"+vorname+" "+nachname+"</a>";
|
||||
liste += "<li class='ui-state-default' id='"+d.student.uid+"'><span class='ui-icon ui-icon-arrowthick-2-n-s'></span><a href='#' onclick='showKommentar(\""+vorname+"\",\""+nachname+"\", \""+d.pruefungsanmeldung_id+"\", \""+d.kommentar+"\", \""+terminId+"\", \""+lehrveranstaltung_id+"\");'>"+ects+vorname+" "+nachname+"</a>";
|
||||
liste += "<div style='width: 3%; text-align: right;'>"+count+"</div><div style='text-align: center; width: 34%;'><input style='vertical-align: top; height: 24px;' type='button' value='<?php echo $p->t('pruefung/bestaetigen'); ?>' onclick='anmeldungBestaetigen(\""+d.pruefungsanmeldung_id+"\", \""+terminId+"\", \""+lehrveranstaltung_id+"\");'>";
|
||||
liste += "<input style='vertical-align: top; height: 24px; background-color: #dd514c;' type='button' value='X' onclick='anmeldungLoeschen(\""+d.pruefungsanmeldung_id+"\", \""+terminId+"\", \""+lehrveranstaltung_id+"\");'></div>";
|
||||
if(d.wuensche !== null)
|
||||
{
|
||||
liste += "<div class='anmerkungInfo'><a href='#' title='<?php echo $p->t('pruefung/anmerkungDesStudenten'); ?>"+d.wuensche+"'><img style='width: 20px;' src='../../../../skin/images/button_lvinfo.png'></a></div>";
|
||||
let msg = $('<div>').text(d.wuensche).html();
|
||||
liste += `<div class='anmerkungInfo'><a href='#' data-msg="${msg}" onclick="openKommentarDialog(this.dataset.msg)"><img style='width: 20px;' src='../../../../skin/images/button_lvinfo.png'></a></div>`;
|
||||
}
|
||||
liste += "</li>";
|
||||
break;
|
||||
case 'bestaetigt':
|
||||
liste += "<li class='ui-state-default' id='"+d.student.uid+"'><span class='ui-icon ui-icon-arrowthick-2-n-s'></span><a href='#' onclick='showKommentar(\""+vorname+"\",\""+nachname+"\", \""+d.pruefungsanmeldung_id+"\", \""+d.kommentar+"\", \""+terminId+"\", \""+lehrveranstaltung_id+"\");'>"+vorname+" "+nachname+"</a>";
|
||||
liste += "<li class='ui-state-default' id='"+d.student.uid+"'><span class='ui-icon ui-icon-arrowthick-2-n-s'></span><a href='#' onclick='showKommentar(\""+vorname+"\",\""+nachname+"\", \""+d.pruefungsanmeldung_id+"\", \""+d.kommentar+"\", \""+terminId+"\", \""+lehrveranstaltung_id+"\");'>"+ects+vorname+" "+nachname+"</a>";
|
||||
liste += "<div style='width: 2%; text-align: right;'>"+count+"</div><div style='text-align: center; width: 20%;'><a href='#' title='<?php echo $p->t('pruefung/statusAenderungVon'); ?>: "+d.statusupdatevon+"'><?php echo $p->t('pruefung/bestaetigt'); ?></a></div>";
|
||||
if(d.wuensche !== null)
|
||||
{
|
||||
liste += "<div class='anmerkungInfo'><a href='#' title='<?php echo $p->t('pruefung/anmerkungDesStudenten'); ?>"+d.wuensche+"'><img style='width: 20px;' src='../../../../skin/images/button_lvinfo.png'></a></div>";
|
||||
let msg = $('<div>').text(d.wuensche).html();
|
||||
liste += `<div class='anmerkungInfo'><a href='#' data-msg="${msg}" onclick="openKommentarDialog(this.dataset.msg)"><img style='width: 20px;' src='../../../../skin/images/button_lvinfo.png'></a></div>`;
|
||||
}
|
||||
|
||||
break;
|
||||
@@ -844,13 +863,14 @@ function writeAnmeldungen(data, showMessage = true)
|
||||
});
|
||||
liste += "</ul>";
|
||||
$("#anmeldung_hinzufuegen").html("<input id='anmeldung_hinzufuegen_uid' type='text' placeholder='StudentIn-UID' /><input type='button' value='<?php echo $p->t('global/hinzufuegen'); ?>' onclick='saveAnmeldung(\""+lehrveranstaltung_id+"\",\""+terminId+"\");'/>");
|
||||
$("#reihungSpeichernButton").html("<input type='button' value='<?php echo $p->t('pruefung/reihungSpeichern'); ?>' onclick='saveReihung(\""+terminId+"\", \""+lehrveranstaltung_id+"\");'><input type='button' value='<?php echo $p->t('pruefung/alleBestaetigen'); ?>' onclick='alleBestaetigen(\""+terminId+"\", \""+lehrveranstaltung_id+"\");'>");
|
||||
$("#reihungSpeichernButton").html("<label for='emails'>E-Mail: <input type='email' id='emails' multiple /> <br /><br />" +
|
||||
"<input type='button' value='<?php echo $p->t('pruefung/reihungSpeichern'); ?>' onclick='saveReihung(\""+terminId+"\", \""+lehrveranstaltung_id+"\");'><input type='button' value='<?php echo $p->t('pruefung/alleBestaetigen'); ?>' onclick='alleBestaetigen(\""+terminId+"\", \""+lehrveranstaltung_id+"\");'>");
|
||||
$("#lvdaten").html(lv_bezeichnung+" ("+prf_termin+")");
|
||||
$("#anmeldeDaten").html(liste);
|
||||
$("#listeDrucken").html(listenLinks);
|
||||
if(ort_kurzbz !== null)
|
||||
if(ort_kurzbz !== null || anderer_raum !== null)
|
||||
{
|
||||
$("#raumLink").html("<span><?php echo $p->t('pruefung/pruefungsraum'); ?></span>"+ort_kurzbz);
|
||||
$("#raumLink").html("<span><?php echo $p->t('pruefung/pruefungsraum'); ?></span>"+ (ort_kurzbz ?? anderer_raum));
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -883,11 +903,17 @@ function writeAnmeldungen(data, showMessage = true)
|
||||
function openRaumDialog(terminId, lehrveranstaltung_id)
|
||||
{
|
||||
getRaeume(terminId);
|
||||
$("#raum").html('<h2><?php echo $p->t('pruefung/pruefungsraum'); ?></h2><input onChange="changeStateOfRaumDropdown();" type="checkbox" /><span><?php echo $p->t('pruefung/imBuero'); ?></span><br /><span style="font-weight: bold;"><?php echo $p->t('pruefung/raum'); ?>: </span><select id="raeumeDropdown"></select>');
|
||||
$("#raum").html('<h2><?php echo $p->t('pruefung/pruefungsraum'); ?></h2><div id="raumInfos"><input onChange="changeStateOfRaumDropdown();" type="checkbox" /><span><?php echo $p->t('pruefung/imBuero'); ?></span><br /><span style="font-weight: bold;"><?php echo $p->t('pruefung/raum'); ?>: </span><select id="raeumeDropdown"></select><br /></div><input onChange="changeStateOfRaumInputs();" id="andererRaum" type="checkbox"/><span><?php echo $p->t('pruefung/andererRaum'); ?></span> <input type="text" id="andereRaumInput" placeholder="<?php echo $p->t('pruefung/andererRaum'); ?>"/><br />');
|
||||
$("#raumSpeichernButton").html("<input type='button' value='<?php echo $p->t('pruefung/raumSpeichern'); ?>' onclick='saveRaum(\""+terminId+"\", \""+lehrveranstaltung_id+"\");'/>");
|
||||
$("#raumDialog").dialog("open");
|
||||
}
|
||||
|
||||
function openKommentarDialog(text)
|
||||
{
|
||||
$('#kommentarimDialog').text(text);
|
||||
$('#kommentarDialog').dialog('open');
|
||||
}
|
||||
|
||||
/**
|
||||
* speichert die Reihung der Studenten einer Prüfungsanmeldung
|
||||
* @param {type} terminId ID des Prüfungstermines
|
||||
@@ -1011,6 +1037,30 @@ function anmeldungLoeschen(pruefungsanmeldung_id, termin_id, lehrveranstaltung_i
|
||||
*/
|
||||
function alleBestaetigen(termin_id, lehrveranstaltung_id)
|
||||
{
|
||||
const input = $('#emails').val();
|
||||
|
||||
let emails = '';
|
||||
if (input)
|
||||
{
|
||||
emails = input.split(",").map(s => s.trim());
|
||||
const re = /^([\w-+]+(?:\.[\w-+]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,63}(?:\.[a-z]{2})?)$/i;
|
||||
|
||||
let valid = true;
|
||||
$.each(emails, function(index, email)
|
||||
{
|
||||
if (re.test(email) === false)
|
||||
{
|
||||
alert("<?php echo $p->t('pruefung/bitteEmailAngeben')?>");
|
||||
valid = false;
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
if (!valid)
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
dataType: 'json',
|
||||
url: "./pruefungsanmeldung.json.php",
|
||||
@@ -1018,7 +1068,8 @@ function alleBestaetigen(termin_id, lehrveranstaltung_id)
|
||||
data: {
|
||||
method: "alleBestaetigen",
|
||||
termin_id: termin_id,
|
||||
lehrveranstaltung_id: lehrveranstaltung_id
|
||||
lehrveranstaltung_id: lehrveranstaltung_id,
|
||||
emails: emails
|
||||
},
|
||||
error: loadError,
|
||||
success: function(data){
|
||||
@@ -1090,15 +1141,12 @@ function loadStudiengaenge()
|
||||
}
|
||||
|
||||
/**
|
||||
* Lädt alle Prüfungen zu einem Studiengang
|
||||
* @param {type} studiengang_kz Studiengangskennzahl
|
||||
* Lädt alle Prüfungen zu einem Studiensemester
|
||||
* @param {type} studiensemester Studiensemester
|
||||
* @returns {undefined}
|
||||
*/
|
||||
function loadPruefungStudiengang(studiengang_kz, studiensemester)
|
||||
function loadPruefungStudiengang(studiensemester)
|
||||
{
|
||||
if(studiengang_kz === undefined)
|
||||
studiengang_kz = $("#select_studiengang option:selected").val();
|
||||
|
||||
if(studiensemester === undefined)
|
||||
studiensemester = $("#filter_studiensemester option:selected").val();
|
||||
|
||||
@@ -1107,8 +1155,7 @@ function loadPruefungStudiengang(studiengang_kz, studiensemester)
|
||||
url: "./pruefungsanmeldung.json.php",
|
||||
type: "POST",
|
||||
data: {
|
||||
method: "getPruefungenStudiengang",
|
||||
studiengang_kz: studiengang_kz,
|
||||
method: "getPruefungenStudiensemester",
|
||||
studiensemester: studiensemester
|
||||
},
|
||||
error: loadError,
|
||||
@@ -1118,25 +1165,61 @@ function loadPruefungStudiengang(studiengang_kz, studiensemester)
|
||||
$("#pruefungenListe").empty();
|
||||
if(data.result.length > 0)
|
||||
{
|
||||
var liste = "";
|
||||
data.result.forEach(function(e){
|
||||
liste += "<ul><li>"+e.bezeichnung+"<ul>";
|
||||
try
|
||||
{
|
||||
e.pruefung[0].termine.forEach(function(d){
|
||||
liste += "<li> <a onclick='showAnmeldungen(\""+d.pruefungstermin_id+"\", \""+e.lehrveranstaltung_id+"\");'>"+convertDateTime(d.von)+" "+convertDateTime(d.von, "time")+" - "+convertDateTime(d.bis, "time")+"</a></li>";
|
||||
$('#table4').show()
|
||||
let rows = '';
|
||||
|
||||
data.result.forEach(function(e)
|
||||
{
|
||||
let termine = [];
|
||||
if (e.pruefung) {
|
||||
e.pruefung.forEach(p => {
|
||||
if (p.termine) {
|
||||
termine = termine.concat(p.termine);
|
||||
}
|
||||
});
|
||||
}
|
||||
catch(err)
|
||||
|
||||
if (termine.length === 0)
|
||||
{
|
||||
var errmsg = err.message;
|
||||
rows += `
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>${e.bezeichnung}</td>
|
||||
<td colspan="5">Keine Termine</td>
|
||||
</tr>`;
|
||||
}
|
||||
else
|
||||
{
|
||||
termine.forEach(function(d) {
|
||||
let vonDate = convertDateTime(d.von);
|
||||
let vonTime = convertDateTime(d.von, 'time');
|
||||
let bisTime = convertDateTime(d.bis, 'time');
|
||||
let onClick = `showAnmeldungen(${d.pruefungstermin_id}, ${e.lehrveranstaltung_id})`;
|
||||
|
||||
rows += `
|
||||
<tr>
|
||||
<td><input type="checkbox"
|
||||
class="termin-checkbox"
|
||||
data-termin-id="${d.pruefungstermin_id}"
|
||||
data-lv-id="${e.lehrveranstaltung_id}"
|
||||
data-datum="${vonDate}"
|
||||
/></td>
|
||||
<td>${e.studiengang}</td>
|
||||
<td>${e.bezeichnung}</td>
|
||||
<td>${vonDate}</td>
|
||||
<td>${vonTime}</td>
|
||||
<td>${bisTime}</td>
|
||||
<td><a onclick="${onClick}"><?php echo $p->t('pruefung/pruefungsbewertungAnmeldungen'); ?></a></td>
|
||||
</tr>`;
|
||||
});
|
||||
}
|
||||
liste += "</ul></li></ul>";
|
||||
});
|
||||
$("#pruefungenListe").append(liste);
|
||||
$("#pruefungenListe").html(rows);
|
||||
setTablesorter('table4')
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#table4').hide()
|
||||
$("#pruefungenListe").html("<?php echo $p->t('pruefung/keinePruefungenVorhanden'); ?>");
|
||||
}
|
||||
}
|
||||
@@ -1148,6 +1231,42 @@ function loadPruefungStudiengang(studiengang_kz, studiensemester)
|
||||
});
|
||||
}
|
||||
|
||||
function terminezusammenlegen(termine, lv_id)
|
||||
{
|
||||
if(termine.length <= 1)
|
||||
return;
|
||||
|
||||
$.ajax({
|
||||
dataType: 'json',
|
||||
url: "./pruefungsanmeldung.json.php",
|
||||
type: "POST",
|
||||
data: {
|
||||
method: "terminezusammenlegen",
|
||||
'termine[]': termine,
|
||||
lv_id: lv_id
|
||||
},
|
||||
error: loadError,
|
||||
success: function(data){
|
||||
if(data.error === 'false')
|
||||
{
|
||||
loadPruefungStudiengang()
|
||||
$("#anmeldung_hinzufuegen").empty();
|
||||
$("#lvdaten").empty();
|
||||
$("#anmeldeDaten").empty();
|
||||
$("#reihungSpeichernButton").empty();
|
||||
$("#kommentar").empty();
|
||||
$("#kommentarSpeichernButton").empty();
|
||||
$("#raumLink").empty();
|
||||
$("#listeDrucken").empty();
|
||||
}
|
||||
else
|
||||
{
|
||||
messageBox("message", data.errormsg, "red", "highlight", 10000);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Zeigt das Formularfeld zur Eingabe eines Kommentars in der Anmeldungsverwaltung an.
|
||||
* @param {String} vorname Vorname des Studenten
|
||||
@@ -1241,6 +1360,7 @@ function loadStudiensemester()
|
||||
data.result.forEach(function(d){
|
||||
selectData += "<option "+((d.studiensemester_kurzbz === data.aktSem) ? "selected" : "")+" value='"+d.studiensemester_kurzbz+"'>"+d.studiensemester_kurzbz+"</option>";
|
||||
});
|
||||
|
||||
$('#studiensemester').html(selectData);
|
||||
loadPruefungsfenster();
|
||||
loadLehrveranstaltungen();
|
||||
@@ -1540,7 +1660,7 @@ function loadPruefungsDetails(prfId)
|
||||
if(data.result.length === 0)
|
||||
{
|
||||
messageBox("message", "<?php echo $p->t('pruefung/keinePruefungsfensterGespeichert'); ?>", "red", "highlight", 10000);
|
||||
$("#pruefungsfenster").html("<option value='null'></option>");
|
||||
$("#pruefungsfenster").html("<option value='null'><?php echo $p->t('pruefung/keinePruefungsfensterGespeichert'); ?></option>");
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -2188,10 +2308,28 @@ function changeStateOfRaumDropdown()
|
||||
}
|
||||
}
|
||||
|
||||
function changeStateOfRaumInputs()
|
||||
{
|
||||
if ($("#andererRaum").prop("checked") === true)
|
||||
{
|
||||
$("#raumInfos").hide();
|
||||
}
|
||||
else
|
||||
{
|
||||
$("#raumInfos").show();
|
||||
}
|
||||
}
|
||||
|
||||
function saveRaum(terminId, lehrveranstaltung_id)
|
||||
{
|
||||
var ort_kurzbz;
|
||||
if($("#raum input[type=checkbox]").prop("checked") === true)
|
||||
let anderer_raum = '';
|
||||
if ($("#andererRaum").prop("checked") === true && $('#andereRaumInput').val() !== '')
|
||||
{
|
||||
ort_kurzbz = "";
|
||||
anderer_raum = $('#andereRaumInput').val();
|
||||
}
|
||||
else if($("#raum input[type=checkbox]").prop("checked") === true)
|
||||
{
|
||||
ort_kurzbz = "buero";
|
||||
}
|
||||
@@ -2206,7 +2344,8 @@ function saveRaum(terminId, lehrveranstaltung_id)
|
||||
data: {
|
||||
method: "saveRaum",
|
||||
ort_kurzbz: ort_kurzbz,
|
||||
terminId: terminId
|
||||
terminId: terminId,
|
||||
anderer_raum: anderer_raum
|
||||
},
|
||||
error: loadError
|
||||
}).done(function(data){
|
||||
|
||||
@@ -106,9 +106,14 @@ switch($method)
|
||||
case 'getStudiengaenge':
|
||||
$data = getStudiengaenge();
|
||||
break;
|
||||
case 'getPruefungenStudiengang':
|
||||
case 'getPruefungenStudiensemester':
|
||||
$studiensemester = filter_input(INPUT_POST,"studiensemester");
|
||||
$data = getPruefungenStudiengang($uid, $studiensemester);
|
||||
$data = getPruefungenStudiengangBySemester($studiensemester);
|
||||
break;
|
||||
case 'terminezusammenlegen':
|
||||
$termine = filter_input(INPUT_POST, 'termine', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
|
||||
$lv_id = filter_input(INPUT_POST, 'lv_id');
|
||||
$data = terminezusammenlegen($termine, $lv_id);
|
||||
break;
|
||||
case 'saveKommentar':
|
||||
$data = saveKommentar();
|
||||
@@ -120,7 +125,8 @@ switch($method)
|
||||
case 'saveRaum':
|
||||
$terminId = $_REQUEST["terminId"];
|
||||
$ort_kurzbz = $_REQUEST["ort_kurzbz"];
|
||||
$data = saveRaum($terminId, $ort_kurzbz, $uid);
|
||||
$anderer_raum = $_REQUEST["anderer_raum"];
|
||||
$data = saveRaum($terminId, $ort_kurzbz, $uid, $anderer_raum);
|
||||
break;
|
||||
case 'getLvKompatibel':
|
||||
$lvid = filter_input(INPUT_POST, "lehrveranstaltung_id");
|
||||
@@ -397,6 +403,7 @@ function saveAnmeldung($aktStudiensemester = null, $uid = null)
|
||||
$lv_besucht = false;
|
||||
$studienverpflichtung_id = filter_input(INPUT_POST, "studienverpflichtung_id");
|
||||
$studiengang_kz = filter_input(INPUT_POST, "studiengang_kz");
|
||||
$ects = filter_input(INPUT_POST, "ects");
|
||||
|
||||
//Defaulteinstellung für Anzahlprüfungsversuche (wird durch Addon "ktu" überschrieben)
|
||||
$maxAnzahlVersuche = 0;
|
||||
@@ -731,6 +738,10 @@ function saveAnmeldung($aktStudiensemester = null, $uid = null)
|
||||
else
|
||||
$anmeldung->anrechnung_id = $anrechnung->anrechnung_id;
|
||||
|
||||
if (defined('CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE') && (CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE === true))
|
||||
{
|
||||
$anmeldung->ects = $ects;
|
||||
}
|
||||
if($anmeldung->save(true))
|
||||
{
|
||||
$pruefung = new pruefungCis($termin->pruefung_id);
|
||||
@@ -960,9 +971,13 @@ function alleBestaetigen($uid)
|
||||
global $p;
|
||||
$lehrveranstaltung_id = $_REQUEST["lehrveranstaltung_id"];
|
||||
$pruefungstermin_id = $_REQUEST["termin_id"];
|
||||
$emails = $_REQUEST["emails"];
|
||||
$pruefungstermin = new pruefungstermin($pruefungstermin_id);
|
||||
$pruefungsanmeldung = new pruefungsanmeldung();
|
||||
$pranmeldungen = $pruefungsanmeldung->getAnmeldungenByTermin($pruefungstermin_id, $lehrveranstaltung_id);
|
||||
|
||||
$mail_benutzer = [];
|
||||
$mail_inhalt = [];
|
||||
foreach($pranmeldungen as $a)
|
||||
{
|
||||
$anmeldung = new pruefungsanmeldung($a->pruefungsanmeldung_id);
|
||||
@@ -976,6 +991,13 @@ function alleBestaetigen($uid)
|
||||
$ma = new mitarbeiter($uid);
|
||||
$datum = new datum();
|
||||
$ort = new ort($termin->ort_kurzbz);
|
||||
|
||||
$ortbezeichnung = $ort->bezeichnung;
|
||||
if (is_null($termin->ort_kurzbz) && !is_null($termin->anderer_raum))
|
||||
{
|
||||
$ortbezeichnung = $termin->anderer_raum;
|
||||
}
|
||||
|
||||
$pruefung = new pruefungCis($termin->pruefung_id);
|
||||
|
||||
$to = $anm->uid."@".DOMAIN;
|
||||
@@ -995,17 +1017,66 @@ function alleBestaetigen($uid)
|
||||
}
|
||||
else
|
||||
$html .= $p->t('pruefung/emailBodyTermin')." ".$datum->formatDatum($termin->von, "d.m.Y")." ".$p->t('pruefung/emailBodyUm')." ".$datum->formatDatum($termin->von, "H:i")."<br>";
|
||||
$html .= $p->t('pruefung/anmeldungErfolgreich')." ".$ort->bezeichnung."<br>";
|
||||
$html .= $p->t('pruefung/anmeldungErfolgreich')." ".$ortbezeichnung."<br>";
|
||||
$html .= "<br>";
|
||||
$html .= "<a href='".APP_ROOT."cis/private/lehre/pruefung/pruefungsanmeldung.php'>".$p->t('pruefung/emailBodyLinkZurAnmeldung')."</a><br>";
|
||||
$html .= "<br>";
|
||||
|
||||
$mail_benutzer[] = [
|
||||
'uid' => $anm->uid
|
||||
];
|
||||
|
||||
if (empty($mail_inhalt))
|
||||
{
|
||||
$mail_inhalt = array(
|
||||
'von' => $ma->vorname." ".$ma->nachname,
|
||||
'lv' => $lv->bezeichnung,
|
||||
'ort' => $ortbezeichnung,
|
||||
'datum' => $datum->formatDatum($termin->von, "d.m.Y") . ' ' . $p->t('pruefung/emailBodyUm') . ' ' . (isset($von) ? $von : $datum->formatDatum($termin->von, "H:i")),
|
||||
'dauer' => $pruefung->einzeln ? ($pruefung->pruefungsintervall . ' ' . $p->t('pruefung/emailBodyMinuten')): '');
|
||||
}
|
||||
|
||||
$mail = new mail($to, $from, $subject,$p->t('pruefung/emailBodyBitteHtmlSicht'));
|
||||
$mail->setHTMLContent($html);
|
||||
$mail->send();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($emails) && !empty($mail_inhalt))
|
||||
{
|
||||
foreach ($emails as $email)
|
||||
{
|
||||
$from = "noreply@".DOMAIN;
|
||||
$subject = $p->t('pruefung/emailSubjectAnmeldungBestaetigung');
|
||||
$html = $p->t('pruefung/sammelemailBody',array($mail_inhalt['lv'], $mail_inhalt['datum'], $mail_inhalt['von']));
|
||||
|
||||
if ($mail_inhalt['ort'])
|
||||
{
|
||||
$html .= $p->t('pruefung/sammelemailBody2',array($mail_inhalt['ort']));
|
||||
}
|
||||
|
||||
$html .= "<br /><table border='1'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>UID</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>";
|
||||
|
||||
foreach($mail_benutzer as $benutzer)
|
||||
{
|
||||
$html .= "<tr>
|
||||
<td>" . htmlspecialchars($benutzer['uid']) . "</td>
|
||||
</tr>";
|
||||
}
|
||||
$html .= "</tbody></table><br />";
|
||||
|
||||
$mail = new mail($email, $from, $subject, $p->t('pruefung/emailBodyBitteHtmlSicht'));
|
||||
$mail->setHTMLContent($html);
|
||||
$mail->send();
|
||||
}
|
||||
}
|
||||
$data['result']=true;
|
||||
$data['error']='false';
|
||||
$data['errormsg']='';
|
||||
@@ -1032,6 +1103,12 @@ function anmeldungBestaetigen($uid)
|
||||
$ort = new ort($termin->ort_kurzbz);
|
||||
$pruefung = new pruefungCis($termin->pruefung_id);
|
||||
|
||||
$ortbezeichnung = $ort->bezeichnung;
|
||||
if (is_null($termin->ort_kurzbz) && !is_null($termin->anderer_raum))
|
||||
{
|
||||
$ortbezeichnung = $termin->anderer_raum;
|
||||
}
|
||||
|
||||
$to = $anmeldung->uid."@".DOMAIN;
|
||||
$from = "noreply@".DOMAIN;
|
||||
$subject = $p->t('pruefung/emailSubjectAnmeldungBestaetigung');
|
||||
@@ -1049,7 +1126,7 @@ function anmeldungBestaetigen($uid)
|
||||
}
|
||||
else
|
||||
$html .= $p->t('pruefung/emailBodyTermin')." ".$datum->formatDatum($termin->von, "d.m.Y")." ".$p->t('pruefung/emailBodyUm')." ".$datum->formatDatum($termin->von, "H:i")."<br>";
|
||||
$html .= $p->t('pruefung/anmeldungErfolgreich')." ".$ort->bezeichnung."<br>";
|
||||
$html .= $p->t('pruefung/anmeldungErfolgreich')." ".$ortbezeichnung."<br>";
|
||||
$html .= "<br>";
|
||||
$html .= "<a href='".APP_ROOT."cis/private/lehre/pruefung/pruefungsanmeldung.php'>".$p->t('pruefung/emailBodyLinkZurAnmeldung')."</a><br>";
|
||||
$html .= "<br>";
|
||||
@@ -1166,6 +1243,258 @@ function getPruefungenStudiengang($uid, $aktStudiensemester)
|
||||
return $data;
|
||||
}
|
||||
|
||||
function getPruefungenStudiengangBySemester($aktStudiensemester)
|
||||
{
|
||||
$result = array();
|
||||
$pruefungen = new pruefungCis();
|
||||
$pruefungen->getPruefungByStudiensemester($aktStudiensemester);
|
||||
|
||||
if(!empty($pruefungen->lehrveranstaltungen))
|
||||
{
|
||||
$lehrveranstaltungen = [];
|
||||
foreach ($pruefungen->lehrveranstaltungen as $prf)
|
||||
{
|
||||
$pruefung = new pruefungCis();
|
||||
$pruefung->load($prf->pruefung_id);
|
||||
|
||||
if ($pruefung->storniert)
|
||||
continue;
|
||||
|
||||
$pruefung->getTermineByPruefung();
|
||||
|
||||
$lvid = $prf->lehrveranstaltung_id;
|
||||
|
||||
if (!isset($lehrveranstaltungen[$lvid]))
|
||||
{
|
||||
$lv = new stdClass();
|
||||
$lehrveranstaltung = new lehrveranstaltung();
|
||||
$lehrveranstaltung->load($lvid);
|
||||
|
||||
$studiengang = new studiengang();
|
||||
$studiengang->load($lehrveranstaltung->studiengang_kz);
|
||||
|
||||
$lv->bezeichnung = $lehrveranstaltung->bezeichnung;
|
||||
$lv->lehrveranstaltung_id = $lvid;
|
||||
$lv->studiengang = $studiengang->kuerzel;
|
||||
$lv->pruefung = [];
|
||||
$lehrveranstaltungen[$lvid] = $lv;
|
||||
}
|
||||
|
||||
$lehrveranstaltungen[$lvid]->pruefung[] = $pruefung;
|
||||
}
|
||||
$result = array_values($lehrveranstaltungen);
|
||||
}
|
||||
$data['result']=$result;
|
||||
$data['error']='false';
|
||||
$data['errormsg']='';
|
||||
return $data;
|
||||
}
|
||||
|
||||
function terminezusammenlegen($termine, $lv_id)
|
||||
{
|
||||
$result = array();
|
||||
$alle_termine = array();
|
||||
$error = false;
|
||||
$terminkollision = defined('CIS_PRUEFUNGSANMELDUNG_ERLAUBE_TERMINKOLLISION') ? CIS_PRUEFUNGSANMELDUNG_ERLAUBE_TERMINKOLLISION : false;
|
||||
foreach($termine as $termin)
|
||||
{
|
||||
$pruefungstermin = new pruefungstermin();
|
||||
$pruefungstermin->load($termin);
|
||||
$pruefung = new pruefungCis();
|
||||
$pruefung->load($pruefungstermin->pruefung_id);
|
||||
$pruefung->getLehrveranstaltungenByPruefung();
|
||||
|
||||
$lehrveranstaltungen = array_column($pruefung->lehrveranstaltungen, 'lehrveranstaltung_id');
|
||||
if (!in_array($lv_id, $lehrveranstaltungen))
|
||||
continue;
|
||||
|
||||
$pruefung->lehrveranstaltung_id = $lv_id;
|
||||
$pruefung->termin = $pruefungstermin;
|
||||
$alle_termine[] = $pruefung;
|
||||
}
|
||||
|
||||
|
||||
if (count($alle_termine) >= 1)
|
||||
{
|
||||
usort($alle_termine, function($a, $b) {
|
||||
return strcmp($a->termin->von, $b->termin->von);
|
||||
});
|
||||
|
||||
$first_termin = $alle_termine[0];
|
||||
|
||||
$first_mitarbeiter = $first_termin->mitarbeiter_uid;
|
||||
$first_date = date('Y-m-d', strtotime($first_termin->termin->von));
|
||||
$first_studiensemester = $first_termin->studiensemester_kurzbz;
|
||||
$first_sammelklausur = $first_termin->termin->sammelklausur;
|
||||
$first_ort = $first_termin->termin->ort_kurzbz;
|
||||
$first_raum = $first_termin->termin->anderer_raum;
|
||||
$first_lv = $first_termin->lehrveranstaltung_id;
|
||||
$first_titel = $first_termin->titel;
|
||||
|
||||
$max_von = strtotime($first_termin->termin->von);
|
||||
$max_bis = strtotime($first_termin->termin->bis);
|
||||
$teilnehmer_min = (int)$first_termin->termin->teilnehmer_min;
|
||||
$teilnehmer_max = (int)$first_termin->termin->teilnehmer_max;
|
||||
|
||||
|
||||
$prevEnd = $max_bis;
|
||||
|
||||
foreach ($alle_termine as $termin)
|
||||
{
|
||||
if (date('Y-m-d', strtotime($termin->termin->von)) !== $first_date)
|
||||
{
|
||||
$data['errormsg'] = 'Nicht der gleiche Tag!';
|
||||
$error = true;
|
||||
}
|
||||
|
||||
if ($termin->mitarbeiter_uid !== $first_mitarbeiter)
|
||||
{
|
||||
$data['errormsg'] = 'Unterschiedliche Lektoren!';
|
||||
$error = true;
|
||||
}
|
||||
|
||||
if ($termin->studiensemester_kurzbz !== $first_studiensemester)
|
||||
{
|
||||
$data['errormsg'] = 'Unterschiedliche Studiensemester!';
|
||||
$error = true;
|
||||
}
|
||||
|
||||
if ($termin->termin->sammelklausur !== $first_sammelklausur)
|
||||
{
|
||||
$data['errormsg'] = 'Sammelklausur unterschiedlich!';
|
||||
$error = true;
|
||||
}
|
||||
|
||||
if (!($termin->termin->ort_kurzbz === $first_ort || $first_termin->termin->anderer_raum == $first_raum))
|
||||
{
|
||||
$data['errormsg'] = 'Ort/Raum unterschiedlich!';
|
||||
$error = true;
|
||||
}
|
||||
|
||||
if ($termin->lehrveranstaltung_id !== $first_lv)
|
||||
{
|
||||
$data['errormsg'] = 'Lehrveranstaltungen unterscheiden sich!';
|
||||
$error = true;
|
||||
}
|
||||
|
||||
|
||||
$start = strtotime($termin->termin->von);
|
||||
$max_von = min($max_von, $start);
|
||||
$max_bis = max($max_bis, strtotime($termin->termin->bis));
|
||||
$teilnehmer_min = min($teilnehmer_min, (int)$termin->termin->teilnehmer_min);
|
||||
$teilnehmer_max = max($teilnehmer_max, (int)$termin->termin->teilnehmer_max);
|
||||
|
||||
if (($start - $prevEnd > 0) && $first_ort)
|
||||
{
|
||||
$stunde = new stunde();
|
||||
|
||||
$gapStartStr = date('Y-m-d H:i:s', $prevEnd);
|
||||
$gapEndStr = date('Y-m-d H:i:s', $start);
|
||||
|
||||
$gapStartArr = explode(' ', $gapStartStr);
|
||||
$gapEndArr = explode(' ', $gapEndStr);
|
||||
|
||||
$stunden = $stunde->getStunden($gapStartArr[1], $gapEndArr[1]);
|
||||
|
||||
$reservierung = new reservierung();
|
||||
$reserviert = false;
|
||||
|
||||
$reservierungs_stunden = $reservierung->getReservierungen($first_ort, $gapStartArr[0]);
|
||||
|
||||
$need_stunden = array_diff($stunden, $reservierungs_stunden);
|
||||
|
||||
foreach ($need_stunden as $h)
|
||||
{
|
||||
if ($reservierung->isReserviert($first_ort, $gapStartArr[0], $h))
|
||||
$reserviert = true;
|
||||
}
|
||||
|
||||
if (!$terminkollision && $reserviert && !$first_sammelklausur)
|
||||
{
|
||||
$error = true;
|
||||
$data['errormsg'] = 'Kann nicht zusammengelegt werden, da der Raum reserviert ist';
|
||||
}
|
||||
else
|
||||
{
|
||||
$reservierung->studiengang_kz = "0";
|
||||
$reservierung->ort_kurzbz = $first_ort;
|
||||
$reservierung->uid = $first_mitarbeiter;
|
||||
$reservierung->datum = $gapStartArr[0];
|
||||
$reservierung->titel = $first_titel;
|
||||
if (strlen($first_titel) > 10)
|
||||
{
|
||||
$reservierung->titel = "Prüfung";
|
||||
}
|
||||
$reservierung->beschreibung = "Prüfung";
|
||||
$reservierung->insertamum = date('Y-m-d G:i:s');
|
||||
$reservierung->insertvon = get_uid();
|
||||
$reservierungError = false;
|
||||
|
||||
foreach ($need_stunden as $h)
|
||||
{
|
||||
$reservierung->stunde = $h;
|
||||
if (!$reservierungError)
|
||||
{
|
||||
if (!$reservierung->save(true))
|
||||
{
|
||||
$error = true;
|
||||
$data['errormsg'] = $reservierung->errormsg;
|
||||
$reservierungError = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$prevEnd = strtotime($termin->termin->bis);
|
||||
}
|
||||
|
||||
if (!$error)
|
||||
{
|
||||
$first_pruefungstermin = new pruefungstermin();
|
||||
$first_pruefungstermin->load($first_termin->termin->pruefungstermin_id);
|
||||
|
||||
$first_pruefungstermin->von = date('Y-m-d H:i:s', $max_von);
|
||||
$first_pruefungstermin->bis = date('Y-m-d H:i:s', $max_bis);
|
||||
$first_pruefungstermin->teilnehmer_min = $teilnehmer_min;
|
||||
$first_pruefungstermin->teilnehmer_max = $teilnehmer_max;
|
||||
|
||||
$first_pruefungstermin->save();
|
||||
|
||||
$alle_termine = array_slice($alle_termine, 1);
|
||||
|
||||
foreach ($alle_termine as $termin)
|
||||
{
|
||||
$anmeldung_termin = new pruefungsanmeldung();
|
||||
$anmeldungen_termine = $anmeldung_termin->getAnmeldungenByTermin($termin->termin->pruefungstermin_id);
|
||||
|
||||
if (count($anmeldungen_termine) === 0)
|
||||
{
|
||||
$first_pruefungstermin->delete($termin->termin->pruefungstermin_id);
|
||||
}
|
||||
$i = 0;
|
||||
$anmeldungen_termine_count = count($anmeldungen_termine);
|
||||
foreach ($anmeldungen_termine as $anmeldungtermin)
|
||||
{
|
||||
$anmeldung = new pruefungsanmeldung();
|
||||
$anmeldung->load($anmeldungtermin->pruefungsanmeldung_id);
|
||||
$old_pruefuengstermin_id = $anmeldung->pruefungstermin_id;
|
||||
$anmeldung->pruefungstermin_id = $first_termin->termin->pruefungstermin_id;
|
||||
if ($anmeldung->save(false) && ($i === $anmeldungen_termine_count - 1))
|
||||
{
|
||||
$first_pruefungstermin->delete($old_pruefuengstermin_id);
|
||||
}
|
||||
$i ++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$data['result']= $result;
|
||||
$data['error']= $error ? 'true' : 'false';
|
||||
//$data['errormsg']='';
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return typespeichert ein Kommentar zu einer Prüfungsanmeldung
|
||||
@@ -1246,7 +1575,7 @@ function compareRaeume($a, $b)
|
||||
return strcmp($a->ort_kurzbz, $b->ort_kurzbz);
|
||||
}
|
||||
|
||||
function saveRaum($terminId, $ort_kurzbz, $uid)
|
||||
function saveRaum($terminId, $ort_kurzbz, $uid, $anderer_raum = '')
|
||||
{
|
||||
$terminkollision = defined('CIS_PRUEFUNGSANMELDUNG_ERLAUBE_TERMINKOLLISION') ? CIS_PRUEFUNGSANMELDUNG_ERLAUBE_TERMINKOLLISION : false;
|
||||
$pruefungstermin = new pruefungstermin($terminId);
|
||||
@@ -1265,7 +1594,24 @@ function saveRaum($terminId, $ort_kurzbz, $uid)
|
||||
{
|
||||
$pruefung = new pruefungCis($pruefungstermin->pruefung_id);
|
||||
$mitarbeiter = new mitarbeiter($pruefung->mitarbeiter_uid);
|
||||
if($ort_kurzbz === "buero")
|
||||
|
||||
if ($ort_kurzbz === "" && $anderer_raum !== "")
|
||||
{
|
||||
$pruefungstermin->anderer_raum = $anderer_raum;
|
||||
|
||||
if($pruefungstermin->save(false))
|
||||
{
|
||||
$data['result']="reserviert";
|
||||
$data['error']='false';
|
||||
$data['errormsg']='';
|
||||
}
|
||||
else
|
||||
{
|
||||
$data['error']='true';
|
||||
$data['errormsg']=$pruefungstermin->errormsg;
|
||||
}
|
||||
}
|
||||
else if($ort_kurzbz === "buero")
|
||||
{
|
||||
$pruefungstermin->ort_kurzbz = $mitarbeiter->ort_kurzbz;
|
||||
if($pruefungstermin->save(false))
|
||||
|
||||
@@ -321,6 +321,20 @@ $studiensemester->getAll();
|
||||
</td>
|
||||
</tr>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php
|
||||
if (defined('CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE')
|
||||
&& CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE === true):
|
||||
?>
|
||||
<tr>
|
||||
<td style="vertical-align: top; font-weight: bold;">
|
||||
<?php echo $p->t('pruefung/ects'); ?>:
|
||||
</td>
|
||||
<td>
|
||||
<input type="number" size="3" id="ectsangabe" placeholder="<?php echo $p->t('pruefung/ects'); ?>"/>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endif; ?>
|
||||
<tr id="studiengang">
|
||||
</tr>
|
||||
<tr>
|
||||
|
||||
@@ -235,12 +235,18 @@ $rechte->getBerechtigungen($uid);
|
||||
<th><?php echo $p->t('global/datum'); ?></th>
|
||||
<th><?php echo $p->t('benotungstool/note'); ?></th>
|
||||
<th><?php echo $p->t('global/anmerkung'); ?></th>
|
||||
|
||||
<?php
|
||||
if (defined('CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE') && (CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE === true)):
|
||||
?>
|
||||
<th><?php echo $p->t('pruefung/ects'); ?></th>
|
||||
<?php endif; ?>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php
|
||||
$count = 0;
|
||||
/*@var $anmeldung pruefungsanmeldung */
|
||||
foreach($anmeldungen as $anmeldung)
|
||||
{
|
||||
$student = new student($anmeldung->uid);
|
||||
@@ -269,6 +275,8 @@ $rechte->getBerechtigungen($uid);
|
||||
echo '<td>'.$date.'</td>';
|
||||
echo '<td></td>';
|
||||
echo '<td></td>';
|
||||
if (defined('CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE') && (CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE === true))
|
||||
echo '<td>'. $anmeldung->ects .'</td>';
|
||||
echo '</tr>';
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -233,6 +233,11 @@ $rechte->getBerechtigungen($uid);
|
||||
<th><?php echo $p->t('global/datum'); ?></th>
|
||||
<th><?php echo $p->t('benotungstool/note'); ?></th>
|
||||
<th><?php echo $p->t('global/anmerkung'); ?></th>
|
||||
<?php
|
||||
if (defined('CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE') && (CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE === true)):
|
||||
?>
|
||||
<th><?php echo $p->t('pruefung/ects'); ?></th>
|
||||
<?php endif; ?>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@@ -265,6 +270,8 @@ $rechte->getBerechtigungen($uid);
|
||||
echo '<td>'.$date.'</td>';
|
||||
echo '<td></td>';
|
||||
echo '<td></td>';
|
||||
if (defined('CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE') && (CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE === true))
|
||||
echo '<td>'. $anmeldung->ects .'</td>';
|
||||
echo '</tr>';
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -76,7 +76,7 @@ if (empty($pruefung->result) && !$rechte->isBerechtigt('lehre/pruefungsanmeldung
|
||||
width: 850px;
|
||||
padding: 1.8em 1.5em 1.8em 1em;
|
||||
/*border-radius: 25px;*/
|
||||
border: 1px solid #dddddd;
|
||||
/*border: 1px solid #dddddd;*/
|
||||
/*box-shadow: 0em 0em 2em 0.5em #888888 inset;*/
|
||||
}
|
||||
|
||||
@@ -95,7 +95,7 @@ if (empty($pruefung->result) && !$rechte->isBerechtigt('lehre/pruefungsanmeldung
|
||||
#prfWrapper {
|
||||
position: absolute;
|
||||
height: 70%;
|
||||
width: 300px;
|
||||
width: 40%;
|
||||
top: 180px;
|
||||
padding: 1.8em 1.5em 1.8em 1em;
|
||||
/*border-radius: 25px;*/
|
||||
@@ -117,9 +117,9 @@ if (empty($pruefung->result) && !$rechte->isBerechtigt('lehre/pruefungsanmeldung
|
||||
#anmWrapper {
|
||||
position: absolute;
|
||||
/*top: 45px;*/
|
||||
left: 350px;
|
||||
left: 45%;
|
||||
top: 180px;
|
||||
width: 500px;
|
||||
width: 40%;
|
||||
height: 70%;
|
||||
padding: 1.8em 1.5em 1.8em 1em;
|
||||
/*border-radius: 25px;*/
|
||||
@@ -228,7 +228,6 @@ if (empty($pruefung->result) && !$rechte->isBerechtigt('lehre/pruefungsanmeldung
|
||||
<script>
|
||||
$(document).ready(function()
|
||||
{
|
||||
loadStudiengaenge();
|
||||
$("#filter_studiensemester").css("visibility","visible");
|
||||
|
||||
$("#raumDialog").dialog({
|
||||
@@ -236,17 +235,66 @@ if (empty($pruefung->result) && !$rechte->isBerechtigt('lehre/pruefungsanmeldung
|
||||
autoOpen: false,
|
||||
width: "400px"
|
||||
});
|
||||
|
||||
$("#kommentarDialog").dialog({
|
||||
modal: true,
|
||||
autoOpen: false,
|
||||
width: "400px",
|
||||
buttons: {
|
||||
Ok: function() {
|
||||
$(this).dialog('close');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$("#table4").tablesorter({
|
||||
widgets: ["zebra"],
|
||||
headers: {
|
||||
0: { sorter: false },
|
||||
3: { sorter: 'shortDate',
|
||||
dateFormat: 'ddmmyyyy' },
|
||||
4: { sorter: 'time' },
|
||||
5: { sorter: 'time' }
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
$('#zusammenlegen').on('click', function() {
|
||||
let ausgewaehlte_termine = $('.termin-checkbox:checked');
|
||||
|
||||
if (ausgewaehlte_termine.length === 0)
|
||||
return;
|
||||
|
||||
let erster_termin = ausgewaehlte_termine.first();
|
||||
let erstes_datum = erster_termin.data('datum');
|
||||
let erste_lvid = erster_termin.data('lv-id');
|
||||
|
||||
let termine = [];
|
||||
ausgewaehlte_termine.each(function() {{
|
||||
let termin = $(this);
|
||||
let datum = termin.data('datum');
|
||||
let lv_id = termin.data('lv-id');
|
||||
|
||||
if (erstes_datum !== datum)
|
||||
return alert("Die ausgewählten Termine liegen nicht am selben Tag und können daher nicht zusammengelegt werden.")
|
||||
if (erste_lvid !== lv_id)
|
||||
return alert("Bei den ausgewählten Terminen handelt es sich um unterschiedliche Lehrveranstaltungen, die daher nicht zusammengelegt werden können.")
|
||||
|
||||
termine.push(termin.data('termin-id'));
|
||||
}})
|
||||
|
||||
if (termine.length > 0)
|
||||
{
|
||||
terminezusammenlegen(termine, erste_lvid);
|
||||
}
|
||||
})
|
||||
|
||||
loadPruefungStudiengang();
|
||||
});
|
||||
</script>
|
||||
<h1><?php echo $p->t('pruefung/anmeldungenVerwalten'); ?></h1>
|
||||
<div id='stgWrapper'>
|
||||
<div id='studiengaenge'>
|
||||
<div>
|
||||
<h2><?php echo $p->t('global/studiengang'); ?></h2>
|
||||
<div id='stgListe'>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<h2><?php echo $p->t('global/studiensemester'); ?></h2>
|
||||
<?php
|
||||
@@ -255,7 +303,6 @@ if (empty($pruefung->result) && !$rechte->isBerechtigt('lehre/pruefungsanmeldung
|
||||
$studiensemester->getPlusMinus(null, 5);
|
||||
foreach($studiensemester->studiensemester as $sem)
|
||||
{
|
||||
/*@var $sem studiensemester */
|
||||
if ($aktuellesSemester == $sem->studiensemester_kurzbz)
|
||||
{
|
||||
echo '<option selected value="'.$sem->studiensemester_kurzbz.'">'.$sem->bezeichnung.'</option>';
|
||||
@@ -273,9 +320,21 @@ if (empty($pruefung->result) && !$rechte->isBerechtigt('lehre/pruefungsanmeldung
|
||||
<div id='prfWrapper'>
|
||||
<div id='pruefungen'>
|
||||
<h2><?php echo $p->t('pruefung/pruefungPruefungenTitle'); ?></h2>
|
||||
<ul id="pruefungenListe">
|
||||
|
||||
</ul>
|
||||
<button id="zusammenlegen">Termine zusammenlegen</button>
|
||||
<table id="table4" class="tablesorter" style="display:none">
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th><?php echo $p->t('global/studiengang'); ?></th>
|
||||
<th><?php echo $p->t('global/lehrveranstaltung'); ?></th>
|
||||
<th><?php echo $p->t('global/datum'); ?></th>
|
||||
<th><?php echo $p->t('global/von'); ?></th>
|
||||
<th><?php echo $p->t('global/bis'); ?></th>
|
||||
<th><?php echo $p->t('pruefung/pruefungsbewertungAnmeldungen'); ?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="pruefungenListe"></tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div id='anmWrapper'>
|
||||
@@ -311,6 +370,9 @@ if (empty($pruefung->result) && !$rechte->isBerechtigt('lehre/pruefungsanmeldung
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="kommentarDialog" title="<?php echo $p->t('pruefung/anmerkungDesStudenten'); ?>" style="display:none;">
|
||||
<div id="kommentarimDialog"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="message"></div>
|
||||
|
||||
@@ -69,6 +69,8 @@ if(isset($_GET['getAnmeldung']))
|
||||
|
||||
$lehrveranstaltung_id=$_GET['lehrveranstaltung_id'];
|
||||
$stsem = $_GET['stsem'];
|
||||
$semester = $_GET['semester'];
|
||||
$studienplan_id = $_GET['studienplan_id'];
|
||||
|
||||
echo $p->t('studienplan/LehrveranstalungWaehlen').'
|
||||
<form action="'.$_SERVER['PHP_SELF'].'?uid='.$db->convert_html_chars($uid).'" method="POST">
|
||||
@@ -83,6 +85,10 @@ if(isset($_GET['getAnmeldung']))
|
||||
$datum = new datum();
|
||||
$kompatibel[]=$lehrveranstaltung_id;
|
||||
$kompatibel = array_unique($kompatibel);
|
||||
$stsem_obj = new studiensemester();
|
||||
$aktornext = $stsem_obj->getaktorNext();
|
||||
|
||||
$lvregel = new lvregel();
|
||||
foreach($kompatibel as $lvid)
|
||||
{
|
||||
$lvangebot = new lvangebot();
|
||||
@@ -95,19 +101,50 @@ if(isset($_GET['getAnmeldung']))
|
||||
$angebot = $lvangebot->result[0];
|
||||
if($angebot->AnmeldungMoeglich())
|
||||
{
|
||||
$anzahl++;
|
||||
// LV wird angeboten und Anmeldefenster ist offen
|
||||
$kompatible_lv = $lehrveranstaltung->getStudienplanLehrveranstaltung($lvid, $studienplan_id);
|
||||
|
||||
$bngruppe = new benutzergruppe();
|
||||
if(!$bngruppe->load($uid, $lvangebot->result[0]->gruppe_kurzbz, $stsem))
|
||||
$lvregelExists = false;
|
||||
$abgeschlossen = false;
|
||||
$semesterlock = false;
|
||||
$regelerfuellt = true;
|
||||
|
||||
if ($kompatible_lv)
|
||||
{
|
||||
// User ist noch nicht angemeldet
|
||||
echo '<br><input type="radio" value="'.$lvid.'" name="lv"/>'.$lv->bezeichnung.' (Anmeldung bis '.$datum->formatDatum($angebot->anmeldefenster_ende,"d.m.Y").')';
|
||||
$lvregelExists = $lvregel->exists($kompatible_lv);
|
||||
|
||||
if(!$lvregel->checkSemester($kompatible_lv, $semester))
|
||||
{
|
||||
$semesterlock=true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if($stsem === $aktornext)
|
||||
{
|
||||
$result = $lvregel->isZugangsberechtigt($uid, $kompatible_lv, $stsem);
|
||||
if((is_array($result)) && ($result[0] !== true))
|
||||
{
|
||||
$regelerfuellt=false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
if (!$semesterlock && $regelerfuellt)
|
||||
{
|
||||
// Bereits angemeldet
|
||||
echo '<br><input type="radio" disabled="true" value="'.$lvid.'" name="lv" /><span class="ok">'.$lv->bezeichnung.'</span><img src="../../../skin/images/information.png" title="'.$p->t('studienplan/bereitsAngemeldet').'"/>';
|
||||
$anzahl++;
|
||||
// LV wird angeboten und Anmeldefenster ist offen
|
||||
|
||||
$bngruppe = new benutzergruppe();
|
||||
if(!$bngruppe->load($uid, $lvangebot->result[0]->gruppe_kurzbz, $stsem))
|
||||
{
|
||||
// User ist noch nicht angemeldet
|
||||
echo '<br><input type="radio" value="'.$lvid.'" name="lv"/>'.$lv->bezeichnung.' (Anmeldung bis '.$datum->formatDatum($angebot->anmeldefenster_ende,"d.m.Y").')';
|
||||
}
|
||||
else
|
||||
{
|
||||
// Bereits angemeldet
|
||||
echo '<br><input type="radio" disabled="true" value="'.$lvid.'" name="lv" /><span class="ok">'.$lv->bezeichnung.'</span><img src="../../../skin/images/information.png" title="'.$p->t('studienplan/bereitsAngemeldet').'"/>';
|
||||
}
|
||||
}
|
||||
}
|
||||
/* else
|
||||
@@ -170,9 +207,9 @@ echo '
|
||||
$("#dialog").dialog({ autoOpen: false, width: "auto" });
|
||||
});
|
||||
|
||||
function OpenAnmeldung(lehrveranstaltung_id, stsem)
|
||||
function OpenAnmeldung(lehrveranstaltung_id, stsem, semester, studienplan_id)
|
||||
{
|
||||
$("#dialog").load("studienplan.php?getAnmeldung=true&lehrveranstaltung_id="+lehrveranstaltung_id+"&stsem="+stsem+"&uid='.$db->convert_html_chars($uid).'");
|
||||
$("#dialog").load("studienplan.php?getAnmeldung=true&lehrveranstaltung_id="+lehrveranstaltung_id+"&stsem="+stsem+"&semester="+semester+"&studienplan_id="+studienplan_id+"&uid='.$db->convert_html_chars($uid).'");
|
||||
$("#dialog").dialog("open");
|
||||
}
|
||||
</script>
|
||||
@@ -359,7 +396,7 @@ drawTree($tree,0);
|
||||
|
||||
function drawTree($tree, $depth)
|
||||
{
|
||||
global $uid, $stsem_arr, $noten_arr, $lvangebot_arr, $aktornext;
|
||||
global $uid, $stsem_arr, $noten_arr, $lvangebot_arr, $aktornext, $studienplan_id;
|
||||
global $datum_obj, $db, $lv_arr, $p, $note_pruef_arr, $student;
|
||||
global $anrechnung;
|
||||
|
||||
@@ -639,12 +676,12 @@ function drawTree($tree, $depth)
|
||||
$tdclass[]='angebot';
|
||||
if($angemeldet)
|
||||
{
|
||||
$tdinhalt.= '<a href="#" onclick="OpenAnmeldung(\''.$row_tree->lehrveranstaltung_id.'\',\''.$stsem.'\'); return false;"><img src="../../../skin/images/ja.png" title="'.$p->t('studienplan/legendeAngemeldet').'" /></a>';
|
||||
$tdinhalt.= '<a href="#" onclick="OpenAnmeldung(\''.$row_tree->lehrveranstaltung_id.'\',\''.$stsem.'\',\''.$semester.'\',\''.$studienplan_id.'\'); return false;"><img src="../../../skin/images/ja.png" title="'.$p->t('studienplan/legendeAngemeldet').'" /></a>';
|
||||
}
|
||||
else
|
||||
{
|
||||
if($anmeldungmoeglich)
|
||||
$tdinhalt.= '<a href="#" onclick="OpenAnmeldung(\''.$row_tree->lehrveranstaltung_id.'\',\''.$stsem.'\'); return false;"><img src="../../../skin/images/anmelden.png" title="'.$p->t('studienplan/anmelden').'" height="15px" /></a>';
|
||||
$tdinhalt.= '<a href="#" onclick="OpenAnmeldung(\''.$row_tree->lehrveranstaltung_id.'\',\''.$stsem.'\', \''.$semester.'\', \''.$studienplan_id.'\'); return false;"><img src="../../../skin/images/anmelden.png" title="'.$p->t('studienplan/anmelden').'" height="15px" /></a>';
|
||||
else
|
||||
$tdinhalt.= '<span title="'.$anmeldeinformation.'">-</a>';
|
||||
|
||||
|
||||
@@ -249,6 +249,9 @@ define('CIS_INFOSCREEN_NEWS_ANZEIGEN',false);
|
||||
//User, welcher für das Anlegen von Anrechnungen bei der Prüfungsanmeldung verwendet wird
|
||||
define('CIS_PRUEFUNGSANMELDUNG_USER','p.pruefungsanmeldung');
|
||||
|
||||
//Gibt an, ob die Studierenden bei der Anmeldung zu einer Prüfung den Ausmas an ECTS angeben können
|
||||
define('CIS_PRUEFUNGSANMELDUNG_ECTS_ANGABE', false);
|
||||
|
||||
// Anmeldefristen für Prüfungen in Tagen;
|
||||
// Wenn nicht definiert: 3
|
||||
//define('CIS_PRUEFUNGSANMELDUNG_FRIST',3);
|
||||
|
||||
@@ -162,6 +162,12 @@ define('CIS_LV_LEKTORINNENZUTEILUNG_VERTRAGSPRUEFUNG_VON', '');
|
||||
// Legt fest, ob Vertragsdetails zum Projektauftrag im Reiter Projektarbeit angezeigt werden
|
||||
define('FAS_STUDIERENDE_PROJEKTARBEIT_VERTRAGSDETAILS_ANZEIGEN', false);
|
||||
|
||||
// Legt default Stunden pro Projektarbeitsbetreuung für Bachelorarbeiten fest
|
||||
define('FAS_STUDIERENDE_PROJEKTARBEIT_DEFAULT_BETREUER_STUNDEN_BACHELOR', '5.0');
|
||||
|
||||
// Legt default Stunden pro Projektarbeitsbetreuung für Masterarbeiten fest
|
||||
define('FAS_STUDIERENDE_PROJEKTARBEIT_DEFAULT_BETREUER_STUNDEN_MASTER', '5.0');
|
||||
|
||||
// Anzeigeoptionen für LV-Plan Menü
|
||||
define('CIS_LVPLAN_EXPORT_ANZEIGEN',true);
|
||||
define('CIS_LVPLAN_PERSONENAUSWAHL_ANZEIGEN',true);
|
||||
|
||||
@@ -62,6 +62,11 @@ if(!$rechte->isBerechtigt('student/noten',$studiengang_kz, 's'))
|
||||
$semester = isset($_GET['semester'])?$_GET['semester']:'';
|
||||
$typ = isset($_GET['typ'])?$_GET['typ']:'';
|
||||
|
||||
if(isset($_GET['studiensemester']) && preg_match('/[WS]S[0-9]{4}/', $_GET['studiensemester']))
|
||||
{
|
||||
$semester_aktuell = $_GET['studiensemester'];
|
||||
}
|
||||
|
||||
if($semester=='')
|
||||
die('Bitte ein Semester auswaehlen');
|
||||
|
||||
|
||||
@@ -64,6 +64,11 @@ if (!$rechte->isBerechtigt('student/noten', $studiengang_kz, 's'))
|
||||
$semester = isset($_GET['semester']) ? $_GET['semester'] : '';
|
||||
$typ = isset($_GET['typ']) ? $_GET['typ'] : '';
|
||||
|
||||
if(isset($_GET['studiensemester']) && preg_match('/[WS]S[0-9]{4}/', $_GET['studiensemester']))
|
||||
{
|
||||
$semester_aktuell = $_GET['studiensemester'];
|
||||
}
|
||||
|
||||
if ($semester == '')
|
||||
die('Bitte ein Semester auswaehlen');
|
||||
|
||||
|
||||
@@ -1165,12 +1165,14 @@ function StudentProjektbetreuerDetailReset()
|
||||
|
||||
if(document.getElementById('student-projektarbeit-menulist-projekttyp').value=='Diplom')
|
||||
{
|
||||
document.getElementById('student-projektbetreuer-textbox-stunden').value='5.0';
|
||||
document.getElementById('student-projektbetreuer-textbox-stunden').value=
|
||||
<?php if (defined('FAS_STUDIERENDE_PROJEKTARBEIT_DEFAULT_BETREUER_STUNDEN_MASTER') && FAS_STUDIERENDE_PROJEKTARBEIT_DEFAULT_BETREUER_STUNDEN_MASTER) echo FAS_STUDIERENDE_PROJEKTARBEIT_DEFAULT_BETREUER_STUNDEN_MASTER; else echo '5'; ?>;
|
||||
document.getElementById('student-projektbetreuer-menulist-betreuerart').value='Erstbegutachter';
|
||||
}
|
||||
else if(document.getElementById('student-projektarbeit-menulist-projekttyp').value=='Bachelor')
|
||||
{
|
||||
document.getElementById('student-projektbetreuer-textbox-stunden').value='4.0';
|
||||
document.getElementById('student-projektbetreuer-textbox-stunden').value=
|
||||
<?php if (defined('FAS_STUDIERENDE_PROJEKTARBEIT_DEFAULT_BETREUER_STUNDEN_BACHELOR') && FAS_STUDIERENDE_PROJEKTARBEIT_DEFAULT_BETREUER_STUNDEN_BACHELOR) echo FAS_STUDIERENDE_PROJEKTARBEIT_DEFAULT_BETREUER_STUNDEN_BACHELOR; else echo '4'; ?>;
|
||||
document.getElementById('student-projektbetreuer-menulist-betreuerart').value='Begutachter';
|
||||
}
|
||||
else if(document.getElementById('student-projektarbeit-menulist-projekttyp').value=='Praktikum')
|
||||
|
||||
@@ -178,7 +178,7 @@ class File_CSV
|
||||
return $field;
|
||||
}
|
||||
|
||||
if ($quote && $field{0} == $quote && $field{strlen($field)-1} == $quote) {
|
||||
if ($quote && $field[0] == $quote && $field[strlen($field) - 1] == $quote) {
|
||||
return substr($field, 1, -1);
|
||||
}
|
||||
return $field;
|
||||
@@ -230,7 +230,7 @@ class File_CSV
|
||||
} elseif ($c == "\n" || $c == "\r") {
|
||||
$sub = ($prev == "\r") ? 2 : 1;
|
||||
if ((strlen($buff) >= $sub) &&
|
||||
($buff{strlen($buff) - $sub} == $quote))
|
||||
($buff[strlen($buff) - $sub] == $quote))
|
||||
{
|
||||
$in_quote = false;
|
||||
}
|
||||
@@ -312,9 +312,9 @@ class File_CSV
|
||||
$last =& $fields[count($fields) - 1];
|
||||
// Fallback to read the line with readQuoted when guess
|
||||
// that the simple explode won't work right
|
||||
if (($last{strlen($last) - 1} == "\n"
|
||||
&& $last{0} == $conf['quote']
|
||||
&& $last{strlen(rtrim($last)) - 1} != $conf['quote'])
|
||||
if (($last[strlen($last) - 1] == "\n"
|
||||
&& $last[0] == $conf['quote']
|
||||
&& $last[strlen(rtrim($last)) - 1] != $conf['quote'])
|
||||
||
|
||||
(count($fields) != $conf['fields'])
|
||||
// XXX perhaps there is a separator inside a quoted field
|
||||
@@ -511,4 +511,4 @@ class File_CSV
|
||||
return true;
|
||||
}
|
||||
}
|
||||
?>
|
||||
?>
|
||||
|
||||
@@ -96,7 +96,7 @@ class File_Util
|
||||
{
|
||||
if (File_Util::isAbsolute($path)) {
|
||||
if (FILE_WIN32) {
|
||||
return substr($path, $path{3} == '\\' ? 4 : 3);
|
||||
return substr($path, $path[3] == '\\' ? 4 : 3);
|
||||
}
|
||||
return ltrim($path, '/');
|
||||
}
|
||||
@@ -182,7 +182,7 @@ class File_Util
|
||||
if (FILE_WIN32) {
|
||||
return preg_match('/^[a-zA-Z]:(\\\|\/)/', $path);
|
||||
}
|
||||
return ($path{0} == '/') || ($path{0} == '~');
|
||||
return ($path[0] == '/') || ($path[0] == '~');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -244,11 +244,11 @@ class File_Util
|
||||
} else {
|
||||
$cwd = getcwd();
|
||||
$drive = substr($cwd, 0, 2);
|
||||
if ($path{0} !== $separator{0}) {
|
||||
if ($path[0] !== $separator[0]) {
|
||||
$path = substr($cwd, 3) . $separator . $path;
|
||||
}
|
||||
}
|
||||
} elseif ($path{0} !== $separator) {
|
||||
} elseif ($path[0] !== $separator) {
|
||||
$path = getcwd() . $separator . $path;
|
||||
}
|
||||
|
||||
@@ -323,7 +323,7 @@ class File_Util
|
||||
|
||||
$entries = array();
|
||||
for ($dir = dir($path); false !== $entry = $dir->read(); ) {
|
||||
if ($list & FILE_LIST_DOTS || $entry{0} !== '.') {
|
||||
if ($list & FILE_LIST_DOTS || $entry[0] !== '.') {
|
||||
$isRef = ($entry === '.' || $entry === '..');
|
||||
$isDir = $isRef || is_dir($path .'/'. $entry);
|
||||
if ( ((!$isDir && $list & FILE_LIST_FILES) ||
|
||||
|
||||
@@ -240,7 +240,7 @@ class filter extends basis_db
|
||||
{
|
||||
//$value->value = preg_replace('/(.*?)selected=.selected./', '$1', $value->value);
|
||||
//$value->value = preg_replace('/(.*?)\s*[selected=?selected?]/', '$1', $value->value);
|
||||
//$value->value = preg_replace('/(.*?)\s*selected="selected"\s*/', '${1}', $value->value);
|
||||
//$value->value = preg_replace('/(.*?)\s*selected="selected"\s*/', '$[1]', $value->value);
|
||||
//$value->value = preg_replace('/^\s*selected=.*?selected.*?\s*/', ' ', $value->value);
|
||||
//$value->value = str_replace('selected=', '', $value->value);
|
||||
|
||||
|
||||
@@ -2861,5 +2861,33 @@ class lehrveranstaltung extends basis_db
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public function getStudienplanLehrveranstaltung($lehrveranstaltung_id, $studienplan_id)
|
||||
{
|
||||
$qry = "SELECT studienplan_lehrveranstaltung_id
|
||||
FROM lehre.tbl_lehrveranstaltung
|
||||
JOIN lehre.tbl_studienplan_lehrveranstaltung USING(lehrveranstaltung_id)
|
||||
WHERE lehrveranstaltung_id = ".$this->db_add_param($lehrveranstaltung_id)."
|
||||
AND tbl_studienplan_lehrveranstaltung.studienplan_id = ".$this->db_add_param($studienplan_id);"";
|
||||
|
||||
if($result = $this->db_query($qry))
|
||||
{
|
||||
if($row = $this->db_fetch_object($result))
|
||||
{
|
||||
return $row->studienplan_lehrveranstaltung_id;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->errormsg = 'Fehler beim Ermitteln der studienplan_lehrveranstaltung_id';
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->errormsg='Fehler bei Datenbankabfrage ' .$this->db_last_error();
|
||||
}
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -464,6 +464,7 @@ class pruefungCis extends basis_db
|
||||
$obj->anmeldung_von= $row->anmeldung_von;
|
||||
$obj->anmeldung_bis = $row->anmeldung_bis;
|
||||
$obj->ort_kurzbz = $row->ort_kurzbz;
|
||||
$obj->anderer_raum = $row->anderer_raum;
|
||||
$obj->sammelklausur = $row->sammelklausur;
|
||||
array_push($this->termine, $obj);
|
||||
}
|
||||
@@ -646,6 +647,37 @@ class pruefungCis extends basis_db
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getPruefungByStudiensemester($studiensemester_kurzbz)
|
||||
{
|
||||
if(empty($studiensemester_kurzbz))
|
||||
{
|
||||
$this->errormsg = "Kein Studiensemester übergeben.</br>";
|
||||
return false;
|
||||
}
|
||||
|
||||
$qry = 'SELECT *
|
||||
FROM campus.tbl_lehrveranstaltung_pruefung
|
||||
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
|
||||
JOIN campus.tbl_pruefung USING (pruefung_id)
|
||||
WHERE tbl_pruefung.studiensemester_kurzbz = ' . $this->db_add_param($studiensemester_kurzbz);
|
||||
|
||||
if($this->db_query($qry))
|
||||
{
|
||||
while($row = $this->db_fetch_object())
|
||||
{
|
||||
$obj = new stdClass();
|
||||
$obj->lehrveranstaltung_pruefung_id = $row->lehrveranstaltung_pruefung_id;
|
||||
$obj->lehrveranstaltung_id = $row->lehrveranstaltung_id;
|
||||
$obj->pruefung_id = $row->pruefung_id;
|
||||
$obj->storniert = $row->storniert;
|
||||
$obj->bezeichnung = $row->bezeichnung;
|
||||
array_push($this->lehrveranstaltungen, $obj);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Lädt alle Prüfung-Lehrveranstaltung Kombinationen
|
||||
* @return boolean true, wenn ok; false, im Fehlerfall
|
||||
|
||||
@@ -39,6 +39,7 @@ class pruefungsanmeldung extends basis_db {
|
||||
public $statusupdatevon; //varchar(32)
|
||||
public $statusupdateamum; //timestamp
|
||||
public $anrechnung_id; //integer
|
||||
public $ects; //integer
|
||||
public $pruefungstyp_kurzbz; //varchar(32)
|
||||
public $insertamum; // timestamp
|
||||
|
||||
@@ -94,7 +95,7 @@ class pruefungsanmeldung extends basis_db {
|
||||
|
||||
if($new)
|
||||
{
|
||||
$qry = 'INSERT INTO campus.tbl_pruefungsanmeldung (uid, pruefungstermin_id, lehrveranstaltung_id, status_kurzbz, wuensche, reihung, kommentar, anrechnung_id, pruefungstyp_kurzbz) VALUES ('
|
||||
$qry = 'INSERT INTO campus.tbl_pruefungsanmeldung (uid, pruefungstermin_id, lehrveranstaltung_id, status_kurzbz, wuensche, reihung, kommentar, anrechnung_id, pruefungstyp_kurzbz, ects) VALUES ('
|
||||
. $this->db_add_param($this->uid).', '
|
||||
. $this->db_add_param($this->pruefungstermin_id).', '
|
||||
. $this->db_add_param($this->lehrveranstaltung_id).', '
|
||||
@@ -103,7 +104,8 @@ class pruefungsanmeldung extends basis_db {
|
||||
. $this->db_add_param($this->reihung).', '
|
||||
. $this->db_add_param($this->kommentar).', '
|
||||
. $this->db_add_param($this->anrechnung_id).', '
|
||||
. $this->db_add_param($this->pruefungstyp_kurzbz).');';
|
||||
. $this->db_add_param($this->pruefungstyp_kurzbz).', '
|
||||
. $this->db_add_param($this->ects).');';
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -116,7 +118,8 @@ class pruefungsanmeldung extends basis_db {
|
||||
. 'reihung='.$this->db_add_param($this->reihung).', '
|
||||
. 'kommentar='.$this->db_add_param($this->kommentar).', '
|
||||
. 'anrechnung_id='.$this->db_add_param($this->anrechnung_id).', '
|
||||
. 'pruefungstyp_kurzbz='.$this->db_add_param($this->pruefungstyp_kurzbz)
|
||||
. 'pruefungstyp_kurzbz='.$this->db_add_param($this->pruefungstyp_kurzbz).', '
|
||||
. 'ects='.$this->db_add_param($this->ects)
|
||||
. ' WHERE pruefungsanmeldung_id='.$this->db_add_param($this->pruefungsanmeldung_id).';';
|
||||
}
|
||||
|
||||
@@ -167,6 +170,7 @@ class pruefungsanmeldung extends basis_db {
|
||||
$this->statusupdatevon = $row->statusupdatevon;
|
||||
$this->anrechnung_id = $row->anrechnung_id;
|
||||
$this->pruefungstyp_kurzbz = $row->pruefungstyp_kurzbz;
|
||||
$this->ects = $row->ects;
|
||||
$this->insertamum = $row->insertamum;
|
||||
}
|
||||
return true;
|
||||
@@ -221,6 +225,7 @@ class pruefungsanmeldung extends basis_db {
|
||||
$anmeldung->statusupdatevon = $row->statusupdatevon;
|
||||
$anmeldung->anrechnung_id = $row->anrechnung_id;
|
||||
$anmeldung->pruefungstyp_kurzbz = $row->pruefungstyp_kurzbz;
|
||||
$anmeldung->ects = $row->ects;
|
||||
array_push($anmeldungen, $anmeldung);
|
||||
}
|
||||
return $anmeldungen;
|
||||
@@ -280,6 +285,7 @@ class pruefungsanmeldung extends basis_db {
|
||||
$anmeldung->statusupdatevon = $row->statusupdatevon;
|
||||
$anmeldung->anrechnung_id = $row->anrechnung_id;
|
||||
$anmeldung->pruefungstyp_kurzbz = $row->pruefungstyp_kurzbz;
|
||||
$anmeldung->ects = $row->ects;
|
||||
$anmeldung->datum_anmeldung = $row->datum_anmeldung;
|
||||
array_push($anmeldungen, $anmeldung);
|
||||
}
|
||||
|
||||
@@ -37,6 +37,7 @@ class pruefungstermin extends basis_db{
|
||||
public $anmeldung_von; //date
|
||||
public $anmeldung_bis; //date
|
||||
public $ort_kurzbz; //varchar(16)
|
||||
public $anderer_raum; //text
|
||||
public $sammelklausur; //boolean
|
||||
|
||||
/**
|
||||
@@ -93,6 +94,7 @@ class pruefungstermin extends basis_db{
|
||||
$this->anmeldung_von= $row->anmeldung_von;
|
||||
$this->anmeldung_bis = $row->anmeldung_bis;
|
||||
$this->ort_kurzbz = $row->ort_kurzbz;
|
||||
$this->anderer_raum = $row->anderer_raum;
|
||||
$this->sammelklausur = $row->sammelklausur;
|
||||
}
|
||||
return true;
|
||||
@@ -179,7 +181,8 @@ class pruefungstermin extends basis_db{
|
||||
. 'teilnehmer_min='.$this->db_add_param($this->teilnehmer_min).', '
|
||||
. 'anmeldung_von='.$this->db_add_param($this->anmeldung_von).', '
|
||||
. 'anmeldung_bis='.$this->db_add_param($this->anmeldung_bis).', '
|
||||
. 'ort_kurzbz='.$this->db_add_param($this->ort_kurzbz).' '
|
||||
. 'ort_kurzbz='.$this->db_add_param($this->ort_kurzbz).', '
|
||||
. 'anderer_raum='.$this->db_add_param($this->anderer_raum).' '
|
||||
. 'WHERE pruefungstermin_id='.$this->db_add_param($this->pruefungstermin_id).';';
|
||||
}
|
||||
|
||||
@@ -228,6 +231,7 @@ class pruefungstermin extends basis_db{
|
||||
$obj->anmeldung_von= $row->anmeldung_von;
|
||||
$obj->anmeldung_bis = $row->anmeldung_bis;
|
||||
$obj->ort_kurzbz = $row->ort_kurzbz;
|
||||
$obj->anderer_raum = $row->anderer_raum;
|
||||
$obj->sammelklausur = $row->sammelklausur;
|
||||
array_push($this->result, $obj);
|
||||
}
|
||||
@@ -240,4 +244,20 @@ class pruefungstermin extends basis_db{
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function delete($pruefungstermin_id)
|
||||
{
|
||||
$qry = "DELETE FROM campus.tbl_pruefungstermin WHERE pruefungstermin_id=".$this->db_add_param($pruefungstermin_id).";";
|
||||
|
||||
if($this->db_query($qry))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->errormsg='Fehler beim Löschen des Eintrages';
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -322,5 +322,37 @@ class reservierung extends basis_db
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function getReservierungen($ort_kurzbz, $datum)
|
||||
{
|
||||
$datum_obj = new Datum();
|
||||
if(!$datum_obj->checkDatum($datum))
|
||||
{
|
||||
$this->errormsg='Datum hat ein ungueltiges Format';
|
||||
return false;
|
||||
}
|
||||
|
||||
$qry = "SELECT stunde FROM campus.tbl_reservierung
|
||||
WHERE
|
||||
ort_kurzbz=".$this->db_add_param($ort_kurzbz)." AND
|
||||
datum=".$this->db_add_param($datum);
|
||||
|
||||
|
||||
if($this->db_query($qry))
|
||||
{
|
||||
$result = array();
|
||||
while($row = $this->db_fetch_object())
|
||||
{
|
||||
$result[] = $row->stunde;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->errormsg = "Prüfungstypen konnten nicht geladen werden.";
|
||||
return false;
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -1532,7 +1532,7 @@ class WavFile
|
||||
} else {
|
||||
// replace
|
||||
for ($i = 0; $i < $sampleBytes; ++$i) {
|
||||
$this->_samples{$offset + $i} = $sampleBinary{$i};
|
||||
$this->_samples[$offset + $i] = $sampleBinary[$i];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1435,7 +1435,7 @@ class Securimage
|
||||
$length = strlen($code['display']);
|
||||
|
||||
for($i = 0; $i < $length; ++$i) {
|
||||
$letter = $code['display']{$i};
|
||||
$letter = $code['display'][$i];
|
||||
$letters[] = $letter;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,6 +57,7 @@ $this->phrasen['pruefung/listeOhneNamenDrucken'] = 'Liste ohne Namen drucken';
|
||||
$this->phrasen['pruefung/pruefungsraum'] = 'Prüfungsraum: ';
|
||||
$this->phrasen['pruefung/pruefungsort'] = 'Prüfungsort ';
|
||||
$this->phrasen['pruefung/imBuero'] = ' im Büro';
|
||||
$this->phrasen['pruefung/andererRaum'] = 'anderer Raum';
|
||||
$this->phrasen['pruefung/raum'] = ' Raum';
|
||||
$this->phrasen['pruefung/raumSpeichern'] = ' Raum speichern';
|
||||
$this->phrasen['pruefung/reihunghErfolgreichGeaendert'] = 'Reihung erfolgreich geändert.';
|
||||
@@ -77,6 +78,7 @@ $this->phrasen['pruefung/unbegrenzt'] = 'unbegrenzt';
|
||||
$this->phrasen['pruefung/bewertungenZu'] = 'Bewertungen zu';
|
||||
$this->phrasen['pruefung/keineAuswahl'] = 'Keine Auswahl';
|
||||
$this->phrasen['pruefung/alleBestaetigen'] = 'Alle bestätigen';
|
||||
$this->phrasen['pruefung/bitteEmailAngeben'] = 'Bitte geben Sie eine gültige E-Mail-Adresse ein.';
|
||||
|
||||
// pruefungsbewertung
|
||||
$this->phrasen['pruefung/pruefungsbewertungTitle'] = 'Prüfungsbewertung';
|
||||
@@ -95,6 +97,7 @@ $this->phrasen['pruefung/lvVonStudiengang'] = 'Lehrveranstaltungen von Studienga
|
||||
$this->phrasen['pruefung/lvAlle'] = 'Alle Lehrveranstaltungen';
|
||||
$this->phrasen['pruefung/anmeldungSpeichern'] = 'Anmeldung speichern';
|
||||
$this->phrasen['pruefung/studienverpflichtung'] = 'Studienverpflichtung';
|
||||
$this->phrasen['pruefung/ects'] = 'ECTS';
|
||||
|
||||
// liste
|
||||
$this->phrasen['pruefung/anmeldungsliste'] = 'Anmeldungsliste';
|
||||
@@ -139,6 +142,15 @@ $this->phrasen['pruefung/emailBodyOrt'] = 'Ort:';
|
||||
$this->phrasen['pruefung/emailBodyLinkZurAnmeldung'] = 'Link zur Anmeldung';
|
||||
$this->phrasen['pruefung/emailBodyBitteHtmlSicht'] = 'Bitte sehen Sie sich die Nachricht in HTML Sicht an, um den Link vollständig darzustellen.';
|
||||
|
||||
|
||||
// Sammelmail
|
||||
$this->phrasen['pruefung/sammelemailBody'] = 'Die Anmeldungen zur Prüfung %s am %s wurde von %s bestätigt. <br />';
|
||||
$this->phrasen['pruefung/sammelemailBody2'] = 'Ort: %s<br />';
|
||||
$this->phrasen['pruefung/sammelemailBodyBestaetigt'] = 'Bestätigt von';
|
||||
$this->phrasen['pruefung/sammelemailBodyPruefung'] = 'Prüfung';
|
||||
$this->phrasen['pruefung/sammelemailBodyTermin'] = 'Termin';
|
||||
$this->phrasen['pruefung/sammelemailBodyDauer'] = 'Dauer';
|
||||
|
||||
$this->phrasen['pruefung/emailLektorSubjectAnmeldung'] = 'Anmeldung zur Prüfung';
|
||||
$this->phrasen['pruefung/emailLektorStudentIn'] = 'StudentIn';
|
||||
$this->phrasen['pruefung/emailLektorHatSichZurPruefung'] = 'hat sich zur Prüfung';
|
||||
|
||||
@@ -57,6 +57,7 @@ $this->phrasen['pruefung/listeOhneNamenDrucken'] = 'Liste ohne Namen drucken';
|
||||
$this->phrasen['pruefung/pruefungsraum'] = 'Prüfungsraum: ';
|
||||
$this->phrasen['pruefung/pruefungsort'] = 'Prüfungsort ';
|
||||
$this->phrasen['pruefung/imBuero'] = ' im Büro';
|
||||
$this->phrasen['pruefung/andererRaum'] = 'other Room';
|
||||
$this->phrasen['pruefung/raum'] = ' Raum';
|
||||
$this->phrasen['pruefung/raumSpeichern'] = ' Raum speichern';
|
||||
$this->phrasen['pruefung/reihunghErfolgreichGeaendert'] = 'Reihung erfolgreich geändert.';
|
||||
@@ -77,6 +78,7 @@ $this->phrasen['pruefung/unbegrenzt'] = 'unlimited';
|
||||
$this->phrasen['pruefung/bewertungenZu'] = 'Bewertungen zu';
|
||||
$this->phrasen['pruefung/keineAuswahl'] = 'Keine Auswahl';
|
||||
$this->phrasen['pruefung/alleBestaetigen'] = 'Confirm all';
|
||||
$this->phrasen['pruefung/bitteEmailAngeben'] = 'Please enter a valid E-Mail Address.';
|
||||
|
||||
// pruefungsbewertung
|
||||
$this->phrasen['pruefung/pruefungsbewertungTitle'] = 'Prüfungsbewertung';
|
||||
@@ -139,6 +141,14 @@ $this->phrasen['pruefung/emailBodyOrt'] = 'Ort:';
|
||||
$this->phrasen['pruefung/emailBodyLinkZurAnmeldung'] = 'Link zur Anmeldung';
|
||||
$this->phrasen['pruefung/emailBodyBitteHtmlSicht'] = 'Bitte sehen Sie sich die Nachricht in HTML Sicht an, um den Link vollständig darzustellen.';
|
||||
|
||||
// Sammelmail
|
||||
$this->phrasen['pruefung/sammelemailBody'] = 'The exam registrations for %s on %s have been confirmed by %s. <br />';
|
||||
$this->phrasen['pruefung/sammelemailBody2'] = 'Place: %s<br />';
|
||||
$this->phrasen['pruefung/sammelemailBodyBestaetigt'] = 'Confirmed by';
|
||||
$this->phrasen['pruefung/sammelemailBodyPruefung'] = 'Exam';
|
||||
$this->phrasen['pruefung/sammelemailBodyTermin'] = 'Exam date';
|
||||
$this->phrasen['pruefung/sammelemailBodyDauer'] = 'Duration';
|
||||
|
||||
$this->phrasen['pruefung/emailLektorSubjectAnmeldung'] = 'Anmeldung zur Prüfung';
|
||||
$this->phrasen['pruefung/emailLektorStudentIn'] = 'StudentIn';
|
||||
$this->phrasen['pruefung/emailLektorHatSichZurPruefung'] = 'hat sich zur Prüfung';
|
||||
|
||||
@@ -407,6 +407,7 @@ html {
|
||||
background-color: var(--fhc-background);
|
||||
border-color: var(--fhc-border);
|
||||
padding: var(--fhc-cis-main-py) var(--fhc-cis-main-px);
|
||||
min-width: 0; /* fix flex-grow with tabulator exceeding width */
|
||||
}
|
||||
|
||||
#cis-main .fa-arrow-up-right-from-square {
|
||||
@@ -854,4 +855,4 @@ html {
|
||||
#cis-main .modal-footer {
|
||||
background-color: var(--fhc-secondary);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,14 +1,38 @@
|
||||
@import './Fhc.css';
|
||||
@import './SvgIcons.css';
|
||||
@import './components/searchbar/searchbar.css';
|
||||
@import './components/verticalsplit.css';
|
||||
@import './components/FilterComponent.css';
|
||||
@import './components/Tabs.css';
|
||||
@import './components/Notiz.css';
|
||||
@import './components/Messages.css';
|
||||
@import './components/AppMenu.css';
|
||||
|
||||
html {
|
||||
font-size: .875em;
|
||||
}
|
||||
html.fs_xx-small {
|
||||
font-size: .5em;
|
||||
}
|
||||
html.fs_x-small {
|
||||
font-size: .625em;
|
||||
}
|
||||
html.fs_small {
|
||||
font-size: .75em;
|
||||
}
|
||||
html.fs_normal {
|
||||
font-size: .875em;
|
||||
}
|
||||
html.fs_big {
|
||||
font-size: 1em;
|
||||
}
|
||||
html.fs_huge {
|
||||
font-size: 1.125em;
|
||||
}
|
||||
|
||||
#appMenu {
|
||||
width: 300px;
|
||||
}
|
||||
|
||||
.navbar-dark .navbar-brand:focus {
|
||||
box-shadow: 0 0 0 .25rem rgba(13,110,253,.25);
|
||||
@@ -37,8 +61,10 @@ html {
|
||||
flex: 1 1 auto;
|
||||
}
|
||||
|
||||
#sidebarMenu {
|
||||
width: 0%;
|
||||
#nav-user-btn img {
|
||||
object-fit: contain;
|
||||
height: 2.5rem;
|
||||
width: 2.5rem;
|
||||
}
|
||||
|
||||
.tabulator-row.disabled.tabulator-row-odd .tabulator-cell {
|
||||
@@ -158,4 +184,4 @@ html {
|
||||
|
||||
.tiny-90 div.tox.tox-tinymce {
|
||||
height: 90% !important;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
/* Themable Variables */
|
||||
:root {
|
||||
--svg-icon-apps: var(--fhc-icon-apps, url('data:image/svg+xml,\
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">\
|
||||
<circle cx="15" cy="15" r="15"/>\
|
||||
<circle cx="15" cy="50" r="15"/>\
|
||||
<circle cx="15" cy="85" r="15"/>\
|
||||
<circle cx="50" cy="15" r="15"/>\
|
||||
<circle cx="50" cy="50" r="15"/>\
|
||||
<circle cx="50" cy="85" r="15"/>\
|
||||
<circle cx="85" cy="15" r="15"/>\
|
||||
<circle cx="85" cy="50" r="15"/>\
|
||||
<circle cx="85" cy="85" r="15"/>\
|
||||
</svg>'));
|
||||
}
|
||||
.svg-icon {
|
||||
display: inline-block;
|
||||
width: 1rem;
|
||||
line-height: 1;
|
||||
background-color: currentColor;
|
||||
}
|
||||
.svg-icon:before {
|
||||
content: "\00a0";
|
||||
}
|
||||
.svg-icon.svg-icon-apps {
|
||||
-webkit-mask-image: var(--svg-icon-apps);
|
||||
mask-image: var(--svg-icon-apps);
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
.fhc-app-menu {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding-left: 0;
|
||||
margin: calc(var(--bs-offcanvas-padding-y) * -1) calc(var(--bs-offcanvas-padding-x) * -1);
|
||||
}
|
||||
.fhc-app-menu li {
|
||||
display: block;
|
||||
border: var(--bs-border-width) solid var(--bs-border-color);
|
||||
}
|
||||
.fhc-app-menu li + li {
|
||||
border-top-width: 0;
|
||||
}
|
||||
.fhc-app-menu li a {
|
||||
display: block;
|
||||
padding: .5rem 1rem;
|
||||
text-decoration: none;
|
||||
}
|
||||
.fhc-app-menu li a.disabled {
|
||||
--bs-link-opacity: .5;
|
||||
}
|
||||
.fhc-app-menu li a.active,
|
||||
.fhc-app-menu li a:hover {
|
||||
--bs-link-color-rgb: var(--bs-link-hover-color-rgb);
|
||||
background: var(--surface-hover);
|
||||
}
|
||||
.fhc-app-menu li a.disabled,
|
||||
.fhc-app-menu li a.active {
|
||||
pointer-events: none;
|
||||
}
|
||||
@@ -5690,3 +5690,32 @@
|
||||
outline: 0;
|
||||
box-shadow: 0 0 0 .25rem rgba(13,110,253,.25);
|
||||
}
|
||||
|
||||
/* input-group */
|
||||
/* autocomplete */
|
||||
.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3) > .p-autocomplete-input,
|
||||
.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control > .p-autocomplete-input,
|
||||
.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select > .p-autocomplete-input,
|
||||
.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating) > .p-autocomplete-input,
|
||||
.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3) > .p-autocomplete > .p-autocomplete-input,
|
||||
.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control > .p-autocomplete > .p-autocomplete-input,
|
||||
.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select > .p-autocomplete > .p-autocomplete-input,
|
||||
.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating) > .p-autocomplete > .p-autocomplete-input {
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
}
|
||||
.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) > .p-autocomplete-input,
|
||||
.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) > .p-autocomplete > .p-autocomplete-input {
|
||||
margin-left: calc(var(--bs-border-width) * -1);
|
||||
border-top-left-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
}
|
||||
|
||||
.p-inputtext.is-invalid:enabled:hover {
|
||||
border-color: var(--bs-form-invalid-border-color);
|
||||
}
|
||||
.p-inputtext.is-invalid:enabled:focus,
|
||||
.was-validated .p-inputtext:invalid:focus {
|
||||
border-color: var(--bs-form-invalid-border-color);
|
||||
box-shadow: 0 0 0 .25rem rgba(var(--bs-danger-rgb),.25);
|
||||
}
|
||||
|
||||
+7
-1
@@ -95,6 +95,12 @@
|
||||
|
||||
.modificationdate {
|
||||
font-style: italic;
|
||||
font-size: 0.7em;
|
||||
font-size: 1em;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
|
||||
.copy-btn {
|
||||
float: right;
|
||||
margin-top: 3px;
|
||||
}
|
||||
@@ -62,10 +62,10 @@ export default {
|
||||
url: 'api/frontend/v1/messages/messages/getUid/' + userParams.id + '/' + userParams.type_id
|
||||
};
|
||||
},
|
||||
getVorlagentext(vorlage_kurzbz){
|
||||
getDataVorlage(vorlage_kurzbz){
|
||||
return {
|
||||
method: 'get',
|
||||
url: 'api/frontend/v1/messages/messages/getVorlagentext/' + vorlage_kurzbz
|
||||
url: 'api/frontend/v1/messages/messages/getDataVorlage/' + vorlage_kurzbz
|
||||
};
|
||||
},
|
||||
getNameOfDefaultRecipient(params){
|
||||
|
||||
@@ -34,7 +34,7 @@ export default {
|
||||
url: '/api/frontend/v1/studstatus/leitung/getHistory/' + antrag_id
|
||||
};
|
||||
},
|
||||
getPrestudents(query, signal) {
|
||||
getPrestudents(query) {
|
||||
return {
|
||||
method: 'post',
|
||||
url: '/api/frontend/v1/studstatus/leitung/getPrestudents',
|
||||
|
||||
@@ -86,13 +86,15 @@ export default {
|
||||
getMitarbeiter(searchString) {
|
||||
return {
|
||||
method: 'get',
|
||||
url: 'api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/' + searchString
|
||||
url: 'api/frontend/v1/stv/abschlusspruefung/getMitarbeiter',
|
||||
params: { searchString }
|
||||
};
|
||||
},
|
||||
getPruefer(searchString) {
|
||||
return {
|
||||
method: 'get',
|
||||
url: 'api/frontend/v1/stv/abschlusspruefung/getPruefer/' + searchString
|
||||
url: 'api/frontend/v1/stv/abschlusspruefung/getPruefer',
|
||||
params: { searchString }
|
||||
};
|
||||
},
|
||||
getNoten() {
|
||||
@@ -108,16 +110,11 @@ export default {
|
||||
params: { uids }
|
||||
};
|
||||
},
|
||||
getAllMitarbeiter(){
|
||||
searchPerson(searchString) {
|
||||
return {
|
||||
method: 'get',
|
||||
url: 'api/frontend/v1/stv/abschlusspruefung/getAllMitarbeiter/'
|
||||
url: 'api/frontend/v1/stv/abschlusspruefung/searchPerson/',
|
||||
params: { id }
|
||||
};
|
||||
},
|
||||
getAllPersons(){
|
||||
return {
|
||||
method: 'get',
|
||||
url: 'api/frontend/v1/stv/abschlusspruefung/getAllPersons/'
|
||||
};
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
@@ -16,6 +16,12 @@
|
||||
*/
|
||||
|
||||
export default {
|
||||
configFilter() {
|
||||
return {
|
||||
method: 'get',
|
||||
url: 'api/frontend/v1/stv/config/filter'
|
||||
};
|
||||
},
|
||||
configStudent() {
|
||||
return {
|
||||
method: 'get',
|
||||
|
||||
@@ -39,5 +39,5 @@ export default {
|
||||
url: 'api/frontend/v1/stv/archiv/delete',
|
||||
params: {akte_id, studiengang_kz}
|
||||
};
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
/**
|
||||
* Copyright (C) 2025 fhcomplete.org
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
export default {
|
||||
get() {
|
||||
return {
|
||||
method: 'get',
|
||||
url: 'api/frontend/v1/stv/config/get'
|
||||
};
|
||||
},
|
||||
set(params) {
|
||||
return {
|
||||
method: 'post',
|
||||
url: 'api/frontend/v1/stv/config/set',
|
||||
params
|
||||
};
|
||||
}
|
||||
};
|
||||
@@ -35,4 +35,14 @@ export default {
|
||||
params
|
||||
};
|
||||
},
|
||||
saveStudent(student_uid, studiensemester_kurzbz, params) {
|
||||
return {
|
||||
method: 'post',
|
||||
url: 'api/frontend/v1/stv/student/saveStudent/'
|
||||
+ encodeURIComponent(student_uid)
|
||||
+ '/'
|
||||
+ encodeURIComponent(studiensemester_kurzbz),
|
||||
params
|
||||
};
|
||||
}
|
||||
};
|
||||
@@ -73,4 +73,17 @@ export default {
|
||||
params
|
||||
};
|
||||
},
|
||||
getDocumentDropdown(params){
|
||||
return {
|
||||
method: 'get',
|
||||
url: 'api/frontend/v1/stv/dokumente/getDocumentDropDown/' + params.prestudent_id + '/' + params.studiensemester_kurzbz + '/' + params.studiengang_kz,
|
||||
};
|
||||
},
|
||||
getDocumentDropdownMulti(studentUids, params){
|
||||
return {
|
||||
method: 'get',
|
||||
url: 'api/frontend/v1/stv/dokumente/getDocumentDropDownMulti/' + params.studiensemester_kurzbz + '/' + params.studiengang_kz,
|
||||
params: {studentUids}
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -16,6 +16,27 @@
|
||||
*/
|
||||
|
||||
export default {
|
||||
add(uid, gruppe_kurzbz, studiensemester_kurzbz) {
|
||||
return {
|
||||
method: 'post',
|
||||
url: 'api/frontend/v1/stv/gruppen/add/',
|
||||
params: {
|
||||
uid,
|
||||
gruppe_kurzbz,
|
||||
studiensemester_kurzbz
|
||||
}
|
||||
};
|
||||
},
|
||||
search(query, studiengang_kz) {
|
||||
return {
|
||||
method: 'post',
|
||||
url: 'api/frontend/v1/stv/gruppen/search/',
|
||||
params: {
|
||||
query,
|
||||
studiengang_kz
|
||||
}
|
||||
};
|
||||
},
|
||||
getGruppen(id) {
|
||||
return {
|
||||
method: 'get',
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
/**
|
||||
* Copyright (C) 2025 fhcomplete.org
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
export default {
|
||||
hasOrgforms(studiengang_kz) {
|
||||
return {
|
||||
method: 'get',
|
||||
url: 'api/frontend/v1/stv/lehrverband/hasOrgforms/' + studiengang_kz
|
||||
};
|
||||
},
|
||||
getTree(studiengang_kz) {
|
||||
return {
|
||||
method: 'get',
|
||||
url: 'api/frontend/v1/stv/lehrverband/getTree/' + studiengang_kz
|
||||
};
|
||||
}
|
||||
};
|
||||
@@ -46,6 +46,14 @@ export default {
|
||||
url: url
|
||||
};
|
||||
},
|
||||
search(params, studiensemester_kurzbz) {
|
||||
return {
|
||||
method: 'post',
|
||||
url: 'api/frontend/v1/stv/students/search/'
|
||||
+ encodeURIComponent(studiensemester_kurzbz),
|
||||
params
|
||||
};
|
||||
},
|
||||
verband(relative_path) {
|
||||
return {
|
||||
method: 'get',
|
||||
|
||||
@@ -37,20 +37,20 @@ export default {
|
||||
|
||||
|
||||
/*------------- details -------- */
|
||||
getAll()
|
||||
getBenutzerSearch(query)
|
||||
{
|
||||
return {
|
||||
method: 'get',
|
||||
url: '/api/frontend/v1/lv/gruppe/getAll/'
|
||||
url: `/api/frontend/v1/lv/gruppe/getBenutzerSearch?query=${encodeURIComponent(query)}`
|
||||
};
|
||||
},
|
||||
|
||||
getBenutzer()
|
||||
getAllSearch(query)
|
||||
{
|
||||
return {
|
||||
method: 'get',
|
||||
url: '/api/frontend/v1/lv/gruppe/getBenutzer/'
|
||||
url: `/api/frontend/v1/lv/gruppe/getAllSearch?query=${encodeURIComponent(query)}`
|
||||
};
|
||||
}
|
||||
},
|
||||
|
||||
}
|
||||
|
||||
@@ -8,12 +8,11 @@ export default {
|
||||
};
|
||||
},
|
||||
|
||||
|
||||
getLektoren()
|
||||
getLektorenSearch(query)
|
||||
{
|
||||
return {
|
||||
method: 'get',
|
||||
url: '/api/frontend/v1/lv/lektor/getLektoren/'
|
||||
url: `/api/frontend/v1/lv/lektor/getLektorenSearch?query=${encodeURIComponent(query)}`
|
||||
};
|
||||
},
|
||||
|
||||
|
||||
@@ -20,8 +20,8 @@ export default {
|
||||
getUid(params){
|
||||
return this.$fhcApi.get('api/frontend/v1/messages/messages/getUid/'+ params.id + '/' + params.type_id);
|
||||
},
|
||||
getVorlagentext(vorlage_kurzbz){
|
||||
return this.$fhcApi.get('api/frontend/v1/messages/messages/getVorlagentext/' + vorlage_kurzbz);
|
||||
getDataVorlage(vorlage_kurzbz){
|
||||
return this.$fhcApi.get('api/frontend/v1/messages/messages/getDataVorlage/' + vorlage_kurzbz);
|
||||
},
|
||||
getNameOfDefaultRecipient(params){
|
||||
return this.$fhcApi.get('api/frontend/v1/messages/messages/getNameOfDefaultRecipient/' + params.id + '/' + params.type_id);
|
||||
|
||||
@@ -19,6 +19,7 @@ import Studium from "../../components/Cis/Studium/Studium.js";
|
||||
|
||||
import ApiRenderers from '../../api/factory/renderers.js';
|
||||
import ApiRouteInfo from '../../api/factory/routeinfo.js';
|
||||
import {capitalize} from "../../helpers/StringHelpers.js";
|
||||
|
||||
const ciPath = FHC_JS_DATA_STORAGE_OBJECT.app_root.replace(/(https:|)(^|\/\/)(.*?\/)/g, '') + FHC_JS_DATA_STORAGE_OBJECT.ci_router;
|
||||
|
||||
@@ -320,7 +321,7 @@ const app = Vue.createApp({
|
||||
|
||||
// kind of a bandaid for bad css on some pages to avoid horizontal scroll
|
||||
setScrollbarWidth();
|
||||
|
||||
app.config.globalProperties.$capitalize = capitalize;
|
||||
app.use(router);
|
||||
app.use(primevue.config.default, {
|
||||
zIndex: {
|
||||
|
||||
@@ -148,6 +148,44 @@ const router = VueRouter.createRouter({
|
||||
next();
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'search',
|
||||
path: `/${ciPath}/studentenverwaltung/:studiensemester_kurzbz/search/:searchstr`,
|
||||
component: FhcStudentenverwaltung,
|
||||
props(route) {
|
||||
return {
|
||||
url_studiensemester_kurzbz: route.params.studiensemester_kurzbz,
|
||||
url_mode: 'search',
|
||||
url_prestudent_id: route.params.searchstr
|
||||
};
|
||||
},
|
||||
beforeEnter(to, from, next) {
|
||||
const isSemester = /^[WS]S\d{4}$/.test(to.params.studiensemester_kurzbz);
|
||||
if (!isSemester) {
|
||||
return next({name: 'index'});
|
||||
}
|
||||
next();
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'search_w_types',
|
||||
path: `/${ciPath}/studentenverwaltung/:studiensemester_kurzbz/search/:types/:searchstr`,
|
||||
component: FhcStudentenverwaltung,
|
||||
props(route) {
|
||||
return {
|
||||
url_studiensemester_kurzbz: route.params.studiensemester_kurzbz,
|
||||
url_mode: 'search',
|
||||
url_prestudent_id: route.params.type + '/' + route.params.searchstr
|
||||
};
|
||||
},
|
||||
beforeEnter(to, from, next) {
|
||||
const isSemester = /^[WS]S\d{4}$/.test(to.params.studiensemester_kurzbz);
|
||||
if (!isSemester) {
|
||||
return next({name: 'index'});
|
||||
}
|
||||
next();
|
||||
}
|
||||
},
|
||||
{
|
||||
path: '/:pathMatch(.*)*',
|
||||
redirect: {
|
||||
|
||||
@@ -0,0 +1,135 @@
|
||||
/**
|
||||
* Copyright (C) 2025 fhcomplete.org
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import BsModal from "./Bootstrap/Modal.js";
|
||||
import FhcForm from "./Form/Form.js";
|
||||
import FormInput from "./Form/Input.js";
|
||||
|
||||
|
||||
export default {
|
||||
name: 'AppConfig',
|
||||
components: {
|
||||
BsModal,
|
||||
FhcForm,
|
||||
FormInput
|
||||
},
|
||||
emits: [
|
||||
'update:modelValue'
|
||||
],
|
||||
props: {
|
||||
modelValue: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
endpoints: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
setup: {},
|
||||
tempValues: {}
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
'$p.user_language.value'(n, o) {
|
||||
if (n !== o && o !== undefined && Object.keys(this.setup).length) {
|
||||
this.$api
|
||||
.call(this.endpoints.get())
|
||||
.then(res => {
|
||||
this.setup = {};
|
||||
Object.keys(res.data).forEach(key => {
|
||||
const binding = { ...res.data[key] };
|
||||
delete binding.value;
|
||||
delete binding.options;
|
||||
const options = res.data[key].options;
|
||||
this.setup[key] = {
|
||||
binding,
|
||||
options
|
||||
};
|
||||
});
|
||||
})
|
||||
.catch(this.$fhcAlert.handleSystemErrors);
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
methods: {
|
||||
update() {
|
||||
this.$refs.form
|
||||
.call(this.endpoints.set(this.tempValues))
|
||||
.then(() => {
|
||||
this.$emit('update:modelValue', { ...this.tempValues });
|
||||
this.$refs.modal.hide();
|
||||
this.$fhcAlert.alertSuccess(this.$p.t('ui/settings_saved'));
|
||||
})
|
||||
.catch(this.$fhcAlert.handleSystemErrors);
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.$api
|
||||
.call(this.endpoints.get())
|
||||
.then(res => {
|
||||
Object.keys(res.data).forEach(key => {
|
||||
const binding = { ...res.data[key] };
|
||||
delete binding.value;
|
||||
delete binding.options;
|
||||
const options = res.data[key].options;
|
||||
this.tempValues[key] = res.data[key].value;
|
||||
this.setup[key] = {
|
||||
binding,
|
||||
options
|
||||
};
|
||||
});
|
||||
this.$emit('update:modelValue', { ...this.tempValues });
|
||||
})
|
||||
.catch(this.$fhcAlert.handleSystemErrors);
|
||||
},
|
||||
template: /* html */`
|
||||
<fhc-form class="stv-config" ref="form" @submit.prevent="update">
|
||||
<bs-modal
|
||||
ref="modal"
|
||||
class="fade"
|
||||
id="configModal"
|
||||
dialog-class="modal-lg"
|
||||
@hidden-bs-modal="tempValues = { ...modelValue }"
|
||||
>
|
||||
<template #title>{{ $p.t('ui/settings') }}</template>
|
||||
<template #default>
|
||||
<div class="d-flex flex-column gap-5">
|
||||
<form-input
|
||||
v-for="(value, key) in setup"
|
||||
v-model="tempValues[key]"
|
||||
v-bind="value.binding"
|
||||
>
|
||||
<option
|
||||
v-for="(label, val) in value.options"
|
||||
:key="val"
|
||||
:value="val"
|
||||
>{{ label }}</option>
|
||||
</form-input>
|
||||
</div>
|
||||
</template>
|
||||
<template #footer>
|
||||
<button class="btn btn-primary" type="submit">
|
||||
{{ $p.t('ui/speichern') }}
|
||||
</button>
|
||||
</template>
|
||||
</bs-modal>
|
||||
</fhc-form>`
|
||||
};
|
||||
@@ -0,0 +1,69 @@
|
||||
/**
|
||||
* Copyright (C) 2025 fhcomplete.org
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import ApiNavigation from '../api/factory/navigation.js';
|
||||
|
||||
export default {
|
||||
name: 'AppMenu',
|
||||
props: {
|
||||
appIdentifier: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
navigationPage: {
|
||||
type: String,
|
||||
default: 'apps'
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
items: []
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
navigationPage() {
|
||||
this.getItems();
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getItems() {
|
||||
this.$api
|
||||
.call(ApiNavigation.getMenu(this.navigationPage))
|
||||
.then(result => {
|
||||
this.items = result.data;
|
||||
})
|
||||
.catch(this.$fhcAlert.handleSystemError);
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getItems();
|
||||
},
|
||||
template: /* html */`
|
||||
<ul class="fhc-app-menu">
|
||||
<li v-for="(menu, key) in items" :key="key">
|
||||
<a
|
||||
:href="menu.link"
|
||||
@click="menu.onClickCall"
|
||||
:class="{ active: key === appIdentifier }"
|
||||
>
|
||||
<i v-if="menu.icon" class="fa fa-fw" :class="'fa-'+ menu.icon" />
|
||||
{{ menu.description }}
|
||||
</a>
|
||||
</li>
|
||||
<slot />
|
||||
</ul>`
|
||||
};
|
||||
@@ -96,8 +96,11 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
onDragstart(evt) {
|
||||
DragAndDrop.setTransferData(evt.detail.originalEvent, evt.detail.item.orig);
|
||||
this.draggedInternalEvent = evt.detail.item;
|
||||
const data = DragAndDrop.convertToTransferData(evt.detail.item.orig);
|
||||
if (DragAndDrop.isValidDragObject(data)) {
|
||||
DragAndDrop.setTransferData(evt.detail.originalEvent, data);
|
||||
this.draggedInternalEvent = evt.detail.item;
|
||||
}
|
||||
},
|
||||
onDragend() {
|
||||
this.draggedInternalEvent = null;
|
||||
|
||||
@@ -316,7 +316,7 @@ export default {
|
||||
template: /* html */`
|
||||
<div
|
||||
class="fhc-calendar-base-grid"
|
||||
style="display:grid;width:100%;height:100%"
|
||||
style="display:grid;width:100%;height:100%;overflow:auto"
|
||||
:style="'grid-template-' + axisRow + 's:auto' + (allDayEvents ? ' auto ' : ' ') + '1fr;grid-template-' + axisCol + 's:auto ' + styleGridCols"
|
||||
>
|
||||
<div
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user