eavConfig = $eavConfig; $this->moduleDataSetup = $moduleDataSetup; $this->eavSetupFactory = $eavSetupFactory; $this->getCategoryEntities = $getCategoryEntities; $this->getCookieEntities = $getCookieEntities; } /** * @inheritdoc */ public function apply() { $this->moduleDataSetup->getConnection()->startSetup(); /** @var EavSetup $eavSetup */ $eavSetup = $this->eavSetupFactory->create(['setup' => $this->moduleDataSetup]); $eavSetup->installEntities($this->getCategoryEntities->execute()); $eavSetup->installEntities($this->getCookieEntities->execute()); $this->eavConfig->clear(); $this->moduleDataSetup->getConnection()->endSetup(); } /** * @inheritdoc */ public function revert() { $this->moduleDataSetup->getConnection()->startSetup(); /** @var EavSetup $eavSetup */ $eavSetup = $this->eavSetupFactory->create(['setup' => $this->moduleDataSetup]); $this->removeEntities($eavSetup, $this->getCategoryEntities->execute()); $this->removeEntities($eavSetup, $this->getCookieEntities->execute()); $this->moduleDataSetup->getConnection()->endSetup(); } /** * Remove entities attributes and types * * @param \Magento\Eav\Setup\EavSetup $eavSetup * @param array $entities * @return void */ private function removeEntities(EavSetup $eavSetup, array $entities): void { foreach ($entities as $entityType => $entityData) { // remove attributes if (is_array($entityData['attributes']) && !empty($entityData['attributes'])) { foreach ($entityData['attributes'] as $attrCode => $attr) { $eavSetup->removeAttribute($entityType, $attrCode); } } //remove Eav Entity Type $eavSetup->removeEntityType($entityType); } } /** * @inheritdoc */ public static function getDependencies(): array { return []; } /** * @inheritdoc */ public function getAliases(): array { return []; } }