NotenTab: Phrases

This commit is contained in:
cgfhtw
2024-12-27 14:44:53 +01:00
parent 469c01c9e6
commit b43df5aea0
12 changed files with 1032 additions and 102 deletions
+6 -1
View File
@@ -37,6 +37,11 @@ class Documents extends Auth_Controller
'export' => self::PERM_LOGGED,
'exportSigned' => self::PERM_LOGGED
]);
// Load Phrases
$this->loadPhrases([
'stv'
]);
}
/**
@@ -227,7 +232,7 @@ class Documents extends Auth_Controller
$vorlage = current(getData($result));
if ($sign_user && !$vorlage->signierbar)
return show_error('Diese Vorlage darf nicht signiert werden'); // TODO(chris): phrase
return show_error($this->p->t("stv", "grades_error_sign"));
// Filename
@@ -45,6 +45,11 @@ class Documents extends FHCAPI_Controller
'archive' => ['admin:rw', 'assistenz:rw'],
'archiveSigned' => ['admin:rw', 'assistenz:rw']
]);
// Load Phrases
$this->loadPhrases([
'stv'
]);
}
/**
@@ -177,7 +182,7 @@ class Documents extends FHCAPI_Controller
$result = $this->PrestudentstatusModel->getLastStatus($student->prestudent_id, $ss);
$status = current($this->getDataOrTerminateWithError($result));
if (!$status)
$this->terminateWithError('StudentIn hat keinen Status in diesem Semester'); // TODO(chris): phrase
$this->terminateWithError($this->p->t("stv", "grades_error_prestudentstatus"));
$semester = $status->ausbildungssemester;
$this->load->model('education/Studentlehrverband_model', 'StudentlehrverbandModel');
@@ -388,10 +393,10 @@ class Documents extends FHCAPI_Controller
}
if (!$vorlage->archivierbar)
$this->terminateWithError('Dieses Dokument ist nicht archivierbar'); // TODO(chris): phrase
$this->terminateWithError($this->p->t("stv", "grades_error_archive"));
if ($sign_user && !$vorlage->signierbar)
$this->terminateWithError('Diese Vorlage darf nicht signiert werden'); // TODO(chris): phrase
$this->terminateWithError($this->p->t("stv", "grades_error_sign"));
$this->load->library('DocumentExportLib');
@@ -272,8 +272,8 @@ class Config extends FHCAPI_Controller
$title_ger = $this->p->t("global", "deutsch");
$title_eng = $this->p->t("global", "englisch");
$title_ff = 'Zertifikat'; // TODO(chris): phrase
$title_lv = 'LV Zeugnis'; // TODO(chris): phrase
$title_ff = $this->p->t("stv", "document_certificate");
$title_lv = $this->p->t("stv", "document_coursecertificate");
$link_ff = "documents/export/" .
"zertifikat.rdf.php/" .
@@ -298,7 +298,7 @@ class Config extends FHCAPI_Controller
"&lvid={lehrveranstaltung_id}";
$archive_url = "api/frontend/v1/documents/archiveSigned";
$archive_response = $this->p->t("stv", "document_signed_and_archived"); // TODO(chris): phrase
$archive_response = $this->p->t("stv", "document_signed_and_archived");
$archive_post_ff = [
"xml" => "zertifikat.rdf.php",
"xsl" => "Zertifikat",
@@ -326,7 +326,7 @@ class Config extends FHCAPI_Controller
$list = [
[
'title' => '<i class="fa fa-download" title="Download"></i>', // TODO(chris): phrase
'title' => '<i class="fa fa-download" title="' . $this->p->t("stv", "document_download") . '"></i>',
'children' => [
[
'title' => $title_ff,
@@ -382,7 +382,7 @@ class Config extends FHCAPI_Controller
]
],
[
'title' => '<i class="fas fa-archive" title="Archivieren"></i>', // TODO(chris): phrase
'title' => '<i class="fas fa-archive" title="' . $this->p->t("stv", "document_archive") . '"></i>',
'children' => [
[
'title' => $title_ff,
@@ -44,6 +44,7 @@ class Grades extends FHCAPI_Controller
// Load Phrases
$this->loadPhrases([
'stv',
'person',
'lehre'
]);
@@ -327,7 +328,7 @@ class Grades extends FHCAPI_Controller
$certificateGrade = current($certificateGrade);
if (!$certificateGrade->lkt_ueberschreibbar)
$this->terminateWithError("Nicht überschreibbar"); // TODO(chris): phrase
$this->terminateWithError($this->p->t("stv", "grades_error_overwrite"));
// NOTE(chris): update
$data['updateamum'] = $data['uebernahmedatum'];
@@ -376,7 +377,7 @@ class Grades extends FHCAPI_Controller
{
$this->load->library('form_validation');
$this->form_validation->set_rules("studierendenantrag_lehrveranstaltung_id", "", "required|integer"); // TODO(chris): phrase
$this->form_validation->set_rules("studierendenantrag_lehrveranstaltung_id", "studierendenantrag_lehrveranstaltung_id", "required|integer");
if (!$this->form_validation->run())
$this->terminateWithValidationErrors($this->form_validation->error_array());
@@ -454,7 +455,7 @@ class Grades extends FHCAPI_Controller
$this->load->library('form_validation');
$this->form_validation->set_rules("lehrveranstaltung_id", $this->p->t('lehre', 'lehrveranstaltung'), "required|integer");
$this->form_validation->set_rules("points", "Punkte", "required|numeric"); // TODO(chris): phrase
$this->form_validation->set_rules("points", $this->p->t("stv", "grades_points"), "required|numeric");
if (!$this->form_validation->run())
$this->terminateWithValidationErrors($this->form_validation->error_array());
@@ -496,7 +497,7 @@ class Grades extends FHCAPI_Controller
if (isError($result))
return $result;
if (!hasData($result))
return error('Fehler beim Ermitteln der Lehreinheit ID'); // TODO(chris): phrase
return error($this->p->t("stv", "grades_error_lehreinheit_id"));
$le = current(getData($result));
// Prepare
+24 -20
View File
@@ -87,6 +87,9 @@ class DocumentExportLib
// Gets CI instance
$this->ci =& get_instance();
// Load Phrases
$this->ci->load->library('PhrasesLib', ['document_export', null], 'documentExportPhrases');
// Which document converter has to be used
if (defined('DOCSBOX_ENABLED') && DOCSBOX_ENABLED === true)
{
@@ -104,10 +107,10 @@ class DocumentExportLib
$this->unoconv_version = $hlp[1];
}
else
show_error('Could not get Unoconv Version'); // TODO(chris): phrase
show_error($this->ci->documentExportPhrases->t("document_export", "error_unoconv_version"));
}
else
show_error('Unoconv not found - Please install Unoconv'); // TODO(chris): phrase
show_error($this->ci->documentExportPhrases->t("document_export", "error_unoconv"));
}
}
@@ -169,7 +172,11 @@ class DocumentExportLib
$xml_data = new DOMDocument;
if (!$xml_data->load($xml_url))
return error('unable to load xml: ' . $xml_url . ' XML:' . $xml . ' PARAMs:' . $params); // TODO(chris): phrase
return error($this->ci->documentExportPhrases->t("document_export", "error_xml_load", [
"url" => $xml_url,
"xml" => $xml,
"params" => $params
]));
return success($xml_data);
}
@@ -249,7 +256,7 @@ class DocumentExportLib
$fsize = filesize($temp_filename);
$handle = fopen($temp_filename, 'r');
if (!$handle)
return error('load failed'); // TODO(chris): phrase
return error($this->ci->documentExportPhrases->t("document_export", "error_file_load"));
$result = fread($handle, $fsize);
fclose($handle);
@@ -311,12 +318,12 @@ class DocumentExportLib
$handle = fopen($temp_filename, 'r');
if (!$handle) {
$this->close($temp_folder, $source_folder);
exit('load failed'); // TODO(chris): phrase
exit($this->ci->documentExportPhrases->t("document_export", "error_file_load"));
}
if (headers_sent()) {
$this->close($temp_folder, $source_folder);
exit('Header wurden bereits gesendet -> Abbruch'); // TODO(chris): phrase
exit($this->ci->documentExportPhrases->t("document_export", "error_headers"));
}
switch ($outputformat) {
@@ -339,7 +346,7 @@ class DocumentExportLib
break;
default:
$this->close($temp_folder, $source_folder);
exit('Outputformat is not defined'); // TODO(chris): phrase
exit($this->ci->documentExportPhrases->t("document_export", "error_outputformat_missing"));
}
while (!feof($handle)) {
@@ -386,7 +393,7 @@ class DocumentExportLib
if (isError($result))
return $result;
if (!hasData($result))
return error('no vorlage found'); // TODO(chris): phrase
return error($this->ci->documentExportPhrases->t("document_export", "error_template_missing"));
$vorlage_stg = current(getData($result));
foreach ($vorlage_stg as $k => $v)
$vorlage->$k = $v;
@@ -426,7 +433,7 @@ class DocumentExportLib
{
$content_xsl = new DOMDocument();
if (!$content_xsl->loadXML($vorlage->text))
return error('unable to load xsl'); // TODO(chris): phrase
return error($this->ci->documentExportPhrases->t("document_export", "error_xsl_load"));
$proc = new XSLTProcessor();
$proc->importStyleSheet($content_xsl);
@@ -442,7 +449,7 @@ class DocumentExportLib
if ($vorlage->style) {
$styles_xsl = new DOMDocument();
if (!$styles_xsl->loadXML($vorlage->style))
return error('unable to load styles xsl'); // TODO(chris): phrase
return error($this->ci->documentExportPhrases->t("document_export", "error_styles_load"));
$style_proc = new XSLTProcessor();
$style_proc->importStyleSheet($styles_xsl);
@@ -470,7 +477,7 @@ class DocumentExportLib
$tempname_zip = $temp_folder . '/out.zip';
if (!copy($zipfile, $tempname_zip))
return error('copy failed'); // TODO(chris): phrase
return error($this->ci->documentExportPhrases->t("document_export", "error_file_copy"));
exec("zip $tempname_zip content.xml");
if (!is_null($styles_xsl))
@@ -490,7 +497,7 @@ class DocumentExportLib
$manifest_xml = new DOMDocument;
if (!$manifest_xml->loadXML($manifest))
return error('Manifest File ungueltig'); // TODO(chris): phrase
return error($this->ci->documentExportPhrases->t("document_export", "error_manifest"));
//root-node holen
$root = $manifest_xml->getElementsByTagName('manifest')->item(0);
@@ -547,11 +554,8 @@ class DocumentExportLib
exec($command, $out, $ret);
}
if ($ret) {
return error('Dokumentenkonvertierung ist derzeit nicht' .
' möglich. Bitte versuchen Sie es in einer Minute' .
' erneut oder kontaktieren Sie einen Administrator'); // TODO(chris): phrase
}
if ($ret)
return error($this->ci->documentExportPhrases->t("document_export", "error_conv_timeout"));
break;
case 'odt':
default:
@@ -576,7 +580,7 @@ class DocumentExportLib
protected function sign($temp_folder, $temp_filename, $outputformat, $user, $profile)
{
if ($outputformat != 'pdf')
return error('Derzeit koennen nur PDFs signiert werden'); // TODO(chris): phrase
return error($this->ci->documentExportPhrases->t("document_export", "error_sign_pdf"));
// Load the File
$file_data = file_get_contents($temp_filename);
@@ -618,7 +622,7 @@ class DocumentExportLib
$result = curl_exec($ch);
if (curl_errno($ch)) {
curl_close($ch);
return error('Signaturserver ist derzeit nicht erreichbar'); // TODO(chris): phrase
return error($this->ci->documentExportPhrases->t("document_export", "error_sign_timeout"));
}
curl_close($ch);
$resultdata = json_decode($result);
@@ -631,7 +635,7 @@ class DocumentExportLib
}
// otherwise if it is an error
return error($resultdata->retval ?? 'Unknown Error:' . $result); // TODO(chris): phrase
return error($resultdata->retval ?? $this->ci->documentExportPhrases->t("global", "unknown_error", ["error" => $result]));
}
/**
@@ -38,13 +38,12 @@ export default {
const savedPath = window.localStorage.getItem(LOCAL_STORAGE_ID);
this.stdsem = savedPath || '';
},
// TODO(chris): phrasen
template: `
<div class="stv-details-noten d-flex flex-column overflow-hidden">
<div class="mb-3">
<select class="form-select" v-model="stdsem" @input="saveStdsem">
<option value="">Aktuelles Semester</option>
<option value="true">Alle Semester</option>
<option value="">$p.t('ui/current_semester')</option>
<option value="true">$p.t('ui/all_semester')</option>
</select>
</div>
<div class="row">
@@ -32,19 +32,17 @@ export default {
ajaxResponse: (url, params, response) => {
return response.data || [];
},
// TODO(chris): phrasen
columns: [
{ field: 'lv_bezeichnung', title: 'Lehrveranstaltung' },
{ field: 'note_bezeichnung', title: 'Note' },
{ field: 'insertvon', title: 'MitarbeiterInUID', visible: false },
{ field: 'benotungsdatum', title: 'Benotungsdatum', visible: false },
{ field: 'freigabedatum', title: 'Freigabedatum', visible: false },
{ field: 'studiensemester_kurzbz', title: 'Studiensemester', visible: false },
{ field: 'stg_bezeichnung', title: 'Studiengang', visible: false },
{ field: 'note', title: 'Note', visible: false },
{ field: 'prestudent_uid', title: 'PrestudentID', visible: false },
{ field: 'lehrveranstaltung_id', title: 'Lehrveranstaltung ID', visible: false },
{ field: 'studierendenantrag_lehrveranstaltung_id', title: 'StudstatusLvID', visible: false }
{ field: 'lv_bezeichnung', title: this.$p.t('lehre/lehrveranstaltung') },
{ field: 'note_bezeichnung', title: this.$p.t('lehre/note') },
{ field: 'insertvon', title: this.$p.t('profil/mitarbeiterIn'), visible: false },
{ field: 'benotungsdatum', title: this.$p.t('stv/grades_gradingdate'), visible: false },
{ field: 'freigabedatum', title: this.$p.t('stv/grades_approvaldate'), visible: false },
{ field: 'studiensemester_kurzbz', title: this.$p.t('lehre/studiensemester'), visible: false },
{ field: 'stg_bezeichnung', title: this.$p.t('lehre/studiengang'), visible: false },
{ field: 'note', title: this.$p.t('stv/grades_numericgrade'), visible: false },
{ field: 'prestudent_uid', title: this.$p.t('global/prestudentID'), visible: false },
{ field: 'lehrveranstaltung_id', title: this.$p.t('lehre/lehrveranstaltung_id'), visible: false }
],
layout: 'fitDataStretch',
height: '100%',
@@ -75,19 +73,24 @@ export default {
.allSettled(promises)
.then(results => {
if (results.some(res => res.status == "fulfilled")) {
// TODO(chris): phrase
this.$fhcAlert.alertSuccess("updated");
this.$fhcAlert.alertSuccess(this.$p.t('stv/grades_updated'));
this.$emit('copied');
}
});
}
},
created() {
this.$p.loadCategory(['global', 'stv', 'lehre', 'profil'])
.then(() => {
if (this.$refs.table.tableBuilt)
this.$refs.table.tabulator.columnManager.setColumns(this.tabulatorOptions.columns);
});
},
template: `
<div class="stv-details-noten-repeater d-flex flex-column">
<!-- TODO(chris): phrase -->
<core-filter-cmpt
ref="table"
title="Repeater Grades"
:title="$p.t('stv/grades_title_repeater')"
:tabulator-options="tabulatorOptions"
:tabulator-events="tabulatorEvents"
table-only
@@ -96,8 +99,7 @@ export default {
>
<template #actions="{selected}">
<button class="btn btn-primary" :disabled="!selected.length" @click="copyGrades(selected)">
<!-- TODO(chris): phrase -->
<i class="fa-solid fa-arrow-left"></i> copy
<i class="fa-solid fa-arrow-left"></i> {{ $p.t('stv/grades_action_copy') }}
</button>
</template>
</core-filter-cmpt>
@@ -32,18 +32,17 @@ export default {
ajaxResponse: (url, params, response) => {
return response.data || [];
},
// TODO(chris): phrasen
columns: [
{ field: 'lehrveranstaltung_bezeichnung', title: 'Lehrveranstaltung' },
{ field: 'note_bezeichnung', title: 'Note' },
{ field: 'mitarbeiter_uid', title: 'MitarbeiterInUID', visible: false },
{ field: 'benotungsdatum', title: 'Benotungsdatum', visible: false },
{ field: 'freigabedatum', title: 'Freigabedatum', visible: false },
{ field: 'studiensemester_kurzbz', title: 'Studiensemester', visible: false },
{ field: 'note', title: 'Note', visible: false },
{ field: 'student_uid', title: 'StudentInUID', visible: false },
{ field: 'lehrveranstaltung_id', title: 'Lehrveranstaltung ID', visible: false },
{ field: 'punkte', title: 'Punkte', visible: false }
{ field: 'lehrveranstaltung_bezeichnung', title: this.$p.t('lehre/lehrveranstaltung') },
{ field: 'note_bezeichnung', title: this.$p.t('lehre/note') },
{ field: 'mitarbeiter_uid', title: this.$p.t('profil/mitarbeiterIn'), visible: false },
{ field: 'benotungsdatum', title: this.$p.t('stv/grades_gradingdate'), visible: false },
{ field: 'freigabedatum', title: this.$p.t('stv/grades_approvaldate'), visible: false },
{ field: 'studiensemester_kurzbz', title: this.$p.t('lehre/studiensemester'), visible: false },
{ field: 'note', title: this.$p.t('stv/grades_numericgrade'), visible: false },
{ field: 'student_uid', title: this.$p.t('profil/studentIn'), visible: false },
{ field: 'lehrveranstaltung_id', title: this.$p.t('lehre/lehrveranstaltung_id'), visible: false },
{ field: 'punkte', title: this.$p.t('stv/grades_points'), visible: false }
],
layout: 'fitDataStretch',
height: '100%',
@@ -74,19 +73,24 @@ export default {
.allSettled(promises)
.then(results => {
if (results.some(res => res.status == "fulfilled")) {
// TODO(chris): phrase
this.$fhcAlert.alertSuccess("updated");
this.$fhcAlert.alertSuccess(this.$p.t('stv/grades_updated'));
this.$emit('copied');
}
});
}
},
created() {
this.$p.loadCategory(['stv', 'lehre', 'profil'])
.then(() => {
if (this.$refs.table.tableBuilt)
this.$refs.table.tabulator.columnManager.setColumns(this.tabulatorOptions.columns);
});
},
template: `
<div class="stv-details-noten-teacher d-flex flex-column">
<!-- TODO(chris): phrase -->
<core-filter-cmpt
ref="table"
title="Teacher Proposals"
:title="$p.t('stv/grades_title_teacher')"
:tabulator-options="tabulatorOptions"
:tabulator-events="tabulatorEvents"
table-only
@@ -95,8 +99,7 @@ export default {
>
<template #actions="{selected}">
<button class="btn btn-primary" :disabled="!selected.length" @click="copyGrades(selected)">
<!-- TODO(chris): phrase -->
<i class="fa-solid fa-arrow-left"></i> copy
<i class="fa-solid fa-arrow-left"></i> {{ $p.t('stv/grades_action_copy') }}
</button>
</template>
</core-filter-cmpt>
@@ -48,7 +48,7 @@ export default {
let gradeField = {
field: 'note',
title: 'Note',
title: this.$p.t('lehre/note'),
formatter: cell => cell.getData().note_bezeichnung,
tooltip: (evt, cell) => cell.getData().note_bezeichnung
};
@@ -66,7 +66,7 @@ export default {
listPromise
// get bezeichnung
.then(list => list.find(el => el.value == note))
.then(found => found ? found.label : Promise.reject({message: 'not found'}))
.then(found => found ? found.label : Promise.reject({message: 'grade ' + note + ' not found in list'}))
// prepare data object
.then(note_bezeichnung => ({
lehrveranstaltung_id,
@@ -80,13 +80,13 @@ export default {
// get bezeichnung again
.then(() => listPromise)
.then(list => list.find(el => el.value == note))
.then(found => found ? found.label : Promise.reject({message: 'not found'}))
.then(found => found?.label)
// update other fields in row
.then(note_bezeichnung => cell.getRow().update({note_bezeichnung}))
.then(() => cell.getRow().reformat())
// cleanup
.then(cell.clearEdited)
.then(() => this.$fhcAlert.alertSuccess('updated')) // TODO(chris): phrase
.then(() => this.$fhcAlert.alertSuccess(this.$p.t('stv/grades_updated')))
.catch(err => {
cell.restoreOldValue();
cell.clearEdited();
@@ -120,29 +120,32 @@ export default {
valuesLookup: (cell, filterTerm) => listPromise
};
}
gradeField.editorParams.placeholderLoading = "Loading Remote Data..." // TODO(chris): phrase
const node = document.createElement('span');
this.$p.loadCategory('stv')
.then(() => node.innerText = this.$p.t('ui/loading'))
.catch(this.$fhcAlert.handleSystemError);
gradeField.editorParams.placeholderLoading = node;
}
const columns = [
{ field: 'zeugnis', title: 'Zeugnis', formatter: 'tickCross' },
{ field: 'lehrveranstaltung_bezeichnung', title: 'Lehrveranstaltung' },
{ field: 'zeugnis', title: this.$p.t('stv/grades_zeugnis'), formatter: 'tickCross' },
{ field: 'lehrveranstaltung_bezeichnung', title: this.$p.t('lehre/lehrveranstaltung') },
gradeField,
{ field: 'uebernahmedatum', title: 'Übernahmedatum', visible: false },
{ field: 'benotungsdatum', title: 'Benotungsdatum', visible: false },
{ field: 'benotungsdatum-iso', title: 'Benotungsdatum ISO', visible: false },
{ field: 'studiensemester_kurzbz', title: 'Studiensemester', visible: false },
{ field: 'note_number', title: 'Note Numerisch', visible: false, formatter: cell => cell.getData().note, tooltip: (evt, cell) => cell.getData().note },
{ field: 'lehrveranstaltung_id', title: 'Lehrveranstaltung ID', visible: false },
{ field: 'studiengang', title: 'Studiengang', visible: false },
{ field: 'studiengang_kz', title: 'Studiengang Kennzahl', visible: false },
{ field: 'studiengang_lv', title: 'StudiengangLV', visible: false },
{ field: 'studiengang_kz_lv', title: 'Studiengang_kzLV', visible: false },
{ field: 'semester_lv', title: 'SemesterLV', visible: false },
{ field: 'ects_lv', title: 'ECTS', visible: false },
{ field: 'lehrform', title: 'Lehrform', visible: false },
{ field: 'kurzbz', title: 'Kurzbz', visible: false },
{ field: 'punkte', title: 'Punkte', visible: false },
{ field: 'lehrveranstaltung_bezeichnung_english', title: 'Englisch', visible: false }
{ field: 'uebernahmedatum', title: this.$p.t('stv/grades_takeoverdate'), visible: false },
{ field: 'benotungsdatum', title: this.$p.t('stv/grades_gradingdate'), visible: false },
{ field: 'studiensemester_kurzbz', title: this.$p.t('lehre/studiensemester'), visible: false },
{ field: 'note_number', title: this.$p.t('stv/grades_numericgrade'), visible: false, formatter: cell => cell.getData().note, tooltip: (evt, cell) => cell.getData().note },
{ field: 'lehrveranstaltung_id', title: this.$p.t('lehre/lehrveranstaltung_id'), visible: false },
{ field: 'studiengang', title: this.$p.t('lehre/studiengang'), visible: false },
{ field: 'studiengang_kz', title: this.$p.t('lehre/studiengangskennzahlLehre'), visible: false },
{ field: 'studiengang_lv', title: this.$p.t('stv/grades_studiengang_lv'), visible: false },
{ field: 'studiengang_kz_lv', title: this.$p.t('stv/grades_studiengang_kz_lv'), visible: false },
{ field: 'semester_lv', title: this.$p.t('stv/grades_semester_lv'), visible: false },
{ field: 'ects_lv', title: this.$p.t('lehre/ects'), visible: false },
{ field: 'lehrform', title: this.$p.t('lehre/lehrform'), visible: false },
{ field: 'kurzbz', title: this.$p.t('lehre/kurzbz'), visible: false },
{ field: 'punkte', title: this.$p.t('stv/grades_points'), visible: false },
{ field: 'lehrveranstaltung_bezeichnung_english', title: this.$p.t('stv/grades_lehrveranstaltung_bezeichnung_english'), visible: false }
];
const hasDocuments = ['both', 'inline'].includes(this.config.documents);
@@ -151,7 +154,7 @@ export default {
if (hasDocuments || hasDelete) {
columns.push({
field: 'actions',
title: 'Actions',
title: this.$p.t('global/actions'),
cssClass: "overflow-visible",
headerSort: false,
formatter: cell => {
@@ -221,7 +224,7 @@ export default {
this.$fhcApi.factory
.stv.grades.updateCertificate(data)
.then(this.$refs.table.reloadTable)
.then(() => this.$fhcAlert.alertSuccess('updated')) // TODO(chris): phrase
.then(() => this.$fhcAlert.alertSuccess(this.$p.t('stv/grades_updated')))
.catch(this.$fhcAlert.handleFormValidation);
},
deleteGrade(data) {
@@ -235,12 +238,18 @@ export default {
.catch(this.$fhcAlert.handleSystemError);
}
},
// TODO(chris): phrasen (title)
created() {
this.$p.loadCategory(['global', 'stv', 'lehre'])
.then(() => {
if (this.$refs.table.tableBuilt)
this.$refs.table.tabulator.columnManager.setColumns(this.tabulatorOptions.columns);
});
},
template: `
<div class="stv-details-noten-zeugnis h-100 d-flex flex-column">
<core-filter-cmpt
ref="table"
title="Certificate"
:title="$p.t('stv/grades_title_zeugnis')"
:tabulator-options="tabulatorOptions"
:tabulator-events="tabulatorEvents"
table-only
@@ -53,7 +53,7 @@ export default {
},
currentLabel() {
if (this.current == '')
return 'Note setzen'; // TODO(chris): phrase
return this.$p.t('stv/grades_setgrade');
return this.grades.find(grade => grade.note === this.current)?.bezeichnung || '';
}
},
@@ -91,7 +91,6 @@ export default {
})
.catch(this.$fhcAlert.handleSystemError);
},
// TODO(chris): phrases (option"")
template: `
<div class="stv-details-noten-zeugnis-actions d-flex gap-2">
<template v-if="['both', 'header'].includes(config.edit)">
@@ -115,7 +114,7 @@ export default {
</form-input>
</core-form>
<select v-else class="form-select" v-model="current" :disabled="!selected.length">
<option value="" disabled>Note setzen</option>
<option value="" disabled>{{ $p.t('stv/grades_setgrade') }}</option>
<option v-for="grade in grades" :key="grade.note" :value="grade.note">{{ grade.bezeichnung }}</option>
</select>
</template>
@@ -85,7 +85,6 @@ export default {
<template v-for="(item, i) in filteredList" :key="i">
<button
type="button"
label="Toggle"
@click="evt => $refs.menu[i].toggle(evt)"
aria-haspopup="true"
class="btn btn-outline-secondary dropdown-toggle"
+904
View File
@@ -1273,8 +1273,48 @@ $phrases = array(
)
)
),
array(
'app' => 'core',
'category' => 'global',
'phrase' => 'unknown_error',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Ein unbekannter Fehler ist aufgetreten: {error}',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'An unknown error occurred: {error}',
'description' => '',
'insertvon' => 'system'
)
)
),
//******************************* CORE/ui
array(
'app' => 'core',
'category' => 'ui',
'phrase' => 'loading',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Lädt...',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Loading...',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'ui',
@@ -3084,6 +3124,26 @@ $phrases = array(
)
)
),
array(
'app' => 'core',
'category' => 'lehre',
'phrase' => 'lehrveranstaltung_id',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Lehrveranstaltung ID',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Course ID',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'lehre',
@@ -9596,6 +9656,46 @@ Any unusual occurrences
)
)
),
array(
'app' => 'core',
'category' => 'ui',
'phrase' => 'all_semester',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Alle Semester',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'All semester',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'ui',
'phrase' => 'current_semester',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Aktuelles Semester',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Current semester',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'ui',
@@ -35911,6 +36011,810 @@ array(
)
)
),
// document
array(
'app' => 'core',
'category' => 'stv',
'phrase' => 'document_certificate',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Zertifikat',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Certificate',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'stv',
'phrase' => 'document_coursecertificate',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'LV Zeugnis',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Course certificate',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'stv',
'phrase' => 'document_download',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Download',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Download',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'stv',
'phrase' => 'document_archive',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Archivieren',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Archive',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'stv',
'phrase' => 'document_signed_and_archived',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Dokument signiert und archiviert',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Document signed and archived',
'description' => '',
'insertvon' => 'system'
)
)
),
// grades
array(
'app' => 'core',
'category' => 'stv',
'phrase' => 'grades_zeugnis',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Zeugnis',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Certificate',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'stv',
'phrase' => 'grades_takeoverdate',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Übernahmedatum',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Takeover date',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'stv',
'phrase' => 'grades_gradingdate',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Benotungsdatum',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Grading date',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'stv',
'phrase' => 'grades_approvaldate',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Freigabedatum',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Approval date',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'stv',
'phrase' => 'grades_numericgrade',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Note (Numerisch)',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Grade (numeric)',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'stv',
'phrase' => 'grades_studiengang_lv',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Studiengang (Lehrveranstaltung)',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Degree-program (Course)',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'stv',
'phrase' => 'grades_studiengang_kz_lv',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Studiengangskennzahl (Lehrveranstaltung)',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Study program number (Course)',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'stv',
'phrase' => 'grades_semester_lv',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Semester (Lehrveranstaltung)',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Semester (Course)',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'stv',
'phrase' => 'grades_points',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Punkte',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Points',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'stv',
'phrase' => 'grades_lehrveranstaltung_bezeichnung_english',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Lehrveranstaltungsname Englisch',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Coursename english',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'stv',
'phrase' => 'grades_setgrade',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Note setzen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Set grade',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'stv',
'phrase' => 'grades_updated',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Note gesetzt',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Grade set',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'stv',
'phrase' => 'grades_title_zeugnis',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Zeugnis',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Certificate',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'stv',
'phrase' => 'grades_title_teacher',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'LektorIn',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Lector',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'stv',
'phrase' => 'grades_title_repeater',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Wiederholer',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Repeater',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'stv',
'phrase' => 'grades_action_copy',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Übernehmen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Transfer',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'stv',
'phrase' => 'grades_error_sign',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Diese Vorlage darf nicht signiert werden',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'This template must not be signed',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'stv',
'phrase' => 'grades_error_archive',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Dieses Dokument ist nicht archivierbar',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'This document cannot be archived',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'stv',
'phrase' => 'grades_error_overwrite',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Nicht überschreibbar',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Not overwritable',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'stv',
'phrase' => 'grades_error_lehreinheit_id',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Fehler beim Ermitteln der Lehreinheit ID',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Error determining the Teaching Unit ID',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'stv',
'phrase' => 'grades_error_prestudentstatus',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'StudentIn hat keinen Status in diesem Semester',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Student has no status this semester',
'description' => '',
'insertvon' => 'system'
)
)
),
//**************************** CORE/document_export
array(
'app' => 'core',
'category' => 'document_export',
'phrase' => 'error_unoconv',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Unoconv nicht gefunden - Bitte installieren sie Unoconv',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Unoconv not found - Please install Unoconv',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'document_export',
'phrase' => 'error_unoconv_version',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Unoconv Version konnte nicht ermittelt werden',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Could not get Unoconv Version',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'document_export',
'phrase' => 'error_conv_timeout',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Dokumentenkonvertierung ist derzeit nicht möglich. Bitte versuchen Sie es in einer Minute erneut oder kontaktieren Sie einen Administrator',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Document conversion is currently not possible. Please try again in a minute or contact an administrator',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'document_export',
'phrase' => 'error_sign_timeout',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Signaturserver ist derzeit nicht erreichbar',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Signature server is currently unavailable',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'document_export',
'phrase' => 'error_sign_pdf',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Derzeit können nur PDFs signiert werden',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Currently only PDFs can be signed',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'document_export',
'phrase' => 'error_outputformat_missing',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Ausgabeformat fehlt',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Outputformat is not defined',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'document_export',
'phrase' => 'error_template_missing',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Keine Vorlage gefunden',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'No template found',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'document_export',
'phrase' => 'error_headers',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Header wurden bereits gesendet -> Abbruch',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Header already sent -> Abort',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'document_export',
'phrase' => 'error_file_copy',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Kopieren fehlgeschlagen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Copy failed',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'document_export',
'phrase' => 'error_file_load',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Datei konnte nicht geladen werden',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Unable to load file',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'document_export',
'phrase' => 'error_xml_load',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'XML konnte nicht geladen werden: {url} XML: {xml} PARAMETER: {params}',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Unable to load xml: {url} XML: {xml} PARAMS: {params}',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'document_export',
'phrase' => 'error_xsl_load',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'XSL konnte nicht geladen werden',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Unable to load xsl',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'document_export',
'phrase' => 'error_styles_load',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Styles XSL konnte nicht geladen werden',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Unable to load styles xsl',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'document_export',
'phrase' => 'error_manifest',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Manifest ungültig',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Manifest file invalid',
'description' => '',
'insertvon' => 'system'
)
)
),
//**************************** FHC-Core-SAP
array(