/** * @param ResourceDefinition $resourceDefinition * @param string $action * @param string $cardinality * @return $this */ public function addResourceDefinition(ResourceDefinition $resourceDefinition, string $action, string $cardinality = Cardinality::ONE) { $name = $this->entityNameLibrary->toPretty($resourceDefinition->getEntityClassName()) . '_' . $action; if (!array_key_exists($name, $this->schemas)) { $this->schemas[$name] = null; // Set key to avoid circular references $this->schemas[$name] = $resourceDefinition->toSwagger($this, $action); } $refId = '#/definitions/' . $name; if ($cardinality === Cardinality::ONE) { return $refId; } else { return $this->addItemListDefinition($this->entityNameLibrary->toPretty($resourceDefinition->getEntityClassName()), $refId, $action); } }
/** * Return TRUE if the input has an id, and thus is an edit of an existing field. * @param ResourceTransformer $transformer * @param ResourceDefinition $resourceDefinition * @param Context $context * @param $input * @return bool */ protected function hasInputIdentifier(ResourceTransformer $transformer, ResourceDefinition $resourceDefinition, Context $context, &$input) { $identifiers = $resourceDefinition->getFields()->getIdentifiers(); if (count($identifiers) > 0) { foreach ($identifiers as $field) { $value = $this->resolvePropertyInput($transformer, $input, $field, $context); if (!$value) { return false; } } return true; } return false; }
/** * @param ResourceDefinition $resourceDefinition * @param $entity * @throws InvalidEntityException */ private function checkEntityType(ResourceDefinition $resourceDefinition, $entity) { $entityClassName = $resourceDefinition->getEntityClassName(); if (!$entity instanceof $entityClassName) { if (is_object($entity)) { $providedType = get_class($entity); } else { $providedType = gettype($entity); } throw new InvalidEntityException("ResourceTransformer expects {$entityClassName}, " . $providedType . " given."); } }
/** * @param ResourceTransformer $transformer * @param ResourceDefinition $definition * @param null $request * @return PaginationBuilder */ private function createPaginationBuilderFromDefinition(ResourceTransformer $transformer, ResourceDefinition $definition, $request = null) { $cn = $this->paginationClass; /** * @var PaginationBuilder $builder */ $builder = new $cn(); // Register attribute names foreach ($definition->getFields() as $field) { if ($field instanceof IdentifierField || $field instanceof ResourceField && $field->isSortable()) { $builder->registerPropertyName($field->getName(), $field->getDisplayName()); } } $sorting = $transformer->getPropertyResolver()->getParameterFromRequest($request, ResourceTransformer::SORT_PARAMETER); $sortedOn = []; if ($sorting) { $sortFields = explode(',', $sorting); // Set the sort order foreach ($sortFields as $sortField) { if (mb_substr($sortField, 0, 1) === '!') { $sortField = mb_substr($sortField, 1); $direction = OrderParameter::DESC; } else { $direction = OrderParameter::ASC; } $field = $definition->getFields()->getFromDisplayName($sortField); if ($field) { if ($field->isSortable()) { $sortedOn[$field->getName()] = true; $builder->orderBy(new OrderParameter($field->getName(), $direction)); } } else { // Check sortable switch ($sortField) { case self::RANDOM: $this->handleRandomOrder($builder, $direction, $request); break; } } } } // Add all foreach ($definition->getFields() as $field) { if ($field instanceof IdentifierField && !isset($sortedOn[$field->getName()])) { $builder->orderBy(new OrderParameter($field->getName(), OrderParameter::ASC)); } } // Set request if (isset($request)) { $builder->setRequest($request); } return $builder; }