Setup/Uninstall.php (57 lines of code) (raw):

<?php /** * Copyright (c) Meta Platforms, Inc. and affiliates. All Rights Reserved */ namespace Facebook\BusinessExtension\Setup; use Facebook\BusinessExtension\Model\Config\ProductAttributes; use Facebook\BusinessExtension\Model\Config\Source\Product\GoogleProductCategory; use Magento\Catalog\Model\Category; use Magento\Catalog\Model\Product; use Magento\Eav\Model\Attribute; use Magento\Eav\Setup\EavSetupFactory; use Magento\Framework\Exception\LocalizedException; use Magento\Framework\Setup\ModuleContextInterface; use Magento\Framework\Setup\SchemaSetupInterface; use Magento\Framework\Setup\UninstallInterface; class Uninstall implements UninstallInterface { /** * EAV setup factory * * @var EavSetupFactory */ private $eavSetupFactory; /** * @var ProductAttributes */ private $productAttributes; /** * Uninstall constructor * * @param EavSetupFactory $eavSetupFactory * @param ProductAttributes $productAttributes */ public function __construct(EavSetupFactory $eavSetupFactory, ProductAttributes $productAttributes) { $this->eavSetupFactory = $eavSetupFactory; $this->productAttributes = $productAttributes; } /** * @param SchemaSetupInterface $setup * @param ModuleContextInterface $context * * @return void * @throws LocalizedException */ public function uninstall(SchemaSetupInterface $setup, ModuleContextInterface $context) { $setup->getConnection()->dropTable('facebook_business_extension_config'); $setup->getConnection()->delete('core_config_data', "path LIKE 'facebook/%'"); $eavSetup = $this->eavSetupFactory->create(); $productTypeId = $eavSetup->getEntityTypeId(Product::ENTITY); $categoryTypeId = $eavSetup->getEntityTypeId(Category::ENTITY); // delete "google_product_category" product attribute if installed by this extension if ($eavSetup->getAttributeId(Product::ENTITY, 'google_product_category')) { /** @var Attribute $attribute */ $attribute = $eavSetup->getAttribute($productTypeId, 'google_product_category'); if (isset($attribute['source_model']) && $attribute['source_model'] === GoogleProductCategory::class) { $eavSetup->removeAttribute($productTypeId, 'google_product_category'); } } // delete product attributes based on configuration $attributesConfig = $this->productAttributes->getAttributesConfig(); foreach ($attributesConfig as $attrCode => $config) { if ($eavSetup->getAttributeId(Product::ENTITY, $attrCode)) { $eavSetup->removeAttribute($productTypeId, $attrCode); } } // delete unit price attributes if exist if (method_exists($this->productAttributes, 'getUnitPriceAttributesConfig')) { $attributesConfig = $this->productAttributes->getUnitPriceAttributesConfig(); foreach ($attributesConfig as $attrCode => $config) { if ($eavSetup->getAttributeId(Product::ENTITY, $attrCode)) { $eavSetup->removeAttribute($productTypeId, $attrCode); } } } // delete "Facebook Attribute Group" from all product attribute sets $setup->getConnection()->delete( 'eav_attribute_group', ['attribute_group_name = ?' => $this->productAttributes->getAttributeGroupName()] ); // delete "sync_to_facebook_catalog category" attribute if ($eavSetup->getAttributeId(Category::ENTITY, 'sync_to_facebook_catalog')) { $eavSetup->removeAttribute($categoryTypeId, 'sync_to_facebook_catalog'); } } }