Select Git revision
Forked from
Stud.IP / Stud.IP
Source project has a limited visibility.
-
Marcus Eibrink-Lunzenauer authored
Closes #3897 Merge request studip/studip!2756
Marcus Eibrink-Lunzenauer authoredCloses #3897 Merge request studip/studip!2756
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
CoursewareToolsAdmin.vue 12.08 KiB
<template>
<div class="cw-tools cw-tools-admin">
<form class="default" @submit.prevent="">
<fieldset>
<legend>{{ $gettext('Allgemeine Einstellungen') }}</legend>
<label>
<span>{{ $gettext('Art der Inhaltsabfolge') }}</span>
<select class="size-s" v-model="currentProgression">
<option value="0">{{ $gettext('Frei') }}</option>
<option value="1">{{ $gettext('Sequentiell') }}</option>
</select>
</label>
<label>
<span>{{ $gettext('Editierberechtigung für Tutor/-innen') }}</span>
<select class="size-s" v-model="currentPermissionLevel">
<option value="dozent">{{ $gettext('Nein') }}</option>
<option value="tutor">{{ $gettext('Ja') }}</option>
</select>
</label>
</fieldset>
<fieldset>
<legend>
{{ $gettext('Zertifikate') }}
</legend>
<label>
<input type="checkbox" name="makecert" v-model="makeCert">
<span>
{{ $gettext('Zertifikat bei Erreichen einer Fortschrittsgrenze versenden') }}
</span>
<studip-tooltip-icon :text="$gettext('Erreicht eine Person in diesem Lernmaterial den ' +
'hier eingestellten Fortschritt, so erhält Sie ein PDF-Zertifikat per E-Mail.')"/>
</label>
<label v-if="makeCert">
<span>
{{ $gettext('Erforderlicher Fortschritt (in Prozent), um ein Zertifikat zu erhalten') }}
</span>
<input type="number" min="1" max="100" name="threshold" v-model="certThreshold">
</label>
<label v-if="makeCert">
<span>
{{ $gettext('Hintergrundbild des Zertifikats wählen') }}
</span>
<courseware-file-chooser :isImage="true" v-model="certImage"
@selectFile="updateCertImage"></courseware-file-chooser>
</label>
</fieldset>
<fieldset>
<legend>
{{ $gettext('Erinnerungen') }}
</legend>
<label>
<input type="checkbox" name="sendreminders" v-model="sendReminders">
<span>
{{ $gettext('Erinnerungsnachrichten an alle Teilnehmenden schicken') }}
</span>
<studip-tooltip-icon :text="$gettext('Hier können periodisch Nachrichten an alle ' +
'Teilnehmenden verschickt werden, um z.B. an die Bearbeitung dieses Lernmaterials zu erinnern.')"/>
</label>
<label v-if="sendReminders">
<span>
{{ $gettext('Zeitraum zwischen Erinnerungen') }}
</span>
<select name="reminder_interval" v-model="reminderInterval">
<option value="7">
{{ $gettext('wöchentlich') }}
</option>
<option value="14">
{{ $gettext('14-tägig') }}
</option>
<option value="30">
{{ $gettext('monatlich') }}
</option>
<option value="90">
{{ $gettext('vierteljährlich') }}
</option>
<option value="180">
{{ $gettext('halbjährlich') }}
</option>
<option value="365">
{{ $gettext('jährlich') }}
</option>
</select>
</label>
<label v-if="sendReminders" class="col-3">
<span>
{{ $gettext('Erstmalige Erinnerung am') }}
<input type="date" name="reminder_start_date"
v-model="reminderStartDate">
</span>
</label>
<label v-if="sendReminders" class="col-3">
<span>
{{ $gettext('Letztmalige Erinnerung am') }}
<input type="date" name="reminder_end_date"
v-model="reminderEndDate">
</span>
</label>
<label v-if="sendReminders">
<span>
{{ $gettext('Text der Erinnerungsmail') }}
<textarea cols="70" rows="4" name="reminder_mail_text" data-editor="minimal"
v-model="reminderMailText"></textarea>
</span>
</label>
</fieldset>
<fieldset>
<legend>
{{ $gettext('Fortschritt') }}
</legend>
<label>
<input type="checkbox" name="resetprogress" v-model="resetProgress">
<span>
{{ $gettext('Fortschritt periodisch auf 0 zurücksetzen') }}
</span>
<studip-tooltip-icon :text="$gettext('Hier kann eingestellt werden, den Fortschritt ' +
'aller Teilnehmenden periodisch auf 0 zurückzusetzen.')"/>
</label>
<label v-if="resetProgress">
<span>
{{ $gettext('Zeitraum zum Rücksetzen des Fortschritts') }}
</span>
<select name="reset_progress_interval" v-model="resetProgressInterval">
<option value="14">
{{ $gettext('14-tägig') }}
</option>
<option value="30">
{{ $gettext('monatlich') }}
</option>
<option value="90">
{{ $gettext('vierteljährlich') }}
</option>
<option value="180">
{{ $gettext('halbjährlich') }}
</option>
<option value="365">
{{ $gettext('jährlich') }}
</option>
</select>
</label>
<label v-if="resetProgress" class="col-3">
<span>
{{ $gettext('Erstmaliges Zurücksetzen am') }}
<input type="date" dataformatas="" name="reset_progress_start_date"
v-model="resetProgressStartDate">
</span>
</label>
<label v-if="resetProgress" class="col-3">
<span>
{{ $gettext('Letztmaliges Zurücksetzen am') }}
<input type="date" name="reset_progress_end_date"
v-model="resetProgressEndDate">
</span>
</label>
<label v-if="resetProgress">
<span>
{{ $gettext('Text der Rücksetzungsmail') }}
<textarea cols="70" rows="4" name="reset_progress_mail_text" data-editor="minimal"
v-model="resetProgressMailText"></textarea>
</span>
</label>
</fieldset>
</form>
<button class="button" @click="store">{{ $gettext('Übernehmen') }}</button>
</div>
</template>
<script>
import { mapActions, mapGetters } from 'vuex';
import CoursewareFileChooser from "./CoursewareFileChooser.vue";
import StudipTooltipIcon from '../StudipTooltipIcon.vue';
export default {
name: 'cw-tools-admin',
components: { StudipTooltipIcon, CoursewareFileChooser },
data() {
return {
currentPermissionLevel: '',
currentProgression: '',
makeCert: false,
certThreshold: 0,
certImage: '',
sendReminders: false,
reminderInterval: 7,
reminderStartDate: '',
reminderEndDate: '',
reminderMailText: '',
resetProgress: false,
resetProgressInterval: 180,
resetProgressStartDate: '',
resetProgressEndDate: '',
resetProgressMailText: ''
};
},
computed: {
...mapGetters({
courseware: 'courseware',
}),
},
methods: {
...mapActions({
storeCoursewareSettings: 'storeCoursewareSettings',
companionSuccess: 'companionSuccess',
}),
initData() {
console.log(this.courseware.attributes);
this.currentPermissionLevel = this.courseware.attributes['editing-permission-level'];
this.currentProgression = this.courseware.attributes['sequential-progression'] ? '1' : '0';
this.certSettings = this.courseware.attributes['certificate-settings'];
this.makeCert = typeof(this.certSettings) === 'object' &&
Object.keys(this.certSettings).length > 0;
this.certThreshold = this.certSettings.threshold;
this.certImage = this.certSettings.image;
this.reminderSettings = this.courseware.attributes['reminder-settings'];
this.sendReminders = typeof(this.reminderSettings) === 'object' &&
Object.keys(this.reminderSettings).length > 0;
this.reminderInterval = this.reminderSettings.interval;
this.reminderStartDate = this.reminderSettings.startDate;
this.reminderEndDate = this.reminderSettings.endDate;
this.reminderMailText = this.reminderSettings.mailText;
this.resetProgressSettings = this.courseware.attributes['reset-progress-settings'];
this.resetProgress = typeof(this.resetProgressSettings) === 'object' &&
Object.keys(this.resetProgressSettings).length > 0;
this.resetProgressInterval = this.resetProgressSettings.interval;
this.resetProgressStartDate = this.resetProgressSettings.startDate;
this.resetProgressEndDate = this.resetProgressSettings.endDate;
this.resetProgressMailText = this.resetProgressSettings.mailText;
},
store() {
this.companionSuccess({
info: this.$gettext('Die Einstellungen wurden übernommen.'),
})
this.storeCoursewareSettings({
permission: this.currentPermissionLevel,
progression: this.currentProgression,
certificateSettings: this.generateCertificateSettings(),
reminderSettings: this.generateReminderSettings(),
resetProgressSettings: this.generateResetProgressSettings()
});
},
generateCertificateSettings() {
return this.makeCert ? {
threshold: this.certThreshold,
image: this.certImage
} : {};
},
generateReminderSettings() {
return this.sendReminders ? {
interval: this.reminderInterval,
startDate: this.reminderStartDate,
endDate: this.reminderEndDate,
mailText: this.reminderMailText
} : {};
},
generateResetProgressSettings() {
return this.resetProgress ? {
interval: this.resetProgressInterval,
startDate: this.resetProgressStartDate,
endDate: this.resetProgressEndDate,
mailText: this.resetProgressMailText
} : {};
},
updateCertImage(file) {
this.certImage = file.id;
}
},
mounted() {
this.initData();
},
};
</script>