From 2e40475f6dae7bece3a5523c3cd499c845f69029 Mon Sep 17 00:00:00 2001
From: Elmar Ludwig <elmar.ludwig@uni-osnabrueck.de>
Date: Fri, 14 Jul 2023 06:22:17 +0000
Subject: [PATCH] avoid API change in BlockType class, re #2766

Merge request studip/studip!1927
---
 lib/models/Courseware/Block.php                      |  8 ++++----
 lib/models/Courseware/BlockTypes/Audio.php           |  8 +++-----
 lib/models/Courseware/BlockTypes/BeforeAfter.php     |  8 +++-----
 lib/models/Courseware/BlockTypes/BlockType.php       | 12 ++----------
 lib/models/Courseware/BlockTypes/Canvas.php          |  8 +++-----
 lib/models/Courseware/BlockTypes/DialogCards.php     |  7 ++-----
 lib/models/Courseware/BlockTypes/Document.php        |  8 +++-----
 lib/models/Courseware/BlockTypes/Download.php        |  8 +++-----
 lib/models/Courseware/BlockTypes/Folder.php          |  8 +++-----
 lib/models/Courseware/BlockTypes/Gallery.php         |  9 +++------
 lib/models/Courseware/BlockTypes/Headline.php        |  8 +++-----
 lib/models/Courseware/BlockTypes/ImageMap.php        |  8 +++-----
 lib/models/Courseware/BlockTypes/Text.php            |  6 ++----
 lib/models/Courseware/BlockTypes/Video.php           |  8 +++-----
 lib/models/Courseware/Container.php                  |  8 ++++----
 .../Courseware/ContainerTypes/ContainerType.php      |  2 +-
 lib/models/Courseware/StructuralElement.php          |  6 ------
 17 files changed, 45 insertions(+), 85 deletions(-)

diff --git a/lib/models/Courseware/Block.php b/lib/models/Courseware/Block.php
index d311e0fc491..f5d8b202acb 100644
--- a/lib/models/Courseware/Block.php
+++ b/lib/models/Courseware/Block.php
@@ -178,7 +178,7 @@ class Block extends \SimpleORMap implements \PrivacyObject
             ]
         ];
 
