From 6739858f0ca1ba534d68132901f91597447a8bd4 Mon Sep 17 00:00:00 2001
From: Alex Stojka <magelogger@gmail.com>
Date: Fri, 3 Oct 2025 14:12:54 +0300
Subject: [PATCH] [II-1753] - Giftcard was removed from develop branch

---
 vendor/firebear/importexport/Model/Export/Product/GiftCard/RowCustomizer.php | 205 --------------
 vendor/firebear/importexport/Model/Import/Product/Type/GiftCardPlugin.php  | 263 ------------------
 vendor/firebear/importexport/etc/di.xml                                    |  11 -
 vendor/firebear/importexport/etc/firebear_import.xml                       |   2 -
 4 files changed, 481 deletions(-)
 delete mode 100644 vendor/firebear/importexport/Model/Export/Product/GiftCard/RowCustomizer.php
 delete mode 100644 vendor/firebear/importexport/Model/Import/Product/Type/GiftCardPlugin.php

diff --git a/vendor/firebear/importexport/Model/Export/Product/GiftCard/RowCustomizer.php b/vendor/firebear/importexport/Model/Export/Product/GiftCard/RowCustomizer.php
deleted file mode 100644
index de92783a..00000000
--- a/vendor/firebear/importexport/Model/Export/Product/GiftCard/RowCustomizer.php
+++ /dev/null
@@ -1,205 +0,0 @@
-<?php
-/**
- * @copyright: Copyright © 2018 Firebear Studio. All rights reserved.
- * @author   : Firebear Studio <fbeardev@gmail.com>
- */
-namespace Firebear\ImportExport\Model\Export\Product\GiftCard;
-
-use Magento\CatalogImportExport\Model\Export\RowCustomizerInterface;
-use Magento\Catalog\Model\ResourceModel\Product\Collection as ProductCollection;
-use Magento\Catalog\Model\Product;
-use Magento\GiftCard\Model\Catalog\Product\Type\Giftcard;
-use Magento\GiftCard\Model\Giftcard as ModelGiftcard;
-
-/**
- * GiftCard row customizer
- */
-class RowCustomizer implements RowCustomizerInterface
-{
-    /**
-     * Column names
-     */
-    const GIFTCARD_TYPE_COLUMN = 'giftcard_type';
-
-    const GIFTCARD_AMOUNT_COLUMN = 'giftcard_amount';
-
-    const ALLOW_OPEN_AMOUNT_COLUMN = 'giftcard_allow_open_amount';
-
-    const ALLOW_OPEN_AMOUNT_MIN_COLUMN = 'giftcard_open_amount_min';
-
-    const ALLOW_OPEN_AMOUNT_MAX_COLUMN = 'giftcard_open_amount_max';
-
-    /**
-     * Giftcard prefix
-     */
-    const GIFTCARD_PREFIX = 'giftcard_';
-
-    /**
-     * Giftcard use config prefix
-     */
-    const USE_CONFIG_PREFIX = 'use_config_';
-
-    /**
-     * @var array
-     */
-    protected $giftcardData = [];
-
-    /**
-     * @var string[]
-     */
-    private $giftcardColumns = [
-        self::GIFTCARD_TYPE_COLUMN,
-        self::GIFTCARD_AMOUNT_COLUMN,
-        self::ALLOW_OPEN_AMOUNT_COLUMN,
-        self::ALLOW_OPEN_AMOUNT_MIN_COLUMN,
-        self::ALLOW_OPEN_AMOUNT_MAX_COLUMN
-    ];
-
-    /**
-     * Giftcard additional columns
-     *
-     * @var string[]
-     */
-    private $additionalColumns = [
-        'is_redeemable',
-        'lifetime',
-        'allow_message',
-        'email_template',
-    ];
-
-    /**
-     * Mapping for giftcard types
-     *
-     * @var array
-     */
-    protected $typeMapping = [
-        ModelGiftcard::TYPE_VIRTUAL => 'Virtual',
-        ModelGiftcard::TYPE_PHYSICAL => 'Physical',
-        ModelGiftcard::TYPE_COMBINED => 'Combined'
-    ];
-
-    /**
-     * Prepare data for export
-     *
-     * @param ProductCollection $collection
-     * @param int[] $productIds
-     * @return void
-     */
-    public function prepareData($collection, $productIds)
-    {
-        $productCollection = clone $collection;
-        $productCollection->addAttributeToFilter('entity_id', ['in' => $productIds])
-            ->addAttributeToFilter('type_id', ['eq' => Giftcard::TYPE_GIFTCARD])
-            ->addAttributeToSelect(['giftcard_type', 'allow_open_amount']);
-
-        foreach ($productCollection as $product) {
-            $id = (int)$product->getId();
-            $this->giftcardData[$id] = [
-                self::GIFTCARD_TYPE_COLUMN => $this->getTypeValue($product->getGiftcardType()),
-                self::GIFTCARD_AMOUNT_COLUMN => $this->getAmountValue($product->getGiftcardAmounts()),
-                self::ALLOW_OPEN_AMOUNT_COLUMN => $product->getAllowOpenAmount(),
-                self::ALLOW_OPEN_AMOUNT_MIN_COLUMN => $product->getOpenAmountMin(),
-                self::ALLOW_OPEN_AMOUNT_MAX_COLUMN => $product->getOpenAmountMax(),
-            ];
-            $this->prepareAdditionalData($id, $product);
-        }
-    }
-
-    /**
-     * Prepare additional product data
-     *
-     * @param int $id
-     * @param Product $product
-     * @return void
-     */
-    private function prepareAdditionalData(int $id, Product $product)
-    {
-        foreach ($this->additionalColumns as $column) {
-            $configData = self::USE_CONFIG_PREFIX . $column;
-            $this->giftcardData[$id][$configData] = $product->getData($configData);
-            $this->giftcardData[$id][self::GIFTCARD_PREFIX . $column] = $product->getData($column);
-        }
-    }
-
-    /**
-     * Retrieve card type value by code
-     *
-     * @param string $type
-     * @return string
-     */
-    protected function getTypeValue($type)
-    {
-        return isset($this->typeMapping[$type]) ? $this->typeMapping[$type] : ModelGiftcard::TYPE_COMBINED;
-    }
-
-    /**
-     * Retrieve card type value by code
-     *
-     * @param array $amounts
-     * @return array
-     */
-    public function getAmountValue($amounts)
-    {
-        $values = [];
-        foreach ($amounts ?: [] as $amount) {
-            $values[] = $amount['value'] ?? 0;
-        }
-        return implode(',', $values);
-    }
-
-    /**
-     * Set headers columns
-     *
-     * @param array $columns
-     * @return array
-     */
-    public function addHeaderColumns($columns)
-    {
-        return array_merge($columns, $this->giftcardColumns, $this->prepareAdditionalColumns());
-    }
-
-    /**
-     * Prepare additional columns names
-     *
-     * @return string[]
-     */
-    private function prepareAdditionalColumns()
-    {
-        $columns = [];
-        foreach ($this->additionalColumns as $column) {
-            $columns[] = self::USE_CONFIG_PREFIX . $column;
-            $columns[] = self::GIFTCARD_PREFIX . $column;
-        }
-        return $columns;
-    }
-
-    /**
-     * Add data for export
-     *
-     * @param array $dataRow
-     * @param int $productId
-     * @return array
-     */
-    public function addData($dataRow, $productId)
-    {
-        if (!empty($this->giftcardData[$productId])) {
-            $dataRow = array_merge($dataRow, $this->giftcardData[$productId]);
-        }
-        return $dataRow;
-    }
-
-    /**
-     * Calculate the largest links block
-     *
-     * @param array $additionalRowsCount
-     * @param int $productId
-     * @return array
-     */
-    public function getAdditionalRowsCount($additionalRowsCount, $productId)
-    {
-        if (!empty($this->giftcardData[$productId])) {
-            $additionalRowsCount = max($additionalRowsCount, count($this->giftcardData[$productId]));
-        }
-        return $additionalRowsCount;
-    }
-}
diff --git a/vendor/firebear/importexport/Model/Import/Product/Type/GiftCardPlugin.php b/vendor/firebear/importexport/Model/Import/Product/Type/GiftCardPlugin.php
deleted file mode 100644
index d5331e40..00000000
--- a/vendor/firebear/importexport/Model/Import/Product/Type/GiftCardPlugin.php
+++ /dev/null
@@ -1,263 +0,0 @@
-<?php
-/**
- * @copyright: Copyright © 2019 Firebear Studio. All rights reserved.
- * @author   : Firebear Studio <fbeardev@gmail.com>
- */
-
-namespace Firebear\ImportExport\Model\Import\Product\Type;
-
-use Exception;
-use Firebear\ImportExport\Model\Import\Product;
-use Magento\Catalog\Api\Data\ProductInterface;
-use Magento\CatalogImportExport\Model\Import\Product\StoreResolver;
-use Magento\Framework\App\CacheInterface;
-use Magento\Framework\App\ResourceConnection;
-use Magento\Framework\DB\Select;
-use Magento\Framework\EntityManager\MetadataPool;
-use Magento\Framework\Serialize\SerializerInterface;
-use Magento\GiftCardImportExport\Model\Import\Product\Type\GiftCard;
-
-/**
- * Class GiftCardPlugin
- *
- * @package Firebear\ImportExport\Model\Import\Product\Type
- */
-class GiftCardPlugin
-{
-    /**
-     * @var Product
-     */
-    protected $entityModel;
-
-    /**
-     * @var StoreResolver
-     */
-    protected $storeResolver;
-
-    /**
-     * Product metadata pool
-     *
-     * @var MetadataPool
-     */
-    protected $metadataPool;
-
-    /**
-     * @var ResourceConnection
-     */
-    protected $resource;
-
-    /**
-     * Product entity link field
-     *
-     * @var string
-     */
-    protected $productEntityLinkField;
-
-    /**
-     * Giftcard amounts attribute ID
-     *
-     * @var int
-     */
-    protected $giftcardAmountAttributeId;
-
-    /**
-     * Cache for amounts
-     *
-     * @var array
-     */
-    protected $amountsCache = [];
-
-    /**
-     * @var CacheInterface
-     */
-    protected $cache;
-
-    /**
-     * Json Serializer
-     *
-     * @var SerializerInterface
-     */
-    protected $serializer;
-
-    /**
-     * GiftCardPlugin constructor.
-     * @param Product $entityModel
-     * @param StoreResolver $storeResolver
-     * @param MetadataPool $metadataPool
-     * @param ResourceConnection $resource
-     * @param CacheInterface $cache
-     * @param SerializerInterface $serializer
-     */
-    public function __construct(
-        Product $entityModel,
-        StoreResolver $storeResolver,
-        MetadataPool $metadataPool,
-        ResourceConnection $resource,
-        CacheInterface $cache,
-        SerializerInterface $serializer
-    ) {
-        $this->entityModel = $entityModel;
-        $this->storeResolver = $storeResolver;
-        $this->metadataPool = $metadataPool;
-        $this->resource = $resource;
-        $this->cache = $cache;
-        $this->serializer = $serializer;
-    }
-
-    /**
-     * Save Giftcard data
-     *
-     * @param GiftCard $subject
-     * @param callable $proceed
-     * @return GiftCard
-     * @throws Exception
-     */
-    public function aroundSaveData(GiftCard $subject, callable $proceed)
-    {
-        $importParameters = $this->cache->load('import_parameters');
-        if (!empty($importParameters)) {
-            $importParameters = $this->serializer->unserialize($importParameters);
-            $this->entityModel->setParameters($importParameters);
-        }
-        while ($bunch = $this->entityModel->getNextBunch()) {
-            $newSku = $this->entityModel->getNewSku();
-            foreach ($bunch as $rowNum => $rowData) {
-                if (isset($newSku[strtolower($rowData[Product::COL_SKU])])) {
-                    $productData = $newSku[strtolower($rowData[Product::COL_SKU])];
-                    if ('giftcard' != $productData['type_id'] ||
-                        !$this->entityModel->isRowAllowedToImport($rowData, $rowNum)
-                    ) {
-                        continue;
-                    }
-                    $this->parseAmounts($rowData, $productData[$this->getProductEntityLinkField()], $subject);
-                    if (!empty($this->amountsCache)) {
-                        $this->insertAmounts()->clearAmountsCache();
-                    }
-                }
-            }
-        }
-
-        return $subject;
-    }
-
-    /**
-     * Parse giftcard amounts values
-     *
-     * @param array $rowData
-     * @param int $entityId
-     * @param GiftCard $subject
-     * @return $this
-     * @throws Exception
-     */
-    protected function parseAmounts($rowData, $entityId, $subject)
-    {
-        if (isset($rowData[GiftCard::GIFTCARD_AMOUNT_COLUMN])) {
-            $amounts = explode(
-                $this->entityModel->getMultipleValueSeparator(),
-                trim($rowData[GiftCard::GIFTCARD_AMOUNT_COLUMN])
-            );
-            $amountData['website_id'] = (isset($rowData['website_code']))
-                ? $this->storeResolver->getWebsiteCodeToId($rowData['website_code'])
-                : GiftCard::DEFAULT_WEBSITE_ID;
-            $amountData['attribute_id'] = $this->getGiftcardAmountsAttributeId($subject);
-            $amountData[$this->getProductEntityLinkField()] = $entityId;
-            foreach ($amounts as $amount) {
-                if (!$this->isAmountExists($amount, $amountData)) {
-                    $amountData['value'] = $amount;
-                    $this->amountsCache[] = $amountData;
-                }
-            }
-        }
-        return $this;
-    }
-
-    /**
-     * Check if amount value exists
-     *
-     * @param float $amount
-     * @param array $amountData
-     * @return bool
-     * @throws Exception
-     */
-    protected function isAmountExists($amount, $amountData)
-    {
-        foreach ($this->amountsCache as $amounts) {
-            if ($amounts['website_id'] == $amountData['website_id'] &&
-                $amounts['attribute_id'] == $amountData['attribute_id'] &&
-                $amounts['value'] == $amount &&
-                $amounts['row_id'] == $amountData[$this->getProductEntityLinkField()]
-            ) {
-                return true;
-            }
-        }
-        $amountTable = $this->resource->getTableName(GiftCard::GIFTCARD_AMOUNT_TABLE);
-        /** @var Select $select */
-        $select = $this->entityModel->getConnection()->select();
-        $select->from($amountTable, 'value_id')
-            ->where('website_id = ?', $amountData['website_id'])
-            ->where('attribute_id = ?', $amountData['attribute_id'])
-            ->where('row_id = ?', $amountData[$this->getProductEntityLinkField()])
-            ->where('value = ?', $amount);
-
-        return (bool)$this->entityModel->getConnection()->fetchOne($select);
-    }
-
-    /**
-     * Insert amounts from bunch
-     *
-     * @return $this
-     */
-    protected function insertAmounts()
-    {
-        $amountTable = $this->resource->getTableName(GiftCard::GIFTCARD_AMOUNT_TABLE);
-        $this->entityModel->getConnection()->insertOnDuplicate($amountTable, $this->amountsCache);
-
-        return $this;
-    }
-
-    /**
-     * Clear cached amount values
-     *
-     * @return $this
-     */
-    protected function clearAmountsCache()
-    {
-        $this->amountsCache = [];
-
-        return $this;
-    }
-
-    /**
-     * Get product entity link field
-     *
-     * @return string
-     * @throws Exception
-     */
-    protected function getProductEntityLinkField()
-    {
-        if (!$this->productEntityLinkField) {
-            $this->productEntityLinkField = $this->metadataPool
-                ->getMetadata(ProductInterface::class)
-                ->getLinkField();
-        }
-        return $this->productEntityLinkField;
-    }
-
-    /**
-     * Check if giftcard amounts attribute id exists
-     *
-     * @param GiftCard $subject
-     * @return int
-     */
-    protected function getGiftcardAmountsAttributeId(GiftCard $subject)
-    {
-        if (!$this->giftcardAmountAttributeId) {
-            $this->giftcardAmountAttributeId
-                = isset($subject->retrieveAttributeFromCache(GiftCard::AMOUNT_ATTRIBUTE_NAME)['id'])
-                ? $subject->retrieveAttributeFromCache(GiftCard::AMOUNT_ATTRIBUTE_NAME)['id']
-                : null;
-        }
-
-        return $this->giftcardAmountAttributeId;
-    }
-}
diff --git a/vendor/firebear/importexport/etc/di.xml b/vendor/firebear/importexport/etc/di.xml
index 03cbc9b4..0c0ead71 100755
--- a/vendor/firebear/importexport/etc/di.xml
+++ b/vendor/firebear/importexport/etc/di.xml
@@ -151,7 +151,6 @@
                 <item name="bundleProduct" xsi:type="string">Magento\BundleImportExport\Model\Export\RowCustomizer</item>
                 <item name="groupedProduct" xsi:type="string">Magento\GroupedImportExport\Model\Export\RowCustomizer</item>
                 <item name="configurableProduct" xsi:type="string">Magento\ConfigurableImportExport\Model\Export\RowCustomizer</item>
