From f5e014ed87d2ca7a12997d6a6aab2005639283d2 Mon Sep 17 00:00:00 2001
From: Moritz Strohm <strohm@data-quest.de>
Date: Fri, 11 Aug 2023 15:19:35 +0000
Subject: [PATCH] Fix for BIESt 2997, re #2997

Merge request studip/studip!2009
---
 app/controllers/file.php              | 15 ++++++++++-----
 app/views/file/choose_destination.php |  3 ++-
 2 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/app/controllers/file.php b/app/controllers/file.php
index 15bca3dbe08..06c5ea94386 100644
--- a/app/controllers/file.php
+++ b/app/controllers/file.php
@@ -737,6 +737,7 @@ class FileController extends AuthenticatedController
         }
         $this->copymode = $copymode;
         $this->fileref_id = $fileref_id;
+        $this->is_folder = false;
 
         if (Request::get("from_plugin")) {
             if (is_array($fileref_id)) {
@@ -756,13 +757,16 @@ class FileController extends AuthenticatedController
                 throw new Trails_Exception(404, _('Plugin existiert nicht.'));
             }
 
-            if (!Request::get("isfolder")) {
-                $this->file_ref = $plugin->getPreparedFile($file_id);
-            } else {
-                $this->parent_folder = $plugin->getFolder($file_id);
+            $this->file_ref = $plugin->getPreparedFile($file_id);
+            if (!$this->file_ref) {
+                //Maybe it is a folder:
+                $folder = $plugin->getFolder($file_id);
+                if ($folder instanceof FolderType) {
+                    $this->parent_folder = $folder->getParent();
+                    $this->is_folder = true;
+                }
             }
         } else {
-
             if (is_array($fileref_id)) {
                 $this->file_ref = FileRef::find($fileref_id[0]);
             } else {
@@ -782,6 +786,7 @@ class FileController extends AuthenticatedController
             if ($folder) {
                 $this->parent_folder = Folder::find($folder->parent_id);
                 $this->parent_folder = $this->parent_folder->getTypedFolder();
+                $this->is_folder = true;
             }
         } elseif (!$this->parent_folder) {
             throw new AccessDeniedException();
diff --git a/app/views/file/choose_destination.php b/app/views/file/choose_destination.php
index 21ecb138751..fa5e73d6e4f 100644
--- a/app/views/file/choose_destination.php
+++ b/app/views/file/choose_destination.php
@@ -3,8 +3,9 @@ $options = array_filter([
     'from_plugin'   => Request::get('from_plugin'),
     'to_folder_id'  => Request::get('to_folder_id'),
     'copymode'      => Request::get('copymode', $copymode),
-    'isfolder'      => Request::get('isfolder'),
+    'isfolder'      => Request::get('isfolder', $is_folder),
     'fileref_id'    => Request::getArray('fileref_id') ?: $fileref_id,
+    'ids'           => Request::getArray('ids'),
     'direct_parent' => true,
 ], function ($value) {
     return $value !== null;
-- 
GitLab