![]() 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/ |
<?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; } }