![]() 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/old/setup/src/Magento/Setup/Fixtures/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Fixtures; use Magento\Framework\App\ResourceConnection; use Magento\Framework\DB\Adapter\AdapterInterface; /** * Website and category provider */ class WebsiteCategoryProvider { /** * @var array */ private $categoriesPerWebsite; /** * @var FixtureConfig */ private $fixtureConfig; /** * @var ResourceConnection */ private $resourceConnection; /** * @var AdapterInterface */ private $connection; /** * @var array */ private $websites; /** * @var array */ private $categories; /** * @param FixtureConfig $fixtureConfig * @param ResourceConnection $resourceConnection */ public function __construct( FixtureConfig $fixtureConfig, ResourceConnection $resourceConnection ) { $this->fixtureConfig = $fixtureConfig; $this->resourceConnection = $resourceConnection; } /** * Get websites for $productIndex product * * @param int $productIndex Index of generated product * @return array * @throws \Exception */ public function getWebsiteIds($productIndex) { if ($this->isAssignToAllWebsites()) { return $this->getAllWebsites(); } else { $categoriesPerWebsite = $this->getCategoriesAndWebsites(); if (!count($categoriesPerWebsite)) { throw new \Exception('Cannot find categories. Please, be sure that you have generated categories'); } return [$categoriesPerWebsite[$productIndex % count($categoriesPerWebsite)]['website']]; } } /** * Get product if for $productIndex product * * @param int $productIndex * @return int */ public function getCategoryId($productIndex) { if ($this->isAssignToAllWebsites()) { $categories = $this->getAllCategories(); return $categories[$productIndex % count($categories)]; } else { $categoriesPerWebsite = $this->getCategoriesAndWebsites(); return $categoriesPerWebsite[$productIndex % count($categoriesPerWebsite)]['category']; } } /** * Get categories and websites * * @return array */ private function getCategoriesAndWebsites() { if (null === $this->categoriesPerWebsite) { $select = $this->getConnection()->select() ->from( ['c' => $this->resourceConnection->getTableName('catalog_category_entity')], ['category' => 'entity_id'] )->join( ['sg' => $this->resourceConnection->getTableName('store_group')], "c.path like concat('1/', sg.root_category_id, '/%')", ['website' => 'website_id'] )->order('category ASC'); $this->categoriesPerWebsite = $this->getConnection()->fetchAll($select); } return $this->categoriesPerWebsite; } /** * Checks is assign_entities_to_all_websites flag set * * @return bool */ private function isAssignToAllWebsites() { return (bool)$this->fixtureConfig->getValue('assign_entities_to_all_websites', false); } /** * Provides all websites * * @return array */ private function getAllWebsites() { if (null === $this->websites) { $this->websites = array_unique(array_column($this->getCategoriesAndWebsites(), 'website')); } return $this->websites; } /** * Provides all categories * * @return array */ private function getAllCategories() { if (null === $this->categories) { $this->categories = array_values(array_unique(array_column($this->getCategoriesAndWebsites(), 'category'))); } return $this->categories; } /** * Provides connection * * @return AdapterInterface */ private function getConnection() { if (null === $this->connection) { $this->connection = $this->resourceConnection->getConnection(); } return $this->connection; } }