mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-01 12:19:28 +00:00
Merge branch 'master' into epic-56039/LV-Evaluierung
# Conflicts: # system/dbupdate_3.4.php # system/phrasesupdate.php
This commit is contained in:
@@ -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']
|
||||
]);
|
||||
|
||||
|
||||
@@ -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,14 +722,13 @@ 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);
|
||||
if(isError($profilUpdateFileDelete)){
|
||||
@@ -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'));
|
||||
}
|
||||
|
||||
@@ -0,0 +1,86 @@
|
||||
<?php
|
||||
|
||||
if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
class MeldezettelJob extends JOB_Controller
|
||||
{
|
||||
const INSERT_VON = 'meldezetteljob';
|
||||
const DOKUMENT_KURZBZ = 'Meldezet';
|
||||
|
||||
private $_ci; // Code igniter instance
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
$this->_ci =& get_instance();
|
||||
|
||||
$this->_ci->load->model('crm/Dokumentprestudent_model', 'DokumentprestudentModel');
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets Meldezettel to "accepted" for all students with Meldeadresse.
|
||||
*/
|
||||
public function acceptMeldezettel()
|
||||
{
|
||||
$this->logInfo('Start Meldezettel Job');
|
||||
|
||||
$params = array(self::DOKUMENT_KURZBZ);
|
||||
|
||||
$qry = "
|
||||
-- get all prestudents with meldeadresse, but no accepted Meldezettel
|
||||
SELECT
|
||||
DISTINCT prestudent_id
|
||||
FROM
|
||||
public.tbl_adresse
|
||||
JOIN public.tbl_person USING (person_id)
|
||||
JOIN public.tbl_prestudent ps USING (person_id)
|
||||
WHERE
|
||||
typ = 'm'
|
||||
AND NOT EXISTS (
|
||||
SELECT
|
||||
1
|
||||
FROM
|
||||
public.tbl_dokumentprestudent
|
||||
WHERE
|
||||
prestudent_id = ps.prestudent_id
|
||||
AND dokument_kurzbz = ?
|
||||
)";
|
||||
|
||||
// get all prestudents with Meldeadresse and no accpeted Meldezettel
|
||||
$result = $this->_ci->DokumentprestudentModel->execReadOnlyQuery($qry, $params);
|
||||
|
||||
if (isError($result))
|
||||
{
|
||||
$this->logError(getError($result));
|
||||
}
|
||||
|
||||
$count = 0;
|
||||
|
||||
if (hasData($result))
|
||||
{
|
||||
$prestudents = getData($result);
|
||||
|
||||
foreach ($prestudents as $prestudent)
|
||||
{
|
||||
// set Meldezettel to accepted
|
||||
$result = $this->_ci->DokumentprestudentModel->insert(
|
||||
array(
|
||||
'prestudent_id' => $prestudent->prestudent_id,
|
||||
'dokument_kurzbz' => self::DOKUMENT_KURZBZ,
|
||||
'datum' => date('Y-m-d'),
|
||||
'insertamum' => strftime('%Y-%m-%d %H:%M'),
|
||||
'insertvon' => self::INSERT_VON
|
||||
)
|
||||
);
|
||||
|
||||
if (isError($result))
|
||||
$this->logError(getError($result));
|
||||
else
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
|
||||
$this->logInfo('End Meldezettel Job', array('Number of changes ' => $count));
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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");
|
||||
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
class Kontaktverifikation_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'public.tbl_kontakt_verifikation';
|
||||
$this->pk = 'kontakt_verifikation_id';
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets contact verification for a person and a verification code
|
||||
* @param person_id
|
||||
* @param kontakttyp
|
||||
* @param verifikation_code
|
||||
* @param expiration_days number of days after which verifikation code expires
|
||||
* @return object success or error
|
||||
*/
|
||||
public function getKontaktVerifikation($person_id, $kontakttyp, $verifikation_code, $expiration_days = 1)
|
||||
{
|
||||
$qry = "
|
||||
SELECT
|
||||
kt.kontakt_id,
|
||||
kv.verifikation_code
|
||||
FROM
|
||||
public.tbl_kontakt_verifikation kv
|
||||
JOIN public.tbl_kontakt kt USING(kontakt_id)
|
||||
WHERE kt.person_id = ?
|
||||
AND kt.kontakttyp = ?
|
||||
AND kv.verifikation_code = ?
|
||||
AND kv.erstelldatum >= NOW() - INTERVAL '".$this->escape($expiration_days)." days'
|
||||
ORDER BY
|
||||
kt.kontakt_id DESC
|
||||
LIMIT 1";
|
||||
|
||||
return $this->execQuery($qry, array($person_id, $kontakttyp, $verifikation_code));
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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'
|
||||
),
|
||||
|
||||
@@ -182,7 +182,7 @@
|
||||
</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 ?>"
|
||||
<a href="<?php echo CIS_ROOT.'addons/bewerbung/cis/registration.php?code='.html_escape($stammdaten->zugangscode).'&emailAdresse='.$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,20 +101,58 @@ 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($lvregelExists)
|
||||
{
|
||||
if($lvregel->isAbgeschlossen($uid, $kompatible_lv))
|
||||
$abgeschlossen=true;
|
||||
else
|
||||
$abgeschlossen=false;
|
||||
}
|
||||
|
||||
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 (!(($lvregelExists && !$abgeschlossen) || $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 +214,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 +403,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 +683,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);
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -888,9 +888,10 @@ class dokument extends basis_db
|
||||
* Akzeptiert ein bestimmtes Dokument
|
||||
* @param char $dokument_kurzbz Bezeichner Dokument.
|
||||
* @param int $person_id Personenkennzeichen.
|
||||
* @param array $studiengang_typen einschränken nach Studiengang Typ.
|
||||
* @return boolean true wenn akzeptiert bzw geprüft ohne Akzeptieren, false wenn Fehler
|
||||
*/
|
||||
public function akzeptiereDokument($dokument_kurzbz, $person_id)
|
||||
public function akzeptiereDokument($dokument_kurzbz, $person_id, $studiengang_typen = null)
|
||||
{
|
||||
$db = new basis_db();
|
||||
$arrayDoksZuAkzeptieren = array();
|
||||
@@ -902,7 +903,6 @@ class dokument extends basis_db
|
||||
tbl_prestudent ps, tbl_studiengang sg
|
||||
WHERE
|
||||
ps.studiengang_kz = sg.studiengang_kz
|
||||
AND sg.typ = 'm'
|
||||
AND person_id = ".$this->db_add_param($person_id)."
|
||||
AND not exists(
|
||||
SELECT *
|
||||
@@ -910,6 +910,11 @@ class dokument extends basis_db
|
||||
where dok.prestudent_id = ps.prestudent_id
|
||||
and dokument_kurzbz = ".$this->db_add_param($dokument_kurzbz).")";
|
||||
|
||||
if (isset($studiengang_typen) && is_array($studiengang_typen) && !empty($studiengang_typen))
|
||||
{
|
||||
$qry .= ' AND sg.typ IN ('. $db->db_implode4SQL($studiengang_typen).')';
|
||||
}
|
||||
|
||||
//gibt ein Array von zu akzeptierenden Dokumenten zurück
|
||||
if ($db->db_query($qry))
|
||||
{
|
||||
@@ -923,11 +928,14 @@ class dokument extends basis_db
|
||||
}
|
||||
|
||||
//für alle prestudent_ids das Dokument akzeptieren
|
||||
$qry = "INSERT INTO public.tbl_dokumentprestudent(dokument_kurzbz, prestudent_id) VALUES";
|
||||
$qry = "INSERT INTO public.tbl_dokumentprestudent(dokument_kurzbz, prestudent_id, datum, insertamum) VALUES";
|
||||
|
||||
foreach ($arrayDoksZuAkzeptieren as $prestudent_id)
|
||||
{
|
||||
$qry .= "(".$this->db_add_param($dokument_kurzbz). ",". $prestudent_id. ")";
|
||||
$qry .= "(".$this->db_add_param($dokument_kurzbz).
|
||||
",".$this->db_add_param($prestudent_id, FHC_INTEGER).
|
||||
",".$this->db_add_param(date('Y-m-d')).
|
||||
",".$this->db_add_param(strftime('%Y-%m-%d %H:%M')). ")";
|
||||
|
||||
if (next($arrayDoksZuAkzeptieren) == true)
|
||||
{
|
||||
|
||||
@@ -2883,5 +2883,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;
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -328,7 +328,7 @@ export default {
|
||||
},
|
||||
template: /*html*/ `
|
||||
<div class="container-fluid text-break fhc-form" >
|
||||
<edit-profil v-if="showModal" ref="editModal" @hideBsModal="hideEditProfilModal" :value="JSON.parse(JSON.stringify(filteredEditData))" :titel="$p.t('profil','profilBearbeiten')"></edit-profil>
|
||||
<edit-profil v-if="showModal" ref="editModal" :isMitarbeiter="true" @hideBsModal="hideEditProfilModal" :value="JSON.parse(JSON.stringify(filteredEditData))" :titel="$p.t('profil','profilBearbeiten')"></edit-profil>
|
||||
<div class="row">
|
||||
<div class="d-md-none col-12 ">
|
||||
<!--TODO: uncomment when implemented
|
||||
|
||||
@@ -120,10 +120,10 @@ export const Profil = {
|
||||
},
|
||||
sortProfilUpdates: (ele1, ele2) => {
|
||||
let result = 0;
|
||||
if (ele1.status === "pending") {
|
||||
if (ele1.status.toLowerCase() === "pending") {
|
||||
result = -1;
|
||||
} else if (ele1.status === "accepted") {
|
||||
result = ele2.status === "rejected" ? -1 : 1;
|
||||
} else if (ele1.status.toLowerCase() === "accepted") {
|
||||
result = ele2.status.toLowerCase() === "rejected" ? -1 : 1;
|
||||
} else {
|
||||
result = 1;
|
||||
}
|
||||
@@ -226,10 +226,13 @@ export const Profil = {
|
||||
kontakteArray = kontakteArray.concat(
|
||||
this.data.profilUpdates
|
||||
.filter((update) => {
|
||||
return update.requested_change.zustellung;
|
||||
return update.status === 'Pending' && update.requested_change.zustellung;
|
||||
})
|
||||
.map((kontant) => {
|
||||
return kontant.requested_change.kontakt_id;
|
||||
return {
|
||||
kontakt_id: kontant.requested_change.kontakt_id,
|
||||
kontakttyp: kontant.requested_change.kontakttyp
|
||||
};
|
||||
})
|
||||
);
|
||||
}
|
||||
@@ -241,7 +244,7 @@ export const Profil = {
|
||||
.every((kontakt) =>
|
||||
this.data.profilUpdates.some(
|
||||
(update) =>
|
||||
update.requested_change.kontakt_id == kontakt.kontakt_id
|
||||
update.status === 'Pending' && update.requested_change.kontakt_id == kontakt.kontakt_id
|
||||
)
|
||||
)
|
||||
) {
|
||||
@@ -251,7 +254,10 @@ export const Profil = {
|
||||
return kontakt.zustellung;
|
||||
})
|
||||
.map((kon) => {
|
||||
return kon.kontakt_id;
|
||||
return {
|
||||
kontakt_id: kon.kontakt_id,
|
||||
kontakttyp: kon.kontakttyp
|
||||
};
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ export default {
|
||||
view:String,
|
||||
withZustelladresse:{
|
||||
type:Boolean,
|
||||
default:false,
|
||||
default:true,
|
||||
},
|
||||
},
|
||||
data(){
|
||||
|
||||
@@ -14,6 +14,10 @@ export default {
|
||||
},
|
||||
mixins: [BsModal],
|
||||
props: {
|
||||
isMitarbeiter: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
value: Object,
|
||||
titel: String,
|
||||
zustelladressenCount: Function,
|
||||
@@ -47,6 +51,7 @@ export default {
|
||||
provide() {
|
||||
return {
|
||||
updateFileID: this.updateFileIDFunction,
|
||||
isMitarbeiter: this.isMitarbeiter
|
||||
};
|
||||
},
|
||||
|
||||
|
||||
@@ -10,17 +10,13 @@ export default {
|
||||
|
||||
props: {
|
||||
data: Object,
|
||||
isMitarbeiter: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
files: {
|
||||
type: Array,
|
||||
default: []
|
||||
},
|
||||
},
|
||||
|
||||
inject: ["getZustelladressenCount", "updateFileID"],
|
||||
inject: ["getZustelladressenCount", "updateFileID", "isMitarbeiter"],
|
||||
|
||||
data() {
|
||||
return {
|
||||
@@ -164,10 +160,8 @@ export default {
|
||||
<div class="gy-3 row justify-content-center align-items-center">
|
||||
<!-- warning message for too many zustellungs Adressen -->
|
||||
<div v-if="showZustellAdressenWarning" class="col-12 ">
|
||||
<div class="card bg-danger mx-2">
|
||||
<div class="card-body text-white ">
|
||||
<div class="alert alert-warning mx-2">
|
||||
<span>{{$p.t('profilUpdate','zustell_adressen_warning')}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- End of warning -->
|
||||
@@ -177,7 +171,7 @@ export default {
|
||||
<div class="form-check mb-2">
|
||||
<input class="form-check-input" type="checkbox" @change="updateValue($event,'zustelladresse')" :checked="data.zustelladresse" id="flexCheckDefault">
|
||||
<label class="form-check-label" for="flexCheckDefault">
|
||||
{{$p.t('person','zustelladresse')}}
|
||||
{{$p.t('person','zustelladresse')}} {{$p.t('profilUpdate','infoZustelladresse')}}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -31,11 +31,14 @@ export default {
|
||||
if (JSON.parse(this.originalValue).zustellung) {
|
||||
return false;
|
||||
}
|
||||
const kontakteOfSelectedType = this.zustellKontakteCount.filter((element) => {
|
||||
return element.kontakttyp === this.data?.kontakttyp
|
||||
});
|
||||
// if zustellKontakteCount is not 0 and the own kontakt has the flag zustellung set to true
|
||||
if (!this.zustellKontakteCount.includes(this.data.kontakt_id)) {
|
||||
return this.data.zustellung && this.zustellKontakteCount.length;
|
||||
if (!this.zustellKontakteCount.some((element) => element.kontakt_id === this.data.kontakt_id)) {
|
||||
return this.data.zustellung && kontakteOfSelectedType.length;
|
||||
}
|
||||
return this.zustellKontakteCount.length >= 2 && this.data.zustellung;
|
||||
return this.kontakteOfSelectedType.length >= 2 && this.data.zustellung;
|
||||
},
|
||||
isChanged: function () {
|
||||
//? returns true if the original passed data object was changed
|
||||
@@ -57,16 +60,6 @@ export default {
|
||||
|
||||
<div class="gy-3 row align-items-center justify-content-center">
|
||||
|
||||
<!-- warning message for too many zustellungs Kontakte -->
|
||||
<div v-if="showZustellKontakteWarning" class="col-12 ">
|
||||
<div class="card bg-danger mx-2">
|
||||
<div class="card-body text-white ">
|
||||
<span>{{$p.t('profilUpdate','zustell_kontakte_warning')}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- End of warning -->
|
||||
|
||||
<div v-if="!data.kontakt_id" class="col-12">
|
||||
|
||||
|
||||
@@ -108,6 +101,14 @@ export default {
|
||||
|
||||
</div>
|
||||
|
||||
<!-- warning message for too many zustellungs Kontakte -->
|
||||
<div v-if="showZustellKontakteWarning" class="col-12 ">
|
||||
<div class="alert alert-warning mx-2">
|
||||
<span>{{$p.t('profilUpdate','zustell_kontakte_warning')}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- End of warning -->
|
||||
|
||||
<div class="d-flex flex-row justify-content-start col-12 allign-middle">
|
||||
<span style="opacity: 0.65; font-size: .85rem; " class="px-2">{{$p.t('profilUpdate','zustellungsKontakt')}}</span>
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ import Status from "./EditProfilComponents/Status.js";
|
||||
import TextInputDokument from "./EditProfilComponents/TextInputDokument.js";
|
||||
|
||||
export default {
|
||||
name: 'EditProfilSelect',
|
||||
components: {
|
||||
Kontakt,
|
||||
EditKontakt,
|
||||
@@ -14,7 +15,7 @@ export default {
|
||||
Status,
|
||||
TextInputDokument,
|
||||
},
|
||||
inject: ["profilUpdateTopic"],
|
||||
inject: ["profilUpdateTopic", "isMitarbeiter"],
|
||||
props: {
|
||||
list: Object,
|
||||
|
||||
@@ -148,15 +149,31 @@ export default {
|
||||
<div class="list-group">
|
||||
<template v-for="item in data">
|
||||
<div class="d-flex flex-row align-items-center">
|
||||
<button style="position:relative" type="button" class=" list-group-item list-group-item-action" @click="updateOptions($event,item)" >
|
||||
<button
|
||||
style="position:relative"
|
||||
type="button" class="list-group-item list-group-item-action"
|
||||
@click="updateOptions($event,item)"
|
||||
:disabled="(this.isMitarbeiter === false && item.listview === 'Adresse' && item.data.heimatadresse === true)"
|
||||
>
|
||||
<!-- render title of options -->
|
||||
<p v-if="item.title" class="my-1" >{{item.title}}</p>
|
||||
<!-- else render list view of items -->
|
||||
<div v-else class="my-2 me-4" >
|
||||
<component :is="item.listview" v-bind="item"></component>
|
||||
<div
|
||||
v-if="(this.isMitarbeiter === false && item.listview === 'Adresse' && item.data.heimatadresse === true)"
|
||||
class="gy-2 row justify-content-center align-items-center"
|
||||
>
|
||||
<div class="col-1"> </div>
|
||||
<div class="col-11">
|
||||
<div class="alert alert-info mt-4" role="alert">
|
||||
{{ $p.t('profilUpdate','infoHeimatadresse') }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</button>
|
||||
<button v-if="item.listview" @click="deleteItem(item)" type="button" class="mx-3 btn btn-danger btn-circle" :aria-label="$p.t('profilUpdate','deleteItem')" :title="$p.t('profilUpdate','deleteItem')" ><i class="fa fa-trash" aria-hide="true"></i></button>
|
||||
<button v-if="item.listview" :disabled="(this.isMitarbeiter === false && item.listview === 'Adresse' && item.data.heimatadresse === true)" @click="deleteItem(item)" type="button" class="mx-3 btn btn-danger btn-circle" :aria-label="$p.t('profilUpdate','deleteItem')" :title="$p.t('profilUpdate','deleteItem')" ><i class="fa fa-trash" aria-hide="true"></i></button>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
|
||||
@@ -113,7 +113,17 @@ export default {
|
||||
},
|
||||
template: /*html*/ `
|
||||
|
||||
<bs-modal v-show="!loading" ref="modalContainer" v-bind="$props" body-class="" dialog-class="modal-lg" class="bootstrap-alert" :backdrop="false" >
|
||||
<bs-modal
|
||||
v-show="!loading"
|
||||
ref="modalContainer"
|
||||
v-bind="$props"
|
||||
header-class="bg-light"
|
||||
footer-class="bg-light"
|
||||
body-class=""
|
||||
dialog-class="modal-lg"
|
||||
class="bootstrap-alert"
|
||||
:backdrop="false"
|
||||
>
|
||||
|
||||
<template v-slot:title>
|
||||
{{title}}
|
||||
@@ -210,8 +220,8 @@ export default {
|
||||
|
||||
|
||||
<template v-if="data.status === profilUpdateStates['Pending']" v-slot:footer>
|
||||
<div class="form-underline flex-fill">
|
||||
<div class="form-underline-titel">{{$p.t('global','nachricht')}}</div>
|
||||
<div class="flex-fill">
|
||||
<div>{{$p.t('global','nachricht')}}</div>
|
||||
|
||||
<div class="d-flex flex-row gap-2">
|
||||
<input class="form-control " v-model="data.status_message" />
|
||||
|
||||
@@ -4,6 +4,7 @@ import Alert from "../../../components/Bootstrap/Alert.js";
|
||||
import Loading from "../../../components/Loader.js";
|
||||
|
||||
import ApiProfilUpdate from '../../../api/factory/profilUpdate.js';
|
||||
import { dateFilter } from '../../../tabulator/filters/Dates.js';
|
||||
|
||||
const sortProfilUpdates = (ele1, ele2, thisPointer) => {
|
||||
let result = 0;
|
||||
@@ -184,13 +185,13 @@ export default {
|
||||
},
|
||||
|
||||
height: 600,
|
||||
layout: "fitColumns",
|
||||
layout: "fitDataStretchFrozen",
|
||||
|
||||
columns: [
|
||||
{
|
||||
title: this.$p.t("profilUpdate", "UID"),
|
||||
field: "uid",
|
||||
minWidth: 200,
|
||||
minWidth: 100,
|
||||
resizable: true,
|
||||
headerFilter: true,
|
||||
//responsive:0,
|
||||
@@ -203,27 +204,59 @@ export default {
|
||||
headerFilter: true,
|
||||
//responsive:0,
|
||||
},
|
||||
{
|
||||
title: this.$p.t("lehre", "studiengang") + ' (' + this.$p.t("profil", "studentIn") + ')',
|
||||
field: "studiengang",
|
||||
minWidth: 50,
|
||||
resizable: true,
|
||||
headerFilter: "list",
|
||||
headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"},
|
||||
//responsive:0,
|
||||
},
|
||||
{
|
||||
title: this.$p.t("lehre", "organisationsform") + ' (' + this.$p.t("profil", "studentIn") + ')',
|
||||
field: "orgform",
|
||||
minWidth: 50,
|
||||
resizable: true,
|
||||
headerFilter: "list",
|
||||
headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"},
|
||||
//responsive:0,
|
||||
},
|
||||
{
|
||||
title: this.$p.t("lehre", "organisationseinheit") + ' (' + this.$p.t("profil", "mitarbeiterIn") + ')',
|
||||
field: "oezuordnung",
|
||||
minWidth: 200,
|
||||
resizable: true,
|
||||
headerFilter: "list",
|
||||
headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"},
|
||||
//responsive:0,
|
||||
},
|
||||
{
|
||||
title: this.$p.t("profilUpdate", "Topic"),
|
||||
field: "topic",
|
||||
resizable: true,
|
||||
minWidth: 200,
|
||||
headerFilter: true,
|
||||
headerFilter: "list",
|
||||
headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"},
|
||||
//responsive:0,
|
||||
},
|
||||
{
|
||||
title: this.$p.t("profilUpdate", "insertamum"),
|
||||
field: "insertamum",
|
||||
field: "insertamum_iso",
|
||||
resizable: true,
|
||||
headerFilter: true,
|
||||
headerFilterFunc: 'dates',
|
||||
headerFilter: dateFilter,
|
||||
minWidth: 200,
|
||||
formatter:"datetime",
|
||||
formatterParams: this.datetimeFormatterParams(),
|
||||
//responsive:0,
|
||||
},
|
||||
{
|
||||
title: this.$p.t("profilUpdate", "Status"),
|
||||
field: "status_translated",
|
||||
hozAlign: "center",
|
||||
headerFilter: true,
|
||||
headerFilter: "list",
|
||||
headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"},
|
||||
formatter: (cell, para) => {
|
||||
let iconClasses = "";
|
||||
let status = cell.getRow().getData().status;
|
||||
@@ -248,20 +281,11 @@ export default {
|
||||
{
|
||||
title: this.$p.t("profilUpdate", "actions"),
|
||||
headerSort: false,
|
||||
frozen: true,
|
||||
formatter: (cell, params) => {
|
||||
let STATUS_PENDING =
|
||||
cell.getRow().getData().status ==
|
||||
this.profilUpdateStates["Pending"];
|
||||
|
||||
let details = this.$p.t('global', 'details');
|
||||
let html = `<div class="d-flex justify-content-evenly align-items-center">
|
||||
<button class="btn border-primary border-2" id="showButton"><i class="fa-solid fa-eye fhc-primary-color"></i></button>
|
||||
${
|
||||
STATUS_PENDING ?
|
||||
`<button class="btn border-success border-2" id="acceptButton"><i class='fa fa-lg fa-circle-check text-success'></i></button>
|
||||
<button class="btn border-danger border-2" id="denyButton"><i class=' fa fa-lg fa-circle-xmark text-danger'></i></button>`
|
||||
:
|
||||
``
|
||||
}
|
||||
<button class="btn btn-secondary" id="showButton">${details}</button>
|
||||
</div>`;
|
||||
|
||||
// Convert the HTML string to an HTML node
|
||||
@@ -276,19 +300,6 @@ export default {
|
||||
this.showAcceptDenyModal(cell.getRow().getData());
|
||||
});
|
||||
|
||||
if (STATUS_PENDING) {
|
||||
node
|
||||
.querySelector("#acceptButton")
|
||||
.addEventListener("click", () => {
|
||||
this.acceptProfilUpdate(cell.getRow().getData());
|
||||
});
|
||||
node
|
||||
.querySelector("#denyButton")
|
||||
.addEventListener("click", () => {
|
||||
this.denyProfilUpdate(cell.getRow().getData());
|
||||
});
|
||||
}
|
||||
|
||||
return node;
|
||||
},
|
||||
minWidth: 200,
|
||||
@@ -370,6 +381,15 @@ export default {
|
||||
this.showAcceptDenyModal(arrayRowData[0]);
|
||||
}
|
||||
}
|
||||
},
|
||||
datetimeFormatterParams: function() {
|
||||
const params = {
|
||||
inputFormat:"yyyy-MM-dd",
|
||||
outputFormat:"dd.MM.yyyy",
|
||||
invalidPlaceholder:"(invalid date)",
|
||||
timezone:FHC_JS_DATA_STORAGE_OBJECT.timezone
|
||||
};
|
||||
return params;
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
@@ -382,7 +402,7 @@ export default {
|
||||
},
|
||||
},
|
||||
created() {
|
||||
this.$p.loadCategory("profilUpdate").then(() => {
|
||||
this.$p.loadCategory(["profilUpdate", "lehre", "profil", "global"]).then(() => {
|
||||
this.categoryLoaded = true;
|
||||
});
|
||||
},
|
||||
|
||||
@@ -186,7 +186,7 @@ export default {
|
||||
<label>{{$p.t('global', 'zugangscode')}}</label>
|
||||
<div class="align-self-center">
|
||||
<span class="form-text">
|
||||
<a :href="cisRoot + 'addons/bewerbung/cis/registration.php?code=' + data.zugangscode + '&emailAdresse=' + data.email_privat" target="_blank">{{data.zugangscode}}</a>
|
||||
<a :href="cisRoot + 'addons/bewerbung/cis/registration.php?code=' + data.zugangscode + '&emailAdresse=' + data.email_privat + '&keepEmailUnverified=true'" target="_blank">{{data.zugangscode}}</a>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -10,8 +10,6 @@ export default {
|
||||
if (!app.config.globalProperties.$fhcAlert)
|
||||
app.use(FhcAlert);
|
||||
|
||||
const $fhcAlert = app.config.globalProperties.$fhcAlert;
|
||||
|
||||
function _send_array_or_object(errors, func) {
|
||||
if (Array.isArray(errors))
|
||||
errors.forEach(func);
|
||||
@@ -115,7 +113,7 @@ export default {
|
||||
await $p.loadCategory('ui');
|
||||
const n_errors = $p.t('ui/n_errors', { n: counter });
|
||||
|
||||
$fhcAlert.alertDefault(
|
||||
app.config.globalProperties.$fhcAlert.alertDefault(
|
||||
'error',
|
||||
n_errors,
|
||||
'<dl>' + msgs.join('') + '</dl>',
|
||||
@@ -146,7 +144,7 @@ export default {
|
||||
title += ': PHP ' + error.severity;
|
||||
else
|
||||
title = 'PHP ' + error.severity;
|
||||
$fhcAlert.alertDefault('warn', title, message, true);
|
||||
app.config.globalProperties.$fhcAlert.alertDefault('warn', title, message, true);
|
||||
break;
|
||||
case 'Notice':
|
||||
case 'User Notice':
|
||||
@@ -155,13 +153,13 @@ export default {
|
||||
title += ': PHP ' + error.severity;
|
||||
else
|
||||
title = 'PHP ' + error.severity;
|
||||
$fhcAlert.alertDefault('info', title, message, true);
|
||||
app.config.globalProperties.$fhcAlert.alertDefault('info', title, message, true);
|
||||
break;
|
||||
default:
|
||||
message = 'Type: PHP ' + error.severity + '\n\n' + message;
|
||||
if (title)
|
||||
message = title + '\n\n' + message;
|
||||
$fhcAlert.alertSystemError(message);
|
||||
app.config.globalProperties.$fhcAlert.alertSystemError(message);
|
||||
break;
|
||||
}
|
||||
});
|
||||
@@ -183,7 +181,7 @@ export default {
|
||||
message += '\tFunction: ' + err.function + '\n';
|
||||
});
|
||||
}
|
||||
$fhcAlert.alertSystemError(message);
|
||||
app.config.globalProperties.$fhcAlert.alertSystemError(message);
|
||||
});
|
||||
},
|
||||
db(errors) {
|
||||
@@ -206,7 +204,7 @@ export default {
|
||||
if (error.line !== undefined)
|
||||
message += 'Line Number: ' + error.line + '\n';
|
||||
|
||||
$fhcAlert.alertSystemError(message);
|
||||
app.config.globalProperties.$fhcAlert.alertSystemError(message);
|
||||
});
|
||||
},
|
||||
auth(errors) {
|
||||
@@ -221,7 +219,7 @@ export default {
|
||||
message += 'Method name: ' + error.method + '\n';
|
||||
message += 'Required permissions: ' + error.required_permissions;
|
||||
|
||||
$fhcAlert.alertDefault(
|
||||
app.config.globalProperties.$fhcAlert.alertDefault(
|
||||
'error',
|
||||
title,
|
||||
message,
|
||||
@@ -328,6 +326,7 @@ export default {
|
||||
url: error.request.responseURL
|
||||
}];
|
||||
} else {
|
||||
if (error.response.data.errors == undefined) return [];
|
||||
return error.response.data.errors;
|
||||
}
|
||||
} else if (error.request) {
|
||||
@@ -346,6 +345,9 @@ export default {
|
||||
function popHandleableErrors(errorHandling, errors) {
|
||||
const result = {};
|
||||
const copy = [];
|
||||
|
||||
if (errors == undefined) return {};
|
||||
|
||||
while (errors.length)
|
||||
copy.push(errors.pop());
|
||||
for (var error of copy) {
|
||||
|
||||
+1
-1
@@ -366,7 +366,7 @@ function draw_content($row)
|
||||
<STUDENT:mail_privat><![CDATA['.$mail_privat.']]></STUDENT:mail_privat>
|
||||
<STUDENT:mail_intern><![CDATA['.(isset($row->uid)?$row->uid.'@'.DOMAIN:'').']]></STUDENT:mail_intern>
|
||||
<STUDENT:zugangscode><![CDATA['.$row->zugangscode.']]></STUDENT:zugangscode>
|
||||
<STUDENT:link_bewerbungstool><![CDATA['.CIS_ROOT.'addons/bewerbung/cis/registration.php?code='.$row->zugangscode.'&emailAdresse='.$mail_privat.']]></STUDENT:link_bewerbungstool>
|
||||
<STUDENT:link_bewerbungstool><![CDATA['.CIS_ROOT.'addons/bewerbung/cis/registration.php?code='.$row->zugangscode.'&emailAdresse='.$mail_privat.'&keepEmailUnverified=true]]></STUDENT:link_bewerbungstool>
|
||||
<STUDENT:bpk><![CDATA['.$row->bpk.']]></STUDENT:bpk>
|
||||
|
||||
<STUDENT:aktiv><![CDATA['.$aktiv.']]></STUDENT:aktiv>
|
||||
|
||||
@@ -27,6 +27,7 @@ require_once('dbupdate_3.4/example.php');
|
||||
require_once('dbupdate_3.4/example2.php');
|
||||
...
|
||||
*/
|
||||
//require_once('dbupdate_3.4/25003_notenimport_nachpruefung.php');
|
||||
require_once('dbupdate_3.4/dbupdate_dashboard.php');
|
||||
require_once('dbupdate_3.4/26173_index_webservicelog.php');
|
||||
require_once('dbupdate_3.4/24682_reihungstest_zugangscode_fuer_login.php');
|
||||
@@ -81,6 +82,8 @@ require_once('dbupdate_3.4/63394_Variablenbeschraenkung.php');
|
||||
require_once('dbupdate_3.4/63436_cis4_iframe_component.php');
|
||||
require_once('dbupdate_3.4/60882_lehrfaecherverteilung_favorites.php');
|
||||
require_once('dbupdate_3.4/66982_berufsschule.php');
|
||||
require_once('dbupdate_3.4/40314_electronic_onboarding_anbindung_ida.php');
|
||||
require_once('dbupdate_3.4/47972_pruefungsverwaltung_ects_angabe.php');
|
||||
require_once('dbupdate_3.4/62063_lv_evaluierung.php');
|
||||
|
||||
// *** Pruefung und hinzufuegen der neuen Attribute und Tabellen
|
||||
@@ -164,8 +167,8 @@ $tabellen=array(
|
||||
"campus.tbl_paabgabe" => array("paabgabe_id","projektarbeit_id","paabgabetyp_kurzbz","fixtermin","datum","kurzbz","abgabedatum", "insertvon","insertamum","updatevon","updateamum"),
|
||||
"campus.tbl_pruefungsfenster" => array("pruefungsfenster_id","studiensemester_kurzbz","oe_kurzbz","start","ende"),
|
||||
"campus.tbl_pruefung" => array("pruefung_id","mitarbeiter_uid","studiensemester_kurzbz","pruefungsfenster_id","pruefungstyp_kurzbz","titel","beschreibung","methode","einzeln","storniert","insertvon","insertamum","updatevon","updateamum","pruefungsintervall"),
|
||||
"campus.tbl_pruefungstermin" => array("pruefungstermin_id","pruefung_id","von","bis","teilnehmer_max","teilnehmer_min","anmeldung_von","anmeldung_bis","ort_kurzbz","sammelklausur"),
|
||||
"campus.tbl_pruefungsanmeldung" => array("pruefungsanmeldung_id","uid","pruefungstermin_id","lehrveranstaltung_id","status_kurzbz","wuensche","reihung","kommentar","statusupdatevon","statusupdateamum","anrechnung_id","pruefungstyp_kurzbz","insertamum"),
|
||||
"campus.tbl_pruefungstermin" => array("pruefungstermin_id","pruefung_id","von","bis","teilnehmer_max","teilnehmer_min","anmeldung_von","anmeldung_bis","ort_kurzbz","sammelklausur", "anderer_raum"),
|
||||
"campus.tbl_pruefungsanmeldung" => array("pruefungsanmeldung_id","uid","pruefungstermin_id","lehrveranstaltung_id","status_kurzbz","wuensche","reihung","kommentar","statusupdatevon","statusupdateamum","anrechnung_id","pruefungstyp_kurzbz","insertamum", "ects"),
|
||||
"campus.tbl_pruefungsstatus" => array("status_kurzbz","bezeichnung"),
|
||||
"campus.tbl_reservierung" => array("reservierung_id","ort_kurzbz","studiengang_kz","uid","stunde","datum","titel","beschreibung","semester","verband","gruppe","gruppe_kurzbz","veranstaltung_id","insertamum","insertvon"),
|
||||
"campus.tbl_studierendenantrag" => array("studierendenantrag_id","prestudent_id","studiensemester_kurzbz","datum","typ","insertamum","insertvon","datum_wiedereinstieg","grund","dms_id"),
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
<?php
|
||||
if (! defined('DB_NAME')) exit('No direct script access allowed');
|
||||
|
||||
// public.tbl_kontakttyp: add type email unverified
|
||||
if($result = $db->db_query("SELECT 1 FROM public.tbl_kontakttyp WHERE kontakttyp='email_unverifiziert'"))
|
||||
{
|
||||
if($db->db_num_rows($result)==0)
|
||||
{
|
||||
$qry = "INSERT INTO public.tbl_kontakttyp(kontakttyp, beschreibung, bezeichnung_mehrsprachig) VALUES('email_unverifiziert', 'Unverifizierte E-Mail', '{\"Unverifizierte E-Mail\", \"Unverified email\"}');";
|
||||
|
||||
if(!$db->db_query($qry))
|
||||
echo '<strong>Kontakttyp: '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>Neuen Kontakttyp E-Mail unverifiziert in public.tbl_kontakttyp hinzugefügt';
|
||||
}
|
||||
}
|
||||
|
||||
// public.tbl_adressentyp: add type Meldeadresse
|
||||
if($result = $db->db_query("SELECT 1 FROM public.tbl_adressentyp WHERE adressentyp_kurzbz='m'"))
|
||||
{
|
||||
if($db->db_num_rows($result)==0)
|
||||
{
|
||||
$qry = "INSERT INTO public.tbl_adressentyp(adressentyp_kurzbz, bezeichnung, bezeichnung_mehrsprachig, sort) VALUES('m', 'Meldeadresse', '{\"Meldeadresse\", \"Registered adress\"}', 6);";
|
||||
|
||||
if(!$db->db_query($qry))
|
||||
echo '<strong>Adressentyp: '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>Neue Adressentyp Meldeadresse in public.tbl_adressentyp hinzugefügt';
|
||||
}
|
||||
}
|
||||
|
||||
if (!$result = @$db->db_query('SELECT 1 FROM public.tbl_kontakt_verifikation LIMIT 1'))
|
||||
{
|
||||
$qry = "CREATE SEQUENCE public.tbl_kontakt_verifikation_kontakt_verifikation_id_seq
|
||||
INCREMENT BY 1
|
||||
NO MAXVALUE
|
||||
NO MINVALUE
|
||||
START WITH 1
|
||||
CACHE 1
|
||||
NO CYCLE;
|
||||
|
||||
CREATE TABLE public.tbl_kontakt_verifikation
|
||||
(
|
||||
kontakt_verifikation_id integer DEFAULT nextval('public.tbl_kontakt_verifikation_kontakt_verifikation_id_seq'::regclass),
|
||||
kontakt_id integer UNIQUE NOT NULL,
|
||||
verifikation_code varchar(32) UNIQUE NOT NULL,
|
||||
erstelldatum timestamp without time zone,
|
||||
verifikation_datum timestamp without time zone,
|
||||
app varchar(32),
|
||||
CONSTRAINT pk_tbl_kontakt_verifikation_id PRIMARY KEY (kontakt_verifikation_id)
|
||||
);
|
||||
|
||||
ALTER TABLE public.tbl_kontakt_verifikation ADD CONSTRAINT fk_tbl_kontakt_verifikation_kontakt_id FOREIGN KEY (kontakt_id)
|
||||
REFERENCES public.tbl_kontakt (kontakt_id)
|
||||
ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
ALTER TABLE public.tbl_kontakt_verifikation ADD CONSTRAINT fk_tbl_kontakt_verifikation_app FOREIGN KEY (app)
|
||||
REFERENCES system.tbl_app (app)
|
||||
ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
COMMENT ON TABLE public.tbl_kontakt_verifikation IS 'Contact verification';
|
||||
COMMENT ON COLUMN public.tbl_kontakt_verifikation.kontakt_id IS 'Contact to verify';
|
||||
COMMENT ON COLUMN public.tbl_kontakt_verifikation.verifikation_code IS 'Code generated for verification';
|
||||
COMMENT ON COLUMN public.tbl_kontakt_verifikation.erstelldatum IS 'Time when verification code was generated';
|
||||
COMMENT ON COLUMN public.tbl_kontakt_verifikation.verifikation_datum IS 'Time when contact was verified';
|
||||
COMMENT ON COLUMN public.tbl_kontakt_verifikation.app IS 'App where contact was verified';
|
||||
|
||||
GRANT SELECT, UPDATE, INSERT, DELETE ON public.tbl_kontakt_verifikation TO web;
|
||||
GRANT SELECT, UPDATE, INSERT, DELETE ON public.tbl_kontakt_verifikation TO vilesci;
|
||||
GRANT SELECT, UPDATE ON public.tbl_kontakt_verifikation_kontakt_verifikation_id_seq TO vilesci;
|
||||
GRANT SELECT, UPDATE ON public.tbl_kontakt_verifikation_kontakt_verifikation_id_seq TO web;
|
||||
";
|
||||
|
||||
if(!$db->db_query($qry))
|
||||
echo '<strong>public.tbl_kontakt_verifikation: '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo ' public.tbl_kontakt_verifikation: Tabelle hinzugefuegt<br>';
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
if (! defined('DB_NAME')) exit('No direct script access allowed');
|
||||
|
||||
if(!@$db->db_query("SELECT ects FROM campus.tbl_pruefungsanmeldung LIMIT 1"))
|
||||
{
|
||||
$qry = 'ALTER TABLE campus.tbl_pruefungsanmeldung ADD COLUMN ects numeric(5,2);';
|
||||
|
||||
if(!$db->db_query($qry))
|
||||
echo '<strong> campus.tbl_pruefungsanmeldung '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>campus.tbl_pruefungsanmeldung: Neue Spalte ects hinzugefügt';
|
||||
}
|
||||
|
||||
if(!@$db->db_query("SELECT anderer_raum FROM campus.tbl_pruefungstermin LIMIT 1"))
|
||||
{
|
||||
$qry = 'ALTER TABLE campus.tbl_pruefungstermin ADD COLUMN anderer_raum text NULL;';
|
||||
|
||||
if(!$db->db_query($qry))
|
||||
echo '<strong> campus.tbl_pruefungstermin '.$db->db_last_error().'</strong><br>';
|
||||
else
|
||||
echo '<br>campus.tbl_pruefungstermin: Neue Spalte anderer_raum hinzugefügt';
|
||||
}
|
||||
@@ -0,0 +1,759 @@
|
||||
<?php
|
||||
require_once('../../config/vilesci.config.inc.php');
|
||||
require_once('../../include/studiengang.class.php');
|
||||
require_once('../../include/functions.inc.php');
|
||||
require_once('../../include/benutzerberechtigung.class.php');
|
||||
require_once('../../include/fachbereich.class.php');
|
||||
require_once('../../include/lvinfo.class.php');
|
||||
require_once('../../include/lehrveranstaltung.class.php');
|
||||
require_once('../../include/organisationsform.class.php');
|
||||
require_once('../../include/organisationseinheit.class.php');
|
||||
|
||||
if (!$db = new basis_db())
|
||||
die('Es konnte keine Verbindung zum Server aufgebaut werden.');
|
||||
|
||||
|
||||
$getKompatibleLVs = filter_input(INPUT_POST, 'getKompatibleLVs', FILTER_VALIDATE_BOOLEAN);
|
||||
|
||||
if ($getKompatibleLVs)
|
||||
{
|
||||
if (isset($_POST['lv_id']))
|
||||
{
|
||||
$lv = new lehrveranstaltung();
|
||||
$lv->load($_POST['lv_id']);
|
||||
|
||||
$kompatibleLvs = $lv->loadLVkompatibel($_POST['lv_id']);
|
||||
if (is_array($kompatibleLvs) && count($kompatibleLvs) > 0)
|
||||
{
|
||||
$result = array();
|
||||
foreach($kompatibleLvs as $lvId)
|
||||
{
|
||||
$lv->load($lvId);
|
||||
$studiengang = new studiengang();
|
||||
$studiengang->load($lv->studiengang_kz);
|
||||
$oe = new organisationseinheit();
|
||||
$oe->load($lv->oe_kurzbz);
|
||||
|
||||
|
||||
$result[] = array(
|
||||
"lehrveranstaltung_id" => $lv->lehrveranstaltung_id,
|
||||
"kurzbz" => $lv->kurzbz,
|
||||
"bezeichnung" => $lv->bezeichnung,
|
||||
"ects" => $lv->ects,
|
||||
"studiengang_kuerzel" => $studiengang->kuerzel,
|
||||
"oe_bezeichnung" => $oe->bezeichnung
|
||||
);
|
||||
}
|
||||
echo json_encode(["result" => $result]);
|
||||
exit();
|
||||
}
|
||||
echo json_encode(["result" => array()]);
|
||||
exit();
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($_REQUEST['autocomplete']) && ($_REQUEST['autocomplete'] === 'From' || $_REQUEST['autocomplete'] === 'To'))
|
||||
{
|
||||
$search = trim((isset($_REQUEST['term']) ? $_REQUEST['term'] : ''));
|
||||
if (is_null($search) || $search == '')
|
||||
{
|
||||
exit();
|
||||
}
|
||||
|
||||
$qry = "SELECT lehre.tbl_lehrveranstaltung.*
|
||||
FROM lehre.tbl_lehrveranstaltung
|
||||
WHERE
|
||||
lower(bezeichnung) like '%" . $db->db_escape(mb_strtolower($search)) . "%' OR
|
||||
lehrveranstaltung_id::text like '%" . $db->db_escape(mb_strtolower($search)) . "%' OR
|
||||
studiengang_kz::text like '%" . $db->db_escape(mb_strtolower($search)) . "%'
|
||||
ORDER BY lehrveranstaltung_id DESC
|
||||
LIMIT 10
|
||||
";
|
||||
|
||||
if ($result = $db->db_query($qry))
|
||||
{
|
||||
$result_obj = array();
|
||||
while ($row = $db->db_fetch_object($result))
|
||||
{
|
||||
$item['lehrveranstaltung_id'] = html_entity_decode($row->lehrveranstaltung_id);
|
||||
$item['bezeichnung'] = html_entity_decode($row->bezeichnung);
|
||||
$item['oe_kurzbz'] = html_entity_decode($row->oe_kurzbz);
|
||||
$result_obj[] = $item;
|
||||
}
|
||||
echo json_encode($result_obj);
|
||||
}
|
||||
exit();
|
||||
}
|
||||
?><!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Lehrveranstaltung Verwaltung</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<link rel="stylesheet" href="../../skin/fhcomplete.css" type="text/css">
|
||||
<link rel="stylesheet" href="../../skin/vilesci.css" type="text/css">
|
||||
<link rel="stylesheet" href="../../skin/jquery.css" type="text/css"/>
|
||||
<script type="text/javascript" src="../../vendor/jquery/jquery1/jquery-1.12.4.min.js"></script>
|
||||
<script type="text/javascript" src="../../vendor/christianbach/tablesorter/jquery.tablesorter.min.js"></script>
|
||||
<script type="text/javascript" src="../../vendor/components/jqueryui/jquery-ui.min.js"></script>
|
||||
<script type="text/javascript" src="../../include/js/jquery.ui.datepicker.translation.js"></script>
|
||||
<link rel="stylesheet" href="../../skin/tablesort.css" type="text/css"/>
|
||||
<style>
|
||||
.container {
|
||||
display: flex;
|
||||
gap: 20px;
|
||||
width: 100%;
|
||||
}
|
||||
.box {
|
||||
flex: 1;
|
||||
padding: 20px;
|
||||
border: 1px solid #333;
|
||||
text-align: center;
|
||||
width: 50%;
|
||||
}
|
||||
.lvDropdown {
|
||||
width: 100%;
|
||||
}
|
||||
.missing-in-to td {
|
||||
background-color: #fff3cd !important;
|
||||
}
|
||||
.autocomplete {
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.hidden {
|
||||
visibility: hidden;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
|
||||
initBox("From");
|
||||
initBox("To");
|
||||
|
||||
searchDropdownCleaner("From")
|
||||
searchDropdownCleaner("To")
|
||||
|
||||
$('#kompatibleLVsUbernehmen').on("click", function() {
|
||||
|
||||
let lvidFrom = $('#lvDropdownFrom').val();
|
||||
let lvidTo = $('#lvDropdownTo').val();
|
||||
let uebernahmenCheckboxen = $("input[name='lvUebernehmenCheckbox']:checked");
|
||||
let checkboxenUebernahmeCount = uebernahmenCheckboxen.length;
|
||||
|
||||
let lvidautoFrom = $('#autocompleteFrom').data("lv-id");
|
||||
let lvidautoTo = $('#autocompleteTo').data("lv-id");
|
||||
|
||||
if ((!lvidFrom && !lvidautoFrom) || (!lvidTo && !lvidautoTo))
|
||||
{
|
||||
alert("Bitte in beiden Dropdowns eine LV auswählen!");
|
||||
return;
|
||||
}
|
||||
|
||||
lvidTo = lvidTo || lvidautoTo;
|
||||
|
||||
if (checkboxenUebernahmeCount === 0)
|
||||
{
|
||||
alert("Bitte Kompatible LV´s auswählen die übernommen werden sollen!");
|
||||
return;
|
||||
}
|
||||
|
||||
let done = 0;
|
||||
uebernahmenCheckboxen.each(function()
|
||||
{
|
||||
saveKompatibleLv(lvidTo, this.value, function() {
|
||||
done++;
|
||||
if (done === checkboxenUebernahmeCount)
|
||||
{
|
||||
let drodpwonval = $('#lvDropdownTo').val();
|
||||
let autocompleteval = $('#autocompleteTo').data('lv-id');
|
||||
|
||||
if (drodpwonval)
|
||||
{
|
||||
$('#lvDropdownTo').trigger('change');
|
||||
}
|
||||
else if (autocompleteval)
|
||||
{
|
||||
callLoadKompatibleLvs(autocompleteval, 'To');
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}),
|
||||
|
||||
$('#alleLVsMarkieren').on("click", function()
|
||||
{
|
||||
let checkboxen = $("#kompatibleLVsFrom tbody tr.missing-in-to").find("input[name='lvUebernehmenCheckbox']");
|
||||
checkboxen.prop("checked", true);
|
||||
}),
|
||||
|
||||
$('#alleLVsAbwaehlen').on("click", function()
|
||||
{
|
||||
let checkboxen = $("#kompatibleLVsFrom tbody").find("input[name='lvUebernehmenCheckbox']");
|
||||
checkboxen.prop("checked", false);
|
||||
})
|
||||
});
|
||||
|
||||
function searchDropdownCleaner(side)
|
||||
{
|
||||
let search = $("#autocomplete" + side);
|
||||
let studiengang = $("#stgDropdown" + side);
|
||||
let oe = $("#oeDropdown" + side);
|
||||
let semester = $("#semDropdown" + side);
|
||||
let lvDropdown = $("#lvDropdown" + side);
|
||||
|
||||
let dropdowns = [studiengang, oe, semester, lvDropdown];
|
||||
search.on("input", function() {
|
||||
|
||||
if (search.val().trim().length > 0)
|
||||
{
|
||||
dropdowns.forEach(element => {
|
||||
element.closest("tr").addClass("hidden");
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
dropdowns.forEach(element => {
|
||||
element.closest("tr").removeClass("hidden");
|
||||
});
|
||||
}
|
||||
})
|
||||
}
|
||||
function initBox(side)
|
||||
{
|
||||
loadSemester(side);
|
||||
|
||||
$('#stgDropdown' + side).on("change", function() {
|
||||
loadSemester(side)
|
||||
})
|
||||
|
||||
$('#oeDropdown' + side).on("change", function() {
|
||||
loadLehrveranstaltungen(side)
|
||||
})
|
||||
|
||||
$('#semDropdown' + side).on("change", function() {
|
||||
loadLehrveranstaltungen(side)
|
||||
})
|
||||
|
||||
$('#lvDropdown' + side).on("change", function() {
|
||||
loadKompatibleLvs(side)
|
||||
})
|
||||
|
||||
$('#kompatibleLVs' + side).data('ts-initialized', false);
|
||||
|
||||
$("#autocomplete" + side).autocomplete({
|
||||
source: "lehrveranstaltung_kompatibel_vergleichen.php?autocomplete=" + side,
|
||||
minLength: 3,
|
||||
response: function(event, ui) {
|
||||
for (let i in ui.content) {
|
||||
if (ui.content.hasOwnProperty(i))
|
||||
{
|
||||
let option = ui.content[i];
|
||||
option.value = option.bezeichnung + " (" + option.lehrveranstaltung_id + "/" + option.oe_kurzbz + ")";
|
||||
option.label = option.bezeichnung + " (" + option.lehrveranstaltung_id + "/" + option.oe_kurzbz + ")";
|
||||
}
|
||||
}
|
||||
},
|
||||
select: function(event, ui) {
|
||||
callLoadKompatibleLvs(ui.item.lehrveranstaltung_id, side)
|
||||
$(this).data("lv-id", ui.item.lehrveranstaltung_id);
|
||||
$("#lvBezeichnung" + side).html(ui.item.bezeichnung + " (ID: " + ui.item.lehrveranstaltung_id + ")");
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
function sortTable(side)
|
||||
{
|
||||
if ($("#kompatibleLVs" + side + " tbody tr").length > 0 && !$('#kompatibleLVs' + side).data('ts-initialized'))
|
||||
{
|
||||
$('#kompatibleLVs' + side).tablesorter({
|
||||
widgets: ["zebra"],
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function loadSemester(side)
|
||||
{
|
||||
var studiengang_kz = $("#stgDropdown" + side).val();
|
||||
$.ajax(
|
||||
{
|
||||
dataType: "json",
|
||||
url: "../../soap/studienplan.json.php",
|
||||
data: {
|
||||
"method": "getSemesterFromStudiengang",
|
||||
"studiengang_kz": studiengang_kz
|
||||
}
|
||||
}).success(function(data)
|
||||
{
|
||||
let html = "";
|
||||
|
||||
|
||||
let result = Array.isArray(data?.result) ? data.result : [];
|
||||
|
||||
if (result.length > 0)
|
||||
{
|
||||
result.forEach(function(option)
|
||||
{
|
||||
html+="<option value='"+ option +"'>Semester "+ option +"</option>";
|
||||
});
|
||||
$("#semDropdown" + side).html(html);
|
||||
}
|
||||
|
||||
|
||||
loadLehrveranstaltungen(side);
|
||||
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function loadKompatibleLvs(side)
|
||||
{
|
||||
let lv_id = $("#lvDropdown" + side).val();
|
||||
|
||||
if (lv_id === null)
|
||||
$("#lvBezeichnung" + side).html("")
|
||||
else
|
||||
{
|
||||
let bezeichnung = $("#lvDropdown" + side + " option:selected").text();
|
||||
$("#lvBezeichnung" + side).html(bezeichnung);
|
||||
callLoadKompatibleLvs(lv_id, side)
|
||||
}
|
||||
}
|
||||
|
||||
function callLoadKompatibleLvs(lv_id, side)
|
||||
{
|
||||
$.ajax({
|
||||
url: "lehrveranstaltung_kompatibel_vergleichen.php",
|
||||
data: {
|
||||
'getKompatibleLVs': true,
|
||||
'lv_id' : lv_id
|
||||
},
|
||||
type: "POST",
|
||||
dataType: "json",
|
||||
success: function(data)
|
||||
{
|
||||
var html = "";
|
||||
data.result.forEach(function(option)
|
||||
{
|
||||
html += "<tr data-lv-id='" + option.lehrveranstaltung_id + "'>" +
|
||||
"<td>"+ option.lehrveranstaltung_id +"</td>" +
|
||||
"<td>"+ option.kurzbz +"</td>" +
|
||||
"<td>"+ option.bezeichnung +"</td>" +
|
||||
"<td>"+ option.ects +"</td>" +
|
||||
"<td>"+ option.studiengang_kuerzel +"</td>" +
|
||||
"<td>"+ option.oe_bezeichnung +"</td>" +
|
||||
(side === "From" ? "<td><input type='checkbox' name='lvUebernehmenCheckbox' value='" + option.lehrveranstaltung_id + "'></td>" : "") +
|
||||
"<td>" +
|
||||
"<a href='#' onclick=\"deleteKompatibleLv('" + lv_id + "', '" + option.lehrveranstaltung_id + "', '" + side + "')\">" +
|
||||
"<img height='20' src='../../skin/images/false.png' alt='Delete'></a>" +
|
||||
"</td>" +
|
||||
"</tr>";
|
||||
|
||||
});
|
||||
$("#kompatibleLVs" + side + " tbody").html(html);
|
||||
|
||||
sortTable(side);
|
||||
markDifferences();
|
||||
},
|
||||
error: function(jqXHR, textStatus, errorThrown)
|
||||
{
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function markDifferences() {
|
||||
let fromVal = $("#lvDropdownFrom").val();
|
||||
let toVal = $("#lvDropdownTo").val();
|
||||
|
||||
let lvidautoFrom = $('#autocompleteFrom').data("lv-id");
|
||||
let lvidautoTo = $('#autocompleteTo').data("lv-id");
|
||||
|
||||
fromVal = fromVal || lvidautoFrom;
|
||||
toVal = toVal || lvidautoTo;
|
||||
|
||||
if (!fromVal || fromVal === "null" || !toVal || toVal === "null")
|
||||
{
|
||||
$("#kompatibleLVsFrom tbody tr").removeClass("missing-in-to");
|
||||
return;
|
||||
}
|
||||
|
||||
$("#kompatibleLVsFrom tbody tr").removeClass("missing-in-to");
|
||||
|
||||
$("#kompatibleLVsFrom tbody tr").each(function ()
|
||||
{
|
||||
const id = $(this).data("lv-id");
|
||||
const existsInTo = $("#kompatibleLVsTo tbody tr[data-lv-id='" + id + "']").length > 0;
|
||||
|
||||
if (!existsInTo)
|
||||
{
|
||||
$(this).addClass("missing-in-to")
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
function loadLehrveranstaltungen(side)
|
||||
{
|
||||
let studiengang_kz = $("#stgDropdown" + side).val();
|
||||
let semester = $("#semDropdown" + side).val();
|
||||
let oe_kurzbz = $("#oeDropdown" + side).val();
|
||||
|
||||
if(oe_kurzbz === "null")
|
||||
{
|
||||
$.ajax(
|
||||
{
|
||||
dataType: "json",
|
||||
url: "../../soap/fhcomplete.php",
|
||||
type: "POST",
|
||||
data: {
|
||||
"typ": "json",
|
||||
"class": "lehrveranstaltung",
|
||||
"method": "load_lva",
|
||||
"parameter_0": studiengang_kz,
|
||||
"parameter_1": semester,
|
||||
"parameter_2": "null",
|
||||
"parameter_3": "null",
|
||||
"parameter_4": "true"
|
||||
}
|
||||
}).success(function(data)
|
||||
{
|
||||
let html = "";
|
||||
let result = Array.isArray(data?.result) ? data.result : [];
|
||||
if (result.length > 0)
|
||||
{
|
||||
result.forEach(function(option)
|
||||
{
|
||||
if (option.lehrveranstaltung_id !== null)
|
||||
html+="<option value='"+ option.lehrveranstaltung_id +"'>"+ option.bezeichnung + " (" + option.lehrveranstaltung_id + "/" + option.oe_kurzbz + ") </option>";
|
||||
});
|
||||
$("#lvDropdown" + side).html(html);
|
||||
|
||||
}
|
||||
loadKompatibleLvs(side);
|
||||
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
$.ajax(
|
||||
{
|
||||
dataType: "json",
|
||||
url: "../../soap/fhcomplete.php",
|
||||
type: "POST",
|
||||
data: {
|
||||
"typ": "json",
|
||||
"class": "lehrveranstaltung",
|
||||
"method": "load_lva_oe",
|
||||
"parameter_0": oe_kurzbz,
|
||||
"parameter_1": true,
|
||||
"parameter_2": "null",
|
||||
"parameter_3": "bezeichnung"
|
||||
}
|
||||
}).success(function(data)
|
||||
{
|
||||
let html = "";
|
||||
let result = Array.isArray(data?.result) ? data.result : [];
|
||||
if (result.length > 0)
|
||||
{
|
||||
result.forEach(function(option)
|
||||
{
|
||||
if (option.lehrveranstaltung_id !== null)
|
||||
html+="<option value='"+ option.lehrveranstaltung_id +"'>"+ option.bezeichnung +"</option>";
|
||||
});
|
||||
$("#lvDropdown" + side).html(html);
|
||||
}
|
||||
loadKompatibleLvs(side);
|
||||
|
||||
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function loadOrganisationseinheiten(side)
|
||||
{
|
||||
$.ajax(
|
||||
{
|
||||
dataType: "json",
|
||||
url: "../../soap/fhcomplete.php",
|
||||
type: "POST",
|
||||
data: {
|
||||
"typ": "json",
|
||||
"class": "lehrveranstaltung",
|
||||
"method": "load_lva",
|
||||
"parameter_0": studiengang_kz,
|
||||
"parameter_1": semester,
|
||||
"parameter_2": "null",
|
||||
"parameter_3": "null",
|
||||
"parameter_4": "true"
|
||||
}
|
||||
}).success(function(data)
|
||||
{
|
||||
var html = "";
|
||||
data.result.forEach(function(option)
|
||||
{
|
||||
html+="<option value='"+ option.lehrveranstaltung_id +"'>"+ option.bezeichnung +"</option>";
|
||||
});
|
||||
$("#lvDropdown" +side).html(html);
|
||||
});
|
||||
}
|
||||
|
||||
function saveKompatibleLv(lehrveranstaltung_id, kompatible_id, onComplete)
|
||||
{
|
||||
$.ajax(
|
||||
{
|
||||
dataType: "json",
|
||||
url: "../../soap/lehrveranstaltung.json.php",
|
||||
type: "POST",
|
||||
data: {
|
||||
"typ": "json",
|
||||
"class": "lehrveranstaltung",
|
||||
"method": "saveKompatibleLehrveranstaltung",
|
||||
"lehrveranstaltung_id":lehrveranstaltung_id,
|
||||
"lehrveranstaltung_id_kompatibel": kompatible_id
|
||||
}
|
||||
}).success(function(data)
|
||||
{
|
||||
if(data.error === "true")
|
||||
{
|
||||
alert(data.errormsg);
|
||||
}
|
||||
|
||||
if (onComplete)
|
||||
onComplete();
|
||||
|
||||
}).error(function(data)
|
||||
{
|
||||
alert(data.responseText);
|
||||
if (onComplete)
|
||||
onComplete();
|
||||
});
|
||||
}
|
||||
|
||||
function deleteKompatibleLv(lehrveranstaltung_id, lehrveranstaltung_id_kompatibel, side)
|
||||
{
|
||||
$.ajax(
|
||||
{
|
||||
dataType: "json",
|
||||
url: "../../soap/lehrveranstaltung.json.php",
|
||||
type: "POST",
|
||||
data: {
|
||||
"typ": "json",
|
||||
"class": "lehrveranstaltung",
|
||||
"method": "deleteKompatibleLehrveranstaltung",
|
||||
"lehrveranstaltung_id":lehrveranstaltung_id,
|
||||
"lehrveranstaltung_id_kompatibel":lehrveranstaltung_id_kompatibel
|
||||
}
|
||||
}).success(function(data)
|
||||
{
|
||||
if(data.error === "true")
|
||||
{
|
||||
alert(data.errormsg);
|
||||
}
|
||||
|
||||
let fromValDropdown = $("#lvDropdownFrom").val();
|
||||
let toValDropdwon = $("#lvDropdownTo").val();
|
||||
|
||||
let lvidautoFrom = $('#autocompleteFrom').data("lv-id");
|
||||
let lvidautoTo = $('#autocompleteTo').data("lv-id");
|
||||
|
||||
let fromVal = fromValDropdown || lvidautoFrom;
|
||||
let toVal = toValDropdwon || lvidautoTo;
|
||||
|
||||
|
||||
if (fromVal === toVal)
|
||||
{
|
||||
if (fromValDropdown)
|
||||
$('#lvDropdownFrom').trigger('change');
|
||||
else if (lvidautoFrom)
|
||||
callLoadKompatibleLvs(fromVal, 'From');
|
||||
|
||||
if (toValDropdwon)
|
||||
$('#lvDropdownTo').trigger('change');
|
||||
else if (lvidautoFrom)
|
||||
callLoadKompatibleLvs(toVal, 'To');
|
||||
}
|
||||
else
|
||||
{
|
||||
let dropdownVal = $("#lvDropdown" + side).val();
|
||||
let autoVal = $('#autocomplete' + side).data("lv-id");
|
||||
if (dropdownVal)
|
||||
{
|
||||
$('#lvDropdown' + side).trigger('change');
|
||||
}
|
||||
else if (autoVal)
|
||||
{
|
||||
callLoadKompatibleLvs(autoVal, side);
|
||||
}
|
||||
}
|
||||
|
||||
}).error(function(data)
|
||||
{
|
||||
alert(data.responseText);
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<?php
|
||||
$user = get_uid();
|
||||
$rechte = new benutzerberechtigung();
|
||||
$rechte->getBerechtigungen($user);
|
||||
|
||||
if(!$rechte->isBerechtigt('lehre/lehrveranstaltung', 'suid'))
|
||||
die('Sie haben keine Berechtigung fuer diese Seite');
|
||||
|
||||
$studiengang = new studiengang();
|
||||
$studiengang->getAll("kurzbzlang");
|
||||
|
||||
$organisationseinheit = new organisationseinheit();
|
||||
$organisationseinheit->getAll(true, true);
|
||||
|
||||
echo "<div class='container'>
|
||||
<div class='box'>
|
||||
<div style='padding-top: 1em;'>
|
||||
<table>
|
||||
<tr>
|
||||
<td><b>Suche: </b></td>
|
||||
<td colspan='3'>
|
||||
<input type='text' class='autocomplete' id='autocompleteFrom' placeholder='Suche...'/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>Studiengang: </b></td>
|
||||
<td>
|
||||
<select id='stgDropdownFrom' style='margin-right: 1em;'>";
|
||||
foreach($studiengang->result as $stg)
|
||||
{
|
||||
echo "<option value=".$stg->studiengang_kz.">".$stg->kuerzel." - ".$stg->kurzbzlang."</option>";
|
||||
}
|
||||
echo "</select>
|
||||
</td>
|
||||
<td><b>OE:</b></td>";
|
||||
echo "<td>
|
||||
<select id='oeDropdownFrom' style='margin-right: 1em;'>
|
||||
<option value='null'>-- Keine --</option>";
|
||||
foreach($organisationseinheit->result as $oe)
|
||||
{
|
||||
echo "<option value=".$oe->oe_kurzbz.">".$oe->organisationseinheittyp_kurzbz." ".$oe->bezeichnung."</option>";
|
||||
}
|
||||
echo "</select></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>Semester: </b></td>
|
||||
<td>
|
||||
<select id='semDropdownFrom' style='margin-right: 1em;'>
|
||||
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>Lehrveranstaltungen: </b></td>
|
||||
<td colspan='3'>
|
||||
<select class='lvDropdown' id='lvDropdownFrom'></select>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
</div>
|
||||
Kompatible Lehrveranstaltungen - <span id='lvBezeichnungFrom'></span>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
<input type='button' id='alleLVsMarkieren' value='Alle fehlenden auswählen'/>
|
||||
<input type='button' id='alleLVsAbwaehlen' value='Alle abwählen'/>
|
||||
<table style='width: auto;' class='tablesorter' id='kompatibleLVsFrom'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>ID</th>
|
||||
<th>Kurzbezeichnung</th>
|
||||
<th>Bezeichnung</th>
|
||||
<th>ECTS</th>
|
||||
<th>Studiengang</th>
|
||||
<th>Organisationseiheit</th>
|
||||
<th>Übernehmen?</th>
|
||||
<th>Löschen?</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
</tbody>
|
||||
</table>
|
||||
<input type='button' id='kompatibleLVsUbernehmen' value='Übernehmen'/>
|
||||
|
||||
|
||||
</div>
|
||||
<div class='box'>
|
||||
<div style='padding-top: 1em;'>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td><b>Suche: </b></td>
|
||||
<td colspan='3'>
|
||||
<input type='text' class='autocomplete' id='autocompleteTo' placeholder='Suche...'/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>Studiengang: </b></td>
|
||||
<td>
|
||||
<select id='stgDropdownTo' style='margin-right: 1em;'>";
|
||||
foreach($studiengang->result as $stg)
|
||||
{
|
||||
echo "<option value=".$stg->studiengang_kz.">".$stg->kuerzel." - ".$stg->kurzbzlang."</option>";
|
||||
}
|
||||
echo "</select>
|
||||
</td>
|
||||
<td><b>OE:</b></td>";
|
||||
echo "<td>
|
||||
<select id='oeDropdownTo' style='margin-right: 1em;'>
|
||||
<option value='null'>-- Keine --</option>";
|
||||
foreach($organisationseinheit->result as $oe)
|
||||
{
|
||||
echo "<option value=".$oe->oe_kurzbz.">".$oe->organisationseinheittyp_kurzbz." ".$oe->bezeichnung."</option>";
|
||||
}
|
||||
echo "</select></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>Semester: </b></td>
|
||||
<td>
|
||||
<select id='semDropdownTo' style='margin-right: 1em;'>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>Lehrveranstaltungen: </b></td>
|
||||
<td colspan='3'>
|
||||
<select class='lvDropdown' id='lvDropdownTo'></select>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
</div>
|
||||
Kompatible Lehrveranstaltungen - <span id='lvBezeichnungTo'></span>
|
||||
<table style='width: auto;' class='tablesorter' id='kompatibleLVsTo'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>ID</th>
|
||||
<th>Kurzbezeichnung</th>
|
||||
<th>Bezeichnung</th>
|
||||
<th>ECTS</th>
|
||||
<th>Studiengang</th>
|
||||
<th>Organisationseiheit</th>
|
||||
<th>Löschen?</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody></tbody>
|
||||
|
||||
</table>
|
||||
</div>
|
||||
";
|
||||
|
||||
|
||||
echo "</body>
|
||||
</html>";
|
||||
|
||||
?>
|
||||
@@ -695,15 +695,16 @@ function loadLVKompatibilitaet(lvid)
|
||||
}).success(function(data)
|
||||
{
|
||||
var html='';
|
||||
html = html+'<a href="lehrveranstaltung_kompatibel_vergleichen.php" target="_blank">kompatible Lehrveranstaltungen vergleichen</a><br><br>';
|
||||
html = html+'<a href="lehrveranstaltung_kompatibel.php?lehrveranstaltung_id='+lvid+'&type=edit" target="_blank">kompatible Lehrveranstaltungen hinzufügen</a><br>';
|
||||
for(i in data.result)
|
||||
{
|
||||
if(data.result[i])
|
||||
{
|
||||
lvdata = data.result[i];
|
||||
if(!(lvdata.kurzbz===null && lvdata.bezeichnung===null && lvdata.studiengang_kz===null && lvdata.semester===null))
|
||||
html = html+'<br>'+lvdata.kurzbz+' - '+lvdata.bezeichnung+' (Studiengang '+lvdata.studiengang_kz+', Semester '+lvdata.semester+')';
|
||||
html = html+'<br>'+lvdata.kurzbz+' - '+lvdata.bezeichnung+' (Studiengang '+lvdata.studiengang_kz+', Semester '+lvdata.semester+')<br>';
|
||||
}
|
||||
html = html+'<br><br><a href="lehrveranstaltung_kompatibel.php?lehrveranstaltung_id='+lvid+'&type=edit" target="_blank">kompatible Lehrveranstaltungen hinzufügen</a>';
|
||||
}
|
||||
$("#tab-kompatibel").html(html);
|
||||
|
||||
|
||||
@@ -153,7 +153,7 @@ echo "<tr><td align='right'>Name:</td><td> $person->titelpre $person->nachname $
|
||||
echo "<tr><td align='right'>Geburtsdatum:</td><td> ".$datum_obj->formatDatum($person->gebdatum,'d.m.Y')."</td></tr>";
|
||||
echo "<tr><td align='right'>Geschlecht:</td><td> ".$person->geschlecht."</td></tr>";
|
||||
echo "<tr valign='top'><td align='right'>Anmerkung:</td><td width='800px'> ".$db->convert_html_chars($person->anmerkungen)."</td></tr>";
|
||||
echo "<tr valign='top'><td align='right'>Zugangscode:</td><td width='800px'>".(in_array('bewerbung', (explode(';', ACTIVE_ADDONS)))?"<a href='".CIS_ROOT."addons/bewerbung/cis/registration.php?code=".$db->convert_html_chars($person->zugangscode)."&emailAdresse=".$email."' target='_blank'>".$db->convert_html_chars($person->zugangscode)."</a>":$db->convert_html_chars($person->zugangscode))."</td></tr>";
|
||||
echo "<tr valign='top'><td align='right'>Zugangscode:</td><td width='800px'>".(in_array('bewerbung', (explode(';', ACTIVE_ADDONS)))?"<a href='".CIS_ROOT."addons/bewerbung/cis/registration.php?code=".$db->convert_html_chars($person->zugangscode)."&emailAdresse=".$email."&keepEmailUnverified=true' target='_blank'>".$db->convert_html_chars($person->zugangscode)."</a>":$db->convert_html_chars($person->zugangscode))."</td></tr>";
|
||||
echo '</table>';
|
||||
|
||||
echo '<br><a href="../fhausweis/search.php?person_id='.$person->person_id.'">Statusinformation - FH Ausweis</a><br>';
|
||||
|
||||
Reference in New Issue
Block a user