getIdentifiersResponse($related->edit_blocker_id ? $related->edit_blocker : null); } protected function replaceRelationship(Request $request, $related) { $json = $this->validate($request); $data = self::arrayGet($json, 'data'); if (!Authority::canUpdateEditBlocker($this->getUser($request), $related)) { throw new ConflictException(); } if (null === $data) { $editorId = null; } else { $editorId = self::arrayGet($json, 'data.id'); if (!$editor = \User::find($editorId)) { throw new BadRequestException('Invalid edit-blocker specified.'); } } $related->edit_blocker_id = $editor->id ?? null; $related->store(); return $this->getCodeResponse(204); } protected function findRelated(array $args) { if (!$related = StructuralElement::find($args['id'])) { throw new RecordNotFoundException(); } return $related; } protected function authorize(Request $request, $resource) { switch ($request->getMethod()) { case 'GET': return Authority::canShowStructuralElement($this->getUser($request), $resource); case 'PATCH': return Authority::canUpdateStructuralElement($this->getUser($request), $resource); default: return false; } } /** * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ protected function getRelationshipSelfLink($resource, $schema, $userData) { return $schema->getRelationshipSelfLink($resource, \JsonApi\Schemas\Courseware\StructuralElement::REL_EDITBLOCKER); } /** * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ protected function getRelationshipRelatedLink($resource, $schema, $userData) { return null; } protected function validateResourceDocument($json, $data) { if (!self::arrayHas($json, 'data')) { return 'Missing `data` member at file´s top level.'; } $data = self::arrayGet($json, 'data'); if ($data === null) { return; } if (count($data) !== 2 || !isset($data['id']) || !isset($data['type'])) { return 'File´s ´data´ must be null or a resource identifier.'; } if ($data['type'] !== \JsonApi\Schemas\User::TYPE) { return 'Wrong `data.type`.'; } } }