From 46738b63094c3ce43c33af6e3ca7705777d17ebb Mon Sep 17 00:00:00 2001
From: farbod <zamanifarbod2@gmail.com>
Date: Thu, 6 Jan 2022 14:35:50 +0100
Subject: [PATCH] not showing courses without courseware, refs #277

---
 .../CoursewareManagerCopySelector.vue         |  2 +-
 .../vue/store/courseware/courseware.module.js | 22 ++++++++++++++-----
 2 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/resources/vue/components/courseware/CoursewareManagerCopySelector.vue b/resources/vue/components/courseware/CoursewareManagerCopySelector.vue
index 2a88e534c2e..c582737aef8 100755
--- a/resources/vue/components/courseware/CoursewareManagerCopySelector.vue
+++ b/resources/vue/components/courseware/CoursewareManagerCopySelector.vue
@@ -194,7 +194,7 @@ export default {
         }
     },
     async mounted() {
-        this.courses = await this.loadUsersCourses(this.userId);
+        this.courses = await this.loadUsersCourses({ userId: this.userId, withCourseware: true });
         this.loadSemesterMap();
     }
 
diff --git a/resources/vue/store/courseware/courseware.module.js b/resources/vue/store/courseware/courseware.module.js
index be6ea2732de..4bf0dfb1b1a 100755
--- a/resources/vue/store/courseware/courseware.module.js
+++ b/resources/vue/store/courseware/courseware.module.js
@@ -819,7 +819,7 @@ export const actions = {
         } while (rootGetters[`${type}/all`].length < rootGetters[`${type}/lastMeta`].page.total);
     },
 
-    async loadUsersCourses({ dispatch, rootGetters, state }, userId) {
+    async loadUsersCourses({ dispatch, rootGetters, state }, { userId, withCourseware }) {
         const parent = {
             type: 'users',
             id: userId,
@@ -841,19 +841,29 @@ export const actions = {
         });
 
         let courses = [];
-        memberships.forEach((membership) => {
+        for (let membership of memberships) {
             if (
                 membership.attributes.permission === 'dozent' &&
                     state.context.id !== membership.relationships.course.data.id
             ) {
-                courses.push(rootGetters['courses/related']({ parent: membership, relationship: 'course' }));
+                const course = rootGetters['courses/related']({ parent: membership, relationship: 'course' });
+                if (!withCourseware) {
+                    courses.push(course);
+                    continue;
+                }
+                const coursewareInstance = await dispatch('loadRemoteCoursewareStructure', {
+                    rangeId: course.id,
+                    rangeType: course.type
+                });
+                if (coursewareInstance?.relationships?.root) {
+                    courses.push(course);
+                }
             }
-        });
-
+        }
         return courses;
     },
 
-    loadRemoteCoursewareStructure({ dispatch, rootGetters }, { rangeId, rangeType }) {
+    async loadRemoteCoursewareStructure({ dispatch, rootGetters }, { rangeId, rangeType }) {
         const parent = {
             id: rangeId,
             type: rangeType,
-- 
GitLab