diff --git a/application/config/abgabe.php b/application/config/abgabe.php
index 90aedbd8b..e1cdfbfa7 100644
--- a/application/config/abgabe.php
+++ b/application/config/abgabe.php
@@ -38,8 +38,19 @@ $config['SIGNATUR_CHECK_PAABGABETYPEN'] = ['end'];
// to be used as "https://moodle.technikum-wien.at/course/view.php?idnumber=dl{$stg_kz}" for stg specific moodle routing
$config['STG_MOODLE_LINK'] = 'https://moodle.technikum-wien.at/course/view.php?idnumber=dl';
+// TODO: check if these links change if the file changes and how to better retrieve the link?
+$config['SIGNATUR_INFO_LINK_GERMAN'] = 'https://cis.technikum-wien.at/cms/dms.php?id=214779';
+$config['SIGNATUR_INFO_LINK_ENGLISH'] = 'https://cis.technikum-wien.at/cms/dms.php?id=264256';
$config['ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT'] = true;
$config['ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER'] = true;
$config['BETREUER_SAMMELMAIL_BUTTON_STUDENT'] = true;
+
+$config['MULTIEDIT_TABLE'] = true;
+
+$config['STUDENT_EDIT_PROJEKTARBEIT_TITLE'] = true;
+
+$config['CONFETTI_ON_ENDUPLOAD'] = true;
+
+
diff --git a/application/controllers/api/frontend/v1/Abgabe.php b/application/controllers/api/frontend/v1/Abgabe.php
index 0db99469c..faffa97f2 100644
--- a/application/controllers/api/frontend/v1/Abgabe.php
+++ b/application/controllers/api/frontend/v1/Abgabe.php
@@ -93,6 +93,7 @@ class Abgabe extends FHCAPI_Controller
$ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT = $this->config->item('ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT');
$ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER = $this->config->item('ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER');
$BETREUER_SAMMELMAIL_BUTTON_STUDENT = $this->config->item('BETREUER_SAMMELMAIL_BUTTON_STUDENT');
+ $MULTIEDIT_TABLE = $this->config->item('MULTIEDIT_TABLE');
$ret = array(
'old_abgabe_beurteilung_link' => $old_abgabe_beurteilung_link,
@@ -100,7 +101,7 @@ class Abgabe extends FHCAPI_Controller
'abgabetypenBetreuer' => $abgabetypenBetreuer,
'ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT' => $ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT,
'ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER' => $ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER,
- 'BETREUER_SAMMELMAIL_BUTTON_STUDENT' => $BETREUER_SAMMELMAIL_BUTTON_STUDENT,
+ 'MULTIEDIT_TABLE' => $MULTIEDIT_TABLE,
);
$this->terminateWithSuccess($ret);
@@ -110,10 +111,18 @@ class Abgabe extends FHCAPI_Controller
* loads config related to abgabetool for students to avoid handing out links reserved for employees
*/
public function getConfigStudent() {
- $moodle_link =$this->config->item('STG_MOODLE_LINK');
-
+ $moodle_link = $this->config->item('STG_MOODLE_LINK');
+ $title_edit_allowed = $this->config->item('STUDENT_EDIT_PROJEKTARBEIT_TITLE');
+ $confetti_on_endupload = $this->config->item('CONFETTI_ON_ENDUPLOAD');
+ $siginfolink_german = $this->config->item('SIGNATUR_INFO_LINK_GERMAN');
+ $siginfolink_english = $this->config->item('SIGNATUR_INFO_LINK_ENGLISH');
+
$ret = array(
'moodle_link' => $moodle_link,
+ 'title_edit_allowed' => $title_edit_allowed,
+ 'confetti_on_endupload' => $confetti_on_endupload,
+ 'siginfolink_german' => $siginfolink_german,
+ 'siginfolink_english' => $siginfolink_english
);
$this->terminateWithSuccess($ret);
@@ -459,6 +468,10 @@ class Abgabe extends FHCAPI_Controller
*/
public function postStudentProjektarbeitTitel()
{
+ if(!$this->config->item('STUDENT_EDIT_PROJEKTARBEIT_TITLE')) {
+ $this->terminateWithError($this->p->t('global', 'c4studentEditNotAllowed'), 'general');
+ };
+
$projektarbeit_id = $this->input->post('projektarbeit_id');
$titel = $this->input->post('titel');
@@ -467,6 +480,23 @@ class Abgabe extends FHCAPI_Controller
$this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
}
+ // strip all HTML tags to prevent XSS in mail bodies, table views and Projektarbeitsbenotung
+ $titel = trim(strip_tags($titel));
+ if ($titel === '') {
+ $this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
+ }
+
+ // Reject emojis and pictographs
+ // allows foreign letters, math symbols, accents, and standard punctuation.
+ $emojiPattern = '/[\x{1F300}-\x{1F5FF}\x{1F600}-\x{1F64F}\x{1F680}-\x{1F6FF}\x{1F900}-\x{1FAFF}\x{23E9}-\x{23EF}\x{2b50}\x{2700}-\x{27BF}]/u';
+
+ // i would like this much more but our server does not recognize this utf-8 character range this way, so hexcodes it is
+// if (preg_match('/\p{Extended_Pictographic}/u', $titel)) {
+ if (preg_match($emojiPattern, $titel)) {
+
+ $this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
+ }
+
$this->checkProjektarbeitForFinishedStatus($projektarbeit_id);
$this->load->model('education/Projektarbeit_model', 'ProjektarbeitModel');
@@ -484,6 +514,8 @@ class Abgabe extends FHCAPI_Controller
$this->terminateWithError($this->p->t('abgabetool', 'c4noZuordnungBetreuerStudent'), 'general');
}
+
+
$result = $this->ProjektarbeitModel->load($projektarbeit_id);
$data = getData($result);
@@ -492,7 +524,7 @@ class Abgabe extends FHCAPI_Controller
$result = $this->ProjektarbeitModel->update(
$projektarbeit_id,
array(
- 'titel' => trim($titel),
+ 'titel' => $titel,
'updatevon' => getAuthUID(),
'updateamum' => date('Y-m-d H:i:s')
)
@@ -504,7 +536,7 @@ class Abgabe extends FHCAPI_Controller
'titelUpdate',
array(
'projektarbeit_id' => $projektarbeit_id,
- 'titel' => trim($titel),
+ 'titel' => $titel,
'updatevon' => getAuthUID(),
'updateamum' => date('Y-m-d H:i:s')
),
@@ -514,13 +546,14 @@ class Abgabe extends FHCAPI_Controller
$this->sendTitelChangedEmail(
$projektarbeit_id,
- trim($titel),
+ $titel,
$oldTitle,
$assignedStudentUid
);
$result = $this->ProjektarbeitModel->load($projektarbeit_id);
- $this->terminateWithSuccess($result);
+ $titel = hasData($result) ? getData($result)[0]->titel : $titel;
+ $this->terminateWithSuccess($titel);
}
/**
@@ -1533,7 +1566,7 @@ class Abgabe extends FHCAPI_Controller
};
Events::trigger('projektarbeit_is_current', $projektarbeit_id, $returnFunc);
if(!$projektarbeitIsCurrent) {
- $this->terminateWithError($this->p->t('abgabetool','c4fehlerAktualitaetProjektarbeit'), 'general');
+ $this->terminateWithError($this->p->t('abgabetool','c4fehlerAktualitaetProjektarbeitv2'), 'general');
}
// Link to Abgabetool
@@ -1739,7 +1772,7 @@ class Abgabe extends FHCAPI_Controller
$data = getData($res)[0];
if($data->note !== NULL) {
// hardcode this error msg cause phrasen arent reliable and people keep bugging why the cant edit old entries they definitely shouldnt update
- $message = $this->p->t('abgabetool','c4fehlerAktualitaetProjektarbeit');
+ $message = $this->p->t('abgabetool','c4fehlerAktualitaetProjektarbeitv2');
if(strpos($message, "<<") === 0) { // phrase could not be loaded
$this->terminateWithError('Die Projektarbeit wurde bereits benotet, Sie dürfen deshalb keine weiteren Termine anlegen oder bearbeiten.', 'general');
} else {
@@ -1748,4 +1781,4 @@ class Abgabe extends FHCAPI_Controller
}
}
-}
\ No newline at end of file
+}
diff --git a/application/controllers/api/frontend/v1/stv/Projektarbeit.php b/application/controllers/api/frontend/v1/stv/Projektarbeit.php
index 8740ef3d6..1f1035c98 100644
--- a/application/controllers/api/frontend/v1/stv/Projektarbeit.php
+++ b/application/controllers/api/frontend/v1/stv/Projektarbeit.php
@@ -90,6 +90,15 @@ class Projektarbeit extends FHCAPI_Controller
if (!isset($projektarbeit_id) || !is_numeric($projektarbeit_id)) return $this->terminateWithError('Projektarbeit Id missing', self::ERROR_TYPE_GENERAL);
+ $result = $this->fetchProjektarbeitByID($projektarbeit_id);
+
+ $data = $this->getDataOrTerminateWithError($result);
+
+ $this->terminateWithSuccess(current($data));
+ }
+
+ private function fetchProjektarbeitById($projektarbeit_id) {
+ $this->ProjektarbeitModel->resetQuery();
$this->ProjektarbeitModel->addSelect(
'lehre.tbl_projektarbeit.projektarbeit_id, titel, titel_english, themenbereich, projekttyp_kurzbz, lehrveranstaltung_id, lehreinheit_id,
firma_id, beginn, ende, gesperrtbis, note, final, freigegeben, tbl_projektarbeit.anmerkung, fa.name AS firma_name'
@@ -97,13 +106,10 @@ class Projektarbeit extends FHCAPI_Controller
$this->ProjektarbeitModel->addJoin('lehre.tbl_lehreinheit le', 'lehreinheit_id');
$this->ProjektarbeitModel->addJoin('lehre.tbl_lehrveranstaltung lv', 'lehrveranstaltung_id');
$this->ProjektarbeitModel->addJoin('public.tbl_firma fa', 'firma_id', 'LEFT');
- $result = $this->ProjektarbeitModel->loadWhere(
+ return $this->ProjektarbeitModel->loadWhere(
array('projektarbeit_id' => $projektarbeit_id)
);
- $data = $this->getDataOrTerminateWithError($result);
-
- $this->terminateWithSuccess(current($data));
}
/**
@@ -132,7 +138,8 @@ class Projektarbeit extends FHCAPI_Controller
);
$data = $this->getDataOrTerminateWithError($result);
-
+ $data = $this->getDataOrTerminateWithError($this->fetchProjektarbeitById($data));
+
$this->terminateWithSuccess($data);
}
diff --git a/application/controllers/jobs/AbgabetoolJob.php b/application/controllers/jobs/AbgabetoolJob.php
index b81053032..2e5c4d7b9 100644
--- a/application/controllers/jobs/AbgabetoolJob.php
+++ b/application/controllers/jobs/AbgabetoolJob.php
@@ -358,7 +358,8 @@ class AbgabetoolJob extends JOB_Controller
foreach($assistenzMap as $assistenz_person_id => $tupelArr) {
$abgabenString = '
';
-
+ $hasContent = false;
+
foreach($tupelArr as $tupel) {
$projektarbeit_id = $tupel[0];
$assistenzRow = $tupel[1];
@@ -377,6 +378,7 @@ class AbgabetoolJob extends JOB_Controller
if(count($relevantAbgaben) == 0) {
continue;
}
+ $hasContent = true;
// Format the Student Name
$s = $relevantAbgaben[0];
@@ -447,7 +449,12 @@ class AbgabetoolJob extends JOB_Controller
}
$abgabenString .= '
';
-
+
+ // skip send entirely
+ if (!$hasContent) {
+ continue;
+ }
+
// done with building the change list, now send it
$assistenzRow = $tupelArr[0][1];
$anrede = $assistenzRow->anrede;
diff --git a/application/views/Cis/Abgabetool.php b/application/views/Cis/Abgabetool.php
index a0621b1f9..469bc8110 100644
--- a/application/views/Cis/Abgabetool.php
+++ b/application/views/Cis/Abgabetool.php
@@ -38,7 +38,7 @@ $includesArray = array(
$this->load->view('templates/FHC-Header', $includesArray);
?>
-
@@ -433,7 +529,7 @@ export const AbgabeStudentDetail = {
-
+
{{$capitalize( $p.t('abgabetool/c4abgabetyp') )}}
@@ -469,7 +565,7 @@ export const AbgabeStudentDetail = {
-
+
{{ termin.abgabedatum?.split("-").reverse().join(".") }}
@@ -544,10 +640,13 @@ export const AbgabeStudentDetail = {
+
+
{{$capitalize( $p.t('abgabetool/c4titelBearbeiten') )}}
@@ -562,7 +661,7 @@ export const AbgabeStudentDetail = {
rows="10"
maxlength="1024"
class="form-control w-100"
- @keyup.enter="saveTitel"
+ @keydown.enter.prevent="saveTitel"
/>
{{ editingTitel.length }} / 1024
@@ -588,7 +687,8 @@ export const AbgabeStudentDetail = {
+ dialogClass="bordered-modal modal-lg"
+ bodyClass="px-4 py-4">
{{$capitalize( $p.t('abgabetool/c4enduploadZusatzdaten') )}}
@@ -674,6 +774,7 @@ export const AbgabeStudentDetail = {
{{ $p.t('abgabetool/c4zusatzdatenausfuellen') }}
+
`,
};
diff --git a/public/js/components/Cis/Abgabetool/AbgabetoolAssistenz.js b/public/js/components/Cis/Abgabetool/AbgabetoolAssistenz.js
index b6610cba3..c746f3240 100644
--- a/public/js/components/Cis/Abgabetool/AbgabetoolAssistenz.js
+++ b/public/js/components/Cis/Abgabetool/AbgabetoolAssistenz.js
@@ -87,6 +87,7 @@ export const AbgabetoolAssistenz = {
old_abgabe_beurteilung_link: null,
ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT: null,
ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER: null,
+ MULTIEDIT_TABLE: false,
saving: false,
loading: false,
abgabeTypeOptions: null,
@@ -1917,10 +1918,6 @@ export const AbgabetoolAssistenz = {
'
'+longForm+'
'
}
},
- detailFormatter(cell) {
- return ''
- },
pkzTextFormatter(cell) {
const val = cell.getValue()
@@ -2267,6 +2264,7 @@ export const AbgabetoolAssistenz = {
this.old_abgabe_beurteilung_link = res.data?.old_abgabe_beurteilung_link;
this.ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT = res.data?.ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT;
this.ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER = res.data?.ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER;
+ this.MULTIEDIT_TABLE = res.data?.MULTIEDIT_TABLE;
}
// 2. Studiengänge
@@ -2341,7 +2339,11 @@ export const AbgabetoolAssistenz = {
-
+
{{ $p.t('abgabetool/c4editTerminserie') }}
@@ -2440,8 +2442,11 @@ export const AbgabetoolAssistenz = {
-
+
{{ $p.t('abgabetool/neueTerminserie') }}
@@ -2520,7 +2525,8 @@ export const AbgabetoolAssistenz = {
+ @toggle-fullscreen="handleToggleFullscreenDetail"
+ bodyClass="px-4 py-4">
{{$p.t('abgabetool/c4abgabeMitarbeiterDetailTitle')}}
@@ -2651,7 +2657,7 @@ export const AbgabetoolAssistenz = {
{{$p.t('abgabetool/abgabetoolTitleAdmin')}}
-
+
@@ -2668,10 +2674,10 @@ export const AbgabetoolAssistenz = {
-
+
-
+
-