Sonata\ProductBundle\Model\BaseProductProvider::synchronizeVariationsCategories PHP Method

synchronizeVariationsCategories() public method

public synchronizeVariationsCategories ( Sonata\Component\Product\ProductInterface $product, ArrayCollection $variations = null )
$product Sonata\Component\Product\ProductInterface
$variations Doctrine\Common\Collections\ArrayCollection
    public function synchronizeVariationsCategories(ProductInterface $product, ArrayCollection $variations = null)
    {
        if (in_array('productCategories', $this->getVariationFields())) {
            return;
        }
        if (!$variations) {
            $variations = $product->getVariations();
        }
        $productCategories = $product->getProductCategories();
        /** @var ProductInterface $variation */
        foreach ($variations as $variation) {
            // browsing variation categories and remove excessing categories
            foreach ($variation->getCategories() as $variationCategory) {
                if ($variationCategory && !$productCategories->contains($variationCategory)) {
                    $this->productCategoryManager->removeCategoryFromProduct($variation, $variationCategory);
                }
            }
            // browsing Product categories and add missing categories
            foreach ($productCategories as $productCategory) {
                $category = $productCategory->getCategory();
                if ($category && !$variation->getCategories()->contains($category)) {
                    $this->productCategoryManager->addCategoryToProduct($variation, $category, $productCategory->getMain());
                }
            }
        }
    }