Spamworldpro Mini Shell
Spamworldpro


Server : Apache
System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64
User : corals ( 1002)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/corals/Ecombricks/Inventory/Framework/Model/ResourceModel/Db/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //home/corals/Ecombricks/Inventory/Framework/Model/ResourceModel/Db/SourceAdditionalTrait.php
<?php
/**
 * Copyright © eComBricks. All rights reserved.
 * See LICENSE.txt for license details.
 */
namespace Ecombricks\Inventory\Framework\Model\ResourceModel\Db;

/**
 * Resource source additional trait
 */
trait SourceAdditionalTrait
{
    
    /**
     * Get source additional data
     * 
     * @param \Magento\Framework\Model\AbstractModel|\Magento\Framework\DataObject $model
     * @return array
     */
    public function getSourceAdditionalData($model)
    {
        if (empty($this->sourceAdditionalTable) || empty($this->additionalColumns)) {
            return [];
        }
        $modelId = $model->getId();
        if (empty($modelId)) {
            return [];
        }
        $connection = $this->getConnection();
        $select = $connection->select()
            ->from($this->getTable($this->sourceAdditionalTable))
            ->where($this->getIdFieldName().' = ?', $modelId);
        $rows = $connection->fetchAll($select);
        $additionalData = [];
        if (empty($rows)) {
            return $additionalData;
        }
        foreach ($rows as $row) {
            $sourceCode = $row['source_code'];
            foreach ($this->additionalColumns as $column) {
                if (isset($row[$column])) {
                    $additionalData[$sourceCode][$column] = $row[$column];
                } else {
                    $additionalData[$sourceCode][$column] = null;
                }
            }
        }
        return $additionalData;
    }
    
    /**
     * Load source additional data
     * 
     * @param \Magento\Framework\Model\AbstractModel|\Magento\Framework\DataObject $model
     * @return $this
     */
    public function loadSourceAdditionalData($model)
    {
        if (empty($this->sourceAdditionalTable) || empty($this->additionalColumns)) {
            return $this;
        }
        $additionalData = $this->getSourceAdditionalData($model);
        if (empty($additionalData)) {
            return $this;
        }
        foreach ($additionalData as $sourceCode => $sourceValues) {
            foreach ($this->additionalColumns as $column) {
                $model->setSourceAdditionalData($sourceCode, $column, $sourceValues[$column]);
            }
        }
        return $this;
    }
    
    /**
     * Delete source additional data
     * 
     * @param \Magento\Framework\Model\AbstractModel|\Magento\Framework\DataObject $model
     * @return $this
     */
    public function deleteSourceAdditionalData($model)
    {
        if (empty($this->sourceAdditionalTable)) {
            return $this;
        }
        $connection = $this->getConnection();
        $modelId = $model->getId();
        if (empty($modelId)) {
            return $this;
        }
        $connection->delete($this->getTable($this->sourceAdditionalTable), [$this->getIdFieldName().' = ?' => $modelId]);
        return $this;
    }
    
    /**
     * Save source additional data
     * 
     * @param \Magento\Framework\Model\AbstractModel|\Magento\Framework\DataObject $model
     * @return $this
     */
    public function saveSourceAdditionalData($model)
    {
        if (empty($this->sourceAdditionalTable) || empty($this->additionalColumns)) {
            return $this;
        }
        $connection = $this->getConnection();
        $modelId = $model->getId();
        if (empty($modelId)) {
            return $this;
        }
        $oldAdditionalData = $this->getSourceAdditionalData($model);
        $additionalData = [];
        foreach ($this->additionalColumns as $column) {
            $value = $model->getData('source_'.$column);
            if (empty($value) || !is_array($value)) {
                continue;
            }
            foreach ($value as $sourceCode => $sourceValue) {
                $additionalData[$sourceCode][$column] = $sourceValue;
            }
        }
        $oldSourceCodes = array_keys($oldAdditionalData);
        $sourceCodes = array_keys($additionalData);
        $sourceCodesToDelete = array_diff($oldSourceCodes, $sourceCodes);
        $sourceCodesToInsert = array_diff($sourceCodes, $oldSourceCodes);
        $sourceCodesToUpdate = array_intersect($oldSourceCodes, $sourceCodes);
        if (!empty($sourceCodesToDelete)) {
            $connection->delete(
                $this->getTable($this->sourceAdditionalTable),
                [$this->getIdFieldName().' = ?' => $modelId, 'source_code IN (?)' => $sourceCodesToDelete]
            );
        }
        if (!empty($sourceCodesToInsert)) {
            $additionalDataToInsert = [];
            foreach ($sourceCodesToInsert as $sourceCode) {
                $sourceValues = [$this->getIdFieldName() => $modelId, 'source_code' => $sourceCode];
                foreach ($this->additionalColumns as $column) {
                    $sourceValues[$column] = isset($additionalData[$sourceCode][$column]) ? $additionalData[$sourceCode][$column] : null;
                }
                $additionalDataToInsert[] = $sourceValues;
            }
            $connection->insertMultiple($this->getTable($this->sourceAdditionalTable), $additionalDataToInsert);
        }
        if (!empty($sourceCodesToUpdate)) {
            foreach ($sourceCodesToUpdate as $sourceCode) {
                $sourceValues = [];
                foreach ($this->additionalColumns as $column) {
                    $sourceValues[$column] = isset($additionalData[$sourceCode][$column]) ? $additionalData[$sourceCode][$column] : null;
                }
                $connection->update(
                    $this->getTable($this->sourceAdditionalTable),
                    $sourceValues,
                    [
                        $this->getIdFieldName().' = ?' => $modelId,
                        'source_code = ?' => $sourceCode
                    ]
                );
            }
        }
        return $this;
    }
    
}

Spamworldpro Mini