-                <item name="giftcard" xsi:type="string">Firebear\ImportExport\Model\Export\Product\GiftCard\RowCustomizer</item>
                 <item name="productVideoURL" xsi:type="string">Firebear\ImportExport\Model\Export\RowCustomizer\ProductVideo</item>
                 <item name="webkulMarketplace" xsi:type="string">Firebear\ImportExport\Model\Export\RowCustomizer\Integrations\Modules\WebkulMarketplace</item>
                 <item name="mageArrayMarketplace" xsi:type="string">Firebear\ImportExport\Model\Export\RowCustomizer\Integrations\Modules\MageArrayMarketplace</item>
@@ -164,13 +163,6 @@
     </type>
     <preference for="Magento\CatalogImportExport\Model\Export\RowCustomizer\Composite"
                 type="Firebear\ImportExport\Model\Export\RowCustomizer\Composite"/>
-    <type name="Firebear\ImportExport\Model\Export\RowCustomizer\Composite">
-        <arguments>
-            <argument name="customizers" xsi:type="array">
-                <item name="giftcard" xsi:type="string">Firebear\ImportExport\Model\Export\Product\GiftCard\RowCustomizer</item>
-            </argument>
-        </arguments>
-    </type>
     <preference for="Magento\CatalogImportExport\Model\Import\Product\Validator"
                 type="Firebear\ImportExport\Model\Import\Product\Validator"/>
     <type name="Firebear\ImportExport\Model\Import\Product\Validator">
