From 7fef0df3ae2d94272081600d3c3500fa2580039a Mon Sep 17 00:00:00 2001
From: Ron Lucke <lucke@elan-ev.de>
Date: Thu, 4 Aug 2022 12:44:36 +0000
Subject: [PATCH] fix #1144

Closes #1144

Merge request studip/studip!855
---
 .../Routes/Courseware/StructuralElementsCreate.php  |  2 +-
 lib/models/Courseware/StructuralElement.php         | 13 ++++++++-----
 2 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/lib/classes/JsonApi/Routes/Courseware/StructuralElementsCreate.php b/lib/classes/JsonApi/Routes/Courseware/StructuralElementsCreate.php
index 8f1c8bd8443..bdb75d1ab49 100644
--- a/lib/classes/JsonApi/Routes/Courseware/StructuralElementsCreate.php
+++ b/lib/classes/JsonApi/Routes/Courseware/StructuralElementsCreate.php
@@ -79,7 +79,7 @@ class StructuralElementsCreate extends JsonApiController
             'editor_id' => $user->id,
             'edit_blocker_id' => '',
             'title' => self::arrayGet($json, 'data.attributes.title', ''),
-            'purpose' => self::arrayGet($json, 'data.attributes.purpose', 'content'),
+            'purpose' => $parent->purpose,
             'payload' => self::arrayGet($json, 'data.attributes.payload', ''),
             'position' => $parent->countChildren()
         ]);
diff --git a/lib/models/Courseware/StructuralElement.php b/lib/models/Courseware/StructuralElement.php
index f518cc16005..5b834e9cd97 100644
--- a/lib/models/Courseware/StructuralElement.php
+++ b/lib/models/Courseware/StructuralElement.php
@@ -227,20 +227,23 @@ class StructuralElement extends \SimpleORMap
             case 'course':
                 $hasEditingPermission = $this->hasEditingPermission($user);
                 if ($this->isTask()) {
-                    // TODO: Was tun wir, wenn dieses Strukturelement purpose=task aber keinen Task hat?
-                    if (!$this->task) {
-                        return false;
+                    $task = $this->task;
+                    if (!$task) {
+                        $task = $this->findParentTask();
+                        if (!$task) {
+                            return false;
+                        }
                     }
 
                     if ($hasEditingPermission) {
                         return false;
                     }
 
-                    if ($this->task->isSubmitted()) {
+                    if ($task->isSubmitted()) {
                         return false;
                     }
 
-                    return $this->task->userIsASolver($user);
+                    return $task->userIsASolver($user);
                 }
 
                 if ($hasEditingPermission) {
-- 
GitLab