From 07ed05bdc8cd23adda42cd2d79af4eb4e6bf62fa Mon Sep 17 00:00:00 2001
From: Moritz Strohm <strohm@data-quest.de>
Date: Thu, 29 Feb 2024 13:39:44 +0000
Subject: [PATCH] file/edit_folder: do not test the availability of folder
 types for RootFolder instances, fixes #3766

Closes #3766

Merge request studip/studip!2641
---
 app/controllers/file.php | 19 +++++++++----------
 1 file changed, 9 insertions(+), 10 deletions(-)

diff --git a/app/controllers/file.php b/app/controllers/file.php
index cd60699c2ec..83152e3cf8b 100644
--- a/app/controllers/file.php
+++ b/app/controllers/file.php
@@ -1973,11 +1973,6 @@ class FileController extends AuthenticatedController
         if (!$folder || !$folder->isEditable($GLOBALS['user']->id)) {
             throw new AccessDeniedException();
         }
-        $parent_folder = $folder->getParent();
-        $folder_types = FileManager::getAvailableFolderTypes(
-            $parent_folder ? $parent_folder->range_id : null,
-            $GLOBALS['user']->id
-        );
         $this->name = Request::get('name', $folder->name);
         $this->description = Request::get('description', $folder->description);
 
@@ -1986,13 +1981,16 @@ class FileController extends AuthenticatedController
 
         $this->folder_types = [];
 
-        if (!is_a($folder, 'VirtualFolderType') && $parent_folder) {
+        if (!is_a($folder, 'VirtualFolderType') && !is_a($folder, 'RootFolder')) {
+            $folder_types = FileManager::getAvailableFolderTypes(
+                $folder->range_id,
+                $GLOBALS['user']->id
+            );
             foreach ($folder_types as $folder_type) {
                 $folder_type_instance = new $folder_type(
                     [
-                        'range_id' => $parent_folder->range_id,
-                        'range_type' => $parent_folder->range_type,
-                        'parent_id' => $parent_folder->getId()
+                        'range_id' => $folder->range_id,
+                        'range_type' => $folder->range_type
                     ]
                 );
                 $this->folder_types[] = [
@@ -2002,7 +2000,8 @@ class FileController extends AuthenticatedController
                     'icon' => $folder_type_instance->getIcon('clickable')
                 ];
             }
-        } elseif (!$parent_folder) {
+        } else {
+            //It is a virtual folder or a root folder (folder without parent):
             $this->folder_types[] = [
                 'class' => get_class($folder),
                 'instance' => $folder,
-- 
GitLab