@@ -614,9 +606,6 @@
             <argument name="repository" xsi:type="object">Firebear\ImportExport\Api\ExportJobRepositoryInterface\Proxy</argument>
         </arguments>
     </type>
-    <type name="Magento\GiftCardImportExport\Model\Import\Product\Type\GiftCard">
-        <plugin name="GiftCardPlugin" type="Firebear\ImportExport\Model\Import\Product\Type\GiftCardPlugin" />
-    </type>
     <type name="Firebear\ImportExport\Model\Import\ContentHierarchy">
         <arguments>
             <argument name="data" xsi:type="array">
diff --git a/vendor/firebear/importexport/etc/firebear_import.xml b/vendor/firebear/importexport/etc/firebear_import.xml
index ce364850..7259d2cf 100755
--- a/vendor/firebear/importexport/etc/firebear_import.xml
+++ b/vendor/firebear/importexport/etc/firebear_import.xml
@@ -66,8 +66,6 @@
                 model="Firebear\ImportExport\Model\Import\Product\Type\Downloadable"/>
     <entityType entity="catalog_product" name="grouped"
                 model="Firebear\ImportExport\Model\Import\Product\Type\Grouped"/>
-    <entityType entity="catalog_product" name="giftcard"
-                model="Magento\GiftCardImportExport\Model\Import\Product\Type\GiftCard"/>
     <relatedIndexer entity="catalog_product" name="catalog_product_price"/>
     <relatedIndexer entity="catalog_product" name="catalogsearch_fulltext"/>
     <relatedIndexer entity="catalog_product" name="catalog_product_flat"/>
--
2.43.0

