<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Store\Setup; use Magento\Framework\Setup\InstallSchemaInterface; use Magento\Framework\Setup\ModuleContextInterface; use Magento\Framework\Setup\SchemaSetupInterface; use Magento\Framework\DB\Ddl\Table; use Magento\Catalog\Helper\DefaultCategory; /** * @codeCoverageIgnore */ class InstallSchema implements InstallSchemaInterface { /** * @var DefaultCategory */ private $defaultCategory; /** * @deprecated * @return DefaultCategory */ private function getDefaultCategory() { if ($this->defaultCategory === null) { $this->defaultCategory = \Magento\Framework\App\ObjectManager::getInstance() ->get(DefaultCategory::class); } return $this->defaultCategory; } /** * {@inheritdoc} * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function install(SchemaSetupInterface $setup, ModuleContextInterface $context) { $installer = $setup; $installer->startSetup(); $connection = $installer->getConnection(); /** * Create table 'store_website' */ $table = $connection->newTable( $installer->getTable('store_website') )->addColumn( 'website_id', Table::TYPE_SMALLINT, null, ['identity' => true, 'unsigned' => true, 'nullable' => false, 'primary' => true], 'Website Id' )->addColumn( 'code', Table::TYPE_TEXT, 32, [], 'Code' )->addColumn( 'name', Table::TYPE_TEXT, 64, [], 'Website Name' )->addColumn( 'sort_order', Table::TYPE_SMALLINT, null, ['unsigned' => true, 'nullable' => false, 'default' => '0'], 'Sort Order' )->addColumn( 'default_group_id', Table::TYPE_SMALLINT, null, ['unsigned' => true, 'nullable' => false, 'default' => '0'], 'Default Group Id' )->addColumn( 'is_default', Table::TYPE_SMALLINT, null, ['unsigned' => true, 'default' => '0'], 'Defines Is Website Default' )->addIndex( $installer->getIdxName( 'store_website', ['code'], \Magento\Framework\DB\Adapter\AdapterInterface::INDEX_TYPE_UNIQUE ), ['code'], ['type' => \Magento\Framework\DB\Adapter\AdapterInterface::INDEX_TYPE_UNIQUE] )->addIndex( $installer->getIdxName('store_website', ['sort_order']), ['sort_order'] )->addIndex( $installer->getIdxName('store_website', ['default_group_id']), ['default_group_id'] )->setComment( 'Websites' ); $connection->createTable($table); /** * Create table 'store_group' */ $table = $connection->newTable( $installer->getTable('store_group') )->addColumn( 'group_id', Table::TYPE_SMALLINT, null, ['identity' => true, 'unsigned' => true, 'nullable' => false, 'primary' => true], 'Group Id' )->addColumn( 'website_id', Table::TYPE_SMALLINT, null, ['unsigned' => true, 'nullable' => false, 'default' => '0'], 'Website Id' )->addColumn( 'name', Table::TYPE_TEXT, 255, ['nullable' => false], 'Store Group Name' )->addColumn( 'root_category_id', Table::TYPE_INTEGER, null, ['unsigned' => true, 'nullable' => false, 'default' => '0'], 'Root Category Id' )->addColumn( 'default_store_id', Table::TYPE_SMALLINT, null, ['unsigned' => true, 'nullable' => false, 'default' => '0'], 'Default Store Id' )->addIndex( $installer->getIdxName('store_group', ['website_id']), ['website_id'] )->addIndex( $installer->getIdxName('store_group', ['default_store_id']), ['default_store_id'] )->addForeignKey( $installer->getFkName('store_group', 'website_id', 'store_website', 'website_id'), 'website_id', $installer->getTable('store_website'), 'website_id', Table::ACTION_CASCADE )->setComment( 'Store Groups' ); $connection->createTable($table); /** * Create table 'store' */ $table = $connection->newTable( $installer->getTable('store') )->addColumn( 'store_id', Table::TYPE_SMALLINT, null, ['identity' => true, 'unsigned' => true, 'nullable' => false, 'primary' => true], 'Store Id' )->addColumn( 'code', Table::TYPE_TEXT, 32, [], 'Code' )->addColumn( 'website_id', Table::TYPE_SMALLINT, null, ['unsigned' => true, 'nullable' => false, 'default' => '0'], 'Website Id' )->addColumn( 'group_id', Table::TYPE_SMALLINT, null, ['unsigned' => true, 'nullable' => false, 'default' => '0'], 'Group Id' )->addColumn( 'name', Table::TYPE_TEXT, 255, ['nullable' => false], 'Store Name' )->addColumn( 'sort_order', Table::TYPE_SMALLINT, null, ['unsigned' => true, 'nullable' => false, 'default' => '0'], 'Store Sort Order' )->addColumn( 'is_active', Table::TYPE_SMALLINT, null, ['unsigned' => true, 'nullable' => false, 'default' => '0'], 'Store Activity' )->addIndex( $installer->getIdxName( 'store', ['code'], \Magento\Framework\DB\Adapter\AdapterInterface::INDEX_TYPE_UNIQUE ), ['code'], ['type' => \Magento\Framework\DB\Adapter\AdapterInterface::INDEX_TYPE_UNIQUE] )->addIndex( $installer->getIdxName('store', ['website_id']), ['website_id'] )->addIndex( $installer->getIdxName('store', ['is_active', 'sort_order']), ['is_active', 'sort_order'] )->addIndex( $installer->getIdxName('store', ['group_id']), ['group_id'] )->addForeignKey( $installer->getFkName('store', 'group_id', 'store_group', 'group_id'), 'group_id', $installer->getTable('store_group'), 'group_id', Table::ACTION_CASCADE )->addForeignKey( $installer->getFkName('store', 'website_id', 'store_website', 'website_id'), 'website_id', $installer->getTable('store_website'), 'website_id', Table::ACTION_CASCADE )->setComment( 'Stores' ); $connection->createTable($table); /** * Insert websites */ $connection->insertForce( $installer->getTable('store_website'), [ 'website_id' => 0, 'code' => 'admin', 'name' => 'Admin', 'sort_order' => 0, 'default_group_id' => 0, 'is_default' => 0 ] ); $connection->insertForce( $installer->getTable('store_website'), [ 'website_id' => 1, 'code' => 'base', 'name' => 'Main Website', 'sort_order' => 0, 'default_group_id' => 1, 'is_default' => 1 ] ); /** * Insert store groups */ $connection->insertForce( $installer->getTable('store_group'), [ 'group_id' => 0, 'website_id' => 0, 'name' => 'Default', 'root_category_id' => 0, 'default_store_id' => 0 ] ); $connection->insertForce( $installer->getTable('store_group'), [ 'group_id' => 1, 'website_id' => 1, 'name' => 'Main Website Store', 'root_category_id' => $this->getDefaultCategory()->getId(), 'default_store_id' => 1 ] ); /** * Insert stores */ $connection->insertForce( $installer->getTable('store'), [ 'store_id' => 0, 'code' => 'admin', 'website_id' => 0, 'group_id' => 0, 'name' => 'Admin', 'sort_order' => 0, 'is_active' => 1 ] ); $connection->insertForce( $installer->getTable('store'), [ 'store_id' => 1, 'code' => 'default', 'website_id' => 1, 'group_id' => 1, 'name' => 'Default Store View', 'sort_order' => 0, 'is_active' => 1 ] ); $installer->endSetup(); } }