/** * @param ResourceTransformer $transformer * @param ResourceCollection $collection * @param ResourceDefinition $definition * @param Context $context * @param RelationshipValue $parent * @param null $parentEntity */ public function processCollection(ResourceTransformer $transformer, ResourceCollection $collection, ResourceDefinition $definition, Context $context, RelationshipValue $parent = null, $parentEntity = null) { $builder = $this->getPaginationBuilderFromDefinition($transformer, $definition, null, null); if (count($collection) > 0 && (!isset($parent) || $parent->getField()->getRecords() > 0)) { // Register all identifiers if parent is present if ($parent) { foreach ($definition->getFields()->getIdentifiers() as $field) { $builder->registerPropertyName($field->getName(), $field->getDisplayName()); } } /** @var RESTResource $first */ $first = $collection->first(); if ($first) { $builder->setFirst($this->transformResource($builder, $first)); } /** @var RESTResource $first */ $last = $collection->last(); if ($last) { $builder->setLast($this->transformResource($builder, $last)); } $cursor = $builder->getNavigation(); if ($parent) { $url = $parent->getField()->getUrl(); } elseif ($context->getUrl()) { $url = $context->getUrl(); } else { $url = $definition->getUrl(); } $url = $transformer->getPropertyResolver()->resolvePathParameters($transformer, $parentEntity, $url, $context); $collection->addMeta('pagination', ['next' => $cursor->getNext() ? $url . '?' . http_build_query($cursor->getNext()) : null, 'previous' => $cursor->getPrevious() ? $url . '?' . http_build_query($cursor->getPrevious()) : null, 'cursors' => $cursor->toArray()]); } }
/** * @param $resourceDefinition * @param $content * @param EntityFactoryContract $factory * @param ContextContract $context * @return array * @throws InvalidContextAction */ public function entitiesFromIdentifiers($resourceDefinition, $content, EntityFactoryContract $factory, ContextContract $context) { $resourceDefinition = ResourceDefinitionLibrary::make($resourceDefinition); if (!Action::isWriteContext($context->getAction())) { throw InvalidContextAction::create('Writeable', $context->getAction()); } $out = []; if (isset($content[self::RELATIONSHIP_ITEMS])) { // This is a list of items foreach ($content[self::RELATIONSHIP_ITEMS] as $item) { $entity = $this->fromIdentifier($resourceDefinition, $item, $factory, $context); if ($entity) { $out[] = $entity; } } } else { $entity = $this->fromIdentifier($resourceDefinition, $content, $factory, $context); if ($entity) { $out[] = $entity; } } return $out; }
/** * @param ResourceTransformer $transformer * @param RelationshipField $field * @param Context $context * @return Context */ private function getInputChildContext(ResourceTransformer $transformer, RelationshipField $field, Context $context) { $childResourceDefinition = $field->getChildResource(); // Check if we want to create a new child or edit an existing child if ($context->getAction() !== Action::CREATE && $field->canCreateNewChildren() && $this->hasInputIdentifier($transformer, $childResourceDefinition, $context, $input)) { $action = Action::EDIT; } else { $action = Action::CREATE; } $childContext = $context->getChildContext($field, $action); return $childContext; }
/** * @param Context $context * @param CurrentPath $currentPath * @return bool */ public function shouldExpand(Context $context, CurrentPath $currentPath) { return $this->isExpanded() || $context->shouldExpandField($currentPath) && $this->isExpandable(); }
/** * @param Context $context * @param CurrentPath $currentPath * @return bool */ public function shouldInclude(Context $context, CurrentPath $currentPath) { $contextVisible = $context->shouldShowField($currentPath); if ($contextVisible !== null) { return $contextVisible && $this->isVisible($context->getAction()); } return $this->hasAction($context->getAction()); }