validate($request, $resource); $task = Task::find($resource->task_id); if (!Authority::canUpdateTaskFeedback($user = $this->getUser($request), $task)) { throw new AuthorizationFailedException(); } $resource = $this->updateTaskFeedback($user, $resource, $json); return $this->getContentResponse($resource); } /** * @SuppressWarnings(PHPMD.UnusedFormalParameters) */ protected function validateResourceDocument($json, $data) { if (!self::arrayHas($json, 'data')) { return 'Missing `data` member at document“s top level.'; } if (!self::arrayHas($json, 'data.id')) { return 'Document must have an `id`.'; } } private function updateTaskFeedback(\User $user, TaskFeedback $resource, array $json): TaskFeedback { if (self::arrayHas($json, 'data.attributes.content')) { $resource->content = self::arrayGet( $json, 'data.attributes.content' ); } $resource->store(); if ($resource->getStructuralElement()->range_type === 'courses') { Activity::create([ 'provider' => 'Studip\Activity\CoursewareProvider', 'context' => 'course', 'context_id' => $resource->getStructuralElement()->range_id, 'content' => self::arrayGet($json, 'data.attributes.content', ''), 'actor_type' => 'user', 'actor_id' => $user->id, 'verb' => 'answered', 'object_id' => $resource->task->structural_element_id, 'object_type' => 'courseware', 'mkdate' => time() ]); } return $resource; } }