From 520df873fef29c1faf89a2cba513bb62fde6cd81 Mon Sep 17 00:00:00 2001
From: Jan-Hendrik Willms <tleilax+studip@gmail.com>
Date: Wed, 19 Apr 2023 14:44:32 +0000
Subject: [PATCH] fix changes to method signature, fixes #2564

Closes #2564

Merge request studip/studip!1730
---
 .../JsonApi/Routes/Blubber/CommentsCreate.php        |  2 +-
 .../JsonApi/Routes/Blubber/CommentsUpdate.php        |  2 +-
 lib/classes/JsonApi/Routes/Blubber/ThreadsCreate.php |  2 +-
 .../Routes/ConfigValues/ConfigValuesUpdate.php       |  4 ++--
 .../CourseMemberships/CourseMembershipsUpdate.php    |  8 ++++++--
 .../Routes/Courseware/CoursewareInstancesUpdate.php  | 12 ++++++------
 .../Routes/Courseware/StructuralElementsUpdate.php   |  6 +++---
 .../JsonApi/Routes/Courseware/UnitsUpdate.php        |  2 +-
 lib/classes/JsonApi/Routes/Files/FileRefsUpdate.php  |  4 ++--
 lib/classes/JsonApi/Routes/Files/FoldersUpdate.php   |  4 ++--
 .../JsonApi/Routes/Forum/AbstractEntriesCreate.php   |  2 +-
 .../JsonApi/Routes/Forum/ForumCategoriesCreate.php   |  2 +-
 .../JsonApi/Routes/Forum/ForumCategoriesUpdate.php   |  2 +-
 .../JsonApi/Routes/Forum/ForumEntriesUpdate.php      |  2 +-
 .../JsonApi/Routes/Messages/MessageUpdate.php        |  2 +-
 lib/classes/JsonApi/Routes/News/NewsUpdate.php       |  2 +-
 16 files changed, 31 insertions(+), 27 deletions(-)

diff --git a/lib/classes/JsonApi/Routes/Blubber/CommentsCreate.php b/lib/classes/JsonApi/Routes/Blubber/CommentsCreate.php
index a1402b4b98a..3548645bf35 100644
--- a/lib/classes/JsonApi/Routes/Blubber/CommentsCreate.php
+++ b/lib/classes/JsonApi/Routes/Blubber/CommentsCreate.php
@@ -46,7 +46,7 @@ class CommentsCreate extends JsonApiController
         return $this->getCreatedResponse($comment);
     }
 
