jose-c
6/28/2018 - 2:40 PM

Create attribute product, group

Create attribute, group attribute

<?php

namespace Padi\Catalog\Setup;

use Magento\Catalog\Model\ProductFactory;
use Magento\Framework\ObjectManagerInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\UpgradeDataInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\TestFramework\Event\Magento;
use Padi\ApiClub\Model\ProductType;
use Padi\Catalog\Model\ProductRepository;
use Psr\Log\LoggerInterface;
use Magento\Eav\Setup\EavSetupFactory;
use Magento\Catalog\Model\Product\Action as ProductAction;

use Magento\Eav\Model\Entity\Attribute\Set as AttributeSet;
use Magento\Store\Model\WebsiteRepository;
use Magento\Store\Model\ResourceModel\Website\CollectionFactory as WebsiteCollectionFactory;
use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory as ProductCollectionFactory;

class UpgradeData implements UpgradeDataInterface
{
    /**
     * @var ObjectManagerInterface
     */
    private $objectManager;

    /**
     * Page factory
     *
     * @var LoggerInterface
     */
    private $logger;

    /**
     * EAV setup factory
     *
     * @var EavSetupFactory
     */
    private $eavSetupFactory;

    private $attributeSet;
    private $websiteRepository;
    private $websiteCollectionFactory;
    private $productCollectionFactory;
    private $productAction;

    /**
     * @var \Magento\Catalog\Api\ProductRepositoryInterface
     */
    private $productRepository;
    /**
     * @var \Magento\Framework\App\State
     */
    private $state;

    /**
     * UpgradeData constructor.
     * @param ObjectManagerInterface $manager
     * @param EavSetupFactory $eavSetupFactory
     * @param AttributeSet $attributeSet
     * @param WebsiteRepository $websiteRepository
     * @param WebsiteCollectionFactory $websiteCollectionFactory
     * @param ProductCollectionFactory $productCollectionFactory
     * @param ProductAction $productAction
     * @param \Magento\Catalog\Api\ProductRepositoryInterface $productRepository
     * @param \Magento\Framework\App\State $state
     * @throws \Magento\Framework\Exception\LocalizedException
     */
    public function __construct(
        ObjectManagerInterface $manager,
        EavSetupFactory $eavSetupFactory,
        AttributeSet $attributeSet,
        WebsiteRepository $websiteRepository,
        WebsiteCollectionFactory $websiteCollectionFactory,
        ProductCollectionFactory $productCollectionFactory,
        ProductAction $productAction,
        \Magento\Catalog\Api\ProductRepositoryInterface $productRepository,
        \Magento\Framework\App\State $state
    ) {
        $this->objectManager = $manager;
        $this->eavSetupFactory = $eavSetupFactory;
        $this->attributeSet = $attributeSet;
        $this->websiteRepository = $websiteRepository;
        $this->websiteCollectionFactory = $websiteCollectionFactory;
        $this->productCollectionFactory = $productCollectionFactory;
        $this->productAction = $productAction;
        $this->logger = $this->objectManager->get('Psr\Log\LoggerInterface');
        $this->productRepository = $productRepository;
        $this->state = $state;
        $state->setAreaCode('admin');
        
    }

    /**
     * @param ModuleDataSetupInterface $setup
     * @param ModuleContextInterface $context
     */
    public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
    {
        $setup->startSetup();
        $eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);
        $groupName = 'PADI';
        $entityTypeId = $eavSetup->getEntityTypeId('catalog_product');
        $defaultSetId = $eavSetup->getDefaultAttributeSetId($entityTypeId);
        $data = [
            'attribute_set_name' => ProductType::E_LEARNING,
            'entity_type_id' => $entityTypeId,
            'sort_order' => 0
        ];
        $eLearningSet = $eavSetup->getAttributeSet($entityTypeId, $data['attribute_set_name'], 'attribute_set_name');
        if (!$eLearningSet) {
            $eLearningSet = $this->objectManager->create(AttributeSet::class);
            $eLearningSet->setData($data);
            $eLearningSet->validate();
            $eLearningSet->save();
            $eLearningSet->initFromSkeleton($defaultSetId);
            $eLearningSet->save();
        }
        $eLearningSetId = $eavSetup->getAttributeSetId($entityTypeId, $eLearningSet);

        if (version_compare($context->getVersion(), '0.0.3') < 0) {
            /** @var \Magento\Eav\Setup\EavSetup $eavSetup */
            $eavSetup->addAttribute(
                \Magento\Catalog\Model\Product::ENTITY,
                'label_highlight',
                [
                    'group' => $groupName,
                    'type' => 'int',
                    'label' => 'Label Highlight',
                    'input' => 'select',
                    'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE,
                    'source' => \Magento\Eav\Model\Entity\Attribute\Source\Table::class,
                    'visible' => true,
                    'required' => false,
                    'user_defined' => true,
                    'searchable' => true,
                    'filterable' => true,
                    'comparable' => false,
                    'visible_on_front' => true,
                    'used_in_product_listing' => true,
                    'unique' => false,
                    'option' => array(
                        'values' => array(
                            0 => 'Featured'
                        ),
                    ),
                    'apply_to' => '',
                ]
            );
        }

