From 88d1129bfe94f1b57a885b3a218957acd5958e21 Mon Sep 17 00:00:00 2001
From: Ron Lucke <lucke@elan-ev.de>
Date: Fri, 1 Sep 2023 11:27:26 +0000
Subject: [PATCH] fix #3019

Closes #3019

Merge request studip/studip!2086
---
 app/views/contents/courseware/courseware.php  |  1 -
 .../courseware/shared_content_courseware.php  |  1 -
 app/views/course/courseware/courseware.php    |  1 -
 lib/classes/JsonApi/Models/Studip.php         |  2 ++
 .../courseware/CoursewareExportWidget.vue     |  4 ++--
 .../CoursewareStructuralElement.vue           |  7 ++++---
 resources/vue/courseware-index-app.js         | 16 +++++++++------
 .../vue/store/courseware/courseware.module.js | 20 +++++++++----------
 8 files changed, 27 insertions(+), 25 deletions(-)

diff --git a/app/views/contents/courseware/courseware.php b/app/views/contents/courseware/courseware.php
index 683f07e4748..338c6b2c7bd 100644
--- a/app/views/contents/courseware/courseware.php
+++ b/app/views/contents/courseware/courseware.php
@@ -5,7 +5,6 @@
         entry-type="users"
         entry-id="<?= htmlReady($user_id) ?>"
         unit-id="<?= htmlReady($unit_id) ?>"
-        oer-enabled='<?= htmlReady($oer_enabled) ?>'
         licenses='<?= htmlReady($licenses) ?>'
         >
     </div>
diff --git a/app/views/contents/courseware/shared_content_courseware.php b/app/views/contents/courseware/shared_content_courseware.php
index f9590593b15..05ed3cc0fbf 100755
--- a/app/views/contents/courseware/shared_content_courseware.php
+++ b/app/views/contents/courseware/shared_content_courseware.php
@@ -3,7 +3,6 @@
     entry-element-id="<?= $entry_element_id ?>"
     entry-type="sharedusers"
     entry-id="<?= $entry_element_id ?>"
-    oer-enabled='<?= $oer_enabled ?>'
     oer-title="<?= Config::get()->OER_TITLE ?>"
     licenses='<?= $licenses ?>'
     >
diff --git a/app/views/course/courseware/courseware.php b/app/views/course/courseware/courseware.php
index 1abb48a667f..2dadc86a667 100644
--- a/app/views/course/courseware/courseware.php
+++ b/app/views/course/courseware/courseware.php
@@ -5,7 +5,6 @@
         entry-type="courses"
         entry-id="<?= htmlReady(Context::getId()) ?>"
         unit-id="<?= htmlReady($unit_id) ?>"
-        oer-enabled='<?= htmlReady($oer_enabled) ?>'
         licenses='<?= htmlReady($licenses) ?>'
         >
     </div>
