From 185ab4a1919f137e99c72addf98790e0e5f833d2 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 | 19 +++++++------------
 8 files changed, 25 insertions(+), 26 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 b24840e0389..427d58232ec 100644
--- a/resources/vue/components/courseware/CoursewareStructuralElement.vue
+++ b/resources/vue/components/courseware/CoursewareStructuralElement.vue
@@ -802,7 +802,8 @@ export default {
             showSuggestOerDialog: 'showSuggestOerDialog',
             showPublicLinkDialog: 'showStructuralElementPublicLinkDialog',
             showRemoveLockDialog: 'showStructuralElementRemoveLockDialog',
-            oerEnabled: 'oerEnabled',
+            oerCampusEnabled: 'oerCampusEnabled',
+            oerEnableSuggestions: 'oerEnableSuggestions',
             licenses: 'licenses',
             exportState: 'exportState',
             exportProgress: 'exportProgress',
@@ -1042,9 +1043,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 a31686bceb4..587cdb4bd6f 100644
--- a/resources/vue/courseware-index-app.js
+++ b/resources/vue/courseware-index-app.js
@@ -24,7 +24,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;
 
@@ -46,9 +45,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);
@@ -119,13 +115,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});
@@ -144,7 +149,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');
     store.dispatch('loadUserClipboards', STUDIP.USER_ID);
diff --git a/resources/vue/store/courseware/courseware.module.js b/resources/vue/store/courseware/courseware.module.js
index 0f56e3e7af8..89d7da82d7e 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,
@@ -103,9 +102,6 @@ const getters = {
     currentStructuralElementImageURL(state, getters) {
         return getters.currentStructuralElement?.relationships?.image?.meta?.['download-url'];
     },
-    oerEnabled(state) {
-        return state.oerEnabled;
-    },
     licenses(state) {
         return state.licenses;
     },
@@ -258,6 +254,13 @@ const getters = {
     },
     progresses(state) {
         return state.progresses;
+    },
+
+    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;
     }
 };
 
@@ -807,10 +810,6 @@ export const actions = {
         context.commit('coursewareContextSet', id);
     },
 
-    oerEnabled(context, enabled) {
-        context.commit('oerEnabledSet', enabled);
-    },
-
     licenses(context, licenses) {
         context.commit('licensesSet', licenses);
     },
@@ -1420,10 +1419,6 @@ export const mutations = {
         state.context = data;
     },
 
-    oerEnabledSet(state, data) {
-        state.oerEnabled = data;
-    },
-
     licensesSet(state, data) {
         state.licenses = data;
     },
-- 
GitLab