        if (version_compare($context->getVersion(), '0.0.4') < 0) {
            $eavSetup->addAttributeGroup($entityTypeId, $eLearningSetId, $groupName);
            if(!$eavSetup->getAttributeId($entityTypeId, 'minimum_age'))
            {
                $eavSetup->addAttribute(
                    \Magento\Catalog\Model\Product::ENTITY,
                    'minimum_age',
                    [
                        'type' => 'int',
                        'label' => 'Minimum Required Age',
                        'input' => 'select',
                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE,
                        'source' => \Magento\Eav\Model\Entity\Attribute\Source\Table::class,
                        'visible' => true,
                        'required' => false,
                        'user_defined' => true,
                        'searchable' => true,
                        'filterable' => true,
                        'comparable' => false,
                        'visible_on_front' => true,
                        'used_in_product_listing' => true,
                        'unique' => false,
                        'option' => [
                            'values' => range(1, 20)
                        ],
                        'apply_to' => '',
                    ]
                );
                $eavSetup->addAttributeToSet(
                    $entityTypeId,
                    $eLearningSetId,
                    $groupName,
                    $eavSetup->getAttributeId($entityTypeId, 'minimum_age')
                );
            }
            if(!$eavSetup->getAttributeId($entityTypeId, 'age_requirement'))
            {
                $eavSetup->addAttribute(
                    \Magento\Catalog\Model\Product::ENTITY,
                    'age_requirement',
                    [
                        'type' => 'int',
                        'label' => 'Age Requirement',
                        'input' => 'select',
                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE,
                        'source' => \Magento\Eav\Model\Entity\Attribute\Source\Table::class,
                        'visible' => true,
                        'required' => false,
                        'user_defined' => true,
                        'searchable' => true,
                        'filterable' => true,
                        'comparable' => false,
                        'visible_on_front' => true,
                        'used_in_product_listing' => true,
                        'unique' => false,
                        'option' => [
                            'values' => ['Under 18 years of age']
                        ],
                        'apply_to' => '',
                    ]
                );
                $eavSetup->addAttributeToSet(
                    $entityTypeId,
                    $eLearningSetId,
                    $groupName,
                    $eavSetup->getAttributeId($entityTypeId, 'age_requirement')
                );
            }
        }

        if (version_compare($context->getVersion(), '0.0.5') < 0) {
            if(!$eavSetup->getAttributeId($entityTypeId, 'is_recurring'))
            {
                $eavSetup->addAttribute(
                    \Magento\Catalog\Model\Product::ENTITY,
                    'is_recurring',
                    [
                        'group' => $groupName,
                        'type' => 'int',
                        'label' => 'Is Recurring',
                        'input' => 'select',
                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE,
                        'source' => \Magento\Eav\Model\Entity\Attribute\Source\Boolean::class,
                        'visible' => true,
                        'required' => false,
                        'user_defined' => true,
                        'searchable' => true,
                        'filterable' => true,
                        'comparable' => false,
                        'visible_on_front' => true,
                        'used_in_product_listing' => true,
                        'unique' => false,
                        'default' => 0,
                        'apply_to' => '',
                    ]
                );
            }
        }
        if (version_compare($context->getVersion(), '0.0.6') < 0) {
            if(!$eavSetup->getAttributeId($entityTypeId, 'club_discount_elegible'))
            {
                $eavSetup->addAttribute(
                    \Magento\Catalog\Model\Product::ENTITY,
                    'club_discount_elegible',
                    [
                        'group' => $groupName,
                        'type' => 'int',
                        'label' => 'Club Discount Eligible',
                        'input' => 'boolean',
                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE,
                        'source' => \Magento\Eav\Model\Entity\Attribute\Source\Boolean::class,
                        'visible' => true,
                        'required' => false,
                        'user_defined' => true,
                        'searchable' => true,
                        'filterable' => true,
                        'comparable' => false,
                        'visible_on_front' => true,
                        'used_in_product_listing' => true,
                        'unique' => false,
                        'default' => 0,
                        'apply_to' => '',
                    ]
                );
            }
        }

        if (version_compare($context->getVersion(), '0.0.6') < 0) {
          if(!$eavSetup->getAttributeId($entityTypeId, 'club_discount_eligible'))
          {
              $eavSetup->addAttribute(
                  \Magento\Catalog\Model\Product::ENTITY,
                  'club_discount_eligible',
                  [
                      'group' => $groupName,
                      'type' => 'int',
                      'label' => 'Club Discount Eligible',
                      'input' => 'boolean',
                      'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE,
                      'source' => \Magento\Eav\Model\Entity\Attribute\Source\Boolean::class,
                      'visible' => true,
                      'required' => false,
                      'user_defined' => true,
                      'searchable' => true,
                      'filterable' => true,
                      'comparable' => false,
                      'visible_on_front' => true,
                      'used_in_product_listing' => true,
                      'unique' => false,
                      'default' => 0,
                      'apply_to' => '' ,
                    ]
                );
            }
        }

