作者:jacko97
项目:pim-community-de
function it_updates_a_family($attrRequiFactory, $channelRepository, FamilyTranslation $translation, FamilyInterface $family, AttributeRepositoryInterface $attributeRepository, AttributeInterface $attribute1, AttributeInterface $attribute2, AttributeInterface $attribute3, AttributeInterface $attribute4, AttributeRequirementInterface $attributeRequirement1, AttributeRequirementInterface $attributeRequirement2, AttributeRequirementInterface $attributeRequirement3, AttributeRequirementInterface $attributeRequirement4, AttributeRequirementInterface $attributeRequirement5, ChannelInterface $channel1, ChannelInterface $channel2, FamilyInterface $family)
{
$values = ['code' => 'mycode', 'attributes' => ['sku', 'name', 'description', 'price'], 'attribute_as_label' => 'name', 'requirements' => ['mobile' => ['sku', 'name'], 'print' => ['sku', 'name', 'description']], 'labels' => ['fr_FR' => 'Moniteurs', 'en_US' => 'PC Monitors']];
$attributeRepository->findOneByIdentifier('sku')->willReturn($attribute1);
$attributeRepository->findOneByIdentifier('name')->willReturn($attribute2);
$attributeRepository->findOneByIdentifier('description')->willReturn($attribute3);
$attributeRepository->findOneByIdentifier('price')->willReturn($attribute4);
$channelRepository->findOneByIdentifier('mobile')->willReturn($channel1);
$channelRepository->findOneByIdentifier('print')->willReturn($channel2);
$attrRequiFactory->createAttributeRequirement($attribute1, $channel1, true)->willReturn($attributeRequirement1);
$attrRequiFactory->createAttributeRequirement($attribute2, $channel1, true)->willReturn($attributeRequirement2);
$attrRequiFactory->createAttributeRequirement($attribute1, $channel2, true)->willReturn($attributeRequirement3);
$attrRequiFactory->createAttributeRequirement($attribute2, $channel2, true)->willReturn($attributeRequirement4);
$attrRequiFactory->createAttributeRequirement($attribute3, $channel2, true)->willReturn($attributeRequirement5);
$family->setAttributeRequirements([$attributeRequirement1, $attributeRequirement2, $attributeRequirement3, $attributeRequirement4, $attributeRequirement5])->shouldBeCalled();
$family->setCode('mycode')->shouldBeCalled();
$family->addAttribute($attribute1)->shouldBeCalled();
$family->addAttribute($attribute2)->shouldBeCalled();
$family->addAttribute($attribute1)->shouldBeCalled();
$family->addAttribute($attribute1)->shouldBeCalled();
$family->setLocale('en_US')->shouldBeCalled();
$family->setLocale('fr_FR')->shouldBeCalled();
$family->getTranslation()->willReturn($translation);
$translation->setLabel('label en us');
$translation->setLabel('label fr fr');
$family->addAttribute($attribute1)->shouldBeCalled();
$family->addAttribute($attribute2)->shouldBeCalled();
$family->addAttribute($attribute3)->shouldBeCalled();
$family->addAttribute($attribute4)->shouldBeCalled();
$family->setAttributeAsLabel($attribute2)->shouldBeCalled();
$this->update($family, $values, []);
}
作者:noglitchy
项目:pim-community-de
function it_denormalizes_product_values_from_json($denormalizer, $registry, AttributeRepositoryInterface $attributeRepository, ProductValueInterface $nameValue, ProductValueInterface $colorValue, AttributeInterface $name, AttributeInterface $color)
{
$data = ['name' => [['locale' => null, 'scope' => null, 'value' => 'foo']], 'color' => [['locale' => 'en_US', 'scope' => 'ecommerce', 'value' => 'red']]];
$attributeRepository->findOneByIdentifier('name')->willReturn($name);
$attributeRepository->findOneByIdentifier('color')->willReturn($color);
$registry->getRepository('Attribute')->willReturn($attributeRepository);
$denormalizer->denormalize($data['name'][0], 'ProductValue', 'json', ['attribute' => $name])->shouldBeCalled()->willReturn($nameValue);
$denormalizer->denormalize($data['color'][0], 'ProductValue', 'json', ['attribute' => $color])->shouldBeCalled()->willReturn($colorValue);
$values = $this->denormalize($data, 'ProductValue[]', 'json');
$values->shouldHaveCount(2);
$values[0]->shouldBe($nameValue);
$values[1]->shouldBe($colorValue);
}
作者:noglitchy
项目:pim-community-de
/**
* Get an attribute or throw an exception
*
* @param int $id
*
* @throws EntityNotFoundException
*
* @return AttributeInterface
*
* @deprecated will be removed in 1.5 please use AttributeRepositoryInterface->find()
*/
public function getAttribute($id)
{
$attribute = $this->repository->find($id);
if (null === $attribute) {
throw new EntityNotFoundException();
}
return $attribute;
}
作者:noglitchy
项目:pim-community-de
function it_initializes_attribute_requirements_with_all_channels_and_attributes_in_the_PIM(ChannelRepositoryInterface $channelRepository, ChannelInterface $ecommerceChannel, ChannelInterface $mobileChannel, AttributeRepositoryInterface $attributeRepository, AttributeInterface $nameAttribute, AttributeInterface $descriptionAttribute, AttributeRequirementFactory $factory, AttributeRequirementInterface $nameECommerceRequirement, AttributeRequirementInterface $nameMobileRequirement, AttributeRequirementInterface $descriptionECommerceRequirement, AttributeRequirementInterface $descriptionMobileRequirement)
{
$channelRepository->findAll()->willReturn([$ecommerceChannel, $mobileChannel]);
$attributeRepository->getNonIdentifierAttributes()->willReturn([$nameAttribute, $descriptionAttribute]);
$factory->createAttributeRequirement($nameAttribute, $ecommerceChannel, false)->willReturn($nameECommerceRequirement);
$nameECommerceRequirement->getAttributeCode()->willReturn('name');
$nameECommerceRequirement->getChannelCode()->willReturn('ecommerce');
$factory->createAttributeRequirement($nameAttribute, $mobileChannel, false)->willReturn($nameMobileRequirement);
$nameMobileRequirement->getAttributeCode()->willReturn('name');
$nameMobileRequirement->getChannelCode()->willReturn('mobile');
$factory->createAttributeRequirement($descriptionAttribute, $ecommerceChannel, false)->willReturn($descriptionECommerceRequirement);
$descriptionECommerceRequirement->getAttributeCode()->willReturn('description');
$descriptionECommerceRequirement->getChannelCode()->willReturn('ecommerce');
$factory->createAttributeRequirement($descriptionAttribute, $mobileChannel, false)->willReturn($descriptionMobileRequirement);
$descriptionMobileRequirement->getAttributeCode()->willReturn('description');
$descriptionMobileRequirement->getChannelCode()->willReturn('mobile');
$this->initialize();
$this->getAttributeRequirements()->toArray()->shouldReturn(['name_ecommerce' => $nameECommerceRequirement, 'name_mobile' => $nameMobileRequirement, 'description_ecommerce' => $descriptionECommerceRequirement, 'description_mobile' => $descriptionMobileRequirement]);
}
作者:noglitchy
项目:pim-community-de
/**
* @return array
*/
public function resolveAttributeColumns()
{
if (empty($this->attributesFields)) {
$attributes = $this->attributeRepository->findAll();
$currencyCodes = $this->currencyRepository->getActivatedCurrencyCodes();
$values = $this->valuesResolver->resolveEligibleValues($attributes);
foreach ($values as $value) {
if (null !== $value['locale'] && null !== $value['scope']) {
$field = sprintf('%s-%s-%s', $value['attribute'], $value['locale'], $value['scope']);
} elseif (null !== $value['locale']) {
$field = sprintf('%s-%s', $value['attribute'], $value['locale']);
} elseif (null !== $value['scope']) {
$field = sprintf('%s-%s', $value['attribute'], $value['scope']);
} else {
$field = $value['attribute'];
}
if (AttributeTypes::PRICE_COLLECTION === $value['type']) {
$this->attributesFields[] = $field;
foreach ($currencyCodes as $currencyCode) {
$currencyField = sprintf('%s-%s', $field, $currencyCode);
$this->attributesFields[] = $currencyField;
}
} elseif (AttributeTypes::METRIC === $value['type']) {
$this->attributesFields[] = $field;
$metricField = sprintf('%s-%s', $field, 'unit');
$this->attributesFields[] = $metricField;
} else {
$this->attributesFields[] = $field;
}
}
}
return $this->attributesFields;
}
作者:qrz-i
项目:pim-community-de
/**
* Get the media attributes
*
* @return string[]
*/
public function getMediaAttributes()
{
if (null === $this->mediaAttributes) {
$this->mediaAttributes = $this->attributeRepository->findMediaAttributeCodes();
}
return $this->mediaAttributes;
}
作者:noglitchy
项目:pim-community-de
/**
* {@inheritdoc}
*/
public function getFilter($code)
{
$attribute = $this->attributeRepository->findOneBy(['code' => FieldFilterHelper::getCode($code)]);
if (null !== $attribute) {
return $this->getAttributeFilter($attribute);
}
return $this->getFieldFilter($code);
}
作者:ashutosh-srija
项目:findit_akene
/**
* Fetch the attribute by its code
*
* @param string $code
*
* @throws \LogicException
*
* @return AttributeInterface
*/
protected function getAttribute($code)
{
$attribute = $this->attributeRepository->findOneBy(['code' => $code]);
if ($attribute === null) {
throw new \LogicException(sprintf('Unknown attribute "%s".', $code));
}
return $attribute;
}
作者:noglitchy
项目:pim-community-de
/**
* Don't allow creating an identifier attribute if one already exists
*
* @param AttributeInterface $attribute
* @param Constraint $constraint
*/
public function validate($attribute, Constraint $constraint)
{
if (AttributeTypes::IDENTIFIER === $attribute->getAttributeType()) {
$identifier = $this->attributeRepository->getIdentifier();
if ($identifier && $identifier->getId() !== $attribute->getId()) {
$this->context->buildViolation($constraint->message)->atPath('attributeType')->addViolation();
}
}
}
作者:jacko97
项目:pim-community-de
/**
* Don't allow creating an identifier attribute if one already exists
*
* @param AttributeInterface $attribute
* @param Constraint $constraint
*/
public function validate($attribute, Constraint $constraint)
{
if ($attribute->getAttributeType() === 'pim_catalog_identifier') {
$identifier = $this->attributeRepository->getIdentifier();
if ($identifier && $identifier->getId() !== $attribute->getId()) {
$this->context->addViolationAt('attributeType', $constraint->message);
}
}
}
作者:ashutosh-srija
项目:findit_akene
/**
* Find common attributes
* Common attributes are:
* - not unique (and not identifier)
* - without value AND link to family
* - with value
*
* @param ProductInterface[] $products
*
* @return AttributeInterface[]
*/
public function findCommonAttributes(array $products)
{
$productIds = [];
foreach ($products as $product) {
$productIds[] = $product->getId();
}
$attributeIds = $this->massActionRepository->findCommonAttributeIds($productIds);
return $this->attributeRepository->findWithGroups(array_unique($attributeIds), ['conditions' => ['unique' => 0]]);
}
作者:noglitchy
项目:pim-community-de
/**
* Load the attribute for this filter
* Required to prepare choice url params and filter configuration
*
* @throws \LogicException
*/
protected function getAttribute()
{
$fieldName = $this->get(ProductFilterUtility::DATA_NAME_KEY);
$attribute = $this->attributeRepository->findOneByCode($fieldName);
if (!$attribute) {
throw new \LogicException(sprintf('There is no attribute with code %s.', $fieldName));
}
return $attribute;
}
作者:VinceBLO
项目:pim-community-de
/**
* Get fields for products
*
* @param array $productIds
*
* @return array
*/
public function getFieldsList($productIds)
{
$this->prepareAvailableAttributeIds($productIds);
$attributes = $this->getAttributeIds();
if (empty($attributes)) {
return [];
}
$attributes = $this->attributeRepository->findBy(['id' => $this->getAttributeIds()]);
return $this->prepareFieldsList($attributes);
}
作者:ashutosh-srija
项目:findit_akene
/**
* {@inheritdoc}
*/
public function initialize()
{
$this->channels = $this->channelRepository->findAll();
foreach ($this->attributeRepository->getNonIdentifierAttributes() as $attribute) {
$this->attributes[(string) $attribute->getGroup()][] = $attribute;
foreach ($this->channels as $channel) {
$this->addAttributeRequirement($this->factory->createAttributeRequirement($attribute, $channel, false));
}
}
}
作者:qrz-i
项目:pim-community-de
/**
* @return FamilyInterface
*/
public function createFamily()
{
$family = new $this->familyClass();
$identifier = $this->attributeRepository->getIdentifier();
$family->addAttribute($identifier);
$family->setAttributeAsLabel($identifier);
foreach ($this->getChannels() as $channel) {
$requirement = $this->factory->createAttributeRequirement($identifier, $channel, true);
$family->addAttributeRequirement($requirement);
}
return $family;
}
作者:ashutosh-srija
项目:findit_akene
/**
* {@inheritdoc}
*/
public function denormalize($data, $class, $format = null, array $context = [])
{
$values = new ArrayCollection();
foreach ($data as $attributeCode => $valuesData) {
$attribute = $this->attributeRepository->findOneByIdentifier($attributeCode);
foreach ($valuesData as $valueData) {
$value = $this->denormalizer->denormalize($valueData, $this->valueClass, 'json', ['attribute' => $attribute] + $context);
$values->add($value);
}
}
return $values;
}
作者:VinceBLO
项目:pim-community-de
/**
* Get the attribute collection
*
* @return JsonResponse
*/
public function indexAction(Request $request)
{
$criteria = [];
if ($request->query->has('identifiers')) {
$criteria['code'] = explode(',', $request->query->get('identifiers'));
}
if ($request->query->has('types')) {
$criteria['attributeType'] = explode(',', $request->query->get('types'));
}
$attributes = $this->attributeRepository->findBy($criteria);
$filteredAttributes = $this->collectionFilter->filterCollection($attributes, 'pim.internal_api.attribute.view');
$normalizedAttributes = $this->normalizer->normalize($filteredAttributes, 'internal_api');
return new JsonResponse($normalizedAttributes);
}
作者:noglitchy
项目:pim-community-de
/**
* @param FamilyInterface $family
*
* @return string[]
*/
protected function getMissingChannelCodes(FamilyInterface $family)
{
$requirements = $family->getAttributeRequirements();
$identifierCode = $this->attributeRepository->getIdentifierCode();
$currentChannelCodes = [];
foreach ($requirements as $requirement) {
if ($requirement->getAttributeCode() === $identifierCode) {
$currentChannelCodes[] = $requirement->getChannelCode();
}
}
$expectedChannelCodes = $this->channelRepository->getChannelCodes();
$missingChannelCodes = array_diff($expectedChannelCodes, $currentChannelCodes);
return $missingChannelCodes;
}
作者:noglitchy
项目:pim-community-de
/**
* @param GroupInterface $group
* @param array $data
*/
protected function setAxis(GroupInterface $group, $data)
{
if (isset($data['axis']) && !empty($data['axis'])) {
$axisCodes = explode(',', $data['axis']);
$attributes = [];
foreach ($axisCodes as $code) {
$attribute = $this->attributeRepository->findOneByIdentifier($code);
if (!$attribute) {
throw new \LogicException(sprintf('Attribute with identifier "%s" not found', $code));
}
$attributes[] = $attribute;
}
$group->setAxisAttributes($attributes);
}
}
作者:paulclarki
项目:pim-community-de
/**
* {@inheritdoc}
*/
public function convert(array $items, array $options = [])
{
$attributeTypes = $this->attributeRepository->getAttributeTypeByCodes(array_keys($items));
foreach ($items as $code => $item) {
if (isset($attributeTypes[$code])) {
$localizer = $this->localizerRegistry->getLocalizer($attributeTypes[$code]);
if (null !== $localizer) {
foreach ($item as $i => $data) {
$items[$code][$i] = $this->convertAttribute($localizer, $data, $options, $code);
}
}
}
}
return $items;
}