-    protected function validateResourceDocument($json)
+    protected function validateResourceDocument($json, $data)
     {
         if (empty(self::arrayGet($json, 'data.attributes.content'))) {
             return 'Comment should not be empty.';
diff --git a/lib/classes/JsonApi/Routes/Blubber/CommentsUpdate.php b/lib/classes/JsonApi/Routes/Blubber/CommentsUpdate.php
index a3ef571cf08..8f83246b3f1 100644
--- a/lib/classes/JsonApi/Routes/Blubber/CommentsUpdate.php
+++ b/lib/classes/JsonApi/Routes/Blubber/CommentsUpdate.php
@@ -44,7 +44,7 @@ class CommentsUpdate extends JsonApiController
         return $this->getCodeResponse(204);
     }
 
-    protected function validateResourceDocument($json)
+    protected function validateResourceDocument($json, $data)
     {
         if (empty(self::arrayGet($json, 'data.attributes.content'))) {
             return 'Comment should not be empty.';
diff --git a/lib/classes/JsonApi/Routes/Blubber/ThreadsCreate.php b/lib/classes/JsonApi/Routes/Blubber/ThreadsCreate.php
index d503157b935..b5bc9435e30 100644
--- a/lib/classes/JsonApi/Routes/Blubber/ThreadsCreate.php
+++ b/lib/classes/JsonApi/Routes/Blubber/ThreadsCreate.php
@@ -51,7 +51,7 @@ class ThreadsCreate extends JsonApiController
         return $this->getCreatedResponse($thread);
     }
 
-    protected function validateResourceDocument($json)
+    protected function validateResourceDocument($json, $data)
     {
         if (Schema::TYPE !== self::arrayGet($json, 'data.type')) {
             return 'Missing or wrong type.';
diff --git a/lib/classes/JsonApi/Routes/ConfigValues/ConfigValuesUpdate.php b/lib/classes/JsonApi/Routes/ConfigValues/ConfigValuesUpdate.php
index 97411404a6b..cf46134eb00 100644
--- a/lib/classes/JsonApi/Routes/ConfigValues/ConfigValuesUpdate.php
+++ b/lib/classes/JsonApi/Routes/ConfigValues/ConfigValuesUpdate.php
@@ -41,7 +41,7 @@ class ConfigValuesUpdate extends JsonApiController
         return $this->getContentResponse($resource);
     }
 
-    protected function validateResourceDocument($json, $resource)
+    protected function validateResourceDocument($json, $data)
     {
         if (!self::arrayHas($json, 'data')) {
             return 'Missing `data` member at document´s top level.';
@@ -55,7 +55,7 @@ class ConfigValuesUpdate extends JsonApiController
             return 'Document must have an `id`.';
         }
 
-        if (self::arrayGet($json, 'data.id') !== $this->generateId($resource)) {
+        if (self::arrayGet($json, 'data.id') !== $this->generateId($data)) {
             return 'Mismatch between URI parameter and document `id`.';
         }
 
diff --git a/lib/classes/JsonApi/Routes/CourseMemberships/CourseMembershipsUpdate.php b/lib/classes/JsonApi/Routes/CourseMemberships/CourseMembershipsUpdate.php
index 6bf71eadd06..4d0218e93fd 100644
--- a/lib/classes/JsonApi/Routes/CourseMemberships/CourseMembershipsUpdate.php
+++ b/lib/classes/JsonApi/Routes/CourseMemberships/CourseMembershipsUpdate.php
@@ -70,7 +70,7 @@ class CourseMembershipsUpdate extends JsonApiController
         return $membership;
     }
 
-    protected function validateResourceDocument($json, \CourseMember $membership)
+    protected function validateResourceDocument($json, $data)
     {
         if (CourseMemberSchema::TYPE !== self::arrayGet($json, 'data.type')) {
             return 'Missing or wrong type.';
@@ -93,7 +93,11 @@ class CourseMembershipsUpdate extends JsonApiController
                 return 'Attribute `visible` must be either `yes` or `no`';
             }
 
-            if ('no' === $visible && in_array($membership->status, ['tutor', 'dozent'])) {
+            if (
+                'no' === $visible
+                && $data instanceof \CourseMember
+                && in_array($data->status, ['tutor', 'dozent'])
+            ) {
                 return 'Users of status `tutor` or `dozent` must remain visible.';
             }
         }
diff --git a/lib/classes/JsonApi/Routes/Courseware/CoursewareInstancesUpdate.php b/lib/classes/JsonApi/Routes/Courseware/CoursewareInstancesUpdate.php
index fff4608cdeb..c5ef250ba52 100644
--- a/lib/classes/JsonApi/Routes/Courseware/CoursewareInstancesUpdate.php
+++ b/lib/classes/JsonApi/Routes/Courseware/CoursewareInstancesUpdate.php
@@ -40,7 +40,7 @@ class CoursewareInstancesUpdate extends JsonApiController
     /**
      * @SuppressWarnings(PHPMD.UnusedFormalParameters)
      */
-    protected function validateResourceDocument($json, $resource)
+    protected function validateResourceDocument($json, $data)
     {
         if (!self::arrayHas($json, 'data')) {
             return 'Missing `data` member at document´s top level.';
@@ -61,7 +61,7 @@ class CoursewareInstancesUpdate extends JsonApiController
             }
             $blockTypes = array_map(function ($blockType) {
                 return $blockType::getType();
-            }, $resource->getBlockTypes());
+            }, $data->getBlockTypes());
             foreach ($favoriteBlockTypes as $favoriteBlockType) {
                 if (!in_array($favoriteBlockType, $blockTypes)) {
                     return 'Attribute `favorite-block-types` contains an invalid block type.';
@@ -79,7 +79,7 @@ class CoursewareInstancesUpdate extends JsonApiController
             if (!is_string($editingPermissionLevel)) {
                 return 'Attribute `editing-permission-level` must be a string.';
             }
-            if (!$resource->isValidEditingPermissionLevel($editingPermissionLevel)) {
+            if (!$data->isValidEditingPermissionLevel($editingPermissionLevel)) {
                 return 'Attribute `editing-permission-level` contains an invalid value.';
             }
         }
@@ -87,7 +87,7 @@ class CoursewareInstancesUpdate extends JsonApiController
         if (self::arrayHas($json, 'data.attributes.certificate-settings')) {
             $certificateSettings = self::arrayGet($json, 'data.attributes.certificate-settings');
 
-            if (!$resource->isValidCertificateSettings($certificateSettings)) {
+            if (!$data->isValidCertificateSettings($certificateSettings)) {
                 return 'Attribute `certificate-settings` contains an invalid value.';
             }
         }
@@ -95,7 +95,7 @@ class CoursewareInstancesUpdate extends JsonApiController
         if (self::arrayHas($json, 'data.attributes.reminder-settings')) {
             $reminderSettings = self::arrayGet($json, 'data.attributes.reminder-settings');
 
-            if (!$resource->isValidReminderSettings($reminderSettings)) {
+            if (!$data->isValidReminderSettings($reminderSettings)) {
                 return 'Attribute `reminder-settings` contains an invalid value.';
             }
         }
@@ -103,7 +103,7 @@ class CoursewareInstancesUpdate extends JsonApiController
         if (self::arrayHas($json, 'data.attributes.reset-progress-settings')) {
             $resetProgressSettings = self::arrayGet($json, 'data.attributes.reset-progress-settings');
 
-            if (!$resource->isValidResetProgressSettings($resetProgressSettings)) {
+            if (!$data->isValidResetProgressSettings($resetProgressSettings)) {
                 return 'Attribute `reset-progress-settings` contains an invalid value.';
             }
         }
diff --git a/lib/classes/JsonApi/Routes/Courseware/StructuralElementsUpdate.php b/lib/classes/JsonApi/Routes/Courseware/StructuralElementsUpdate.php
index 33ba9a3f9bc..febe3cc8480 100644
--- a/lib/classes/JsonApi/Routes/Courseware/StructuralElementsUpdate.php
+++ b/lib/classes/JsonApi/Routes/Courseware/StructuralElementsUpdate.php
@@ -39,7 +39,7 @@ class StructuralElementsUpdate extends JsonApiController
     /**
      * @SuppressWarnings(PHPMD.UnusedFormalParameters)
      */
-    protected function validateResourceDocument($json, $resource)
+    protected function validateResourceDocument($json, $data)
     {
         if (!self::arrayHas($json, 'data')) {
             return 'Missing `data` member at document´s top level.';
@@ -55,7 +55,7 @@ class StructuralElementsUpdate extends JsonApiController
 
         if (self::arrayHas($json, 'data.relationships.parent')) {
             // Sonderfall: Wurzel hat kein parent und kann auch nicht verändert werden
-            if ($resource->isRootNode()) {
+            if ($data->isRootNode()) {
                 if (null !== self::arrayGet($json, 'data.relationships.parent.data')) {
                     return 'Cannot modify `parent` of a root node.';
                 }
@@ -70,7 +70,7 @@ class StructuralElementsUpdate extends JsonApiController
                 // keine Schleifen
                 if (
                     in_array(
-                        $resource->id,
+                        $data->id,
                         array_merge(
                             [$parent->id],
                             array_map(function ($ancestor) {
diff --git a/lib/classes/JsonApi/Routes/Courseware/UnitsUpdate.php b/lib/classes/JsonApi/Routes/Courseware/UnitsUpdate.php
index 762fb0437e8..75956c4c2cc 100644
--- a/lib/classes/JsonApi/Routes/Courseware/UnitsUpdate.php
+++ b/lib/classes/JsonApi/Routes/Courseware/UnitsUpdate.php
@@ -43,7 +43,7 @@ class UnitsUpdate extends JsonApiController
     /**
      * @SuppressWarnings(PHPMD.UnusedFormalParameters)
      */
-    protected function validateResourceDocument($json, $resource)
+    protected function validateResourceDocument($json, $data)
     {
         if (!self::arrayHas($json, 'data')) {
             return 'Missing `data` member at document´s top level.';
diff --git a/lib/classes/JsonApi/Routes/Files/FileRefsUpdate.php b/lib/classes/JsonApi/Routes/Files/FileRefsUpdate.php
index 27ddabab7b1..79000cc7445 100644
--- a/lib/classes/JsonApi/Routes/Files/FileRefsUpdate.php
+++ b/lib/classes/JsonApi/Routes/Files/FileRefsUpdate.php
@@ -66,9 +66,9 @@ class FileRefsUpdate extends JsonApiController
         }
     }
 
-    protected function validateResourceDocument($json, $fileRef)
+    protected function validateResourceDocument($json, $data)
     {
-        if ($err = $this->validateFileRefResourceObject($json, $fileRef)) {
+        if ($err = $this->validateFileRefResourceObject($json, $data)) {
             return $err;
         }
     }
diff --git a/lib/classes/JsonApi/Routes/Files/FoldersUpdate.php b/lib/classes/JsonApi/Routes/Files/FoldersUpdate.php
index afb43ace897..f089c3d9f2a 100644
--- a/lib/classes/JsonApi/Routes/Files/FoldersUpdate.php
+++ b/lib/classes/JsonApi/Routes/Files/FoldersUpdate.php
@@ -66,9 +66,9 @@ class FoldersUpdate extends JsonApiController
         }
     }
 
-    protected function validateResourceDocument($json, \FolderType $folder)
+    protected function validateResourceDocument($json, $data)
     {
-        if ($err = $this->validateFolderResourceObject($json, $folder)) {
+        if ($err = $this->validateFolderResourceObject($json, $data)) {
             return $err;
         }
     }
diff --git a/lib/classes/JsonApi/Routes/Forum/AbstractEntriesCreate.php b/lib/classes/JsonApi/Routes/Forum/AbstractEntriesCreate.php
index 204414b711e..734b9d8a6cf 100644
--- a/lib/classes/JsonApi/Routes/Forum/AbstractEntriesCreate.php
+++ b/lib/classes/JsonApi/Routes/Forum/AbstractEntriesCreate.php
@@ -11,7 +11,7 @@ abstract class AbstractEntriesCreate extends JsonApiController
 {
     use ValidationTrait;
 
-    protected function validateResourceDocument($json)
+    protected function validateResourceDocument($json, $data)
     {
         $content = self::arrayHas($json, 'data.attributes.title');
         if (empty($content)) {
diff --git a/lib/classes/JsonApi/Routes/Forum/ForumCategoriesCreate.php b/lib/classes/JsonApi/Routes/Forum/ForumCategoriesCreate.php
index bbb492e5231..280e437e023 100644
--- a/lib/classes/JsonApi/Routes/Forum/ForumCategoriesCreate.php
+++ b/lib/classes/JsonApi/Routes/Forum/ForumCategoriesCreate.php
@@ -51,7 +51,7 @@ class ForumCategoriesCreate extends JsonApiController
         return $category;
     }
 
-    protected function validateResourceDocument($json)
+    protected function validateResourceDocument($json, $data)
     {
         $title = self::arrayGet($json, 'data.attributes.title', '');
         if (empty($title)) {
diff --git a/lib/classes/JsonApi/Routes/Forum/ForumCategoriesUpdate.php b/lib/classes/JsonApi/Routes/Forum/ForumCategoriesUpdate.php
index 961f1755241..e09339efde2 100644
--- a/lib/classes/JsonApi/Routes/Forum/ForumCategoriesUpdate.php
+++ b/lib/classes/JsonApi/Routes/Forum/ForumCategoriesUpdate.php
@@ -53,7 +53,7 @@ class ForumCategoriesUpdate extends JsonApiController
         }
     }
 
-    protected function validateResourceDocument($json)
+    protected function validateResourceDocument($json, $data)
     {
         $title = self::arrayGet($json, 'data.attributes.title', '');
         if (empty($title)) {
diff --git a/lib/classes/JsonApi/Routes/Forum/ForumEntriesUpdate.php b/lib/classes/JsonApi/Routes/Forum/ForumEntriesUpdate.php
index 1165ff2d846..21eeba4c0df 100644
--- a/lib/classes/JsonApi/Routes/Forum/ForumEntriesUpdate.php
+++ b/lib/classes/JsonApi/Routes/Forum/ForumEntriesUpdate.php
@@ -60,7 +60,7 @@ class ForumEntriesUpdate extends JsonApiController
         return $entry;
     }
 
-    protected function validateResourceDocument($json)
+    protected function validateResourceDocument($json, $data)
     {
         $title = self::arrayGet($json, 'data.attributes.title');
         $content = self::arrayGet($json, 'data.attributes.content');
diff --git a/lib/classes/JsonApi/Routes/Messages/MessageUpdate.php b/lib/classes/JsonApi/Routes/Messages/MessageUpdate.php
index 5dcde5b4558..add12e4633b 100644
--- a/lib/classes/JsonApi/Routes/Messages/MessageUpdate.php
+++ b/lib/classes/JsonApi/Routes/Messages/MessageUpdate.php
@@ -37,7 +37,7 @@ class MessageUpdate extends JsonApiController
         return $this->getContentResponse($message);
     }
 
-    protected function validateResourceDocument($json)
+    protected function validateResourceDocument($json, $data)
     {
         if (!self::arrayHas($json, 'data')) {
             return 'Missing `data` member at message´s top level.';
diff --git a/lib/classes/JsonApi/Routes/News/NewsUpdate.php b/lib/classes/JsonApi/Routes/News/NewsUpdate.php
index 269c4501e01..6b26c43f8b8 100644
--- a/lib/classes/JsonApi/Routes/News/NewsUpdate.php
+++ b/lib/classes/JsonApi/Routes/News/NewsUpdate.php
@@ -77,7 +77,7 @@ class NewsUpdate extends JsonApiController
         return $news;
     }
 
-    protected function validateResourceDocument($json, \StudipNews $news)
+    protected function validateResourceDocument($json, $data)
     {
         if (NewsSchema::TYPE !== self::arrayGet($json, 'data.type')) {
             return 'Missing or wrong type.';
-- 
GitLab