/**
  * @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();
 }
示例#5
0
 /**
  * @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());
 }