Model/ResourceModel/Pdfgenerator.php
<?php
/**
* Copyright © EAdesign by Eco Active S.R.L.,All rights reserved.
* See LICENSE for license details.
*/
namespace Eadesigndev\Pdfgenerator\Model\ResourceModel;
use Magento\Store\Model\StoreManagerInterface;
use Magento\Framework\Model\AbstractModel;
use Magento\Framework\EntityManager\MetadataPool;
use Magento\Framework\Model\ResourceModel\Db\Context;
use Magento\Framework\Stdlib\DateTime;
use Magento\Framework\EntityManager\EntityManager;
use Magento\Framework\Model\ResourceModel\Db\AbstractDb;
class Pdfgenerator extends AbstractDb
{
/**
* Store manager
*
* @var StoreManagerInterface
*/
private $storeManager;
/**
* @var DateTime
*/
private $dateTime;
/**
* @var EntityManager
*/
private $entityManager;
/**
* @var MetadataPool
*/
private $metadataPool;
/**
* @param Context $context
* @param StoreManagerInterface $storeManager
* @param DateTime $dateTime
* @param EntityManager $entityManager
* @param MetadataPool $metadataPool
* @param string $connectionName
*/
public function __construct(
Context $context,
StoreManagerInterface $storeManager,
DateTime $dateTime,
EntityManager $entityManager,
MetadataPool $metadataPool,
$connectionName = null
) {
parent::__construct($context, $connectionName);
$this->storeManager = $storeManager;
$this->dateTime = $dateTime;
$this->entityManager = $entityManager;
$this->metadataPool = $metadataPool;
}
/**
* Init resource model
* @return void
*/
//@codingStandardsIgnoreLine
public function _construct()
{
$this->_init('eadesign_pdf_templates', 'template_id');
}
/**
* Perform operations after object load
*
* @param AbstractModel $object
* @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
*/
//@codingStandardsIgnoreLine
public function _afterLoad(AbstractModel $object)
{
if ($object->getId()) {
$stores = $this->lookupStoreIds($object->getId());
$object->setData('store_id', $stores);
}
return parent::_afterLoad($object);
}
/**
* Assign $template to store views
*
* @param AbstractModel | \Magento\Framework\Model\AbstractModel $object
* @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
*/
//@codingStandardsIgnoreLine
public function _afterSave(AbstractModel $object)
{
$this->saveStoreRelation($object);
return parent::_afterSave($object);
}
/**
* Get store ids to which specified item is assigned
*
* @param int $templateId
* @return array
*/
public function lookupStoreIds($templateId)
{
$adapter = $this->getConnection();
$select = $adapter->select()->from(
$this->getTable('eadesign_pdf_store'),
'store_id'
)->where(
'template_id = ?',
(int)$templateId
);
return $adapter->fetchCol($select);
}
/**
* @param AbstractModel $template
* @return $this
*/
public function saveStoreRelation(AbstractModel $template)
{
$oldStores = $this->lookupStoreIds($template->getId());
$newStores = (array)$template->getStoreId();
if (empty($newStores)) {
$newStores = (array)$template->getStoreId();
}
$table = $this->getTable('eadesign_pdf_store');
$insert = array_diff($newStores, $oldStores);
$delete = array_diff($oldStores, $newStores);
if ($delete) {
$where = [
'template_id = ?' => (int)$template->getId(),
'store_id IN (?)' => $delete
];
$this->getConnection()->delete($table, $where);
}
if ($insert) {
$data = [];
foreach ($insert as $storeId) {
$data[] = [
'template_id' => (int)$template->getId(),
'store_id' => (int)$storeId
];
}
$this->getConnection()->insertMultiple($table, $data);
}
return $this;
}
}