Skip to content
Snippets Groups Projects
Select Git revision
1 result Searching

Tinker.php

Blame
  • Forked from Stud.IP / Stud.IP
    Source project has a limited visibility.
    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>