/**
  * @param Attribute $attribute
  * @param string $field
  * @return array
  */
 public function getPropertyValues(Attribute $attribute, $field)
 {
     $result = [];
     foreach ($attribute->getPropertiesByField($field) as $property) {
         $websiteId = $property->getWebsite() ? $property->getWebsite()->getId() : null;
         $fallback = $property->getFallback();
         if ($fallback) {
             $result[$websiteId] = new FallbackType($fallback);
         } else {
             $result[$websiteId] = $property->isValue();
         }
     }
     return $result;
 }
Exemplo n.º 2
0
 public function testGetPropertiesByFieldAndGetPropertyByFieldAndWebsiteId()
 {
     $firstWebsite = $this->createWebsite(1);
     $secondWebsite = $this->createWebsite(2);
     $onViewDefault = new AttributeProperty();
     $onViewDefault->setField(AttributeProperty::FIELD_ON_PRODUCT_VIEW);
     $onViewFirst = new AttributeProperty();
     $onViewFirst->setField(AttributeProperty::FIELD_ON_PRODUCT_VIEW)->setWebsite($firstWebsite);
     $inFiltersDefault = new AttributeProperty();
     $inFiltersDefault->setField(AttributeProperty::FIELD_USE_IN_FILTERS);
     $inFiltersFirst = new AttributeProperty();
     $inFiltersFirst->setField(AttributeProperty::FIELD_USE_IN_FILTERS)->setWebsite($firstWebsite);
     $inFiltersSecond = new AttributeProperty();
     $inFiltersSecond->setField(AttributeProperty::FIELD_USE_IN_FILTERS)->setWebsite($secondWebsite);
     $attribute = new Attribute();
     $attribute->resetProperties([$onViewDefault, $onViewFirst, $inFiltersDefault, $inFiltersFirst, $inFiltersSecond]);
     $this->assertEquals([$onViewDefault, $onViewFirst], array_values($attribute->getPropertiesByField(AttributeProperty::FIELD_ON_PRODUCT_VIEW)->toArray()));
     $this->assertEquals([$inFiltersDefault, $inFiltersFirst, $inFiltersSecond], array_values($attribute->getPropertiesByField(AttributeProperty::FIELD_USE_IN_FILTERS)->toArray()));
     $this->assertEmpty($attribute->getPropertiesByField(AttributeProperty::FIELD_USE_IN_SORTING)->toArray());
     $this->assertEquals($onViewDefault, $attribute->getPropertyByFieldAndWebsiteId(AttributeProperty::FIELD_ON_PRODUCT_VIEW, null));
     $this->assertEquals($inFiltersSecond, $attribute->getPropertyByFieldAndWebsiteId(AttributeProperty::FIELD_USE_IN_FILTERS, $secondWebsite->getId()));
     $this->assertNull($attribute->getPropertyByFieldAndWebsiteId(AttributeProperty::FIELD_USE_IN_SORTING, $firstWebsite->getId()));
     $this->assertNull($attribute->getPropertyByFieldAndWebsiteId(AttributeProperty::FIELD_ON_PRODUCT_VIEW, 42));
 }