diff options
| author | Ron Lucke <lucke@elan-ev.de> | 2025-07-24 15:48:19 +0200 |
|---|---|---|
| committer | Jan-Hendrik Willms <tleilax+studip@gmail.com> | 2025-09-22 15:41:57 +0200 |
| commit | 8eb19c13cbc488a573ef20a564889a1d61949bbd (patch) | |
| tree | e2c1b8ca474d14a25ec7b505d0477fda44c4f495 /resources | |
| parent | b5023c7b9635b8bfa307d843015dee2c82423894 (diff) | |
Courseware: Dateiupload sollte Lizenzwähler integriert haben
Closes #5712
Merge request studip/studip!4358
Diffstat (limited to 'resources')
| -rw-r--r-- | resources/vue/components/file-chooser/FileChooserToolbar.vue | 113 |
1 files changed, 79 insertions, 34 deletions
diff --git a/resources/vue/components/file-chooser/FileChooserToolbar.vue b/resources/vue/components/file-chooser/FileChooserToolbar.vue index 4f3053e..2b6acd6 100644 --- a/resources/vue/components/file-chooser/FileChooserToolbar.vue +++ b/resources/vue/components/file-chooser/FileChooserToolbar.vue @@ -3,15 +3,16 @@ <button v-if="showButtons" class="button" :disabled="!canAddFolder" @click="addFolder"> {{ $gettext('Ordner hinzufügen') }} </button> - <form v-if="showFolderAdder" class="inline-form" @submit.prevent=""> - <label for="file-chooser-add-folder">{{ $gettext('Ordner hinzufügen') }}:</label> + <form v-if="showFolderAdder" class="default inline-form" @submit.prevent=""> + <label for="file-chooser-add-folder">{{ $gettext('Ordnername') }} <input id="file-chooser-add-folder" type="text" v-model="newFolderName" :placeholder="$gettext('Ordnername')" /> - <div class="inline-buttons"> + </label> + <div class="inline-button-group"> <button :title="$gettext('Ordner anlegen')" @click="createFolder"> <studip-icon shape="accept" /> </button> @@ -22,17 +23,45 @@ {{ $gettext('Datei hinzufügen') }} </button> <input v-show="false" type="file" ref="fileInput" :disabled="!canAddFile" @change="updateUpload" /> - <form v-if="showUpload" class="inline-form" @submit.prevent=""> - <label for="file-chooser-add-file">{{ $gettext('Datei hinzufügen') }}:</label> - <input - id="file-chooser-add-file" - :title="$gettext('Datei auswählen')" - type="text" - :value="uploadFileName" - readonly - @click="$refs.fileInput.click()" - /> - <div class="inline-buttons"> + + <form v-if="showUpload" class="default inline-form" @submit.prevent=""> + <label> + {{ $gettext('Datei') }} + <input + :title="$gettext('Datei auswählen')" + type="text" + :value="uploadFileName" + readonly + @click="$refs.fileInput.click()" + /> + </label> + <label class="file-chooser-license"> + {{ $gettext('Lizenzauswahl') }} + <studip-select + :options="termsOfUse" + label="name" + :reduce="(termsOfUse) => termsOfUse.id" + :clearable="false" + v-model="uploadFileLicense" + > + <template #open-indicator="{ selectAttributes }"> + <span v-bind="selectAttributes"><studip-icon shape="arr_1down" :size="10" /></span> + </template> + <template #no-options> + {{ $gettext('Es steht keine Auswahl zur Verfügung.') }} + </template> + <template #selected-option="option"> + <studip-icon :shape="option.attributes.icon" /> + <span>{{ option.attributes.name }}</span> + </template> + <template #option="option"> + <studip-icon :shape="option.attributes.icon" /> + <span>{{ option.attributes.name }}</span> + </template> + </studip-select> + </label> + + <div class="inline-button-group"> <button :title="$gettext('Datei hochladen')" @click="createFile"><studip-icon shape="accept" /></button> <button :title="$gettext('Abbrechen')" @click="closeAddFile"><studip-icon shape="decline" /></button> </div> @@ -52,6 +81,7 @@ export default { newFolderName: '', showUpload: false, uploadFile: null, + uploadFileLicense: null, }; }, computed: { @@ -62,6 +92,7 @@ export default { courseId: 'file-chooser/courseId', isFolderChooser: 'file-chooser/isFolderChooser', userId: 'file-chooser/userId', + termsOfUse: 'terms-of-use/all', }), showButtons() { return !this.showUpload && !this.showFolderAdder; @@ -84,10 +115,15 @@ export default { return this.uploadFile.name; }, }, + async mounted() { + await this.loadTermsOfUse(); + this.uploadFileLicense = this.getDefaultTerm(); + }, methods: { ...mapActions({ loadRangeFolders: 'file-chooser/loadRangeFolders', loadFolderFiles: 'file-chooser/loadFolderFiles', + loadTermsOfUse: 'terms-of-use/loadAll', }), addFolder() { this.showFolderAdder = true; @@ -146,9 +182,13 @@ export default { }, async createFile() { this.showUpload = false; + const termId = this.uploadFileLicense || this.getDefaultTerm(); const httpClient = await this.getHttpClient(); const formData = new FormData(); formData.append('file', this.uploadFile, this.uploadFileName); + if (termId) { + formData.append('term-id', termId); + } const url = `folders/${this.activeFolderId}/file-refs`; let request = await httpClient.post(url, formData, { headers: { @@ -167,6 +207,13 @@ export default { this.$emit('fileAdded'); this.$refs.fileInput.value = null; }, + getDefaultTerm() { + const defaultTerm = this.termsOfUse.filter((term) => term.attributes['is-default'])[0]; + if (defaultTerm) { + return defaultTerm.id; + } + return null; + }, }, watch: { activeFolderId(newId) { @@ -191,32 +238,30 @@ export default { .inline-form { display: flex; - flex-direction: row; - flex-wrap: wrap; - justify-content: start; - gap: 4px; + justify-content: space-between; + gap: 5px; width: 100%; - margin: 0.8em 0.6em 0.8em 0; + margin: 0.8em 0; label { - line-height: 30px; - } - - input { flex-grow: 1; - padding: 4px; - border: solid thin var(--content-color-40); - border-radius: 0; + &.file-chooser-license { + min-width: 50%; + } } - button { - border: solid thin var(--base-color); - background-color: transparent; - height: 30px; - width: 30px; - cursor: pointer; - img { - vertical-align: middle; + .inline-button-group { + margin-top: 25px; + button { + border: solid thin var(--base-color); + background-color: transparent; + height: 30px; + width: 30px; + cursor: pointer; + + img { + vertical-align: middle; + } } } } |
