/** * Get the media attributes * * @return string[] */ public function getMediaAttributes() { if (null === $this->mediaAttributes) { $this->mediaAttributes = $this->attributeRepository->findMediaAttributeCodes(); } return $this->mediaAttributes; }
/** * Transforms a relative path to absolute. Data must be provided in the pivot format. * * $item exemple: * [ * 'side_view' => [ * [ * 'locale' => null, * 'scope' => null, * 'data' => [ * 'filePath' => 'cat_003.png', * 'originalFilename' => 'cat_003.png' * ] * ] * ] * ] * * @param array $attributeValues An associative array (attribute_code => values) * @param string $filePath The absolute path * * @return array */ public function transform(array $attributeValues, $filePath) { $mediaAttributes = $this->attributeRepository->findMediaAttributeCodes(); foreach ($attributeValues as $code => $values) { if (in_array($code, $mediaAttributes)) { foreach ($values as $index => $value) { if (isset($value['data']) && isset($value['data']['filePath'])) { $dataFilePath = $value['data']['filePath']; $attributeValues[$code][$index]['data']['filePath'] = sprintf('%s%s%s', $filePath, DIRECTORY_SEPARATOR, $dataFilePath); } } } } return $attributeValues; }
/** * {@inheritdoc} */ public function process($product) { $parameters = $this->stepExecution->getJobParameters(); $structure = $parameters->get('filters')['structure']; $channel = $this->channelRepository->findOneByIdentifier($structure['scope']); $this->productBuilder->addMissingProductValues($product, [$channel], $channel->getLocales()->toArray()); $productStandard = $this->normalizer->normalize($product, 'json', ['channels' => [$channel->getCode()], 'locales' => array_intersect($channel->getLocaleCodes(), $parameters->get('filters')['structure']['locales'])]); if ($this->areAttributesToFilter($parameters)) { $attributesToFilter = $this->getAttributesToFilter($parameters); $productStandard['values'] = $this->filterValues($productStandard['values'], $attributesToFilter); } if ($parameters->has('with_media') && $parameters->get('with_media')) { $directory = $this->stepExecution->getJobExecution()->getExecutionContext()->get(JobInterface::WORKING_DIRECTORY_PARAMETER); $this->fetchMedia($product, $directory); } else { $mediaAttributes = $this->attributeRepository->findMediaAttributeCodes(); $productStandard['values'] = array_filter($productStandard['values'], function ($attributeCode) use($mediaAttributes) { return !in_array($attributeCode, $mediaAttributes); }, ARRAY_FILTER_USE_KEY); } $this->detacher->detach($product); return $productStandard; }
function let(AttributeRepositoryInterface $attributeRepository) { $attributeRepository->findMediaAttributeCodes()->willReturn(['view', 'manual']); $this->beConstructedWith($attributeRepository, ['.', ','], ['Y-m-d', 'd-m-Y']); }