validate($request, $resource); if (!Authority::canUpdatePublicLink($user = $this->getUser($request), $resource)) { throw new AuthorizationFailedException(); } $resource = $this->updatePublicLink($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`.'; } if (self::arrayHas($json, 'data.attributes.expire-date')) { $expire_date = self::arrayGet($json, 'data.attributes.expire-date'); if (!self::isValidTimestamp($expire_date)) { return '`expire-date` is not an ISO 8601 timestamp.'; } } } private function updatePublicLink(PublicLink $resource, array $json): PublicLink { $get = function ($key, $default = '') use ($json) { return self::arrayGet($json, $key, $default); }; $resource->password = $get('data.attributes.password'); $expire_date = $get('data.attributes.expire-date'); $expireDate = self::fromISO8601($expire_date); $resource->expire_date = $expireDate->getTimestamp(); $resource->store(); return $resource; } }