Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
SearchTermDescriptionGeneratorFactory.php
Go to the documentation of this file.
1 <?php
6 namespace Magento\Setup\Model;
7 
10 use Magento\Setup\Model\Description\DescriptionSentenceGeneratorFactory;
11 use Magento\Setup\Model\Description\DescriptionParagraphGeneratorFactory;
12 use Magento\Setup\Model\Description\DescriptionGeneratorFactory;
13 use Magento\Setup\Model\DictionaryFactory;
14 use Magento\Setup\Model\SearchTermManagerFactory;
15 
22 {
26  private $objectManager;
27 
31  private $fixtureConfig;
32 
36  private $sentenceGeneratorFactory;
37 
41  private $paragraphGeneratorFactory;
42 
46  private $descriptionGeneratorFactory;
47 
51  private $dictionaryFactory;
52 
56  private $searchTermManagerFactory;
57 
69  public function __construct(
70  ObjectManagerInterface $objectManager,
71  FixtureConfig $fixtureConfig,
72  DescriptionSentenceGeneratorFactory $descriptionSentenceGeneratorFactory = null,
73  DescriptionParagraphGeneratorFactory $descriptionParagraphGeneratorFactory = null,
74  DescriptionGeneratorFactory $descriptionGeneratorFactory = null,
75  DictionaryFactory $dictionaryFactory = null,
76  SearchTermManagerFactory $searchTermManagerFactory = null
77  ) {
78  $this->objectManager = $objectManager;
79  $this->fixtureConfig = $fixtureConfig;
80  $this->sentenceGeneratorFactory = $descriptionSentenceGeneratorFactory
81  ?: $objectManager->get(DescriptionSentenceGeneratorFactory::class);
82  $this->paragraphGeneratorFactory = $descriptionParagraphGeneratorFactory
83  ?: $objectManager->get(DescriptionParagraphGeneratorFactory::class);
84  $this->descriptionGeneratorFactory = $descriptionGeneratorFactory
85  ?: $objectManager->get(DescriptionGeneratorFactory::class);
86  $this->dictionaryFactory = $dictionaryFactory
87  ?: $objectManager->get(DictionaryFactory::class);
88  $this->searchTermManagerFactory = $searchTermManagerFactory
89  ?: $objectManager->get(SearchTermManagerFactory::class);
90  }
91 
101  public function create(
102  $descriptionConfig,
103  $searchTermsConfig,
104  $totalProductsCount,
105  $defaultDescription = ''
106  ) {
107  $this->updateSearchTermConfig($searchTermsConfig);
108  if (empty($descriptionConfig) || empty($searchTermsConfig)) {
109  return $this->objectManager->create(
110  DefaultDescriptionGenerator::class,
111  ['defaultDescription' => $defaultDescription]
112  );
113  }
114  return $this->objectManager->create(\Magento\Setup\Model\SearchTermDescriptionGenerator::class, [
115  'descriptionGenerator' => $this->buildDescriptionGenerator($descriptionConfig),
116  'searchTermManager' => $this->buildSearchTermManager($searchTermsConfig, $totalProductsCount)
117  ]);
118  }
119 
127  private function updateSearchTermConfig(&$searchTermsConfig)
128  {
129  if (null !== $searchTermsConfig) {
130  $websitesCount = (bool)$this->fixtureConfig->getValue('assign_entities_to_all_websites', false)
131  ? 1
132  : (int)$this->fixtureConfig->getValue('websites', 1);
133  array_walk(
134  $searchTermsConfig,
135  function (&$searchTerm, $key, $websitesCount) {
136  $searchTerm['count'] *= $websitesCount;
137  },
138  $websitesCount
139  );
140  }
141  }
142 
149  private function buildDescriptionGenerator(array $descriptionConfig)
150  {
151  $sentenceGenerator = $this->sentenceGeneratorFactory->create([
152  'dictionary' => $this->dictionaryFactory->create([
153  'dictionaryFilePath' => realpath(__DIR__ . '/../Fixtures/_files/dictionary.csv')
154  ]),
155  'sentenceConfig' => $descriptionConfig['paragraphs']['sentences']
156  ]);
157 
158  $paragraphGenerator = $this->paragraphGeneratorFactory->create([
159  'sentenceGenerator' => $sentenceGenerator,
160  'paragraphConfig' => $descriptionConfig['paragraphs']
161  ]);
162 
163  $descriptionGenerator = $this->descriptionGeneratorFactory->create([
164  'paragraphGenerator' => $paragraphGenerator,
165  'mixinManager' => $this->objectManager->create(\Magento\Setup\Model\Description\MixinManager::class),
166  'descriptionConfig' => $descriptionConfig
167  ]);
168 
169  return $descriptionGenerator;
170  }
171 
179  private function buildSearchTermManager(array $searchTermsConfig, $totalProductsCount)
180  {
181  return $this->searchTermManagerFactory->create(
182  [
183  'searchTerms' => $searchTermsConfig,
184  'totalProductsCount' => $totalProductsCount
185  ]
186  );
187  }
188 }
$objectManager
Definition: bootstrap.php:17
defined('TESTS_BP')||define('TESTS_BP' __DIR__
Definition: _bootstrap.php:60
__construct(ObjectManagerInterface $objectManager, FixtureConfig $fixtureConfig, DescriptionSentenceGeneratorFactory $descriptionSentenceGeneratorFactory=null, DescriptionParagraphGeneratorFactory $descriptionParagraphGeneratorFactory=null, DescriptionGeneratorFactory $descriptionGeneratorFactory=null, DictionaryFactory $dictionaryFactory=null, SearchTermManagerFactory $searchTermManagerFactory=null)
create( $descriptionConfig, $searchTermsConfig, $totalProductsCount, $defaultDescription='')