diff --git a/resources/vue/components/courseware/CoursewareTree.vue b/resources/vue/components/courseware/CoursewareTree.vue index dfab4d16475db40888b2b18b46dfd71ada8ffb8c..e6c765fa3769e63c8f5f08703aaba805fb0b2d8e 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 1869c77dbeed73d279a09e0ff366ef41b6146be0..6b704fe18bdbcc4c3566035286057d1ab3c577e3 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>