From 108f0ee8f7fdcceb8278c893b12ee37b73b98285 Mon Sep 17 00:00:00 2001
From: Farbod Zamani <zamani@elan-ev.de>
Date: Wed, 16 Nov 2022 13:44:11 +0000
Subject: [PATCH] CW: Add terms of use to export

Closes #1738 and #921

Merge request studip/studip!1169
---
 resources/vue/mixins/courseware/export.js         | 15 ++++++++++++++-
 .../vue/store/courseware/courseware.module.js     |  2 +-
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/resources/vue/mixins/courseware/export.js b/resources/vue/mixins/courseware/export.js
index f2e329b8346..dd0b5229d0a 100644
--- a/resources/vue/mixins/courseware/export.js
+++ b/resources/vue/mixins/courseware/export.js
@@ -239,7 +239,7 @@ export default {
             if (fileId) {
                 await this.$store.dispatch('file-refs/loadById', {id: fileId});
                 let fileRef = this.$store.getters['file-refs/byId']({id: fileId});
-                
+
                 let fileRefData = {};
                 fileRefData.id = fileRef.id;
                 fileRefData.attributes = fileRef.attributes;
@@ -310,6 +310,19 @@ export default {
                 fileref.related_block_id = block_id;
                 fileref.id = refs[ref_id].id;
 
+                // Create an empty relationships object to pick and hold selected relationships of the fileref. Because not all of
+                // them are necessary.
+                let relationships = {};
+                // Get terms-of-use id from relationships.
+                if (refs[ref_id].relationships?.['terms-of-use']?.data?.id) {
+                    let terms = {'data' : refs[ref_id].relationships['terms-of-use'].data};
+                    relationships['terms-of-use'] = terms;
+                }
+                // Add relationships to the fileref object if it has some values.
+                if (Object.keys(relationships).length > 0) {
+                    fileref.relationships = relationships;
+                }
+
                 try {
                     await this.loadFolder(folderId);
                     folder = this.folderById({id: folderId});
diff --git a/resources/vue/store/courseware/courseware.module.js b/resources/vue/store/courseware/courseware.module.js
index de7b0684048..1380ea008db 100644
--- a/resources/vue/store/courseware/courseware.module.js
+++ b/resources/vue/store/courseware/courseware.module.js
@@ -314,7 +314,7 @@ export const actions = {
     },
 
     async createFile(context, { file, filedata, folder }) {
-        const termId = file?.relationships['terms-of-use']?.data?.id ?? null;
+        const termId = file?.relationships?.['terms-of-use']?.data?.id ?? null;
         const formData = new FormData();
         formData.append('file', filedata, file.attributes.name);
         if (termId) {
-- 
GitLab