Compare commits

...
Author SHA1 Message Date
ma0048 9a01641511 auswertung entsperen alle teilnehmer hinzugefuegt 2025-05-26 09:28:14 +02:00
Cristina c3e978b56e Adapted Input.js radio/checkbox label to accept HTML 2025-05-21 18:10:03 +02:00
Cristina 7e83df51a8 Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2025-05-21 18:05:40 +02:00
Andreas Österreicher d677cee1f9 Merge branch 'feature-56330/Digi-Anw-Feedback' 2025-05-21 15:27:31 +02:00
Andreas Österreicher 8786b60c4c Merge branch 'master' into feature-56330/Digi-Anw-Feedback 2025-05-21 14:11:50 +02:00
Andreas Österreicher 9b9351fe9b Merge branch 'bug-62088/dummy_std_beim_reinziehen_im_fas_zu_einer_lv_kommt_eine_fehlermeldung_130_std_und_zuordnung_funktioniert_nicht' 2025-05-21 10:49:49 +02:00
ma0048 02701dc0c5 fixed bug stundengrenze hinweis beim hinzufuegen eines dummy lektors 2025-05-21 10:47:55 +02:00
Harald Bamberger e9a373afb8 Merge branch 'feature-61758/stv_kontakte_get_funktionen_null_abfangen' 2025-05-21 07:11:18 +02:00
Harald Bamberger 1222d33e6e Merge branch 'master' into feature-61758/stv_kontakte_get_funktionen_null_abfangen 2025-05-21 07:10:47 +02:00
Andreas Österreicher 2db7f812ab Fehlerkurzbz korrigiert 2025-05-20 11:31:28 +02:00
Andreas Österreicher 8b89d6f1cb Merge branch 'feature-48553/UHSTAT_Meldung_fuer_Privatuniversitaeten' 2025-05-20 11:11:39 +02:00
Harald Bamberger 310bd08648 Merge branch 'feature-40430/updateamum_von_im_AntragLib' 2025-05-19 10:51:05 +02:00
Harald Bamberger bc4514b2a0 Merge branch 'master' into feature-40430/updateamum_von_im_AntragLib 2025-05-19 10:29:28 +02:00
Harald Bamberger 3c08bc12cd Merge branch 'feature-61748/FHC-Alert-Plugin_EMail-Address' 2025-05-14 09:20:47 +02:00
ma0048 6e56de1790 null werte abgefangen 2025-05-14 08:33:25 +02:00
Andreas Österreicher a72dcdf8b0 Merge branch 'bug-61306/addfaktor_entfernen' 2025-05-13 15:31:20 +02:00
Harald Bamberger 4bceddcc82 add systemerror_mailto ci config, render systemerror_mailto to FHC_JS_DATA_STORAGE_OBJECT, use FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto in FhcAlert Plugins 2025-05-09 13:58:14 +02:00
Andreas Österreicher 7030d5b822 Merge branch 'feature-54827/internationalisierungsmassnahmen_optimierungen' 2025-05-05 11:32:18 +02:00
Andreas Österreicher 6dfa7089e7 Merge branch 'master' into feature-54827/internationalisierungsmassnahmen_optimierungen 2025-05-05 11:08:25 +02:00
Johann Hoffmann 47917e42c3 compare datetime timestamp for n-workdays ago calculation; more eager check on change of kontrollzeiten/termine if they match a termin; added missing phrase; fetch uploaddatum in same format as von/bis for entschuldigungen so date headerfilter can work as intended; zugangscode zeitlich abgelaufen show error message; 2025-04-17 12:07:54 +02:00
Johann Hoffmann 3f607ec241 phrasen 2025-04-15 18:03:51 +02:00
Johann Hoffmann 5abc48f568 Merge branch 'master' into feature-56330/Digi-Anw-Feedback 2025-04-15 17:56:31 +02:00
ma0048 1888c51a48 master gemerged
phrase bugfix
2025-04-15 11:09:59 +02:00
ma0048 ad93a0a84c Merge branch 'refs/heads/master' into feature-54827/internationalisierungsmassnahmen_optimierungen 2025-04-15 11:09:05 +02:00
Johann Hoffmann 6b6ec311c7 Merge branch 'master' into feature-56330/Digi-Anw-Feedback 2025-04-14 15:23:31 +02:00
Johann Hoffmann 8218c915d5 anw phrasen 2025-04-14 15:14:49 +02:00
Johann Hoffmann 4ee239dd62 entschuldigung upload without file; changed dropdowns; 2025-04-11 15:53:18 +02:00
ma0048 bcc712e900 addfaktor beim hinzuefuegen einer lv entfernt 2025-04-09 14:27:37 +02:00
Cristina 8788cf17e2 Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2025-04-09 12:14:51 +02:00
Alexei Karpenko b4b2d8da49 added UHSTAT issue resolvers, bugfix getuhstatdata: check for empty array 2025-03-30 23:38:35 +02:00
Johann Hoffmann ba806c13fb assistenz edit entschuldigung modal for editing von/bis date (on open excuse notes) & textarea for notiz - which is still limited to 255 characters; added student semester column to assistenz table; removed column width constraints & layout changed to fitData, persistence option is TRUE now; WIP von/bis/uplaoddate headerfilter; automatically send email to students on entschuldigungn status changed; added minimum time range for Kontrolle to be at least the length of 1 teaching unit(per config) - currently 45minutes; start new kontrolle modal more clearly shows when time & date values have been read from stundenplan; increased qr degeneration timer from 200 to 5000ms to avoid "missed" checkins due to network time; lektor can retrieve all entschuldigungen ranges & statuses of students when hovering their row; lektor can show anw qr window seperately now; into externalzuordnung admin/person_id fix in deleteEntschuldigung; moved fetch semesterinfo into global setup; fixed some vue template warnings; 2025-03-27 17:15:37 +01:00
Cristina 0113c9d97a Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2025-03-27 13:42:48 +01:00
Cristina 92db886a9f Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2025-03-24 11:18:53 +01:00
Johann Hoffmann a3e22da633 calcEntschuldigungen minDate as workdays in config; updatevon/um anwCheckIn; Orgform dual in sancho mail; zusatz (d.d.i)/(d.d.o) & (o) auch wenn bis datum leer ist aber von bereits eingetragen 2025-03-20 17:21:42 +01:00
Alexei Karpenko fb2f8d5c53 added function for getting UHSTAT1 person data (centralizing...) 2025-03-20 14:41:28 +01:00
Cristina 19fdefc398 Merge branch 'master' of https://github.com/FH-Complete/FHC-Core 2025-03-18 10:42:15 +01:00
ma0048 30c4245861 - international skills -> diplomasupp
- notenuebernahme mail
- student uebersicht ueberarbeitet
- phrases angepasst
2025-02-27 08:35:05 +01:00
ma0048 b079d22e8d - filter hinzugefuegt
- db index hinzugefuegt
- sqls optimiert
- diplomand wird nun auch angezeigt
2025-01-27 09:37:02 +01:00
cgfhtw c0e2cec556 s&d 2024-08-14 15:51:27 +02:00
21 changed files with 900 additions and 66 deletions
+3 -1
View File
@@ -4,4 +4,6 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
// use vuejs dev version
$config['use_vuejs_dev_version'] = false;
// use bundled javascript
$config['use_bundled_javascript'] = false;
$config['use_bundled_javascript'] = false;
// systemerror_mailto use in FHC-Alert Plugin - if empty Link will not be rendered
$config['systemerror_mailto'] = '';
@@ -85,7 +85,10 @@ class Kontakt extends FHCAPI_Controller
|| $this->router->method == 'addNewBankverbindung'
) {
$person_id = current(array_slice($this->uri->rsegments, 2));
if (is_null($person_id) || !ctype_digit((string)$person_id))
$this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
$this->checkPermissionsForPerson($person_id, $permsMa, $permsStud);
} elseif ($this->router->method == 'loadAddress'
|| $this->router->method == 'loadContact'
@@ -119,6 +122,9 @@ class Kontakt extends FHCAPI_Controller
$model = 'person/Bankverbindung_model';
}
if (!isset($id) || !ctype_digit((string)$id))
$this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
$this->load->model($model, 'TempModel');
$result = $this->TempModel->load($id);
$data = $this->getDataOrTerminateWithError($result);
@@ -387,8 +393,11 @@ class Kontakt extends FHCAPI_Controller
$this->terminateWithSuccess(getData($result) ?: []);
}
public function getFirmen($searchString)
public function getFirmen($searchString = null)
{
if (is_null($searchString))
$this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
$this->load->model('ressource/firma_model', 'FirmaModel');
$result = $this->FirmaModel->searchFirmen($searchString);
@@ -398,8 +407,11 @@ class Kontakt extends FHCAPI_Controller
$this->terminateWithSuccess($result ?: []);
}
public function getStandorte($searchString)
public function getStandorte($searchString = null)
{
if (is_null($searchString))
$this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
$this->load->model('organisation/standort_model', 'StandortModel');
$result = $this->StandortModel->searchStandorte($searchString);
@@ -409,8 +421,11 @@ class Kontakt extends FHCAPI_Controller
$this->terminateWithSuccess($data);
}
public function getStandorteByFirma($firma_id)
public function getStandorteByFirma($firma_id = null)
{
if (is_null($firma_id) || !ctype_digit((string)$firma_id))
$this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
$this->load->model('organisation/standort_model', 'StandortModel');
$result = $this->StandortModel->getStandorteByFirma($firma_id);
@@ -652,6 +667,9 @@ class Kontakt extends FHCAPI_Controller
$bic = $this->input->post('bic');
$blz = $this->input->post('blz');
$kontonr = $this->input->post('kontonr');
$iban = $this->input->post('iban');
$typ = $this->input->post('typ');
$verrechnung = $this->input->post('verrechnung');
$result = $this->BankverbindungModel->insert(
[
@@ -659,13 +677,13 @@ class Kontakt extends FHCAPI_Controller
'name' => $name,
'anschrift' => $anschrift,
'bic' => $bic,
'iban' => $_POST['iban'],
'iban' => $iban,
'blz' => $blz,
'kontonr' => $kontonr,
'insertvon' => 'uid',
'insertamum' => date('c'),
'typ' => $_POST['typ'],
'verrechnung' => $_POST['verrechnung'],
'typ' => $typ,
'verrechnung' => $verrechnung,
'ext_id' => $ext_id,
'oe_kurzbz' => $oe_kurzbz,
'orgform_kurzbz' => $orgform_kurzbz
@@ -48,7 +48,9 @@ class IssueResolver extends IssueResolver_Controller
'CORE_PERSON_0001' => 'CORE_PERSON_0001',
'CORE_PERSON_0002' => 'CORE_PERSON_0002',
'CORE_PERSON_0003' => 'CORE_PERSON_0003',
'CORE_PERSON_0004' => 'CORE_PERSON_0004'
'CORE_PERSON_0004' => 'CORE_PERSON_0004',
'CORE_PERSON_0005' => 'CORE_PERSON_0005',
'CORE_PERSON_0006' => 'CORE_PERSON_0006'
);
// fehler which are resolved by the job the same way as they are produced
@@ -95,6 +95,9 @@ function generateJSDataStorageObject($indexPage, $calledPath, $calledMethod)
}, $server_language);
$user_language = getUserLanguage();
$ci->load->config('javascript');
$systemerror_mailto = $ci->config->item('systemerror_mailto');
$FHC_JS_DATA_STORAGE_OBJECT = array(
'app_root' => APP_ROOT,
'ci_router' => $indexPage,
@@ -103,6 +106,7 @@ function generateJSDataStorageObject($indexPage, $calledPath, $calledMethod)
'server_languages' => $server_language,
'user_language' => $user_language,
'timezone' => date_default_timezone_get(),
'systemerror_mailto' => $systemerror_mailto,
);
$toPrint = "\n";
+7 -2
View File
@@ -77,7 +77,9 @@ class AntragLib
'studiensemester_kurzbz'=>$prestudentstatus->studiensemester_kurzbz,
'ausbildungssemester'=>$prestudentstatus->ausbildungssemester
], [
'statusgrund_id' => null
'statusgrund_id' => null,
'updateamum' => date('c'),
'updatevon' => $insertvon
]);
}
}
@@ -335,7 +337,10 @@ class AntragLib
'status_kurzbz'=>$prestudentstatus->status_kurzbz,
'studiensemester_kurzbz'=>$prestudentstatus->studiensemester_kurzbz,
'ausbildungssemester'=>$prestudentstatus->ausbildungssemester
], []);
], [
'updateamum' => $insertam,
'updatevon' => $insertvon
]);
if (isError($result))
{
$errors[] = getError($result);
@@ -13,7 +13,7 @@ class PlausicheckResolverLib
private $_ci; // ci instance
private $_extensionName; // name of extension
private $_codeLibMappings = []; // mappings for issues which explicitly defined resolver
private $_codeProducerLibMappings = []; // mappings for issues which are resolved as produced
private $_codeProducerLibMappings = []; // mappings for issues which are resolved with the same check as they are produced
public function __construct($params = null)
{
@@ -99,10 +99,11 @@ class PlausicheckResolverLib
$issueResolved = getData($issueResolvedRes) === true;
}
}
elseif (isset($this->_codeProducerLibMappings[$issue->fehlercode]))
elseif (isset($this->_codeProducerLibMappings[$issue->fehlercode])) // check if it is an issue without explicit resolver, "self-resolving"
{
$libName = $this->_codeProducerLibMappings[$issue->fehlercode];
// execute same check as used for issue production
$issueResolvedRes = $this->_ci->plausicheckproducerlib->producePlausicheckIssue(
$libName,
$issue->fehler_kurzbz,
@@ -0,0 +1,36 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
* Geburtsnation missing
*/
class CORE_PERSON_0005 implements IIssueResolvedChecker
{
public function checkIfIssueIsResolved($params)
{
if (!isset($params['issue_person_id']) || !is_numeric($params['issue_person_id']))
return error('Person Id missing, issue_id: '.$params['issue_id']);
$this->_ci =& get_instance(); // get code igniter instance
$this->_ci->load->model('person/Person_model', 'PersonModel');
// load geburtsnation for the given person
$this->_ci->PersonModel->addSelect('geburtsnation');
$personRes = $this->_ci->PersonModel->load($params['issue_person_id']);
if (isError($personRes)) return $personRes;
if (hasData($personRes))
{
// get person data
$personData = getData($personRes)[0];
// if geburtsnation present, issue is resolved
return success(!isEmptyString($personData->geburtsnation));
}
else
return success(false); // if no person found, not resolved
}
}
@@ -0,0 +1,37 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
* Geburtsnation missing
*/
class CORE_PERSON_0006 implements IIssueResolvedChecker
{
public function checkIfIssueIsResolved($params)
{
if (!isset($params['issue_person_id']) || !is_numeric($params['issue_person_id']))
return error('Person Id missing, issue_id: '.$params['issue_id']);
$this->_ci =& get_instance(); // get code igniter instance
$this->_ci->load->model('codex/Uhstat1daten_model', 'UhstatModel');
$personRes = $this->_ci->UhstatModel->getUHSTAT1PersonData([$params['issue_person_id']]);
if (isError($personRes)) return $personRes;
if (hasData($personRes))
{
// get person data
$personData = getData($personRes)[0];
// if person identification data present, issue is resolved
return success(
!isEmptyString($personData->ersatzkennzeichen)
|| (!isEmptyString($personData->vbpkAs) && !isEmptyString($personData->vbpkBf))
);
}
else
return success(false); // if no person found, not resolved
}
}
@@ -11,4 +11,44 @@ class Uhstat1daten_model extends DB_Model
$this->dbTable = 'bis.tbl_uhstat1daten';
$this->pk = 'uhstat1daten_id';
}
/**
* Gets person data needed for sending as UHSTAT1 data.
* @param array $person_id_arr
* @param string $studiensemester
* @param array $status_kurzbz
* @return object success with prestudents or error
*/
public function getUHSTAT1PersonData($person_id_arr)
{
if (!isset($person_id_arr) || isEmptyArray($person_id_arr)) return success([]);
$params = array($person_id_arr);
$prstQry = "SELECT
DISTINCT ON (pers.person_id)
pers.person_id, uhstat_daten.uhstat1daten_id, pers.svnr, pers.ersatzkennzeichen, pers.geburtsnation,
uhstat_daten.mutter_geburtsstaat, uhstat_daten.mutter_bildungsstaat, uhstat_daten.mutter_geburtsjahr,
uhstat_daten.mutter_bildungmax, uhstat_daten.vater_geburtsstaat, uhstat_daten.vater_bildungsstaat,
uhstat_daten.vater_geburtsjahr, uhstat_daten.vater_bildungmax,
kzVbpkAs.inhalt AS \"vbpkAs\", kzVbpkBf.inhalt AS \"vbpkBf\"
FROM
public.tbl_person pers
JOIN public.tbl_prestudent ps USING (person_id)
JOIN public.tbl_studiengang stg USING (studiengang_kz)
JOIN bis.tbl_uhstat1daten uhstat_daten USING (person_id)
LEFT JOIN public.tbl_kennzeichen kzVbpkAs ON kzVbpkAs.kennzeichentyp_kurzbz = 'vbpkAs'AND kzVbpkAs.person_id = pers.person_id AND kzVbpkAs.aktiv
LEFT JOIN public.tbl_kennzeichen kzVbpkBf ON kzVbpkBf.kennzeichentyp_kurzbz = 'vbpkBf'AND kzVbpkBf.person_id = pers.person_id AND kzVbpkBf.aktiv
WHERE
ps.bismelden
AND stg.melderelevant
AND pers.person_id IN ?
ORDER BY
pers.person_id";
return $this->execReadOnlyQuery(
$prstQry,
$params
);
}
}
@@ -634,6 +634,7 @@ if(!$error)
JOIN public.tbl_studiengang USING(studiengang_kz)
WHERE
mitarbeiter_uid=".$db->db_add_param($lem->mitarbeiter_uid)." AND
lower(mitarbeiter_uid) NOT LIKE '_dummy%' AND
studiensemester_kurzbz=".$db->db_add_param($le->studiensemester_kurzbz)." AND
bismelden";
+18 -6
View File
@@ -200,7 +200,7 @@ class LehreListHelper
//Studierende der LV laden und in ein Array schreiben
$qry = 'SELECT
distinct on(nachname, vorname, person_id) vorname, nachname, wahlname, matrikelnr, public.tbl_student.student_uid,
distinct on(nachname, vorname, public.tbl_benutzer.person_id) vorname, nachname, wahlname, matrikelnr, public.tbl_student.student_uid,
tbl_studentlehrverband.semester, tbl_studentlehrverband.verband, tbl_studentlehrverband.gruppe,
(SELECT status_kurzbz FROM public.tbl_prestudentstatus
WHERE prestudent_id=tbl_student.prestudent_id
@@ -209,7 +209,8 @@ class LehreListHelper
tbl_note.lkt_ueberschreibbar, tbl_note.anmerkung, tbl_mitarbeiter.mitarbeiter_uid, tbl_person.matr_nr, tbl_person.geschlecht, tbl_studiengang.kurzbzlang,
tbl_mobilitaet.mobilitaetstyp_kurzbz, tbl_zeugnisnote.note,
(CASE WHEN bis.tbl_mobilitaet.studiensemester_kurzbz = vw_student_lehrveranstaltung.studiensemester_kurzbz THEN 1 ELSE 0 END) as doubledegree,
(tbl_bisio.bis::timestamp - tbl_bisio.von::timestamp) as daysout
(tbl_bisio.bis::timestamp - tbl_bisio.von::timestamp) as daysout,
public.tbl_prestudent.gsstudientyp_kurzbz as ddtype
FROM
campus.vw_student_lehrveranstaltung
JOIN public.tbl_benutzer USING(uid)
@@ -223,6 +224,7 @@ class LehreListHelper
LEFT JOIN bis.tbl_bisio ON(uid=tbl_bisio.student_uid)
LEFT JOIN public.tbl_studiengang ON(tbl_student.studiengang_kz=tbl_studiengang.studiengang_kz)
LEFT JOIN bis.tbl_mobilitaet USING(prestudent_id)
LEFT JOIN public.tbl_prestudent USING(prestudent_id)
WHERE
vw_student_lehrveranstaltung.lehrveranstaltung_id='.$this->db->db_add_param($this->lvid, FHC_INTEGER).' AND
vw_student_lehrveranstaltung.studiensemester_kurzbz='.$this->db->db_add_param($this->studiensemester);
@@ -231,7 +233,7 @@ class LehreListHelper
if($this->lehreinheit!='')
$qry.=' AND vw_student_lehrveranstaltung.lehreinheit_id='.$this->db->db_add_param($this->lehreinheit, FHC_INTEGER);
$qry.=' ORDER BY nachname, vorname, person_id, daysout DESC, doubledegree DESC';
$qry.=' ORDER BY nachname, vorname, public.tbl_benutzer.person_id, daysout DESC, doubledegree DESC';
$stsem_obj = new studiensemester();
$stsem_obj->load($this->studiensemester);
@@ -263,8 +265,13 @@ class LehreListHelper
//Outgoing
if($row->bisio_id != '' && $row->status != 'Incoming' && ($row->bis > $stsemdatumvon || $row->bis == '')
&& $row->von < $stsemdatumbis && (anzahlTage($row->von, $row->bis) >= 30))
&& $row->von < $stsemdatumbis && (anzahlTage($row->von, $row->bis) >= 30)) {
$zusatz .= '(o)(ab '.$datum->formatDatum($row->von, 'd.m.Y').')';
} else if ($row->bisio_id != '' && $row->status != 'Incoming' && ($row->von > $stsemdatumvon || $row->von == '')) {
// if bis datum is not yet known but von is available already
$zusatz .= '(o)(ab '.$datum->formatDatum($row->von, 'd.m.Y').')';
}
if($row->lkt_ueberschreibbar == 'f') // angerechnet / intern angerechnet / nicht zugelassen
$zusatz.= '('. $row->anmerkung. ')';
@@ -275,8 +282,13 @@ class LehreListHelper
if($row->stg_kz_student==$a_o_kz) //Außerordentliche Studierende
$zusatz.='(a.o.)';
if(($row->mobilitaetstyp_kurzbz != '') && ($row->doubledegree == 1)) //Double Degree Student
$zusatz .= '(d.d.)';
if(($row->mobilitaetstyp_kurzbz != '') && ($row->doubledegree == 1)) {
//Double Degree Student
$zusatz .= '(d.d.';
if($row->ddtype == 'Intern') $zusatz .= 'i.)';
else if ($row->ddtype == 'Extern') $zusatz .='o.)';
else $zusatz .= ')';
}
if(($row->wahlname != ''))
{
+1
View File
@@ -119,6 +119,7 @@ export default {
<div class="modal-content">
<div v-if="$slots.title" class="modal-header">
<h5 class="modal-title"><slot name="title"/></h5>
<slot name="popoutButton"></slot>
<button v-if="!noCloseBtn" type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body" :class="bodyClass">
+1 -1
View File
@@ -318,7 +318,7 @@ export default {
>
<slot></slot>
</component>
<label v-if="label && (lcType == 'radio' || lcType == 'checkbox')" :for="idCmp" :class="!noAutoClass && 'form-check-label'">{{label}}</label>
<label v-if="label && (lcType == 'radio' || lcType == 'checkbox')" :for="idCmp" :class="!noAutoClass && 'form-check-label'" v-html="label"></label>
<div v-if="valid !== undefined && feedback.length && !noFeedback" :class="feedbackClass">
<template v-for="(msg, i) in feedback" :key="i">
<hr v-if="i" class="m-0">
+5 -1
View File
@@ -20,6 +20,10 @@ export default {
accept: {
type: String,
default: ''
},
disabled: {
type: Boolean,
default: false
}
},
methods: {
@@ -88,7 +92,7 @@ export default {
},
template: `
<div class="form-upload-dms">
<input ref="upload" class="form-control" :accept="accept" :class="inputClass" :id="id" :name="name" :multiple="multiple" type="file" @change="addFiles">
<input ref="upload" class="form-control" :disabled="disabled" :accept="accept" :class="inputClass" :id="id" :name="name" :multiple="multiple" type="file" @change="addFiles">
<ul v-if="modelValue.length && multiple && !noList" :accept="accept" class="list-unstyled m-0">
<dms-item
v-for="(file, index) in modelValue"
+7 -1
View File
@@ -117,7 +117,7 @@ const helperApp = Vue.createApp({
},
methods: {
mailToUrl(slotProps) {
let mailTo = '[email protected]'; // TODO domain anpassen
let mailTo = FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto;
let subject = 'Meldung%20Systemfehler';
let body = `
Danke, dass Sie uns den Fehler melden. %0D%0A %0D%0A
@@ -141,6 +141,11 @@ const helperApp = Vue.createApp({
unmounted() {
helperAppContainer.parentElement.removeChild(helperAppContainer);
},
computed: {
showmaillink: function() {
return FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto !== '';
}
},
template: `
<pv-toast ref="toast" class="fhc-alert" :base-z-index="99999"></pv-toast>
<pv-toast ref="alert" class="fhc-alert" :base-z-index="99999" position="center">
@@ -162,6 +167,7 @@ const helperApp = Vue.createApp({
Fehler anzeigen
</a>
<a
v-if="showmaillink"
class="btn btn-primary flex-fill"
target="_blank"
:href="mailToUrl(slotProps)"
+7 -1
View File
@@ -109,7 +109,7 @@ const helperApp = Vue.createApp({
},
methods: {
mailToUrl(slotProps) {
let mailTo = '[email protected]'; // TODO domain anpassen
let mailTo = FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto;
let subject = 'Meldung%20Systemfehler';
let body = `
Danke, dass Sie uns den Fehler melden. %0D%0A %0D%0A
@@ -133,6 +133,11 @@ const helperApp = Vue.createApp({
unmounted() {
helperAppContainer.parentElement.removeChild(helperAppContainer);
},
computed: {
showmaillink: function() {
return FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto !== '';
}
},
template: `
<pv-toast ref="toast" class="fhc-alert" :base-z-index="99999"></pv-toast>
<pv-toast ref="alert" class="fhc-alert" :base-z-index="99999" position="center">
@@ -154,6 +159,7 @@ const helperApp = Vue.createApp({
Fehler anzeigen
</a>
<a
v-if="showmaillink"
class="btn btn-primary flex-fill"
target="_blank"
:href="mailToUrl(slotProps)"
+52
View File
@@ -386,6 +386,7 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml")
echo ' <titel_en>'.$titel_en.'</titel_en>';
$praktikum = false;
$auslandssemester = false;
$internationalskills = false;
$qry = "SELECT
projektarbeit_id
FROM
@@ -403,6 +404,56 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml")
}
}
if ($row->typ === 'b')
{
//check if extension international skills is active
$qry = "SELECT 1
FROM information_schema.tables
WHERE table_schema = 'extension' AND table_name = 'tbl_internat_massnahme'";
if($result = $db->db_query($qry))
{
if ($db->db_num_rows($result) === 1)
{
$qry = "SELECT bezeichnung_mehrsprachig[1] as \"internationalskill_deutsch\",
bezeichnung_mehrsprachig[2] as \"internationalskill_english\"
FROM extension.tbl_internat_massnahme_zuordnung zuordnung
JOIN extension.tbl_internat_massnahme massnahme ON zuordnung.massnahme_id = massnahme.massnahme_id
JOIN extension.tbl_internat_massnahme_zuordnung_status zstatus ON zuordnung.massnahme_zuordnung_id = zstatus.massnahme_zuordnung_id
JOIN tbl_prestudent ON zuordnung.prestudent_id = tbl_prestudent.prestudent_id
JOIN tbl_student ON tbl_prestudent.prestudent_id = tbl_student.prestudent_id
WHERE zstatus.massnahme_status_kurzbz = 'confirmed'
AND tbl_student.student_uid = ".$db->db_add_param($uid_arr[$i])."
AND zstatus.massnahme_zuordnung_status_id = (
SELECT MAX(sub_zstatus.massnahme_zuordnung_status_id)
FROM extension.tbl_internat_massnahme_zuordnung_status sub_zstatus
WHERE sub_zstatus.massnahme_zuordnung_id = zuordnung.massnahme_zuordnung_id
)
GROUP BY zuordnung.massnahme_zuordnung_id, tbl_student.student_uid, tbl_prestudent.prestudent_id, tbl_prestudent.studiengang_kz, bezeichnung_mehrsprachig;";
if($db->db_query($qry))
{
if($db->db_num_rows() > 0)
{
$internationalskills = true;
echo "<internationalskills>";
while($row1 = $db->db_fetch_object())
{
echo "<internationalskillsdeutsch>";
echo "<internationalskilldeutsch><![CDATA[$row1->internationalskill_deutsch]]></internationalskilldeutsch>";
echo "</internationalskillsdeutsch>";
echo "<internationalskillsenglisch>";
echo "<internationalskillenglish><![CDATA[$row1->internationalskill_english]]></internationalskillenglish>";
echo "</internationalskillsenglisch>";
}
echo "</internationalskills>";
}
}
}
}
}
$qry = "SELECT tbl_bisio.bisio_id, von, bis, lehreinheit_id,
(SELECT STRING_AGG (
tbl_zweck.bezeichnung,
@@ -461,6 +512,7 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml")
$abschlusspruefungsdatum = '';
$abschlussbeurteilung='';
$pruefungstyp_kurzbz='';
$abschlussbeurteilung_deutsch = '';
if($db->db_query($qry))
{
+16
View File
@@ -324,6 +324,22 @@ $fehlerArr = array(
'fehlertext' => 'Es sind mehrere oder keine Zustelladressen eingetragen',
'fehlertyp_kurzbz' => 'error',
'app' => 'core'
),
array(
'fehlercode' => 'CORE_PERSON_0005',
'fehler_kurzbz' => 'geburtsnationFehlt',
'fehlercode_extern' => null,
'fehlertext' => 'Geburtsnation nicht vorhanden',
'fehlertyp_kurzbz' => 'error',
'app' => 'core'
),
array(
'fehlercode' => 'CORE_PERSON_0006',
'fehler_kurzbz' => 'uhstatPersonkennungFehltCore',
'fehlercode_extern' => null,
'fehlertext' => 'Personkennung fehlt (vBpk AS, vBpk BF oder Ersatzkennzeichen fehlt)',
'fehlertyp_kurzbz' => 'error',
'app' => 'core'
)
/** Plausichecks end **/
);
+491 -11
View File
@@ -18428,6 +18428,26 @@ array(
)
)
),
array(
'app' => 'international',
'category' => 'international',
'phrase' => 'studentstatus',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Studentstatus',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Student status',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'international',
'category' => 'international',
@@ -19331,13 +19351,33 @@ array(
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Maßnahmen - geplant',
'text' => 'Maßnahme - geplant',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Measures - planned',
'text' => 'Measure - planned',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'international',
'category' => 'international',
'phrase' => 'geplanteMassnahmenDesc',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Die Maßhname wurde geplant.',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'The measure was planned.',
'description' => '',
'insertvon' => 'system'
)
@@ -19391,13 +19431,13 @@ array(
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Maßnahmen - durchgeführt',
'text' => 'Maßnahme - durchgeführt',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Measures - performed',
'text' => 'Measure - performed',
'description' => '',
'insertvon' => 'system'
)
@@ -19431,13 +19471,13 @@ array(
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Maßnahmen - abgelehnt',
'text' => 'Maßnahme - abgelehnt',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Measures - declined',
'text' => 'Measure - declined',
'description' => '',
'insertvon' => 'system'
)
@@ -19531,13 +19571,13 @@ array(
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Anmerkung - Studiengangsleitung',
'text' => 'Begründung - Studiengangsleitung',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Note - Study course Director',
'text' => 'Reason - Study course Director',
'description' => '',
'insertvon' => 'system'
)
@@ -19563,6 +19603,26 @@ array(
)
)
),
array(
'app' => 'international',
'category' => 'international',
'phrase' => 'stgtodo',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Nur offene Massnahmen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'only open measures',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'international',
'category' => 'international',
@@ -30024,6 +30084,26 @@ array(
)
)
),
array(
'app' => 'anwesenheiten',
'category' => 'global',
'phrase' => 'entschuldigungStatusUpdateAutoEmailBetreff',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Entschuldigung Status Update.',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Excuse note status update.',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'anwesenheiten',
'category' => 'global',
@@ -31352,7 +31432,7 @@ array(
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Termine laut Stundenplan',
'text' => 'Unterricht laut Stundenplan',
'description' => '',
'insertvon' => 'system'
),
@@ -31364,6 +31444,26 @@ array(
)
)
),
array(
'app' => 'anwesenheiten',
'category' => 'global',
'phrase' => 'unterrichtDauer',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Unterricht Dauer',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Lesson Duration',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'anwesenheiten',
'category' => 'global',
@@ -31432,13 +31532,13 @@ array(
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Keine zugeteilten Studenten gefunden!',
'text' => 'Keine zugeteilten Studenten gefunden für den gewählten LV-Teil gefunden!',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'No assigned students found!',
'text' => 'No assigned students for the selected teaching unit found!',
'description' => '',
'insertvon' => 'system'
)
@@ -31744,6 +31844,86 @@ array(
)
)
),
array(
'app' => 'anwesenheiten',
'category' => 'global',
'phrase' => 'kontrollDauerUnterMindestwert',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Kontrolle muss für eine Unterrichtsdauer von mindestens {0} Minuten gelten.',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Attendance check must apply for a lesson duration of at least {0} minutes.',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'anwesenheiten',
'category' => 'global',
'phrase' => 'zeitNichtAusStundenplanBeginn',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Unterrichtbeginn entspricht keinem Unterrichtstermin laut Stundenplan.',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Lecture Begin Time does not match a lesson as per timetable.',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'anwesenheiten',
'category' => 'global',
'phrase' => 'zeitNichtAusStundenplanEnde',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Unterrichtende entspricht keinem Unterrichtstermin laut Stundenplan.',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Lecture End Time does not match a lesson as per timetable.',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'anwesenheiten',
'category' => 'global',
'phrase' => 'datumNichtAusStundenplan',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Datum entspricht keinem Stundenplan Termin.',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Date does not match a lesson as per timetable.',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'anwesenheiten',
'category' => 'global',
@@ -31940,6 +32120,306 @@ array(
)
)
),
array(
'app' => 'anwesenheiten',
'category' => 'global',
'phrase' => 'anwTimeline',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Digitale Anwesenheiten Timeline',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Digital Attendances Timeline',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'anwesenheiten',
'category' => 'global',
'phrase' => 'entschuldigungEdit',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Entschuldigung bearbeiten',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Excuse Note Edit',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'anwesenheiten',
'category' => 'global',
'phrase' => 'excuseUploadNoFile',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Dokument wird nachgereicht',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Document will be submitted later',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'anwesenheiten',
'category' => 'global',
'phrase' => 'entschuldigungEditieren',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Entschuldigung bearbeiten',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Edit Excuse Note',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'anwesenheiten',
'category' => 'global',
'phrase' => 'missingEntschuldigungFile',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Fehlendes Dokument!',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Missing Document!',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'anwesenheiten',
'category' => 'global',
'phrase' => 'anwKontrolleVon',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Unterricht von',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Lesson from',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'anwesenheiten',
'category' => 'global',
'phrase' => 'anwKontrolleBis',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Unterricht bis',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Lesson until',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'anwesenheiten',
'category' => 'global',
'phrase' => 'termineAusStundenplan',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Unterricht Termine laut Stundenplan',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Lesson dates according to timetable',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'anwesenheiten',
'category' => 'global',
'phrase' => 'tooltipUnterrichtZeitCustom',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Unterrichtszeiten werden aus dem Stundenplan geladen, überschreiben Sie diese nur falls Ihre tatsächliche Unterrichtszeiten davon abweichen!',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Lesson times are loaded from the timetable, only overwrite them if your actual lesson times differ!',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'anwesenheiten',
'category' => 'global',
'phrase' => 'tooltipUnterrichtDatumCustom',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Unterrichtsdaten werden aus dem Stundenplan geladen, überschreiben Sie dieses nur falls Ihr tatsächliches Unterrichtsdatum abweicht!',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Class dates are loaded from the timetable, only overwrite this if your actual class date differs!',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'anwesenheiten',
'category' => 'global',
'phrase' => 'unterrichtzeit',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Unterrichtszeiten',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Lesson Times',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'anwesenheiten',
'category' => 'global',
'phrase' => 'statusLegende',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Status Legende',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Status Legend',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'anwesenheiten',
'category' => 'global',
'phrase' => 'download',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Herunterladen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Download',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'anwesenheiten',
'category' => 'global',
'phrase' => 'upload',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Hochladen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Upload',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'anwesenheiten',
'category' => 'global',
'phrase' => 'providedDateTooOld',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Angegebenes Datum ist älter als erlaubt.',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Provided date is older than allowed date',
'description' => '',
'insertvon' => 'system'
)
)
),
//
// DIGITALE ANWESENHEITEN PHRASEN END
//
@@ -30,8 +30,6 @@
require_once('../../include/lehrmodus.class.php');
require_once('../../include/benutzerberechtigung.class.php');
require_once('../../include/studienplan.class.php');
require_once('../../include/lehrveranstaltung_faktor.class.php');
require_once('../../include/studiensemester.class.php');
if (!$db = new basis_db())
die('Es konnte keine Verbindung zum Server aufgebaut werden.');
@@ -141,31 +139,6 @@
$reloadstr .= " window.location.href='".$_SERVER['PHP_SELF']."?stg_kz=$lv->studiengang_kz&semester=$lv->semester&neu=true';";
}
$reloadstr .= "</script>\n";
if (in_array($lv->lehrtyp_kurzbz, array('tpl', 'lv')) && $lv->new === true)
{
$lv_faktor = new lehrveranstaltung_faktor();
$studiensemester = new studiensemester();
$studiensemester_von = $studiensemester->getLastOrAktSemester();
if ($lv->lehrtyp_kurzbz === 'lv' && $_POST['lehrveranstaltung_template_id'] !== '')
{
$lv_faktor->getAkt($_POST['lehrveranstaltung_template_id']);
//TODO Faktor in eine Config
if (is_null($lv_faktor->faktor))
$lv_faktor->addFaktor($lv->lehrveranstaltung_id, 2, $studiensemester_von);
else
$lv_faktor->addFaktor($lv->lehrveranstaltung_id, $lv_faktor->faktor, $studiensemester_von);
}
else
{
$lv_faktor->loadByLV($lv->lehrveranstaltung_id);
if (empty($lv_faktor->lv_faktoren))
{
$lv_faktor->addFaktor($lv->lehrveranstaltung_id, 2, $studiensemester_von);
}
}
}
}
}
+143 -5
View File
@@ -667,6 +667,45 @@ if ($rtFreischalten)
}
}
$personenEntsperren = filter_input(INPUT_POST, 'personenEntsperren', FILTER_VALIDATE_BOOLEAN);
if ($personenEntsperren)
{
if (!$rechte->isBerechtigt('lehre/reihungstestAufsicht', null, 'su'))
{
echo json_encode(array(
'status' => 'fehler',
'msg' => $rechte->errormsg
));
exit();
}
if (isset($_POST['personen']))
{
$personen_ids = (array_keys($_POST['personen']));
$qry = "UPDATE testtool.tbl_pruefling
SET gesperrt = false
WHERE prestudent_id IN (SELECT prestudent_id FROM public.tbl_prestudent WHERE person_id IN (". $db->implode4SQL($personen_ids) ."))";
if ($result = $db->db_query($qry))
{
$msg = 'Alle Teilnehmer wurden freigeschaltet';
echo json_encode(array(
'status' => 'ok',
'msg' => $msg));
exit();
}
else
{
echo json_encode(array(
'status' => 'fehler',
'msg' => 'Fehler beim speichern der Daten'
));
exit();
}
}
}
// Informiert die Studiengangsassistenz über das Ende des Tests
$testende = filter_input(INPUT_POST, 'testende', FILTER_VALIDATE_BOOLEAN);
if ($testende)
@@ -1539,7 +1578,7 @@ if (isset($_REQUEST['reihungstest']) || isset($_POST['rtauswsubmit']))
tbl_gebiet.bezeichnung AS gebiet,
tbl_pruefling.idnachweis,
tbl_pruefling.registriert,
tbl_pruefling.gesperrt,
(SELECT gesperrt FROM testtool.tbl_pruefling WHERE prestudent_id IN (SELECT prestudent_id FROM public.tbl_prestudent WHERE person_id = tbl_person.person_id) ORDER BY gesperrt DESC LIMIT 1) gesperrt,
tbl_pruefling.pruefling_id,
get_rolle_prestudent(prestudent_id, rt.studiensemester_kurzbz) AS letzter_status
FROM PUBLIC.tbl_rt_person
@@ -2420,17 +2459,46 @@ else
});
}
}
function sperrWarning(change)
{
let sperrCountSpan = $(".sperrcount");
let sperrTextSpan = $(".sperrtext");
let count = parseInt(sperrCountSpan.text());
if (isNaN(count)) count = 0;
let newCount = count + change;
if (newCount < 0) newCount = 0;
sperrCountSpan.text(newCount);
let warningBox = $("#gesperrtWarning");
if (newCount === 0)
{
warningBox.hide();
}
else
{
if (newCount === 1)
sperrTextSpan.text("ist");
else
sperrTextSpan.text("sind");
warningBox.show();
}
}
function prueflingEntSperren(element)
{
var person_id = element.getAttribute("data-person-id");
var name = element.getAttribute("data-person-name");
var art = element.getAttribute("data-art") === "true";
let person_id = element.getAttribute("data-person-id");
let name = element.getAttribute("data-person-name");
let art = element.getAttribute("data-art") === "true";
let text = art ? "sperren" : "entsperren";
if (confirm("Wollen Sie den Studenten "+ name + " wirklich " + text + "?"))
{
data = {
let data = {
person_id: person_id,
art: art,
rtprueflingEntSperren: true
@@ -2463,11 +2531,13 @@ else
{
if (art === true)
{
sperrWarning(+1)
$(".prueflingentsperren_" + person_id).removeClass("hidden");
$(".prueflingsperren_" + person_id).addClass("hidden");
}
else if (art === false)
{
sperrWarning(-1)
$(".prueflingsperren_" + person_id).removeClass("hidden");
$(".prueflingentsperren_" + person_id).addClass("hidden");
}
@@ -2564,6 +2634,47 @@ else
}
}
function alleentsperren(element)
{
let personenJson = element.getAttribute("data-gesperrte-personen");
let personen = JSON.parse(personenJson);
let data = {
personen: personen,
personenEntsperren: true,
};
$.ajax({
url: "auswertung_fhtw.php",
data: data,
type: "POST",
dataType: "json",
success: function(data)
{
if(data.status !== "ok")
{
$("#msgbox").attr("class","alert alert-danger");
$("#msgbox").show();
$("#msgbox").html(data["msg"]);
}
else
{
$("#gesperrtWarning").hide();
$("#msgbox").show();
$("#msgbox").html(data["msg"]).delay(2000).fadeOut();
$("[class^=\'prueflingentsperren_\']").addClass("hidden");
$("[class^=\'prueflingsperren_\']").removeClass("hidden");
$(".sperrcount").text(0);
}
},
error: function(data)
{
$("#msgbox").attr("class","alert alert-danger");
$("#msgbox").show();
$("#msgbox").html(data["msg"]);
}
});
}
function freischalten(reihungstest, art)
{
data = {
@@ -3194,6 +3305,33 @@ else
echo ' <div id="freischaltenInfo" class="alert alert-info'.($displayInfo ? '' : ' hiddenEl').'">Dieser Reihungstest ist freigeschaltet. Bitte sperren Sie ihn nach dem Test
<button class="btn btn-info" onclick="freischalten('.$frsch_rt_id.', false)">Jetzt sperren</button>
</div>';
$countGesperrt = 0;
$gesperrtWarning = false;
$gesperrtText = 'sind';
if (isset($gesperrt_arr))
{
array_filter($gesperrt_arr, function($element) use (&$countGesperrt) {
if ($element->gesperrt)
{
$countGesperrt++;
}
return true;
});
if ($countGesperrt > 0)
{
if ($countGesperrt === 1)
$gesperrtText = 'ist';
$gesperrtWarning = true;
}
}
echo ' <div id="gesperrtWarning" class="alert alert-warning'.($gesperrtWarning ? '' : ' hiddenEl').'">Achtung <span class="sperrcount">'. $countGesperrt . '</span> Teilnehmer <span class="sperrtext">'. $gesperrtText . '</span> gesperrt!
<button class="btn btn-warning"
data-gesperrte-personen="'.htmlspecialchars(json_encode($gesperrt_arr), ENT_QUOTES, 'UTF-8').'"
onclick="alleentsperren(this)">Jetzt alle entsperren
</button>
</div>';
if ($messageSuccess != '' || $messageError != '')
{
if ($messageSuccess != '')