        if (version_compare($context->getVersion(), '0.0.7') < 0) {
            $entityTypeId = $eavSetup->getEntityTypeId('catalog_product');
            $defaultSetId = $eavSetup->getDefaultAttributeSetId($entityTypeId);
            $data = [
                'attribute_set_name' => ProductType::E_LEARNING,
                'entity_type_id' => $entityTypeId,
                'sort_order' => 0
            ];
            $eLearningSet = $eavSetup->getAttributeSet($entityTypeId, $data['attribute_set_name'], 'attribute_set_name');
            if (!$eLearningSet) {
                $eLearningSet = $this->objectManager->create(AttributeSet::class);
                $eLearningSet->setData($data);
                $eLearningSet->validate();
                $eLearningSet->save();
                $eLearningSet->initFromSkeleton($defaultSetId);
                $eLearningSet->save();
            }
            $data = [
                'attribute_set_name' => ProductType::TOUCH,
                'entity_type_id' => $entityTypeId,
                'sort_order' => 0
            ];
            $touchSet = $eavSetup->getAttributeSet($entityTypeId, $data['attribute_set_name'], 'attribute_set_name');
            if (!$touchSet) {
                $touchSet = $this->objectManager->create(AttributeSet::class);
                $touchSet->setData($data);
                $touchSet->validate();
                $touchSet->save();
                $touchSet->initFromSkeleton($defaultSetId);
                $touchSet->save();
            }
            $data = [
                'attribute_set_name' => 'Gear',
                'entity_type_id' => $entityTypeId,
                'sort_order' => 0
            ];
            $gearSet = $eavSetup->getAttributeSet($entityTypeId, $data['attribute_set_name'], 'attribute_set_name');
            if (!$gearSet) {
                $gearSet = $this->objectManager->create(AttributeSet::class);
                $gearSet->setData($data);
                $gearSet->validate();
                $gearSet->save();
                $gearSet->initFromSkeleton($defaultSetId);
                $gearSet->save();
            }
        }
        if (version_compare($context->getVersion(), '0.0.8') < 0) {
            /** @var ProductCollection $productCollection */
            $productCollection = $this->productCollectionFactory->create();
            $productIds = $productCollection->getAllIds();
            /** @var WebsiteCollection $websiteCollection */
            $websiteCollection = $this->websiteCollectionFactory->create();
            $websiteIds = $websiteCollection->getAllIds();
            $this->productAction->updateWebsites($productIds, $websiteIds, 'add');
        }
        if (version_compare($context->getVersion(), '0.0.9') < 0) {
            if(!$eavSetup->getAttributeId($entityTypeId, 'product_code'))
            {
                $eavSetup->addAttribute(
                    \Magento\Catalog\Model\Product::ENTITY,
                    'product_code',
                    [
                        'group' => $groupName,
                        'type' => 'text',
                        'label' => 'Product Code',
                        'input' => 'text',
                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE,
                        'visible' => true,
                        'required' => false,
                        'user_defined' => true,
                        'searchable' => true,
                        'filterable' => true,
                        'comparable' => false,
                        'visible_on_front' => true,
                        'used_in_product_listing' => true,
                        'unique' => false,
                        'default' => '',
                        'apply_to' => '',
                    ]
                );
            }
        }

        if (version_compare($context->getVersion(), '0.0.10') < 0) {
            $entityTypeId = $eavSetup->getEntityTypeId('catalog_product');
            $defaultSetId = $eavSetup->getDefaultAttributeSetId($entityTypeId);
            $data = [
                'attribute_set_name' => ProductType::MY_PADI_CLUB,
                'entity_type_id' => $entityTypeId,
                'sort_order' => 0
            ];
            $myPadiClubSet = $eavSetup->getAttributeSet($entityTypeId, $data['attribute_set_name'], 'attribute_set_name');
            if (!$myPadiClubSet) {
                $myPadiClubSet = $this->objectManager->create(AttributeSet::class);
                $myPadiClubSet->setData($data);
                $myPadiClubSet->validate();
                $myPadiClubSet->save();
                $myPadiClubSet->initFromSkeleton($defaultSetId);
                $myPadiClubSet->save();
            }

            $data = [
                'attribute_set_name' => ProductType::MY_PADI_CLUB_DISCOUNT,
                'entity_type_id' => $entityTypeId,
                'sort_order' => 0
            ];
            $myPadiClubDiscountSet = $eavSetup->getAttributeSet($entityTypeId, $data['attribute_set_name'], 'attribute_set_name');
            if (!$myPadiClubDiscountSet) {
                $myPadiClubDiscountSet = $this->objectManager->create(AttributeSet::class);
                $myPadiClubDiscountSet->setData($data);
                $myPadiClubDiscountSet->validate();
                $myPadiClubDiscountSet->save();
                $myPadiClubDiscountSet->initFromSkeleton($defaultSetId);
                $myPadiClubDiscountSet->save();
            }

            $data = [
                'attribute_set_name' => ProductType::DONATION,
                'entity_type_id' => $entityTypeId,
                'sort_order' => 0
            ];
            $donationSet = $eavSetup->getAttributeSet($entityTypeId, $data['attribute_set_name'], 'attribute_set_name');
            if (!$donationSet) {
                $donationSet = $this->objectManager->create(AttributeSet::class);
                $donationSet->setData($data);
                $donationSet->validate();
                $donationSet->save();
                $donationSet->initFromSkeleton($defaultSetId);
                $donationSet->save();
            }

            $data = [
                'attribute_set_name' => ProductType::TOUCH,
                'entity_type_id' => $entityTypeId,
                'sort_order' => 0
            ];
            $touchSet = $eavSetup->getAttributeSet($entityTypeId, $data['attribute_set_name'], 'attribute_set_name');
            if (!$touchSet) {
                $touchSet = $this->objectManager->create(AttributeSet::class);
                $touchSet->setData($data);
                $touchSet->validate();
                $touchSet->save();
                $touchSet->initFromSkeleton($defaultSetId);
                $touchSet->save();
            }
        }

