From e7682d12ddd591f50ffcfe6ed697fd047f979b3c Mon Sep 17 00:00:00 2001 From: Ron Lucke <lucke@elan-ev.de> Date: Tue, 21 Feb 2023 08:29:49 +0000 Subject: [PATCH] fix #2099 Closes #2099 Merge request studip/studip!1359 --- .../components/courseware/CoursewareTree.vue | 19 +++++++++++++++---- .../courseware/CoursewareTreeItem.vue | 7 +++++-- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/resources/vue/components/courseware/CoursewareTree.vue b/resources/vue/components/courseware/CoursewareTree.vue index dfab4d16475..e6c765fa376 100644 --- a/resources/vue/components/courseware/CoursewareTree.vue +++ b/resources/vue/components/courseware/CoursewareTree.vue @@ -89,7 +89,8 @@ export default { unlockObject: 'unlockObject', sortChildrenInStructualElements: 'sortChildrenInStructualElements', loadStructuralElement: 'loadStructuralElement', - setAssistiveLiveContents: 'setAssistiveLiveContents' + setAssistiveLiveContents: 'setAssistiveLiveContents', + companionError: 'companionError', }), updateNestedChildren() { this.nestedChildren = this.getNestedChildren(this.rootElement); @@ -119,10 +120,20 @@ export default { const tree = this.$refs.tree; const currentScrollPosition = tree.offsetParent.scrollTop; this.processing = true; + await this.loadStructuralElement(data.newParent); + const newParent = this.structuralElementById({ id: data.newParent }); + if (!newParent.attributes['can-edit']) { + this.processing = false; + this.updateNestedChildren(); + this.companionError({ + info: this.$gettext('Verschieben nicht möglich. Sie haben keine Schreibrechte für die Ziel-Seite.') + }); + return; + } if (data.oldParent !== data.newParent) { await this.lockObject({ id: data.id, type: 'courseware-structural-elements' }); let element = this.structuralElementById({ id: data.id }); - element.relationships.parent.data.id = data.newParent; + element.relationships.parent.data.id = newParent.id; await this.updateStructuralElement({ element: element, id: element.id, @@ -130,8 +141,8 @@ export default { await this.unlockObject({ id: data.id, type: 'courseware-structural-elements' }); await this.loadStructuralElement(data.id); } - await this.loadStructuralElement(data.newParent); - const parent = this.structuralElementById({ id: data.newParent }); + await this.loadStructuralElement(newParent.id); + const parent = this.structuralElementById({ id: newParent.id }); await this.sortChildrenInStructualElements({parent: parent, children: data.sortArray}); this.updateNestedChildren(); this.processing = false; diff --git a/resources/vue/components/courseware/CoursewareTreeItem.vue b/resources/vue/components/courseware/CoursewareTreeItem.vue index 1869c77dbee..6b704fe18bd 100644 --- a/resources/vue/components/courseware/CoursewareTreeItem.vue +++ b/resources/vue/components/courseware/CoursewareTreeItem.vue @@ -8,7 +8,7 @@ > <div class="cw-tree-item-wrapper"> <span - v-if="editMode && depth > 0" + v-if="editMode && depth > 0 && canEdit" class="cw-sortable-handle" :tabindex="0" aria-describedby="operation" @@ -270,6 +270,9 @@ export default { ghostClass: "cw-tree-item-ghost" }; }, + canEdit() { + return this.element.attributes['can-edit']; + } }, methods: { ...mapActions({ @@ -436,4 +439,4 @@ export default { }, } }; -</script> \ No newline at end of file +</script> -- GitLab