Exemplo n.º 1
0
 /**
  * @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;
 }
Exemplo n.º 2
0
 /**
  * @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;
 }
Exemplo n.º 3
0
 /**
  * @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;
 }
Exemplo n.º 4
0
 /**
  * @param Params $params
  * @param \stdClass|string $schema
  * @param array &$entityData
  */
 protected function prepareData(Params $params, $schema, array &$entityData)
 {
     foreach ($entityData as &$data) {
         $json = Util\ArrayHelper::toObject($data);
         if (!$this->jsonCoder->matchSchema($json, $schema)) {
             $message = $this->jsonCoder->getSchemaErrorMessage();
             throw new ParseException($message);
         }
         $this->hydrant->hydrate($params, $data);
     }
     return $entityData;
 }