From eb15d6b841172bda03704daa493fa40c305a9159 Mon Sep 17 00:00:00 2001 From: Johann Hoffmann Date: Wed, 14 Jan 2026 16:57:57 +0100 Subject: [PATCH] getStudentConfig Api Method; moodle link config entry; write abgabetool termin noten into header; uniform getDateStyleClass logic in all 3 views; WIP refining AbgabetoolJob; --- application/config/abgabe.php | 5 ++- .../controllers/api/frontend/v1/Abgabe.php | 14 ++++++ .../controllers/jobs/AbgabetoolJob.php | 24 ++++++---- public/js/api/factory/abgabe.js | 6 +++ .../Cis/Abgabetool/AbgabeMitarbeiterDetail.js | 45 +++++++++++-------- .../Cis/Abgabetool/AbgabeStudentDetail.js | 44 +++++++++++++----- .../Cis/Abgabetool/AbgabetoolAssistenz.js | 5 ++- .../Cis/Abgabetool/AbgabetoolMitarbeiter.js | 1 - .../Cis/Abgabetool/AbgabetoolStudent.js | 31 ++++++++----- system/phrasesupdate.php | 40 +++++++++++++++++ 10 files changed, 165 insertions(+), 50 deletions(-) diff --git a/application/config/abgabe.php b/application/config/abgabe.php index 4fbedd78d..282421ac0 100644 --- a/application/config/abgabe.php +++ b/application/config/abgabe.php @@ -24,4 +24,7 @@ $config['beurteilung_link_fallback'] = 'addons/fhtw/content/projektbeurteilung/p $config['PROJEKTARBEITSBEURTEILUNG_MAIL_BASELINK_ERSTBEGUTACHTER'] = 'index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/ProjektarbeitsbeurteilungErstbegutachter'; $config['PROJEKTARBEITSBEURTEILUNG_MAIL_BASELINK_ZWEITBEGUTACHTER'] = 'index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/ProjektarbeitsbeurteilungErstbegutachter'; -$config['SIGNATUR_CHECK_PAABGABETYPEN'] = ['end']; \ No newline at end of file +$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'; \ No newline at end of file diff --git a/application/controllers/api/frontend/v1/Abgabe.php b/application/controllers/api/frontend/v1/Abgabe.php index c962e4943..d5fe43a72 100644 --- a/application/controllers/api/frontend/v1/Abgabe.php +++ b/application/controllers/api/frontend/v1/Abgabe.php @@ -30,6 +30,7 @@ class Abgabe extends FHCAPI_Controller { parent::__construct([ 'getConfig' => array('basis/abgabe_assistenz:rw', 'basis/abgabe_lektor:rw'), + 'getConfigStudent' => array('basis/abgabe_assistenz:rw', 'basis/abgabe_student:rw', 'basis/abgabe_lektor:rw'), 'getStudentProjektarbeiten' => array('basis/abgabe_assistenz:rw', 'basis/abgabe_student:rw', 'basis/abgabe_lektor:rw'), 'getStudentProjektabgaben' => array('basis/abgabe_assistenz:rw', 'basis/abgabe_student:rw', 'basis/abgabe_lektor:rw'), 'postStudentProjektarbeitZwischenabgabe' => array('basis/abgabe_assistenz:rw', 'basis/abgabe_student:rw'), @@ -94,6 +95,19 @@ class Abgabe extends FHCAPI_Controller $this->terminateWithSuccess($ret); } + + /** + * 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'); + + $ret = array( + 'moodle_link' => $moodle_link, + ); + + $this->terminateWithSuccess($ret); + } /** * fetches all projektabgabetermine for a given projektarbeit_id used in cis4 student abgabetool & lektor abgabetool diff --git a/application/controllers/jobs/AbgabetoolJob.php b/application/controllers/jobs/AbgabetoolJob.php index fcdb33f48..a4c576093 100644 --- a/application/controllers/jobs/AbgabetoolJob.php +++ b/application/controllers/jobs/AbgabetoolJob.php @@ -96,14 +96,14 @@ class AbgabetoolJob extends JOB_Controller // filter for abgaben which where not inserted by the current betreuer iteration if there is no updateamum // or not changed by the betreuer if there is updateamum - $relevantAbgaben = array_filter($changedAbgaben, function($abgabetermin) use ($betreuerRow) { + $relevantAbgaben = array_values(array_filter($changedAbgaben, function($abgabetermin) use ($betreuerRow) { // new termin not created by that betreuer if($abgabetermin->updatevon == null && $abgabetermin->insertvon != $betreuerRow->uid) { return $abgabetermin; } else if($abgabetermin->updatevon != null && $abgabetermin->updatevon != $betreuerRow->uid) { return $abgabetermin; } - }); + })); if(count($relevantAbgaben) == 0) { break; // skip that projektarbeit if only changes originate from the betreuer in question @@ -143,15 +143,17 @@ class AbgabetoolJob extends JOB_Controller 'abgabenString' => $abgabenString, 'linkAbgabetool' => $url ); - + + $email = $betreuerRow->uid ? $betreuerRow->uid."@".DOMAIN : $betreuerRow->private_email; + // send email with bundled info sendSanchoMail( 'PAAChangesBetSM', $body_fields, - $betreuerRow->private_email, + $email, $this->p->t('abgabetool', 'changedAbgabeterminev2') ); - + $count++; } @@ -170,6 +172,8 @@ class AbgabetoolJob extends JOB_Controller $result = $this->_ci->PaabgabeModel->findAbgabenNewOrUpdatedSinceByAbgabedatum($interval); $retval = getData($result); + + var_dump($retval); // retval are paabgaben joined with projektarbeit and betreuer if(count($retval) == 0) { @@ -186,14 +190,14 @@ class AbgabetoolJob extends JOB_Controller $betreuer_uids[$paabgabe->person_id][] = $paabgabe; } - + $count = 0; forEach ($betreuer_uids as $person_id => $abgaben) { // $person_id is from betreuer $result = $this->_ci->ProjektarbeitModel->getProjektbetreuerAnrede($person_id); $data = getData($result)[0]; - + $anrede = $data->anrede; $anredeFillString = $data->anrede == "Herr" ? "r" : ""; $fullFormattedNameString = $data->first; @@ -233,11 +237,15 @@ class AbgabetoolJob extends JOB_Controller 'linkAbgabetool' => $url ); + // TODO: get this guys uid safely +// $email = $betreuerRow->uid ? $betreuerRow->uid."@".DOMAIN : $betreuerRow->private_email; + + // send email with bundled info sendSanchoMail( 'PaabgabeUpdatesBetSM', $body_fields, - $data->private_email, + $email, $this->p->t('abgabetool', 'changedAbgabeterminev2') ); diff --git a/public/js/api/factory/abgabe.js b/public/js/api/factory/abgabe.js index be03c9728..f5659f3a0 100644 --- a/public/js/api/factory/abgabe.js +++ b/public/js/api/factory/abgabe.js @@ -5,6 +5,12 @@ export default { url: '/api/frontend/v1/Abgabe/getConfig' }; }, + getConfigStudent() { + return { + method: 'get', + url: '/api/frontend/v1/Abgabe/getConfigStudent' + }; + }, getStudentProjektarbeiten(uid) { return { method: 'get', diff --git a/public/js/components/Cis/Abgabetool/AbgabeMitarbeiterDetail.js b/public/js/components/Cis/Abgabetool/AbgabeMitarbeiterDetail.js index f084d9d5c..91d8e5a4e 100644 --- a/public/js/components/Cis/Abgabetool/AbgabeMitarbeiterDetail.js +++ b/public/js/components/Cis/Abgabetool/AbgabeMitarbeiterDetail.js @@ -78,6 +78,15 @@ export const AbgabeMitarbeiterDetail = { } }, methods: { + getNoteBezeichnung(termin){ + if(termin.note?.bezeichnung) { + return termin.note?.positiv ? this.$capitalize(this.$p.t('abgabetool/c4positivBenotet')) + ' ✅' : this.$capitalize(this.$p.t('abgabetool/c4negativBenotet')) + ' ❌' + } else if(termin.bezeichnung?.benotbar === true && !termin.note) { + return this.$capitalize(this.$p.t('abgabetool/c4notYetGraded')); + } else { + return '' + } + }, getPlaceholderTermin(termin) { return termin?.bezeichnung ? this.$p.t('abgabetool/c4paatyp' + termin.paabgabetyp_kurzbz) : this.$p.t('abgabetool/abgabetypPlaceholder') }, @@ -299,16 +308,8 @@ export const AbgabeMitarbeiterDetail = { const abgabedatum = new Date(termin.abgabedatum) termin.diffindays = this.dateDiffInDays(termin.datum) - - // TODO: load benotbar in every view or change status logic all together! - // console.log('\n\n') - // console.log(termin) - // console.log(today) - // console.log(datum) - // console.log('\n\n') - - if(today > datum && termin.benotbar && !termin.note) return 'beurteilungerforderlich' + if(termin.bezeichnung?.benotbar && !termin.note) return 'beurteilungerforderlich' if (termin.abgabedatum === null && termin.upload_allowed) { if(datum < today) { return 'verpasst' // needs upload, missed it and has not submitted anything @@ -737,8 +738,9 @@ export const AbgabeMitarbeiterDetail = {