diff --git a/lib/classes/JsonApi/Models/Studip.php b/lib/classes/JsonApi/Models/Studip.php
index ce5fa1cfb9f..1b5aed05124 100644
--- a/lib/classes/JsonApi/Models/Studip.php
+++ b/lib/classes/JsonApi/Models/Studip.php
@@ -13,6 +13,8 @@ class Studip
     {
         $properties = [
             new StudipProperty('studip-version', 'Stud.IP-Version', $GLOBALS['SOFTWARE_VERSION']),
+            new StudipProperty('oer-campus-enabled', 'OERCAMPUS_ENABLED', \Config::get()->OERCAMPUS_ENABLED),
+            new StudipProperty('oer-enable-suggestions', 'OER_ENABLE_SUGGESTIONS', \Config::get()->OER_ENABLE_SUGGESTIONS),
         ];
 
         $copyrightDialog = self::getConfigOption('COPYRIGHT_DIALOG_ON_UPLOAD');
diff --git a/resources/vue/components/courseware/CoursewareExportWidget.vue b/resources/vue/components/courseware/CoursewareExportWidget.vue
index 89ecf1cbb83..a6473ca4687 100644
--- a/resources/vue/components/courseware/CoursewareExportWidget.vue
+++ b/resources/vue/components/courseware/CoursewareExportWidget.vue
@@ -40,7 +40,7 @@ export default {
     computed: {
         ...mapGetters({
             context: 'context',
-            oerEnabled: 'oerEnabled',
+            oerCampusEnabled: 'oerCampusEnabled',
             userIsTeacher: 'userIsTeacher',
         }),
         canEdit() {
@@ -64,7 +64,7 @@ export default {
             return this.canVisit;
         },
         showOer() {
-            if (!this.oerEnabled) {
+            if (!this.oerCampusEnabled) {
                 return false;
             }
 
diff --git a/resources/vue/components/courseware/CoursewareStructuralElement.vue b/resources/vue/components/courseware/CoursewareStructuralElement.vue
index 7286a47fbfe..027326d49e1 100644
--- a/resources/vue/components/courseware/CoursewareStructuralElement.vue
+++ b/resources/vue/components/courseware/CoursewareStructuralElement.vue
@@ -813,7 +813,8 @@ export default {
             showSuggestOerDialog: 'showSuggestOerDialog',
             showPublicLinkDialog: 'showStructuralElementPublicLinkDialog',
             showRemoveLockDialog: 'showStructuralElementRemoveLockDialog',
-            oerEnabled: 'oerEnabled',
+            oerCampusEnabled: 'oerCampusEnabled',
+            oerEnableSuggestions: 'oerEnableSuggestions',
             licenses: 'licenses',
             exportState: 'exportState',
             exportProgress: 'exportProgress',
@@ -1037,9 +1038,9 @@ export default {
                 { id: 5, label: this.$gettext('Lesezeichen setzen'), icon: 'star', emit: 'setBookmark' },
             ];
 
-            if (this.oerEnabled) {
+            if (this.oerEnableSuggestions) {
                 menu.push(
-                    { id: 6, label: this.$gettext('Lerninhalt für OER Campus vorschlagen'), icon: 'oer-campus',
+                    { id: 6, label: this.$gettext('Seite für OER Campus vorschlagen'), icon: 'oer-campus',
                         emit: 'showSuggest' }
                 );
             }
diff --git a/resources/vue/courseware-index-app.js b/resources/vue/courseware-index-app.js
index d9c001b17b7..b888dd36242 100644
--- a/resources/vue/courseware-index-app.js
+++ b/resources/vue/courseware-index-app.js
@@ -23,7 +23,6 @@ const mountApp = async (STUDIP, createApp, element) => {
     let entry_id = null;
     let entry_type = null;
     let unit_id = null;
-    let oer_enabled = null;
     let licenses = null;
     let elem;
 
@@ -45,9 +44,6 @@ const mountApp = async (STUDIP, createApp, element) => {
                 unit_id = elem.attributes['unit-id'].value;
             }
 
-            if (elem.attributes['oer-enabled'] !== undefined) {
-                oer_enabled = elem.attributes['oer-enabled'].value;
-            }
             // we need a route for License SORM
             if (elem.attributes['licenses'] !== undefined) {
                 licenses = JSON.parse(elem.attributes['licenses'].value);
@@ -116,13 +112,22 @@ const mountApp = async (STUDIP, createApp, element) => {
                     'sem-classes',
                     'sem-types',
                     'terms-of-use',
-                    'user-data-field'
+                    'user-data-field',
+                    'studip-properties'
                 ],
                 httpClient,
             }),
         },
     });
 
+    axios.get(
+        STUDIP.URLHelper.getURL('jsonapi.php/v1/studip/properties', {}, true)
+    ).then(response => {
+        response.data.data.forEach(prop => {
+            store.dispatch('studip-properties/storeRecord', prop);
+        });
+    });
+
     store.dispatch('setUrlHelper', STUDIP.URLHelper);
     store.dispatch('setUserId', STUDIP.USER_ID);
     await store.dispatch('users/loadById', {id: STUDIP.USER_ID});
@@ -140,7 +145,6 @@ const mountApp = async (STUDIP, createApp, element) => {
 
     store.dispatch('coursewareCurrentElement', elem_id);
 
-    store.dispatch('oerEnabled', oer_enabled);
     store.dispatch('licenses', licenses);
     store.dispatch('courseware-templates/loadAll');
 
diff --git a/resources/vue/store/courseware/courseware.module.js b/resources/vue/store/courseware/courseware.module.js
index b4c309d391f..069182c48e3 100644
--- a/resources/vue/store/courseware/courseware.module.js
+++ b/resources/vue/store/courseware/courseware.module.js
@@ -8,7 +8,6 @@ const getDefaultState = () => {
         context: {},
         courseware: {},
         currentElement: {},
-        oerEnabled: null,
         licenses: null, // we need a route for License SORM
         httpClient: null,
         lastElement: null,
@@ -99,8 +98,8 @@ const getters = {
     currentElementisLink(state, getters, rootState, rootGetters) {
         return getters.currentStructuralElement?.attributes?.['is-link'] === 1;
     },
-    oerEnabled(state) {
-        return state.oerEnabled;
+    currentStructuralElementImageURL(state, getters) {
+        return getters.currentStructuralElement?.relationships?.image?.meta?.['download-url'];
     },
     licenses(state) {
         return state.licenses;
@@ -251,6 +250,13 @@ const getters = {
     },
     assistiveLiveContents(state) {
         return state.assistiveLiveContents;
+    },
+
+    oerCampusEnabled(state, getters, rootState, rootGetters) {
+        return rootGetters['studip-properties/byId']({ id: 'oer-campus-enabled'}).attributes?.value;
+    },
+    oerEnableSuggestions(state, getters, rootState, rootGetters) {
+        return getters.oerCampusEnabled && rootGetters['studip-properties/byId']({ id: 'oer-enable-suggestions'}).attributes?.value;
     }
 };
 
@@ -780,10 +786,6 @@ export const actions = {
         context.commit('coursewareContextSet', id);
     },
 
-    oerEnabled(context, enabled) {
-        context.commit('oerEnabledSet', enabled);
-    },
-
     licenses(context, licenses) {
         context.commit('licensesSet', licenses);
     },
@@ -1353,10 +1355,6 @@ export const mutations = {
         state.context = data;
     },
 
-    oerEnabledSet(state, data) {
-        state.oerEnabled = data;
-    },
-
     licensesSet(state, data) {
         state.licenses = data;
     },
-- 
GitLab