/** * @param Request $request * @param Params $params * @param array $body * @return array * @todo Check if fields are translatable. */ public function parse(Request $request, Params $params, array $body) { $translations = []; if (empty($params->primaryType) || empty($body['meta'][$params->primaryType]['translations'])) { return $translations; } $bodyTranslations =& $body['meta'][$params->primaryType]['translations']; if (Util\ArrayHelper::isAssociative($bodyTranslations)) { $id = reset($params->primaryIds); $translations[$id] = $this->serializeTransationObject($bodyTranslations); } else { foreach ($bodyTranslations as $resourceTranslations) { if (empty($resourceTranslations['id'])) { throw new ParseException(self::ERROR_MISSING_ID); } elseif (isset($translations[$resourceTranslations['id']])) { throw new ParseException(self::ERROR_DUPLICATED_ENTITY); } $translations[$resourceTranslations['id']] = $this->serializeTransationObject($resourceTranslations); } } if (!is_array($translations) || !Util\ArrayHelper::isAssociative($translations)) { throw new ParseException(self::ERROR_TRANSLATIONS_TYPE); } return $translations; }
/** * @param Request $request * @param Params $params * @param array $body * @return array */ public function parse(Request $request, Params $params, array $body) { $entityData = []; if (empty($body[$params->primaryType])) { throw new ParseException(BodyParser::ERROR_PRIMARY_TYPE_KEY); } elseif (Util\ArrayHelper::isAssociative($body[$params->primaryType])) { if (isset($body[$params->primaryType]['id'])) { throw new ParseException(static::ERROR_ID_NOT_SUPPORTED); } else { $entityData[] = $body[$params->primaryType]; } } else { foreach ($body[$params->primaryType] as $datum) { if (isset($datum['id'])) { throw new ParseException(static::ERROR_ID_NOT_SUPPORTED); } else { $entityData[] = $datum; } } } return $entityData; }
/** * @param Request $request * @param Params $params * @param RequestAction $action * @return boolean * @throws ParseException */ private function isPrimaryResourceAList(Request $request, Params $params, RequestAction $action) { $json = $request->getContent(); if (RequestAction::TARGET_RESOURCE == $action->target && in_array($action->name, [RequestAction::ACTION_CREATE, RequestAction::ACTION_UPDATE])) { $data = $this->jsonCoder->decode($json); if (!is_array($data) || !isset($data[$params->primaryType])) { throw new ParseException(self::ERROR_RESOURCE_CONTENT_MISSING); } return !Util\ArrayHelper::isAssociative($data[$params->primaryType]); } return FALSE; }