From 1d918961c6303da78f2b8492c69a116345d39567 Mon Sep 17 00:00:00 2001
From: Ron Lucke <lucke@elan-ev.de>
Date: Mon, 28 Mar 2022 12:41:47 +0200
Subject: [PATCH] fix #735

---
 app/controllers/contents/courseware.php       | 17 +++++-------
 app/controllers/course/courseware.php         | 17 +++++-------
 .../courseware/CoursewareExportWidget.vue     | 27 ++++++++++++++++---
 .../vue/components/courseware/IndexApp.vue    | 15 ++---------
 4 files changed, 39 insertions(+), 37 deletions(-)

diff --git a/app/controllers/contents/courseware.php b/app/controllers/contents/courseware.php
index 0dbc0b74ba1..2e27077660b 100755
--- a/app/controllers/contents/courseware.php
+++ b/app/controllers/contents/courseware.php
@@ -111,11 +111,10 @@ class Contents_CoursewareController extends AuthenticatedController
                 [$this->entry_element_id, $this->user_id]
             );
         }
-        $canExport = !empty($struct) ? $struct->canEdit($user) : false;
-        $this->setCoursewareSidebar($canExport);
+        $this->setCoursewareSidebar();
     }
 
-    private function setCoursewareSidebar(bool $canExport)
+    private function setCoursewareSidebar()
     {
         $sidebar = \Sidebar::Get();
         $actions = new TemplateWidget(
@@ -130,13 +129,11 @@ class Contents_CoursewareController extends AuthenticatedController
         );
         $sidebar->addWidget($views)->addLayoutCSSClass('courseware-view-widget');
 
-        if ($canExport) {
-            $exports = new TemplateWidget(
-                _('Export '),
-                $this->get_template_factory()->open('course/courseware/export_widget')
-            );
-            $sidebar->addWidget($exports)->addLayoutCSSClass('courseware-export-widget');
-        }
+        $exports = new TemplateWidget(
+            _('Export '),
+            $this->get_template_factory()->open('course/courseware/export_widget')
+        );
+        $sidebar->addWidget($exports)->addLayoutCSSClass('courseware-export-widget');
     }
 
     private function getLicences()
diff --git a/app/controllers/course/courseware.php b/app/controllers/course/courseware.php
index e10e245eebe..2d14e2e1b3a 100755
--- a/app/controllers/course/courseware.php
+++ b/app/controllers/course/courseware.php
@@ -74,8 +74,7 @@ class Course_CoursewareController extends AuthenticatedController
                 Context::getId(),
             ]);
         }
-        $canExport = !empty($struct) ? $struct->canEdit($GLOBALS['user']) : false;
-        $this->setIndexSidebar($canExport);
+        $this->setIndexSidebar();
     }
 
     public function dashboard_action(): void
@@ -107,7 +106,7 @@ class Course_CoursewareController extends AuthenticatedController
         $this->render_pdf($element->pdfExport($this->user), trim($element->title).'.pdf');
     }
 
-    private function setIndexSidebar(bool $canExport): void
+    private function setIndexSidebar(): void
     {
         $sidebar = Sidebar::Get();
         $actions = new TemplateWidget(
@@ -122,13 +121,11 @@ class Course_CoursewareController extends AuthenticatedController
         );
         $sidebar->addWidget($views)->addLayoutCSSClass('courseware-view-widget');
 
-        if ($canExport) {
-            $exports = new TemplateWidget(
-                _('Export '),
-                $this->get_template_factory()->open('course/courseware/export_widget')
-            );
-            $sidebar->addWidget($exports)->addLayoutCSSClass('courseware-export-widget');
-        }
+        $exports = new TemplateWidget(
+            _('Export '),
+            $this->get_template_factory()->open('course/courseware/export_widget')
+        );
+        $sidebar->addWidget($exports)->addLayoutCSSClass('courseware-export-widget');
     }
 
 
diff --git a/resources/vue/components/courseware/CoursewareExportWidget.vue b/resources/vue/components/courseware/CoursewareExportWidget.vue
index e9c54dcda42..a4023b0ff46 100644
--- a/resources/vue/components/courseware/CoursewareExportWidget.vue
+++ b/resources/vue/components/courseware/CoursewareExportWidget.vue
@@ -1,20 +1,23 @@
 <template>
     <ul class="widget-list widget-links cw-export-widget" v-if="structuralElement">
-        <li class="cw-export-widget-export">
+        <li v-if="showExportArchiv" class="cw-export-widget-export">
             <a href="#" @click="exportElement">
                 <translate>Seite exportieren</translate>
             </a>
         </li>
-        <li v-if="canVisit" class="cw-export-widget-export-pdf">
-            <a :href="pdfExportURL">
+        <li v-if="showExportPdf" class="cw-export-widget-export-pdf">
+            <a :href="pdfExportURL" target="_blank">
                 <translate>Seite als pdf-Dokument exportieren</translate>
             </a>
         </li>
-        <li v-if="oerEnabled" class="cw-export-widget-oer">
+        <li v-if="showOer" class="cw-export-widget-oer">
             <a href="#" @click="oerElement">
                 <translate>Seite auf %{oerTitle} veröffentlichen</translate>
             </a>
         </li>
+        <li v-if="!showExportArchiv && !showExportPdf && !showOer">
+            <translate>Keine Exportoptionen verfügbar</translate>
+        </li>
     </ul>
 </template>
 
@@ -31,6 +34,7 @@ export default {
             context: 'context',
             oerEnabled: 'oerEnabled',
             oerTitle: 'oerTitle',
+            userIsTeacher: 'userIsTeacher',
         }),
         pdfExportURL() {
             if (this.context.type === 'users') {
@@ -42,6 +46,21 @@ export default {
 
             return '';
         },
+        canEdit() {
+            if (!this.structuralElement) {
+                return false;
+            }
+            return this.structuralElement.attributes['can-edit'];
+        },
+        showExportArchiv() {
+            return this.canEdit;
+        },
+        showExportPdf() {
+            return this.canVisit;
+        },
+        showOer() {
+            return this.oerEnabled && this.userIsTeacher && this.canVisit
+        }
     },
     methods: {
         ...mapActions({
diff --git a/resources/vue/components/courseware/IndexApp.vue b/resources/vue/components/courseware/IndexApp.vue
index e1331a26d00..e24b5e64912 100755
--- a/resources/vue/components/courseware/IndexApp.vue
+++ b/resources/vue/components/courseware/IndexApp.vue
@@ -10,7 +10,7 @@
             <MountingPortal mountTo="#courseware-action-widget" name="sidebar-actions">
                 <courseware-action-widget :structural-element="selected" :canVisit="canVisit"></courseware-action-widget>
             </MountingPortal>
-            <MountingPortal mountTo="#courseware-export-widget" name="sidebar-actions" v-if="canExport">
+            <MountingPortal mountTo="#courseware-export-widget" name="sidebar-actions">
                 <courseware-export-widget :structural-element="selected" :canVisit="canVisit"></courseware-export-widget>
             </MountingPortal>
             <MountingPortal mountTo="#courseware-view-widget" name="sidebar-views">
@@ -75,18 +75,7 @@ export default {
                 default:
                     return this.$gettext('Beim Laden der Seite ist ein Fehler aufgetreten.');
             }
-        },
-        canExport() {
-            if (!this.selected) {
-                return false;
-            }
-
-            if (this.context.type === 'users') {
-                return true;
-            }
-
-            return this.selected.attributes['can-edit'] && this.userIsTeacher;
-        },
+        }
     },
     methods: {
         ...mapActions({
-- 
GitLab