From fd13a3d9df52987aeff75aac7125d168eb22104d Mon Sep 17 00:00:00 2001
From: Ron Lucke <lucke@elan-ev.de>
Date: Wed, 6 Sep 2023 16:05:42 +0000
Subject: [PATCH] Courseware Lesezeichen BIESTer

Closes #3075, #3074, and #3083

Merge request studip/studip!2062
---
 .../CoursewareContentBookmarkFilterWidget.vue |  5 +++-
 .../courseware/CoursewareContentBookmarks.vue | 23 +++++++++++--------
 .../vue/courseware-content-bookmark-app.js    |  7 +++---
 3 files changed, 22 insertions(+), 13 deletions(-)

diff --git a/resources/vue/components/courseware/CoursewareContentBookmarkFilterWidget.vue b/resources/vue/components/courseware/CoursewareContentBookmarkFilterWidget.vue
index de8eb010ce1..515796f2c06 100644
--- a/resources/vue/components/courseware/CoursewareContentBookmarkFilterWidget.vue
+++ b/resources/vue/components/courseware/CoursewareContentBookmarkFilterWidget.vue
@@ -1,7 +1,10 @@
 <template>
     <select v-model="bookmarkFilter" class="sidebar-selectlist">
         <option value="all">
-            <translate>alle</translate>
+            {{ $gettext('alle') }}
+        </option>
+        <option value="contents">
+            {{ $gettext('Arbeitsplatz') }}
         </option>
         <option v-for="course in courses" :key="course.id" :value="course.id">
             {{ course.attributes.title }}
diff --git a/resources/vue/components/courseware/CoursewareContentBookmarks.vue b/resources/vue/components/courseware/CoursewareContentBookmarks.vue
index 85345428b85..83d0927ddf0 100644
--- a/resources/vue/components/courseware/CoursewareContentBookmarks.vue
+++ b/resources/vue/components/courseware/CoursewareContentBookmarks.vue
@@ -14,9 +14,7 @@
                         :style="getChildStyle(bookmark)"
                     ></div>
                     <div class="description">
-                        <header
-                            :class="[bookmark.attributes.purpose !== '' ? 'description-icon-' + bookmark.attributes.purpose : '']"
-                        >
+                        <header>
                             {{ bookmark.attributes.title }}
                         </header>
                         <div class="description-text-wrapper">
@@ -27,7 +25,7 @@
                                 <studip-icon shape="seminar" role="info_alt"/> {{ getCourseName(bookmark.relationships.course.data.id) }}
                             </span>
                             <span v-if="bookmark.relationships.user">
-                                <studip-icon shape="headache" role="info_alt"/> {{ getUserName(bookmark.relationships.user.data.id) }}
+                                <studip-icon shape="content2" role="info_alt"/> {{ $gettext('Arbeitsplatz') }}
                             </span>
                         </footer>
                     </div>
@@ -58,8 +56,13 @@ export default {
                 if (this.bookmarkFilter === 'all') {
                     return this.bookmarks;
                 }
+                if (this.bookmarkFilter === 'contents') {
+                    return this.bookmarks.filter(bookmark => {
+                        return bookmark.relationships.user?.data;
+                    });
+                }
                 return this.bookmarks.filter(bookmark => {
-                    return bookmark.relationships.course.data.id === this.bookmarkFilter;
+                    return bookmark.relationships.course?.data?.id === this.bookmarkFilter;
                 });
             }
             return [];
@@ -81,12 +84,14 @@ export default {
             return user.attributes['formatted-name'];
         },
         getElementUrl(element) {
-            if (element.relationships.course.data) {
-                let cid = element.relationships.course.data.id;
-                return STUDIP.URLHelper.base_url + 'dispatch.php/course/courseware/?cid='+ cid +'#/structural_element/' + element.id;
+            const unitId = element.relationships.unit.data.id;
+
+            if (element.relationships?.course?.data) {
+                const cid = element.relationships.course.data.id;
+                return STUDIP.URLHelper.base_url + 'dispatch.php/course/courseware/courseware/' + unitId + '?cid='+ cid +'#/structural_element/' + element.id;
             }
 
-            return STUDIP.URLHelper.base_url + 'dispatch.php/contents/courseware/courseware#/structural_element/' + element.id;
+            return STUDIP.URLHelper.base_url + 'dispatch.php/contents/courseware/courseware/' + unitId + '#/structural_element/' + element.id;
         },
         getChildStyle(element) {
             let url = element.relationships?.image?.meta?.['download-url'];
diff --git a/resources/vue/courseware-content-bookmark-app.js b/resources/vue/courseware-content-bookmark-app.js
index 8e9a43c7bfe..6d7eed95e32 100644
--- a/resources/vue/courseware-content-bookmark-app.js
+++ b/resources/vue/courseware-content-bookmark-app.js
@@ -21,7 +21,7 @@ const mountApp = (STUDIP, createApp, element) => {
             ...mapResourceModules({
                 names: [
                     'activities',
-                    'users',
+                    'file-refs',
                     'courses',
                     'course-memberships',
                     'courseware-blocks',
@@ -30,14 +30,15 @@ const mountApp = (STUDIP, createApp, element) => {
                     'courseware-containers',
                     'courseware-instances',
                     'courseware-structural-elements',
+                    'courseware-units',
                     'courseware-user-data-fields',
                     'courseware-user-progresses',
-                    'users',
                     'institutes',
                     'semesters',
                     'sem-classes',
                     'sem-types',
                     'status-groups',
+                    'users',
                 ],
                 httpClient,
             }),
@@ -78,4 +79,4 @@ const mountApp = (STUDIP, createApp, element) => {
     return app;
 }
 
-export default mountApp;
\ No newline at end of file
+export default mountApp;
-- 
GitLab