/** * {@inheritdoc} */ public function transform($model) { if (null === $model) { return null; } if (count($this->repository->getIdentifierProperties()) > 1) { throw new \InvalidArgumentException('Cannot transform object with multiple identifiers'); } $identifierProperty = $this->repository->getIdentifierProperties()[0]; $propertyAccessor = PropertyAccess::createPropertyAccessor(); if ($this->multiple) { if (!is_array($model)) { throw new UnexpectedTypeException($model, 'array'); } $identifiers = []; foreach ($model as $object) { $identifiers[] = $propertyAccessor->getValue($object, $identifierProperty); } return $identifiers; } if (!is_object($model)) { throw new UnexpectedTypeException($model, 'object'); } return $propertyAccessor->getValue($model, $identifierProperty); }
function let(IdentifiableObjectRepositoryInterface $repository, \stdClass $entity) { $entity->code = 'foo'; $repository->getIdentifierProperties()->willReturn(['code']); $repository->findOneByIdentifier('foo')->willReturn($entity); $this->beConstructedWith($repository, ['multiple' => false]); }
/** * {@inheritdoc} */ public function sort(array $columns, array $context = []) { $identifier = $this->productRepository->getIdentifierProperties()[0]; if (isset($context['filters']['structure']['attributes']) && !empty($context['filters']['structure']['attributes'])) { $rawColumns = array_merge([$identifier], $this->firstDefaultColumns, array_map(function ($associationType) { return $associationType->getCode(); }, $this->associationTypeRepository->findAll()), $context['filters']['structure']['attributes']); $sortedColumns = []; foreach ($rawColumns as $columnCode) { $sortedColumns = array_merge($sortedColumns, array_filter($columns, function ($columnCandidate) use($columnCode) { return 0 !== preg_match(sprintf('/^%s(-.*)*/', $columnCode), $columnCandidate); })); } return $sortedColumns; } array_unshift($this->firstDefaultColumns, $identifier); return parent::sort($columns); }
/** * Find an object according to its identifiers from a repository. * * @param IdentifiableObjectRepositoryInterface $repository the repository to search inside * @param array $data the data that is currently processed * * @throws MissingIdentifierException in case the processed data do not allow to retrieve an object * by its identifiers properly * * @return object|null */ protected function findObject(IdentifiableObjectRepositoryInterface $repository, array $data) { $properties = $repository->getIdentifierProperties(); $references = []; foreach ($properties as $property) { if (!isset($data[$property])) { throw new MissingIdentifierException(); } $references[] = $data[$property]; } return $repository->findOneByIdentifier(implode('.', $references)); }
/** * Find an object according to its identifiers from a repository. * * @param IdentifiableObjectRepositoryInterface $repository the repository to search inside * @param array $data the data that is currently processed * * @throws MissingIdentifierException in case the processed data do not allow to retrieve an object * by its identifiers properly * * @return object|null */ protected function findObject(IdentifiableObjectRepositoryInterface $repository, array $data) { $properties = $repository->getIdentifierProperties(); $references = []; foreach ($properties as $property) { if (!isset($data[$property])) { throw new MissingIdentifierException(sprintf('Missing identifier column "%s". Columns found: %s.', $property, implode(', ', array_keys($data)))); } $references[] = $data[$property]; } return $repository->findOneByIdentifier(implode('.', $references)); }
/** * @param array $convertedItem * * @return string */ protected function getIdentifier(array $convertedItem) { $identifierProperty = $this->repository->getIdentifierProperties(); return $convertedItem[$identifierProperty[0]]; }
/** * {@inheritdoc} */ public function sort(array $columns) { $identifier = $this->productRepository->getIdentifierProperties()[0]; array_unshift($this->firstDefaultColumns, $identifier); return parent::sort($columns); }
/** * @param array $item * * @return string */ protected function getIdentifier(array $item) { $identifierProperty = $this->repository->getIdentifierProperties(); return $item[$identifierProperty[0]][0]['data']; }