From 95e76ccaa65c37e0991975719d8ee92e34656b6a Mon Sep 17 00:00:00 2001
From: Jan-Hendrik Willms <tleilax+studip@gmail.com>
Date: Mon, 8 Jul 2024 06:04:26 +0000
Subject: [PATCH] ensure mvv files are really only updated, fixes #4370

Closes #4370

Merge request studip/studip!3169
---
 app/controllers/materialien/files.php | 47 ++++++++++++++-------------
 1 file changed, 24 insertions(+), 23 deletions(-)

diff --git a/app/controllers/materialien/files.php b/app/controllers/materialien/files.php
index f5857b6c88c..fc8b2aa8d94 100644
--- a/app/controllers/materialien/files.php
+++ b/app/controllers/materialien/files.php
@@ -392,35 +392,36 @@ class Materialien_FilesController extends MVVController
             $file->connectWithDataFile($_FILES['file']['tmp_name']);
             $file->store();
 
-            $file = new StandardFile($ref);
+            $file = $ref->getFileType();
         } else {
             $file = StandardFile::create($_FILES['file']);
-        }
-        $error = $top_folder->validateUpload($file, $user->id);
-        if ($error !== null) {
-            if (!$document_id) {
-                $file->delete();
+
+            $error = $top_folder->validateUpload($file, $user->id);
+            if ($error !== null) {
+                if (!$document_id) {
+                    $file->delete();
+                }
+                $this->response->set_status(400);
+                $this->render_json(compact('error'));
+                return;
             }
-            $this->response->set_status(400);
-            $this->render_json(compact('error'));
-            return;
-        }
-        $file = $top_folder->addFile($file);
+            $file = $top_folder->addFile($file);
 
-        if (!$file instanceof FileType) {
-            $error = _('Ein Systemfehler ist beim Upload aufgetreten.');
+            if (!$file instanceof FileType) {
+                $error = _('Ein Systemfehler ist beim Upload aufgetreten.');
 
-            $this->response->set_status(400);
-            $this->render_json(compact('error'));
-            return;
-        }
+                $this->response->set_status(400);
+                $this->render_json(compact('error'));
+                return;
+            }
 
-        $mvv_file_fileref = new MvvFileFileref([
-            $output['mvvfile_id'],
-            Request::option('file_language'),
-        ]);
-        $mvv_file_fileref->fileref_id = $file->id;
-        $mvv_file_fileref->store();
+            $mvv_file_fileref = new MvvFileFileref([
+                $output['mvvfile_id'],
+                Request::option('file_language'),
+            ]);
+            $mvv_file_fileref->fileref_id = $file->id;
+            $mvv_file_fileref->store();
+        }
 
         $output['document_id'] = $file->id;
         $output['icon'] = $file->getIcon(Icon::ROLE_CLICKABLE)->asImg(['class' => 'text-bottom']);
-- 
GitLab