Prüfungsprotokoll:

- phrases: multilingual database fields shown depending on language (e.g. beurteilung, studiengang,...
- added phrases
- added timepicker css
- if student not in condition, time can still be filled out
This commit is contained in:
KarpAlex
2020-05-28 20:53:21 +02:00
parent 2fc0b0f0ce
commit bc32a643f1
5 changed files with 306 additions and 63 deletions
@@ -90,10 +90,13 @@ class Pruefungsprotokoll extends Auth_Controller
else
$abschlussbeurteilung = getData($abschlussbeurteilung);
$language = getUserLanguage();
$data = array(
'abschlusspruefung' => $abschlusspruefung,
'abschlussbeurteilung' => $abschlussbeurteilung,
'abschlusspruefung_saved' => $abschlusspruefung_saved
'abschlusspruefung_saved' => $abschlusspruefung_saved,
'language' => $language
);
$this->load->view('lehre/pruefungsprotokoll.php', $data);
@@ -127,12 +130,12 @@ class Pruefungsprotokoll extends Auth_Controller
$result = $this->authlib->checkUserAuthByUsernamePassword($this->_uid, $password);
if (isError($result))
{
return $this->outputJsonError('Falsches Passwort'); // exit if password is incorrect
return $this->outputJsonError($this->p->t('password', 'wrongPassword')); // exit if password is incorrect
}
}
else
{
return $this->outputJsonError('Passwort fehlt');
return $this->outputJsonError($this->p->t('password', 'passwordMissing'));
}
}
@@ -153,7 +156,7 @@ class Pruefungsprotokoll extends Auth_Controller
}
}
else
$this->outputJsonError('Ungültige Parameter');
$this->outputJsonError($this->p->t('ui', 'ungueltigeParameter'));
}
// -----------------------------------------------------------------------------------------------------------------
+19 -10
View File
@@ -11,8 +11,16 @@ $this->load->view(
'ajaxlib' => true,
'sbadmintemplate' => true,
'phrases' => array(
'pruefungsprotokoll' => array(
'freigegebenAm'
'abschlusspruefung' => array(
'freigegebenAm',
'pruefungGespeichert',
'pruefungSpeichernFehler',
'abschlussbeurteilungLeer',
'beginnzeitLeer',
'beginnzeitFormatError',
'endezeitLeer',
'endezeitFormatError',
'endezeitBeforeError'
),
'ui' => array(
'stunde',
@@ -21,11 +29,12 @@ $this->load->view(
),
'customCSSs' => array(
'public/css/sbadmin2/admintemplate_contentonly.css',
'vendor/fgelinas/timepicker/jquery.ui.timepicker.css',
'public/css/lehre/pruefungsprotokoll.css'
),
'customJSs' => array(
'public/js/lehre/pruefungsprotokoll.js',
'vendor/fgelinas/timepicker/jquery.ui.timepicker.js'
'vendor/fgelinas/timepicker/jquery.ui.timepicker.js',
'public/js/lehre/pruefungsprotokoll.js'
)
)
);
@@ -44,11 +53,11 @@ $this->load->view(
<div class="row">
<div class="col-lg-12">
<h3 class="page-header">
<?php echo $this->p->t('abschlusspruefung', 'Protokoll') ?>&nbsp;<?php echo $pruefung_name ?>
<?php echo $this->p->t('abschlusspruefung', 'protokoll') ?>&nbsp;<?php echo $pruefung_name ?>
</h3>
<p>
<?php echo $abschlusspruefung->studiengangstyp == 'b' ? $this->p->t('abschlusspruefung', 'abgehaltenAmBachelor') : $this->p->t('abschlusspruefung', 'abgehaltenAmMaster'); ?>
<?php echo $abschlusspruefung->studiengangbezeichnung?>,&nbsp;<?php echo $this->p->t('abschlusspruefung', 'studiengangskennzahl') ?>&nbsp;
<?php echo $language == 'German' ? $abschlusspruefung->studiengangbezeichnung : $abschlusspruefung->studiengangbezeichnung_englisch ?>,&nbsp;<?php echo $this->p->t('abschlusspruefung', 'studiengangskennzahl') ?>&nbsp;
<?php echo $abschlusspruefung->studiengang_kz ?>
</p>
</div>
@@ -118,7 +127,7 @@ $this->load->view(
<?php echo $this->p->t('abschlusspruefung', 'pruefungsantritt') ?>
</td>
<td colspan="5">
<?php echo $abschlusspruefung->pruefungsantritt_bezeichnung; ?>
<?php echo $language == 'German' ? $abschlusspruefung->pruefungsantritt_bezeichnung : $abschlusspruefung->pruefungsantritt_bezeichnung_english; ?>
</td>
</tr>
<tr>
@@ -146,12 +155,12 @@ $this->load->view(
<?php echo $this->p->t('abschlusspruefung', 'pruefungsgegenstand') ?>
</td>
<td colspan="5">
<?php echo ($abschlusspruefung->studiengangstyp == 'b' ? $this->p->t('abschlusspruefung', 'PruefungsgegenstandBachelor') : $this->p->t('abschlusspruefung', 'PruefungsgegenstandMaster')) ?>
<?php echo ($abschlusspruefung->studiengangstyp == 'b' ? $this->p->t('abschlusspruefung', 'pruefungsgegenstandBachelor') : $this->p->t('abschlusspruefung', 'PruefungsgegenstandMaster')) ?>
</td>
</tr>
<tr>
<td colspan="6">
<?php echo $this->p->t('global', 'notizen') ?>
<?php echo ucfirst($this->p->t('global', 'notizen')); ?>
</td>
</tr>
<tr>
@@ -172,7 +181,7 @@ $this->load->view(
<option value="">-- <?php echo $this->p->t('ui', 'bitteWaehlen'); ?> --</option>
<?php foreach ($abschlussbeurteilung as $beurteilung):
$selected = $beurteilung->abschlussbeurteilung_kurzbz == $abschlusspruefung->abschlussbeurteilung_kurzbz ? " selected" : "" ?>
<option value="<?php echo $beurteilung->abschlussbeurteilung_kurzbz; ?>"<?php echo $selected ?>><?php echo $beurteilung->bezeichnung; ?> </option>
<option value="<?php echo $beurteilung->abschlussbeurteilung_kurzbz; ?>"<?php echo $selected ?>><?php echo $language == 'German' ? $beurteilung->bezeichnung : $beurteilung->bezeichnung_english; ?> </option>
<?php endforeach; ?>
</select>
</td>
+9 -1
View File
@@ -1,4 +1,4 @@
/* threshold for form full screen */
/* threshold for full screen form */
@media (max-width:1075px) {
#page-wrapper {
margin-right: 0;
@@ -18,6 +18,7 @@
background-color: #f5f5f5;
}
/* table date and time cell widths */
.timecellwidth {
width: 20%;
}
@@ -35,3 +36,10 @@
margin-top: 10px;
margin-bottom: 10px;
}
/* timepicker */
.ui-timepicker-table td a {
width: inherit;
line-height: 1;
text-align: center;
}
+37 -36
View File
@@ -16,29 +16,26 @@ $("document").ready(function() {
data.password = $("#password").val();
}
if ($("#verfCheck").prop('checked'))
var checkFields = Pruefungsprotokoll.checkFields(data, $("#verfCheck").prop('checked'));
$("#protocolform td").removeClass('has-error');
if (checkFields.length > 0)
{
var checkFields = Pruefungsprotokoll.checkFields(data, $("#verfCheck").prop('checked'));
$("#protocolform td").removeClass('has-error');
if (checkFields.length > 0)
var errortext = '';
for (var i = 0; i < checkFields.length; i++)
{
var errortext = '';
for (var i = 0; i < checkFields.length; i++)
var error = checkFields[i];
$.each(error, function(i, n)
{
var error = checkFields[i];
$.each(error, function(i, n)
{
console.log($("#"+i).closest('td'));
$("#"+i).closest('td').addClass('has-error');
if (errortext !== '')
errortext += '; ';
errortext += n;
});
}
FHC_DialogLib.alertError(errortext);
return;
console.log($("#"+i).closest('td'));
$("#"+i).closest('td').addClass('has-error');
if (errortext !== '')
errortext += '; ';
errortext += n;
});
}
FHC_DialogLib.alertError(errortext);
return;
}
Pruefungsprotokoll.saveProtokoll($("#abschlusspruefung_id").val(),data);
@@ -49,17 +46,12 @@ $("document").ready(function() {
function() { // if student not mentally and physically fit (checkbox), no form entry
if ($(this).prop('checked'))
{
$("#abschlussbeurteilung_kurzbz, #pruefungsbeginn, #pruefungsende").prop('disabled', false);
$("#abschlussbeurteilung_kurzbz").val($("#abschlussbeurteilung_kurzbz option").first().val());
$("#abschlussbeurteilung_kurzbz").prop('disabled', false).val($("#abschlussbeurteilung_kurzbz option").first().val());
}
else
{
$("#abschlussbeurteilung_kurzbz, #pruefungsbeginn, #pruefungsende").prop('disabled', true).val(null);
$("#abschlussbeurteilung_kurzbz").prop('disabled', true).val(null);
}
$("#pruefungsbeginn").val(null);
$("#pruefungsende").val(null);
}
);
@@ -94,10 +86,10 @@ var Pruefungsprotokoll = {
if (dataresponse.freigabedatum)
{
$("#saveProtocolBtn").prop("disabled", true);
$("#freigegebenText").html('&nbsp;&nbsp;' + FHC_PhrasesLib.t("pruefungsprotokoll", "freigegebenAm") +
$("#freigegebenText").html('&nbsp;&nbsp;' + FHC_PhrasesLib.t("abschlusspruefung", "freigegebenAm") +
'&nbsp;' + dataresponse.freigabedatum)
}
FHC_DialogLib.alertSuccess("Prüfung erfolgreich gespeichert!");
FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t("abschlusspruefung", "pruefungGespeichert"));
}
else if(FHC_AjaxClient.isError(data))
{
@@ -105,30 +97,39 @@ var Pruefungsprotokoll = {
}
},
errorCallback: function() {
FHC_DialogLib.alertError("Fehler beim Speichern der Prüfung");
FHC_DialogLib.alertError(FHC_PhrasesLib.t("abschlusspruefung", "pruefungSpeichernFehler"));
},
veilTimeout: 0
}
);
},
checkFields: function(data)
checkFields: function(data, verfChecked)
{
var errors = [];
if (data.abschlussbeurteilung_kurzbz == "")
errors.push({"abschlussbeurteilung_kurzbz": "Abschlussbeurteilung darf nicht leer sein!"}); // TODO phrases
if (data.abschlussbeurteilung_kurzbz == "" && verfChecked)
errors.push({"abschlussbeurteilung_kurzbz": FHC_PhrasesLib.t("abschlusspruefung", "abschlussbeurteilungLeer")});
var zeitregex = /^[0-2][0-9]:[0-5][0-9]$/;
if (data.uhrzeit == "")
errors.push({"pruefungsbeginn": "Beginnzeit darf nicht leer sein!"});
{
if (verfChecked)
errors.push({"pruefungsbeginn": FHC_PhrasesLib.t("abschlusspruefung", "beginnzeitLeer")});
}
else if(!zeitregex.test(data.uhrzeit))
errors.push({"pruefungsbeginn": "Beginnzeit muss Format Stunden:Minuten haben!"});
errors.push({"pruefungsbeginn": FHC_PhrasesLib.t("abschlusspruefung", "beginnzeitFormatError")});
if (data.endezeit == "")
errors.push({"pruefungsende": "Endzeit darf nicht leer sein!"});
{
if (verfChecked)
errors.push({"pruefungsende": FHC_PhrasesLib.t("abschlusspruefung", "endezeitLeer")});
}
else if(!zeitregex.test(data.endezeit))
errors.push({"pruefungsende": "Endzeit muss Format Stunden:Minuten haben!"});
errors.push({"pruefungsende": FHC_PhrasesLib.t("abschlusspruefung", "endezeitFormatError")});
if (data.uhrzeit > data.endezeit && data.endezeit != "" && data.uhrzeit != "")
errors.push({"pruefungsende": FHC_PhrasesLib.t("abschlusspruefung", "endezeitBeforeError")});
return errors;
}
+234 -12
View File
@@ -4174,6 +4174,46 @@ When on hold, the date is only a reminder.',
)
)
),
array(
'app' => 'core',
'category' => 'password',
'phrase' => 'wrongPassword',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Falsches Passwort',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Wrong password',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'password',
'phrase' => 'passwordMissing',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Passwort fehlt',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Password missing',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'global',
@@ -5714,6 +5754,26 @@ When on hold, the date is only a reminder.',
)
)
),
array(
'app' => 'lehrauftrag',
'category' => 'ui',
'phrase' => 'ungueltigeParameter',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Ungültige Parameter',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Invalid parameters',
'description' => 'Hours',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'table',
@@ -6900,7 +6960,7 @@ When on hold, the date is only a reminder.',
),
array(
'sprache' => 'English',
'text' => 'Bachelor paper',
'text' => 'Bachelor Paper',
'description' => '',
'insertvon' => 'system'
)
@@ -7220,7 +7280,7 @@ When on hold, the date is only a reminder.',
),
array(
'sprache' => 'English',
'text' => '',
'text' => 'Declaration of Agreement',
'description' => '',
'insertvon' => 'system'
)
@@ -7448,19 +7508,19 @@ Any unusual occurrences
),
array(
'sprache' => 'English',
'text' => 'Assesment and criteria Bachelor Examination<br /><br />
'text' => 'Assessment and criteria Bachelor Examination<br /><br />
<ul>
<li>
Passed with distinction<br />
Der oder die KandidatIn ist in der Lage, Wissen aus verschiedenen Lernbereichen fachlich korrekt in einem weit über das Wesentliche hinausgehenden Ausmaß souverän auf neue Situationen anzuwenden, und das noch dazu auf einem sehr hohen argumentativen Niveau.
The candidate is within the scope of the task able to apply knowledge from various learning areas to new situations in a technically correct manner, far beyond what is essential, and at a very high level of argument.
</li>
<li>
Passed with merit<br />
Der oder die KandidatIn ist in der Lage, Wissen aus verschiedenen Lernbereichen fachlich korrekt in einem über das Wesentliche hinausgehenden Ausmaß auf neue Situationen anzuwenden, und das noch dazu auf einem hohen argumentativen Niveau.
The candidate is within the scope of the task able to apply knowledge from various learning areas in a technically correct manner to an extent beyond what is essential to new situations, and at a high level of argument.
</li>
<li>
Passed<br />
Alle Lehrveranstaltungen (einschl. Bachelorarbeit) und Bachelorprüfung wurden positiv beurteilt.
Bachelor thesis and Bachelor examination were successfully completed.
</li>
<li>
Failed
@@ -7491,7 +7551,7 @@ Any unusual occurrences
</li>
<li>
Bestanden<br />
Alle Lehrveranstaltungen (einschl. Bachelorarbeit) und Bachelorprüfung wurden positiv beurteilt.
Alle Lehrveranstaltungen (einschl. Masterarbeit) und Masterprüfung wurden positiv beurteilt.
</li>
<li>
Nicht bestanden
@@ -7502,24 +7562,26 @@ Any unusual occurrences
),
array(
'sprache' => 'English',
'text' => '\'Assesment and criteria Masters Examination<br /><br />
'text' => 'Assessment and criteria Masters Examination<br /><br />
<ul>
<li>
Passed with distinction<br />
Der oder die KandidatIn ist in der Lage, Wissen aus verschiedenen Lernbereichen fachlich korrekt in einem weit über das Wesentliche hinausgehenden Ausmaß souverän auf neue Situationen anzuwenden, und das noch dazu auf einem sehr hohen argumentativen Niveau.
Master thesis was graded "excellent"<br />
The candidate is within the scope of the task able to apply knowledge from various learning areas to new situations in a technically correct manner, far beyond what is essential, and at a very high level of argument.
</li>
<li>
Passed with merit<br />
Der oder die KandidatIn ist in der Lage, Wissen aus verschiedenen Lernbereichen fachlich korrekt in einem über das Wesentliche hinausgehenden Ausmaß auf neue Situationen anzuwenden, und das noch dazu auf einem hohen argumentativen Niveau.
Master thesis graded not worse than "good"<br />
The candidate is within the scope of the task able to apply knowledge from various learning areas in a technically correct manner to an extent beyond what is essential to new situations, and at a high level of argument.
</li>
<li>
Passed<br />
Alle Lehrveranstaltungen (einschl. Bachelorarbeit) und Bachelorprüfung wurden positiv beurteilt.
Master thesis and Master examination were successfully completed.
</li>
<li>
Failed
</li>
</ul>\'',
</ul>',
'description' => '',
'insertvon' => 'system'
)
@@ -7584,6 +7646,166 @@ Any unusual occurrences
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'abschlusspruefung',
'phrase' => 'pruefungGespeichert',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Prüfung erfolgreich gespeichert!',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Examination successfully saved!',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'abschlusspruefung',
'phrase' => 'pruefungSpeichernFehler',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Fehler beim Speichern der Prüfung',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Error when saving examination',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'abschlusspruefung',
'phrase' => 'abschlussbeurteilungLeer',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Abschlussbeurteilung darf nicht leer sein!',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Assessment cannot be empty!',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'abschlusspruefung',
'phrase' => 'beginnzeitLeer',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Beginnzeit darf nicht leer sein!',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Start time cannot be empty!',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'abschlusspruefung',
'phrase' => 'endezeitLeer',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Endzeit darf nicht leer sein!',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'End time cannot be empty!',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'abschlusspruefung',
'phrase' => 'beginnzeitFormatError',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Beginnzeit muss Format Stunden:Minuten haben!',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Start time must have format Hours:Minutes!',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'abschlusspruefung',
'phrase' => 'endezeitFormatError',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Endezeit muss Format Stunden:Minuten haben!',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'End time must have format Hours:Minutes!',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'abschlusspruefung',
'phrase' => 'endezeitBeforeError',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Endezeit darf nicht kleiner als Beginnzeit sein!',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'End time cannot be before begin time!',
'description' => '',
'insertvon' => 'system'
)
)
)
);