        if (version_compare($context->getVersion(), '0.0.11') < 0) {
            $groupName = 'Content';
            /** @var \Magento\Eav\Setup\EavSetup $eavSetup */
            $eavSetup->addAttribute(
                \Magento\Catalog\Model\Product::ENTITY,
                'prerequisites_label',
                [
                    'type' => 'text',
                    'label' => 'Prerequisites',
                    'input' => 'text',
                    'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                    'source' => \Magento\Eav\Model\Entity\Attribute\Source\Table::class,
                    'visible' => true,
                    'required' => false,
                    'user_defined' => true,
                    'searchable' => true,
                    'filterable' => true,
                    'comparable' => false,
                    'visible_on_front' => true,
                    'used_in_product_listing' => true,
                    'unique' => false,
                    'apply_to' => '',
                    'sort_order' => 100,
                    'default' => 'Prerequisites'
                ]
            );
            $eavSetup->addAttributeToSet(
                $entityTypeId,
                $eLearningSetId,
                $groupName,
                $eavSetup->getAttributeId($entityTypeId, 'prerequisites_label')
            );
            $eavSetup->addAttribute(
                \Magento\Catalog\Model\Product::ENTITY,
                'prerequisites_content',
                [
                    'type' => 'text',
                    'label' => 'Prerequisites - Description',
                    'input' => 'textarea',
                    'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                    'source' => \Magento\Eav\Model\Entity\Attribute\Source\Table::class,
                    'visible' => true,
                    'required' => false,
                    'user_defined' => true,
                    'searchable' => true,
                    'filterable' => true,
                    'comparable' => false,
                    'visible_on_front' => true,
                    'used_in_product_listing' => true,
                    'unique' => false,
                    'apply_to' => '',
                    'sort_order' => 103,
                ]
            );
            $eavSetup->addAttributeToSet(
                $entityTypeId,
                $eLearningSetId,
                $groupName,
                $eavSetup->getAttributeId($entityTypeId, 'prerequisites_content')
            );

            $eavSetup->addAttribute(
                \Magento\Catalog\Model\Product::ENTITY,
                'average_time_label',
                [
                    'type' => 'text',
                    'label' => 'Average Time',
                    'input' => 'text',
                    'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                    'source' => \Magento\Eav\Model\Entity\Attribute\Source\Table::class,
                    'visible' => true,
                    'required' => false,
                    'user_defined' => true,
                    'searchable' => true,
                    'filterable' => true,
                    'comparable' => false,
                    'visible_on_front' => true,
                    'used_in_product_listing' => true,
                    'unique' => false,
                    'apply_to' => '',
                    'default' => 'Average time commitment',
                    'sort_order' => 105,
                ]
            );
            $eavSetup->addAttributeToSet(
                $entityTypeId,
                $eLearningSetId,
                $groupName,
                $eavSetup->getAttributeId($entityTypeId, 'average_time_label')
            );

            $eavSetup->addAttribute(
                \Magento\Catalog\Model\Product::ENTITY,
                'average_time_content',
                [
                    'type' => 'text',
                    'label' => 'Average Time - Description',
                    'input' => 'text',
                    'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                    'source' => \Magento\Eav\Model\Entity\Attribute\Source\Table::class,
                    'visible' => true,
                    'required' => false,
                    'user_defined' => true,
                    'searchable' => true,
                    'filterable' => true,
                    'comparable' => false,
                    'visible_on_front' => true,
                    'used_in_product_listing' => true,
                    'unique' => false,
                    'sort_order' => 107,
                    'apply_to' => '',
                ]
            );
            $eavSetup->addAttributeToSet(
                $entityTypeId,
                $eLearningSetId,
                $groupName,
                $eavSetup->getAttributeId($entityTypeId, 'average_time_content')
            );

            $eavSetup->addAttribute(
                \Magento\Catalog\Model\Product::ENTITY,
                'average_time_content_2',
                [
                    'type' => 'text',
                    'label' => 'Average Time - Description',
                    'input' => 'textarea',
                    'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                    'source' => \Magento\Eav\Model\Entity\Attribute\Source\Table::class,
                    'visible' => true,
                    'required' => false,
                    'user_defined' => true,
                    'searchable' => true,
                    'filterable' => true,
                    'comparable' => false,
                    'visible_on_front' => true,
                    'used_in_product_listing' => true,
                    'unique' => false,
                    'sort_order' => 111,
                    'apply_to' => '',
                ]
            );
            $eavSetup->addAttributeToSet(
                $entityTypeId,
                $eLearningSetId,
                $groupName,
                $eavSetup->getAttributeId($entityTypeId, 'average_time_content_2')
            );


            $eavSetup->addAttribute(
                \Magento\Catalog\Model\Product::ENTITY,
                'chapters_label',
                [
                    'type' => 'text',
                    'label' => 'Chapters',
                    'input' => 'text',
                    'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                    'source' => \Magento\Eav\Model\Entity\Attribute\Source\Table::class,
                    'visible' => true,
                    'required' => false,
                    'user_defined' => true,
                    'searchable' => true,
                    'filterable' => true,
                    'comparable' => false,
                    'visible_on_front' => true,
                    'used_in_product_listing' => true,
                    'unique' => false,
                    'default' => 'Chapters',
                    'sort_order' => 113,
                    'apply_to' => '',
                ]
            );
            $eavSetup->addAttributeToSet(
                $entityTypeId,
                $eLearningSetId,
                $groupName,
                $eavSetup->getAttributeId($entityTypeId, 'chapters_label')
            );
            $eavSetup->addAttribute(
                \Magento\Catalog\Model\Product::ENTITY,
                'chapters_content',
                [
                    'type' => 'int',
                    'label' => 'Select Chapters',
                    'input' => 'select',
                    'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                    'source' => \Magento\Eav\Model\Entity\Attribute\Source\Table::class,
                    'visible' => true,
                    'required' => false,
                    'user_defined' => true,
                    'searchable' => true,
                    'filterable' => true,
                    'comparable' => false,
                    'visible_on_front' => true,
                    'used_in_product_listing' => true,
                    'unique' => false,
                    'option' => [
                        'values' => range(0, 100)
                    ],
                    'sort_order' => 115,
                    'apply_to' => '',
                ]
            );
            $eavSetup->addAttributeToSet(
                $entityTypeId,
                $eLearningSetId,
                $groupName,
                $eavSetup->getAttributeId($entityTypeId, 'chapters_content')
            );

            $eavSetup->addAttribute(
                \Magento\Catalog\Model\Product::ENTITY,
                'quizzes_label',
                [
                    'type' => 'text',
                    'label' => 'Quizzes',
                    'input' => 'text',
                    'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                    'source' => \Magento\Eav\Model\Entity\Attribute\Source\Table::class,
                    'visible' => true,
                    'required' => false,
                    'user_defined' => true,
                    'searchable' => true,
                    'filterable' => true,
                    'comparable' => false,
                    'visible_on_front' => true,
                    'used_in_product_listing' => true,
                    'unique' => false,
                    'defaul' => 'Quizzes',
                    'sort_order' => 117,
                    'apply_to' => '',
                ]
            );
            $eavSetup->addAttributeToSet(
                $entityTypeId,
                $eLearningSetId,
                $groupName,
                $eavSetup->getAttributeId($entityTypeId, 'quizzes_label')
            );
            $eavSetup->addAttribute(
                \Magento\Catalog\Model\Product::ENTITY,
                'quizzes_content',
                [
                    'type' => 'int',
                    'label' => 'Select Quizzes',
                    'input' => 'select',
                    'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                    'source' => \Magento\Eav\Model\Entity\Attribute\Source\Table::class,
                    'visible' => true,
                    'required' => false,
                    'user_defined' => true,
                    'searchable' => true,
                    'filterable' => true,
                    'comparable' => false,
                    'visible_on_front' => true,
                    'used_in_product_listing' => true,
                    'unique' => false,
                    'option' => [
                        'values' => range(0, 100)
                    ],
                    'sort_order' => 119,
                    'apply_to' => '',
                ]
            );
            $eavSetup->addAttributeToSet(
                $entityTypeId,
                $eLearningSetId,
                $groupName,
                $eavSetup->getAttributeId($entityTypeId, 'quizzes_content')
            );

            $eavSetup->addAttribute(
                \Magento\Catalog\Model\Product::ENTITY,
                'tests_label',
                [
                    'type' => 'text',
                    'label' => 'Tests',
                    'input' => 'text',
                    'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                    'source' => \Magento\Eav\Model\Entity\Attribute\Source\Table::class,
                    'visible' => true,
                    'required' => false,
                    'user_defined' => true,
                    'searchable' => true,
                    'filterable' => true,
                    'comparable' => false,
                    'visible_on_front' => true,
                    'used_in_product_listing' => true,
                    'unique' => false,
                    'default' => 'Tests',
                    'sort_order' => 121,
                    'apply_to' => '',
                ]
            );
            $eavSetup->addAttributeToSet(
                $entityTypeId,
                $eLearningSetId,
                $groupName,
                $eavSetup->getAttributeId($entityTypeId, 'tests_label')
            );
            $eavSetup->addAttribute(
                \Magento\Catalog\Model\Product::ENTITY,
                'tests_content',
                [
                    'type' => 'int',
                    'label' => 'Select Tests',
                    'input' => 'select',
                    'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                    'source' => \Magento\Eav\Model\Entity\Attribute\Source\Table::class,
                    'visible' => true,
                    'required' => false,
                    'user_defined' => true,
                    'searchable' => true,
                    'filterable' => true,
                    'comparable' => false,
                    'visible_on_front' => true,
                    'used_in_product_listing' => true,
                    'unique' => false,
                    'option' => [
                        'values' => range(0, 100)
                    ],
                    'sort_order' => 123,
                    'apply_to' => '',
                ]
            );
            $eavSetup->addAttributeToSet(
                $entityTypeId,
                $eLearningSetId,
                $groupName,
                $eavSetup->getAttributeId($entityTypeId, 'tests_content')
            );

            $eavSetup->addAttribute(
                \Magento\Catalog\Model\Product::ENTITY,
                'what_does_cover_label',
                [
                    'type' => 'text',
                    'label' => 'Cover',
                    'input' => 'text',
                    'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                    'source' => \Magento\Eav\Model\Entity\Attribute\Source\Table::class,
                    'visible' => true,
                    'required' => false,
                    'user_defined' => true,
                    'searchable' => true,
                    'filterable' => true,
                    'comparable' => false,
                    'visible_on_front' => true,
                    'used_in_product_listing' => true,
                    'unique' => false,
                    'default' => 'What does it cover?',
                    'sort_order' => 125,
                    'apply_to' => '',
                ]
            );
            $eavSetup->addAttributeToSet(
                $entityTypeId,
                $eLearningSetId,
                $groupName,
                $eavSetup->getAttributeId($entityTypeId, 'what_does_cover_label')
            );
            $eavSetup->addAttribute(
                \Magento\Catalog\Model\Product::ENTITY,
                'what_does_cover_content',
                [
                    'type' => 'text',
                    'label' => 'Cover - Description',
                    'input' => 'textarea',
                    'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                    'source' => \Magento\Eav\Model\Entity\Attribute\Source\Table::class,
                    'visible' => true,
                    'required' => false,
                    'user_defined' => true,
                    'searchable' => true,
                    'filterable' => true,
                    'comparable' => false,
                    'visible_on_front' => true,
                    'used_in_product_listing' => true,
                    'unique' => false,
                    'default' => 'What does it cover?',
                    'sort_order' => 127,
                    'apply_to' => '',
                ]
            );
            $eavSetup->addAttributeToSet(
                $entityTypeId,
                $eLearningSetId,
                $groupName,
                $eavSetup->getAttributeId($entityTypeId, 'what_does_cover_content')
            );

            $eavSetup->addAttribute(
                \Magento\Catalog\Model\Product::ENTITY,
                'how_does_work_label',
                [
                    'type' => 'text',
                    'label' => 'How Does Work',
                    'input' => 'text',
                    'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                    'source' => \Magento\Eav\Model\Entity\Attribute\Source\Table::class,
                    'visible' => true,
                    'required' => false,
                    'user_defined' => true,
                    'searchable' => true,
                    'filterable' => true,
                    'comparable' => false,
                    'visible_on_front' => true,
                    'used_in_product_listing' => true,
                    'unique' => false,
                    'default' => 'How does it work?',
                    'sort_order' => 129,
                    'apply_to' => ''
                ]
            );
            $eavSetup->addAttributeToSet(
                $entityTypeId,
                $eLearningSetId,
                $groupName,
                $eavSetup->getAttributeId($entityTypeId, 'how_does_work_label')
            );
            $eavSetup->addAttribute(
                \Magento\Catalog\Model\Product::ENTITY,
                'how_does_work_content',
                [
                    'type' => 'text',
                    'label' => 'About Work - Description',
                    'input' => 'textarea',
                    'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                    'source' => \Magento\Eav\Model\Entity\Attribute\Source\Table::class,
                    'visible' => true,
                    'required' => false,
                    'user_defined' => true,
                    'searchable' => true,
                    'filterable' => true,
                    'comparable' => false,
                    'visible_on_front' => true,
                    'used_in_product_listing' => true,
                    'unique' => false,
                    'sort_order' => 131,
                    'apply_to' => '',
                ]
            );
            $eavSetup->addAttributeToSet(
                $entityTypeId,
                $eLearningSetId,
                $groupName,
                $eavSetup->getAttributeId($entityTypeId, 'how_does_work_content')
            );

            $eavSetup->addAttribute(
                \Magento\Catalog\Model\Product::ENTITY,
                'what_else_is_label',
                [
                    'type' => 'text',
                    'label' => 'Required To Course',
                    'input' => 'text',
                    'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                    'source' => \Magento\Eav\Model\Entity\Attribute\Source\Table::class,
                    'visible' => true,
                    'required' => false,
                    'user_defined' => true,
                    'searchable' => true,
                    'filterable' => true,
                    'comparable' => false,
                    'visible_on_front' => true,
                    'used_in_product_listing' => true,
                    'unique' => false,
                    'default' => 'What else is required to complete the course',
                    'sort_order' => 133,
                    'apply_to' => '',
                ]
            );
            $eavSetup->addAttributeToSet(
                $entityTypeId,
                $eLearningSetId,
                $groupName,
                $eavSetup->getAttributeId($entityTypeId, 'what_else_is_label')
            );
            $eavSetup->addAttribute(
                \Magento\Catalog\Model\Product::ENTITY,
                'what_else_is_content',
                [
                    'type' => 'text',
                    'label' => 'About Required - Description',
                    'input' => 'textarea',
                    'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                    'source' => \Magento\Eav\Model\Entity\Attribute\Source\Table::class,
                    'visible' => true,
                    'required' => false,
                    'user_defined' => true,
                    'searchable' => true,
                    'filterable' => true,
                    'comparable' => false,
                    'visible_on_front' => true,
                    'used_in_product_listing' => true,
                    'unique' => false,
                    'sort_order' => 135,
                    'apply_to' => '',
                ]
            );
            $eavSetup->addAttributeToSet(
                $entityTypeId,
                $eLearningSetId,
                $groupName,
                $eavSetup->getAttributeId($entityTypeId, 'what_else_is_content')
            );

            $eavSetup->addAttribute(
                \Magento\Catalog\Model\Product::ENTITY,
                'what_does_cost_label',
                [
                    'type' => 'text',
                    'label' => 'Cost',
                    'input' => 'text',
                    'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                    'source' => \Magento\Eav\Model\Entity\Attribute\Source\Table::class,
                    'visible' => true,
                    'required' => false,
                    'user_defined' => true,
                    'searchable' => true,
                    'filterable' => true,
                    'comparable' => false,
                    'visible_on_front' => true,
                    'used_in_product_listing' => true,
                    'unique' => false,
                    'default' => 'What does it cost?',
                    'sort_order' => 137,
                    'apply_to' => '',
                ]
            );
            $eavSetup->addAttributeToSet(
                $entityTypeId,
                $eLearningSetId,
                $groupName,
                $eavSetup->getAttributeId($entityTypeId, 'what_does_cost_label')
            );
            $eavSetup->addAttribute(
                \Magento\Catalog\Model\Product::ENTITY,
                'what_does_cost_content',
                [
                    'type' => 'text',
                    'label' => 'Cost - Description',
                    'input' => 'textarea',
                    'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                    'source' => \Magento\Eav\Model\Entity\Attribute\Source\Table::class,
                    'visible' => true,
                    'required' => false,
                    'user_defined' => true,
                    'searchable' => true,
                    'filterable' => true,
                    'comparable' => false,
                    'visible_on_front' => true,
                    'used_in_product_listing' => true,
                    'unique' => false,
                    'sort_order' => 139,
                    'apply_to' => '',
                ]
            );
            $eavSetup->addAttributeToSet(
                $entityTypeId,
                $eLearningSetId,
                $groupName,
                $eavSetup->getAttributeId($entityTypeId, 'what_does_cost_content')
            );

            $eavSetup->addAttribute(
                \Magento\Catalog\Model\Product::ENTITY,
                'how_long_label',
                [
                    'type' => 'text',
                    'label' => 'How Long',
                    'input' => 'text',
                    'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                    'source' => \Magento\Eav\Model\Entity\Attribute\Source\Table::class,
                    'visible' => true,
                    'required' => false,
                    'user_defined' => true,
                    'searchable' => true,
                    'filterable' => true,
                    'comparable' => false,
                    'visible_on_front' => true,
                    'used_in_product_listing' => true,
                    'unique' => false,
                    'default' => 'How long do you have to complete the eLearning course?',
                    'sort_order' => 141,
                    'apply_to' => ''
                ]
            );
            $eavSetup->addAttributeToSet(
                $entityTypeId,
                $eLearningSetId,
                $groupName,
                $eavSetup->getAttributeId($entityTypeId, 'how_long_label')
            );
            $eavSetup->addAttribute(
                \Magento\Catalog\Model\Product::ENTITY,
                'how_long_content',
                [
                    'type' => 'text',
                    'label' => 'How Long - Description',
                    'input' => 'text',
                    'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                    'source' => \Magento\Eav\Model\Entity\Attribute\Source\Table::class,
                    'visible' => true,
                    'required' => false,
                    'user_defined' => true,
                    'searchable' => true,
                    'filterable' => true,
                    'comparable' => false,
                    'visible_on_front' => true,
                    'used_in_product_listing' => true,
                    'unique' => false,
                    'sort_order' => 143,
                    'apply_to' => '',
                ]
            );
            $eavSetup->addAttributeToSet(
                $entityTypeId,
                $eLearningSetId,
                $groupName,
                $eavSetup->getAttributeId($entityTypeId, 'how_long_content')
            );

            $eavSetup->addAttribute(
                \Magento\Catalog\Model\Product::ENTITY,
                'how_do_you_document_label',
                [
                    'type' => 'text',
                    'label' => 'Document',
                    'input' => 'text',
                    'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                    'source' => \Magento\Eav\Model\Entity\Attribute\Source\Table::class,
                    'visible' => true,
                    'required' => false,
                    'user_defined' => true,
                    'searchable' => true,
                    'filterable' => true,
                    'comparable' => false,
                    'visible_on_front' => true,
                    'used_in_product_listing' => true,
                    'unique' => false,
                    'default' => 'How do you document that you have completed the eLearning segment?',
                    'sort_order' => 145,
                    'apply_to' => '',
                ]
            );
            $eavSetup->addAttributeToSet(
                $entityTypeId,
                $eLearningSetId,
                $groupName,
                $eavSetup->getAttributeId($entityTypeId, 'how_do_you_document_label')
            );
            $eavSetup->addAttribute(
                \Magento\Catalog\Model\Product::ENTITY,
                'how_do_you_document_content',
                [
                    'type' => 'text',
                    'label' => 'Document - Description',
                    'input' => 'textarea',
                    'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                    'source' => \Magento\Eav\Model\Entity\Attribute\Source\Table::class,
                    'visible' => true,
                    'required' => false,
                    'user_defined' => true,
                    'searchable' => true,
                    'filterable' => true,
                    'comparable' => false,
                    'visible_on_front' => true,
                    'used_in_product_listing' => true,
                    'unique' => false,
                    'sort_order' => 147,
                    'apply_to' => '',
                ]
            );
            $eavSetup->addAttributeToSet(
                $entityTypeId,
                $eLearningSetId,
                $groupName,
                $eavSetup->getAttributeId($entityTypeId, 'how_do_you_document_content')
            );
        }