-        return json_encode($block, true);
+        return json_encode($block);
     }
 
     /**
@@ -218,18 +218,18 @@ class Block extends \SimpleORMap implements \PrivacyObject
         $struct = $container->structural_element;
         $rangeId = $struct->getRangeId();
 
-        $block = self::create([
+        $block = self::build([
             'container_id' => $container->id,
             'owner_id' => $user->id,
             'editor_id' => $user->id,
             'edit_blocker_id' => null,
             'position' => $container->countBlocks(),
             'block_type' => $data->attributes->{'block-type'},
+            'payload' => json_encode($data->attributes->payload),
             'visible' => 1,
         ]);
 
-        $dataPayload = (array)$data->attributes->payload;
-        $block->payload = json_encode($block->type->copyPayload('', $dataPayload), true);
+        $block->payload = json_encode($block->type->copyPayload($rangeId));
         $block->store();
 
         //update Container payload
diff --git a/lib/models/Courseware/BlockTypes/Audio.php b/lib/models/Courseware/BlockTypes/Audio.php
index 7196f209a74..dd2588a1e5e 100644
--- a/lib/models/Courseware/BlockTypes/Audio.php
+++ b/lib/models/Courseware/BlockTypes/Audio.php
@@ -74,13 +74,11 @@ class Audio extends BlockType
         }
     }
 
-    public function copyPayload(string $rangeId = '', $payload = null): array
+    public function copyPayload(string $rangeId = ''): array
     {
-        if (!$payload) {
-            $payload = $this->getPayload();
-        }
+        $payload = $this->getPayload();
 
-        if (!empty($payload['file_id'])) {
+        if ('' != $payload['file_id']) {
             $payload['file_id'] = $this->copyFileById($payload['file_id'], $rangeId);
         }
 
diff --git a/lib/models/Courseware/BlockTypes/BeforeAfter.php b/lib/models/Courseware/BlockTypes/BeforeAfter.php
index 5ad772cac72..b4f33ca9c08 100644
--- a/lib/models/Courseware/BlockTypes/BeforeAfter.php
+++ b/lib/models/Courseware/BlockTypes/BeforeAfter.php
@@ -75,13 +75,11 @@ class BeforeAfter extends BlockType
         return $files;
     }
 
-    public function copyPayload(string $rangeId = '', $payload = null): array
+    public function copyPayload(string $rangeId = ''): array
     {
-        if (!$payload) {
-            $payload = $this->getPayload();
-        }
+        $payload = $this->getPayload();
 
-        if (!empty($payload['before_file_id'])) {
+        if ('' != $payload['before_file_id']) {
             $payload['before_file_id'] = $this->copyFileById($payload['before_file_id'], $rangeId);
         }
 
diff --git a/lib/models/Courseware/BlockTypes/BlockType.php b/lib/models/Courseware/BlockTypes/BlockType.php
index e5526f5866a..50bcc4254f1 100644
--- a/lib/models/Courseware/BlockTypes/BlockType.php
+++ b/lib/models/Courseware/BlockTypes/BlockType.php
@@ -233,9 +233,9 @@ abstract class BlockType
     }
 
     // TODO: (tgloeggl) DocBlock ergänzen
-    public function copyPayload(string $rangeId = '', $payload = null): array
+    public function copyPayload(string $rangeId = ''): array
     {
-        return $payload ?: $this->getPayload();
+        return $this->getPayload();
     }
 
     /**
@@ -340,10 +340,6 @@ abstract class BlockType
             return $file_map[$fileId];
         }
 
-        if ($rangeId === '') {
-            $rangeId = $this->block->container->structural_element->range_id;
-        }
-
         $user = \User::findCurrent();
         if ($file_ref = \FileRef::find($fileId)) {
             $copiedFile = \FileManager::copyFile(
@@ -380,10 +376,6 @@ abstract class BlockType
             return $folder_map[$folderId];
         }
 
-        if ($rangeId === '') {
-            $rangeId = $this->block->container->structural_element->range_id;
-        }
-
         $user = \User::findCurrent();
         $destinationFolder = $this->getDestinationFolder($user, $rangeId);
         if ($sourceFolder = \Folder::find($folderId)) {
diff --git a/lib/models/Courseware/BlockTypes/Canvas.php b/lib/models/Courseware/BlockTypes/Canvas.php
index 34dc431b5b0..e7b14e99665 100644
--- a/lib/models/Courseware/BlockTypes/Canvas.php
+++ b/lib/models/Courseware/BlockTypes/Canvas.php
@@ -65,13 +65,11 @@ class Canvas extends BlockType
         return $files;
     }
 
-    public function copyPayload(string $rangeId = '', $payload = null): array
+    public function copyPayload(string $rangeId = ''): array
     {
-        if (!$payload) {
-            $payload = $this->getPayload();
-        }
+        $payload = $this->getPayload();
 
-        if (!empty($payload['file_id'])) {
+        if ('' != $payload['file_id']) {
             $payload['file_id'] = $this->copyFileById($payload['file_id'], $rangeId);
         }
 
diff --git a/lib/models/Courseware/BlockTypes/DialogCards.php b/lib/models/Courseware/BlockTypes/DialogCards.php
index 62eea5fb3f9..74b843cbe26 100644
--- a/lib/models/Courseware/BlockTypes/DialogCards.php
+++ b/lib/models/Courseware/BlockTypes/DialogCards.php
@@ -80,12 +80,9 @@ class DialogCards extends BlockType
         return $files;
     }
 
-    public function copyPayload(string $rangeId = '', $payload = null): array
+    public function copyPayload(string $rangeId = ''): array
     {
-        if (!$payload) {
-            $payload = $this->getPayload();
-        }
-
+        $payload = $this->getPayload();
         foreach ($payload['cards'] as &$card) {
             if ('' != $card['front_file_id']) {
                 $card['front_file_id'] = $this->copyFileById($card['front_file_id'], $rangeId);
diff --git a/lib/models/Courseware/BlockTypes/Document.php b/lib/models/Courseware/BlockTypes/Document.php
index 20950089c5b..db1ba6ee179 100644
--- a/lib/models/Courseware/BlockTypes/Document.php
+++ b/lib/models/Courseware/BlockTypes/Document.php
@@ -67,13 +67,11 @@ class Document extends BlockType
         return $files;
     }
 
-    public function copyPayload(string $rangeId = '', $payload = null): array
+    public function copyPayload(string $rangeId = ''): array
     {
-        if (!$payload) {
-            $payload = $this->getPayload();
-        }
+        $payload = $this->getPayload();
 
-        if (!empty($payload['file_id'])) {
+        if ('' != $payload['file_id']) {
             $payload['file_id'] = $this->copyFileById($payload['file_id'], $rangeId);
         }
 
diff --git a/lib/models/Courseware/BlockTypes/Download.php b/lib/models/Courseware/BlockTypes/Download.php
index f53c8c7f288..d736009d181 100644
--- a/lib/models/Courseware/BlockTypes/Download.php
+++ b/lib/models/Courseware/BlockTypes/Download.php
@@ -61,13 +61,11 @@ class Download extends BlockType
         return $files;
     }
 
-    public function copyPayload(string $rangeId = '', $payload = null): array
+    public function copyPayload(string $rangeId = ''): array
     {
-        if (!$payload) {
-            $payload = $this->getPayload();
-        }
+        $payload = $this->getPayload();
 
-        if (!empty($payload['file_id'])) {
+        if ('' != $payload['file_id']) {
             $payload['file_id'] = $this->copyFileById($payload['file_id'], $rangeId);
         }
 
diff --git a/lib/models/Courseware/BlockTypes/Folder.php b/lib/models/Courseware/BlockTypes/Folder.php
index d5156b6298d..bc34f854f24 100644
--- a/lib/models/Courseware/BlockTypes/Folder.php
+++ b/lib/models/Courseware/BlockTypes/Folder.php
@@ -104,13 +104,11 @@ class Folder extends BlockType
         return \FileRef::findByFolder_id($payload['folder_id']);
     }
 
-    public function copyPayload(string $rangeId = '', $payload = null): array
+    public function copyPayload(string $rangeId = ''): array
     {
-        if (!$payload) {
-            $payload = $this->getPayload();
-        }
+        $payload = $this->getPayload();
 
-        if (!empty($payload['folder_id'])) {
+        if ('' != $payload['folder_id']) {
             $payload['folder_id'] = $this->copyFolderById($payload['folder_id'], $rangeId);
         }
 
diff --git a/lib/models/Courseware/BlockTypes/Gallery.php b/lib/models/Courseware/BlockTypes/Gallery.php
index 1d931ea9951..5f9bb0b6d56 100644
--- a/lib/models/Courseware/BlockTypes/Gallery.php
+++ b/lib/models/Courseware/BlockTypes/Gallery.php
@@ -123,13 +123,10 @@ class Gallery extends BlockType
         return $files;
     }
 
-    public function copyPayload(string $rangeId = '', $payload = null): array
+    public function copyPayload(string $rangeId = ''): array
     {
-        if (!$payload) {
-            $payload = $this->getPayload();
-        }
-
-        if (!empty($payload['folder_id'])) {
+        $payload = $this->getPayload();
+        if ('' != $payload['folder_id']) {
             $payload['folder_id'] = $this->copyFolderById($payload['folder_id'], $rangeId);
         }
 
diff --git a/lib/models/Courseware/BlockTypes/Headline.php b/lib/models/Courseware/BlockTypes/Headline.php
index eace9465685..0c821386b82 100644
--- a/lib/models/Courseware/BlockTypes/Headline.php
+++ b/lib/models/Courseware/BlockTypes/Headline.php
@@ -73,13 +73,11 @@ class Headline extends BlockType
         return $files;
     }
 
-    public function copyPayload(string $rangeId = '', $payload = null): array
+    public function copyPayload(string $rangeId = ''): array
     {
-        if (!$payload) {
-            $payload = $this->getPayload();
-        }
+        $payload = $this->getPayload();
 
-        if (!empty($payload['background_image_id'])) {
+        if ('' != $payload['background_image_id']) {
             $payload['background_image_id'] = $this->copyFileById($payload['background_image_id'], $rangeId);
             $payload['background_image'] = '';
         }
diff --git a/lib/models/Courseware/BlockTypes/ImageMap.php b/lib/models/Courseware/BlockTypes/ImageMap.php
index 3f8f37b2b61..e275c46254e 100644
--- a/lib/models/Courseware/BlockTypes/ImageMap.php
+++ b/lib/models/Courseware/BlockTypes/ImageMap.php
@@ -55,13 +55,11 @@ class ImageMap extends BlockType
         return $files;
     }
 
-    public function copyPayload(string $rangeId = '', $payload = null): array
+    public function copyPayload(string $rangeId = ''): array
     {
-        if (!$payload) {
-            $payload = $this->getPayload();
-        }
+        $payload = $this->getPayload();
 
-        if (!empty($payload['file_id'])) {
+        if ('' != $payload['file_id']) {
             $payload['file_id'] = $this->copyFileById($payload['file_id'], $rangeId);
         }
 
diff --git a/lib/models/Courseware/BlockTypes/Text.php b/lib/models/Courseware/BlockTypes/Text.php
index e918c6a44e5..0a892193235 100644
--- a/lib/models/Courseware/BlockTypes/Text.php
+++ b/lib/models/Courseware/BlockTypes/Text.php
@@ -88,11 +88,9 @@ class Text extends BlockType
         return $files;
     }
 
-    public function copyPayload(string $rangeId = '', $payload = null): array
+    public function copyPayload(string $rangeId = ''): array
     {
-        if (!$payload) {
-            $payload = $this->getPayload();
-        }
+        $payload = $this->getPayload();
         $document = new \DOMDocument();
 
         if ($payload['text']) {
diff --git a/lib/models/Courseware/BlockTypes/Video.php b/lib/models/Courseware/BlockTypes/Video.php
index a32ca668f43..431f69b68e6 100644
--- a/lib/models/Courseware/BlockTypes/Video.php
+++ b/lib/models/Courseware/BlockTypes/Video.php
@@ -68,13 +68,11 @@ class Video extends BlockType
     }
 
 
-    public function copyPayload(string $rangeId = '', $payload = null): array
+    public function copyPayload(string $rangeId = ''): array
     {
-        if (!$payload) {
-            $payload = $this->getPayload();
-        }
+        $payload = $this->getPayload();
 
-        if (!empty($payload['file_id'])) {
+        if ('' != $payload['file_id']) {
             $payload['file_id'] = $this->copyFileById($payload['file_id'], $rangeId);
         }
 
diff --git a/lib/models/Courseware/Container.php b/lib/models/Courseware/Container.php
index 5ce8f29a7d9..ac5ef60bbcc 100644
--- a/lib/models/Courseware/Container.php
+++ b/lib/models/Courseware/Container.php
@@ -115,13 +115,13 @@ class Container extends \SimpleORMap implements \PrivacyObject
             ],
             'blocks' => $this->getClipboardBackupBlocks()
         ];
-        return json_encode($container, true);
+        return json_encode($container);
     }
 
     public function getClipboardBackupBlocks(): array
     {
         return $this->blocks->map(function (Block $block) {
-            return json_decode($block->getClipboardBackup());
+            return json_decode($block->getClipboardBackup(), true);
         });
     }
 
@@ -195,11 +195,11 @@ class Container extends \SimpleORMap implements \PrivacyObject
             'edit_blocker_id' => null,
             'position' => $element->countContainers(),
             'container_type' => $data->attributes->{'container-type'},
-            'payload' => json_encode($data->attributes->payload),
+            'payload' => $data->attributes->payload,
         ]);
 
         $blockMap = self::createBlocksFromData($user, $container, $data);
-        $container['payload'] = $container->type->copyPayload($blockMap);
+        $container->payload = $container->type->copyPayload($blockMap);
         $container->store();
 
         return $container;
diff --git a/lib/models/Courseware/ContainerTypes/ContainerType.php b/lib/models/Courseware/ContainerTypes/ContainerType.php
index 6cbcdf964a1..e358c9c95c1 100644
--- a/lib/models/Courseware/ContainerTypes/ContainerType.php
+++ b/lib/models/Courseware/ContainerTypes/ContainerType.php
@@ -197,7 +197,7 @@ abstract class ContainerType
 
         foreach ($payload['sections'] as &$section) {
             foreach ($section['blocks'] as &$block) {
-                $block = strval($block_map[$block]) ?? null;
+                $block = $block_map[$block] ?? null;
             }
             $section['blocks'] = array_filter($section['blocks']);
         }
diff --git a/lib/models/Courseware/StructuralElement.php b/lib/models/Courseware/StructuralElement.php
index d3c77fafe1e..42b876042a6 100644
--- a/lib/models/Courseware/StructuralElement.php
+++ b/lib/models/Courseware/StructuralElement.php
@@ -821,12 +821,6 @@ SQL;
         return null;
     }
 
-    public static function getClipboardBackup(): string
-    {
-        //TODO
-        return '';
-    }
-
     /**
      * Copies this instance into another course oder users contents.
      *
-- 
GitLab