123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Quote\Setup;
- use Magento\Eav\Model\Entity\Setup\Context;
- use Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\CollectionFactory;
- use Magento\Eav\Setup\EavSetup;
- use Magento\Framework\App\CacheInterface;
- use Magento\Framework\App\Config\ScopeConfigInterface;
- use Magento\Framework\Setup\ModuleDataSetupInterface;
- /**
- * Quote module setup class
- *
- * @SuppressWarnings(PHPMD.CyclomaticComplexity)
- * @codeCoverageIgnore
- */
- class QuoteSetup extends EavSetup
- {
- /**
- * @var ScopeConfigInterface
- */
- protected $_config;
- /**
- * @var \Magento\Framework\Encryption\EncryptorInterface
- */
- protected $_encryptor;
- /**
- * @var string
- */
- private static $connectionName = 'checkout';
- /**
- * @param ModuleDataSetupInterface $setup
- * @param Context $context
- * @param CacheInterface $cache
- * @param CollectionFactory $attrGroupCollectionFactory
- * @param ScopeConfigInterface $config
- */
- public function __construct(
- ModuleDataSetupInterface $setup,
- Context $context,
- CacheInterface $cache,
- CollectionFactory $attrGroupCollectionFactory,
- ScopeConfigInterface $config
- ) {
- $this->_config = $config;
- $this->_encryptor = $context->getEncryptor();
- parent::__construct($setup, $context, $cache, $attrGroupCollectionFactory);
- }
- /**
- * List of entities converted from EAV to flat data structure
- *
- * @var $_flatEntityTables array
- */
- protected $_flatEntityTables = [
- 'quote' => 'quote',
- 'quote_item' => 'quote_item',
- 'quote_address' => 'quote_address',
- 'quote_address_item' => 'quote_address_item',
- 'quote_address_rate' => 'quote_shipping_rate',
- 'quote_payment' => 'quote_payment',
- ];
- /**
- * Check if table exist for flat entity
- *
- * @param string $table
- * @return bool
- */
- protected function _flatTableExist($table)
- {
- $tablesList = $this->getConnection()->listTables();
- return in_array(
- strtoupper($this->getTable($table)),
- array_map('strtoupper', $tablesList)
- );
- }
- /**
- * Add entity attribute. Overwritten for flat entities support
- *
- * @param int|string $entityTypeId
- * @param string $code
- * @param array $attr
- * @return $this
- */
- public function addAttribute($entityTypeId, $code, array $attr)
- {
- if (isset(
- $this->_flatEntityTables[$entityTypeId]
- ) && $this->_flatTableExist(
- $this->_flatEntityTables[$entityTypeId]
- )
- ) {
- $this->_addFlatAttribute($this->_flatEntityTables[$entityTypeId], $code, $attr);
- } else {
- parent::addAttribute($entityTypeId, $code, $attr);
- }
- return $this;
- }
- /**
- * Add attribute as separate column in the table
- *
- * @param string $table
- * @param string $attribute
- * @param array $attr
- * @return $this
- */
- protected function _addFlatAttribute($table, $attribute, $attr)
- {
- $tableInfo = $this->getConnection()
- ->describeTable($this->getTable($table));
- if (isset($tableInfo[$attribute])) {
- return $this;
- }
- $columnDefinition = $this->_getAttributeColumnDefinition($attribute, $attr);
- $this->getConnection()->addColumn(
- $this->getTable($table),
- $attribute,
- $columnDefinition
- );
- return $this;
- }
- /**
- * Retrieve definition of column for create in flat table
- *
- * @param string $code
- * @param array $data
- * @return array
- * @SuppressWarnings(PHPMD.NPathComplexity)
- */
- protected function _getAttributeColumnDefinition($code, $data)
- {
- // Convert attribute type to column info
- $data['type'] = isset($data['type']) ? $data['type'] : 'varchar';
- $type = null;
- $length = null;
- switch ($data['type']) {
- case 'timestamp':
- $type = \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP;
- break;
- case 'datetime':
- $type = \Magento\Framework\DB\Ddl\Table::TYPE_DATETIME;
- break;
- case 'decimal':
- $type = \Magento\Framework\DB\Ddl\Table::TYPE_DECIMAL;
- $length = '12,4';
- break;
- case 'int':
- $type = \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER;
- break;
- case 'text':
- $type = \Magento\Framework\DB\Ddl\Table::TYPE_TEXT;
- $length = 65536;
- break;
- case 'char':
- case 'varchar':
- $type = \Magento\Framework\DB\Ddl\Table::TYPE_TEXT;
- $length = 255;
- break;
- }
- if ($type !== null) {
- $data['type'] = $type;
- $data['length'] = $length;
- }
- $data['nullable'] = isset($data['required']) ? !$data['required'] : true;
- $data['comment'] = isset($data['comment']) ? $data['comment'] : ucwords(str_replace('_', ' ', $code));
- return $data;
- }
- /**
- * Get config model
- *
- * @return ScopeConfigInterface
- */
- public function getConfigModel()
- {
- return $this->_config;
- }
- /**
- * @return \Magento\Framework\Encryption\EncryptorInterface
- */
- public function getEncryptor()
- {
- return $this->_encryptor;
- }
- /**
- * Get quote connection
- *
- * @return \Magento\Framework\DB\Adapter\AdapterInterface
- */
- public function getConnection()
- {
- return $this->getSetup()->getConnection(self::$connectionName);
- }
- /**
- * Get table name
- *
- * @param string $table
- * @return string
- */
- public function getTable($table)
- {
- return $this->getSetup()->getTable($table, self::$connectionName);
- }
- }
|