        if (version_compare($context->getVersion(), '0.0.12') < 0) {
            /** @var EavSetup $eavSetup */
            $eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);

            /**
             * Install eav entity types to the eav/entity_type table
             */
            $eavSetup->addAttribute(
                'catalog_product',
                'top_image',
                [
                    'type' => 'varchar',
                    'label' => 'Top Header',
                    'input' => 'media_image',
                    'frontend' => 'Magento\Catalog\Model\Product\Attribute\Frontend\Image',
                    'required' => false,
                    'sort_order' => 4,
                    'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                    'used_in_product_listing' => true
                ]
            );

            $groupId = (int)$eavSetup->getAttributeGroupByCode(
                \Magento\Catalog\Model\Product::ENTITY,
                'Default',
                'image-management',
                'attribute_group_id'
            );
            $eavSetup->addAttributeToGroup(\Magento\Catalog\Model\Product::ENTITY, 'Default', $groupId, 'top_image');
        }

        if (version_compare($context->getVersion(), '0.0.13') < 0) {
            $eavSetup->updateAttribute(\Magento\Catalog\Model\Product::ENTITY, 'chapters_content', 'frontend_input', 'text');
            $eavSetup->updateAttribute(\Magento\Catalog\Model\Product::ENTITY, 'chapters_content', 'frontend_class', 'validate-number');

            $eavSetup->updateAttribute(\Magento\Catalog\Model\Product::ENTITY, 'quizzes_content', 'frontend_input', 'text');
            $eavSetup->updateAttribute(\Magento\Catalog\Model\Product::ENTITY, 'quizzes_content', 'frontend_class', 'validate-number');

            $eavSetup->updateAttribute(\Magento\Catalog\Model\Product::ENTITY, 'tests_content', 'frontend_input', 'text');
            $eavSetup->updateAttribute(\Magento\Catalog\Model\Product::ENTITY, 'tests_content', 'frontend_class', 'validate-number');
        }

        if (version_compare($context->getVersion(), '0.0.14') < 0) {

            $discountAtrributeSet   = $eavSetup->getAttributeSetId($entityTypeId,\Padi\ApiClub\Model\ProductType::MY_PADI_CLUB_DISCOUNT);
            $reActivate             = $this->productRepository->get(\Padi\ApiClub\Model\ProductType::REACTIVATE_SKU);
            $discountCode           = $this->productRepository->get($reActivate->getData('product_code'));
            $discountCode->setAttributeSetId($discountAtrributeSet);
            $this->productRepository->save($discountCode);
        }

        if (version_compare($context->getVersion(), '0.0.15') < 0) {

            $productMyPadiClub1 = $this->productRepository->get('40941-1');
            $productMyPadiClub1->setName('My PADI Club Premium Membership');

            $productMyPadiClub2 = $this->productRepository->get('40941-2');
            $productMyPadiClub2->setName('My PADI Club Premium Membership');

            $productAwareDonation = $this->productRepository->get('2102166');
            $productAwareDonation->setName('Project AWARE Donation');

            $this->productRepository->save($productMyPadiClub1);
            $this->productRepository->save($productMyPadiClub2);
            $this->productRepository->save($productAwareDonation);
        }
      
        $setup->endSetup();
    }

    protected function getObjectManager()
    {
        return $this->objectManager;
    }
}