/** * {@inheritdoc} */ public function getFilter($code, $operator) { $attribute = $this->attributeRepository->findOneBy(['code' => FieldFilterHelper::getCode($code)]); if (null !== $attribute) { return $this->getAttributeFilter($attribute, $operator); } return $this->getFieldFilter($code, $operator); }
/** * {@inheritdoc} */ public function convertDefaultToLocalizedValue($code, $data, $options = []) { $attribute = $this->attributeRepository->findOneBy(['code' => $code]); if (null === $attribute) { return $data; } $attributeType = $attribute->getAttributeType(); if (null === $attributeType) { return $data; } $localizer = $this->localizerRegistry->getLocalizer($attributeType); if (null === $localizer) { return $data; } return $localizer->localize($data, $options); }
function it_sets_invalid_values_to_attributes($validator, $propertySetter, AttributeInterface $attribute, AttributeRepositoryInterface $attributeRepository, ProductInterface $product, ConstraintViolationListInterface $violations, StepExecution $stepExecution, JobConfigurationRepositoryInterface $jobConfigurationRepo, JobExecution $jobExecution, JobConfigurationInterface $jobConfiguration) { $stepExecution->getJobExecution()->willReturn($jobExecution); $jobConfigurationRepo->findOneBy(['jobExecution' => $jobExecution])->willReturn($jobConfiguration); $jobConfiguration->getConfiguration()->willReturn(json_encode(['filters' => [], 'actions' => [['field' => 'categories', 'value' => ['office', 'bedroom'], 'options' => []]]])); $validator->validate($product)->willReturn($violations); $violation = new ConstraintViolation('error2', 'spec', [], '', '', $product); $violations = new ConstraintViolationList([$violation, $violation]); $validator->validate($product)->willReturn($violations); $attributeRepository->findOneBy(['code' => 'categories'])->willReturn($attribute); $product->isAttributeEditable($attribute)->willReturn(true); $propertySetter->setData($product, 'categories', ['office', 'bedroom'], [])->shouldBeCalled(); $this->setStepExecution($stepExecution); $stepExecution->addWarning(Argument::cetera())->shouldBeCalled(); $stepExecution->incrementSummaryInfo('skipped_products')->shouldBeCalled(); $this->process($product); }
function it_sets_values_to_attributes($validator, $productUpdater, AttributeInterface $attribute, AttributeRepositoryInterface $attributeRepository, ProductInterface $product, StepExecution $stepExecution, JobConfigurationRepositoryInterface $jobConfigurationRepo, JobExecution $jobExecution, JobConfigurationInterface $jobConfiguration, LocalizerInterface $localizer) { $this->setStepExecution($stepExecution); $stepExecution->getJobExecution()->willReturn($jobExecution); $jobConfigurationRepo->findOneBy(['jobExecution' => $jobExecution])->willReturn($jobConfiguration); $values = ['number' => [['scope' => null, 'locale' => null, 'data' => '2.5']]]; $normalizedValues = addslashes(json_encode($values)); $jobConfiguration->getConfiguration()->willReturn(json_encode(['filters' => [], 'actions' => ['normalized_values' => $normalizedValues, 'ui_locale' => 'fr_FR', 'attribute_locale' => 'en_US', 'attribute_channel' => null]])); $violations = new ConstraintViolationList([]); $validator->validate($product)->willReturn($violations); $attribute->getAttributeType()->willReturn('number'); $attributeRepository->findOneBy(['code' => 'number'])->willReturn($attribute); $attributeRepository->findOneByIdentifier('number')->willReturn($attribute); $product->isAttributeEditable($attribute)->willReturn(true); $productUpdater->update($product, $values)->shouldBeCalled(); $this->process($product); }
/** * {@inheritdoc} */ public function addSorter($field, $direction, array $context = []) { $attribute = $this->attributeRepository->findOneBy(['code' => $field]); if (null !== $attribute) { $sorter = $this->sorterRegistry->getAttributeSorter($attribute); } else { $sorter = $this->sorterRegistry->getFieldSorter($field); } if (null === $sorter) { throw new \LogicException(sprintf('Sorter on field "%s" is not supported', $field)); } $context = $this->getFinalContext($context); if (null !== $attribute) { $this->addAttributeSorter($sorter, $attribute, $direction, $context); } else { $this->addFieldSorter($sorter, $field, $direction, $context); } return $this; }
/** * Set data from $actions to the given $product * * Actions should looks like that * * $actions = * [ * [ * 'field' => 'group', * 'value' => 'summer_clothes', * 'options' => null * ], * [ * 'field' => 'category', * 'value' => 'catalog_2013,catalog_2014', * 'options' => null * ], * ] * * @param ProductInterface $product * @param array $configuration * * @throws \LogicException * * @return ProductInterface $product */ protected function updateProduct(ProductInterface $product, array $configuration) { $modifiedAttributesNb = 0; foreach ($configuration['actions'] as $action) { $attribute = $this->attributeRepository->findOneBy(['code' => $action['field']]); if (null === $attribute) { throw new \LogicException(sprintf('Attribute with code %s does not exist'), $action['field']); } if ($product->isAttributeEditable($attribute)) { $localizer = $this->localizerRegistry->getLocalizer($attribute->getAttributeType()); if (null !== $localizer) { $action['value'] = $localizer->delocalize($action['value'], ['locale' => $configuration['locale']]); } $this->propertySetter->setData($product, $action['field'], $action['value'], $action['options']); $modifiedAttributesNb++; } } if (0 === $modifiedAttributesNb) { $this->stepExecution->incrementSummaryInfo('skipped_products'); $this->stepExecution->addWarning($this->getName(), 'pim_enrich.mass_edit_action.edit-common-attributes.message.no_valid_attribute', [], $product); return null; } return $product; }
/** * Return the identifier attribute * * @return AttributeInterface|null */ protected function getIdentifierAttribute() { return $this->attributeRepository->findOneBy(['attributeType' => AttributeTypes::IDENTIFIER]); }