From 66da36dc7eeede597ff787339aa8c5ea6a126b96 Mon Sep 17 00:00:00 2001
From: Jan-Hendrik Willms <tleilax+studip@gmail.com>
Date: Thu, 15 Aug 2024 06:53:18 +0000
Subject: [PATCH] show visibility toggle on content modules administration page
 only for courses, fixes #4420

Closes #4420

Merge request studip/studip!3244
---
 app/controllers/course/contentmodules.php            | 3 +++
 resources/vue/components/ContentModules.vue          | 1 +
 resources/vue/components/ContentModulesEditTiles.vue | 2 +-
 resources/vue/components/ContentmodulesEditTable.vue | 3 +--
 resources/vue/mixins/ContentModulesMixin.js          | 8 ++++++++
 5 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/app/controllers/course/contentmodules.php b/app/controllers/course/contentmodules.php
index 2d4268fc498..77676a15a61 100644
--- a/app/controllers/course/contentmodules.php
+++ b/app/controllers/course/contentmodules.php
@@ -85,6 +85,9 @@ class Course_ContentmodulesController extends AuthenticatedController
 
         $this->render_vue_app(
             Studip\VueApp::create('ContentModules')
+                ->withProps([
+                    'range-type' => get_class($this->sem),
+                ])
                 ->withStore('ContentModulesStore', 'contentmodules', [
                     'setCategories'  => $this->categories,
                     'setHighlighted' => $this->highlighted_modules,
diff --git a/resources/vue/components/ContentModules.vue b/resources/vue/components/ContentModules.vue
index a48dd9d6909..e6164900787 100644
--- a/resources/vue/components/ContentModules.vue
+++ b/resources/vue/components/ContentModules.vue
@@ -36,6 +36,7 @@
         <component :is="displayComponent"
                    :modules="modules"
                    :filtercategory="filterCategory"
+                   :range-type="rangeType"
         ></component>
 
         <MountingPortal mount-to="#tool-view-switch .sidebar-widget-content .widget-list" name="sidebar-switch">
diff --git a/resources/vue/components/ContentModulesEditTiles.vue b/resources/vue/components/ContentModulesEditTiles.vue
index 7407632c40a..ae9324c4e7a 100644
--- a/resources/vue/components/ContentModulesEditTiles.vue
+++ b/resources/vue/components/ContentModulesEditTiles.vue
@@ -61,7 +61,7 @@
                                     href="#"
                                     class="toggle_visibility"
                                     role="checkbox"
-                                    v-if="!module.mandatory"
+                                    v-if="showVisibilityToggle(module)"
                                     :aria-checked="module.visibility !== 'tutor' ? 'true' : 'false'"
                                     @click.prevent="toggleModuleVisibility(module)"
                                 >
diff --git a/resources/vue/components/ContentmodulesEditTable.vue b/resources/vue/components/ContentmodulesEditTable.vue
index 0a8a0aa6f38..39835a7007e 100644
--- a/resources/vue/components/ContentmodulesEditTable.vue
+++ b/resources/vue/components/ContentmodulesEditTable.vue
@@ -59,7 +59,7 @@
                 <td class="actions">
                     <a
                         href="#"
-                        v-if="module.active && !module.mandatory"
+                        v-if="showVisibilityToggle(module)"
                         role="checkbox"
                         :aria-checked="module.visibility !== 'tutor' ? 'true' : 'false'"
                         @click.prevent="toggleModuleVisibility(module)"
@@ -121,7 +121,6 @@ import ContentModulesMixin from '../mixins/ContentModulesMixin.js';
 
 export default {
     name: 'contentmodules-edit-table',
-
     mixins: [ContentModulesMixin],
 };
 </script>
diff --git a/resources/vue/mixins/ContentModulesMixin.js b/resources/vue/mixins/ContentModulesMixin.js
index 86a29ffb52a..b02561d9ee1 100644
--- a/resources/vue/mixins/ContentModulesMixin.js
+++ b/resources/vue/mixins/ContentModulesMixin.js
@@ -5,6 +5,9 @@ export default {
     components: {
         draggable,
     },
+    props: {
+        rangeType: String,
+    },
     data: () => ({
         order: [],
     }),
@@ -132,5 +135,10 @@ export default {
 
             return classes.join(' ');
         },
+        showVisibilityToggle(module) {
+            return this.rangeType !== 'Institute'
+                && module.active
+                && !module.mandatory;
+        }
     },
 };
-- 
GitLab