Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Base.php
Go to the documentation of this file.
1 <?php
7 
21 
26 class Base implements ActionInterface
27 {
31  const PREFIX = 'index_';
32 
36  protected $fieldsetPool;
37 
42  protected $connection;
43 
48  protected $sources;
49 
53  protected $primarySource;
54 
59  protected $handlers;
60 
64  protected $data;
65 
70  protected $columnTypesMap = [
71  'varchar' => ['type' => Table::TYPE_TEXT, 'size' => 255],
72  'mediumtext' => ['type' => Table::TYPE_TEXT, 'size' => 16777216],
73  'text' => ['type' => Table::TYPE_TEXT, 'size' => 65536],
74  ];
75 
80  protected $filterColumns;
81 
86  protected $searchColumns;
87 
91  protected $sourceFactory;
92 
96  protected $handlerPool;
97 
102 
107  protected $string;
108 
112  protected $indexStructure;
113 
118  protected $filterable = [];
119 
124  protected $searchable = [];
125 
129  protected $saveHandler;
130 
134  protected $tableAlias = 'main_table';
135 
146  public function __construct(
152  StdString $string,
154  $data = []
155  ) {
156  $this->connection = $resource->getConnection();
157  $this->fieldsetPool = $fieldsetPool;
158  $this->data = $data;
159  $this->sourceFactory = $sourceFactory;
160  $this->handlerPool = $handlerPool;
161  $this->saveHandlerFactory = $saveHandlerFactory;
162  $this->string = $string;
163  $this->indexStructure = $indexStructure;
164  }
165 
172  protected function execute(array $ids = [])
173  {
174  $this->prepareFields();
175  if (!count($ids)) {
176  $this->getSaveHandler()->cleanIndex([]);
177  }
178  $this->getSaveHandler()->deleteIndex([], new \ArrayObject($ids));
179  $this->getSaveHandler()->saveIndex([], $this->prepareDataSource($ids));
180  }
181 
187  public function executeFull()
188  {
189  $this->execute();
190  }
191 
198  public function executeList(array $ids)
199  {
200  $this->execute($ids);
201  }
202 
209  public function executeRow($id)
210  {
211  $this->execute([$id]);
212  }
213 
220  protected function prepareDataSource(array $ids = [])
221  {
222  return !count($ids)
223  ? $this->createResultCollection()
224  : $this->createResultCollection()->addFieldToFilter($this->getPrimaryResource()->getIdFieldName(), $ids);
225  }
226 
232  protected function getTableName()
233  {
234  return self::PREFIX . $this->getPrimaryResource()->getMainTable();
235  }
236 
242  protected function getSaveHandler()
243  {
244  if ($this->saveHandler === null) {
245  $this->saveHandler = $this->saveHandlerFactory->create(
246  $this->data['saveHandler'],
247  [
248  'indexStructure' => $this->indexStructure,
249  'data' => $this->data,
250  ]
251  );
252  }
253  return $this->saveHandler;
254  }
255 
261  protected function getPrimaryResource()
262  {
263  return $this->getPrimaryFieldset()['source'];
264  }
265 
271  protected function getPrimaryFieldset()
272  {
273  return $this->data['fieldsets'][0];
274  }
275 
281  protected function createResultCollection()
282  {
283  $select = $this->getPrimaryResource()->getSelect();
284  $select->reset(\Magento\Framework\DB\Select::COLUMNS);
285  $select->columns($this->getPrimaryResource()->getIdFieldName());
286  foreach ($this->data['fieldsets'] as $fieldset) {
287  if (isset($fieldset['references'])) {
288  foreach ($fieldset['references'] as $reference) {
289  $source = $fieldset['source'];
291  $currentEntityName = $source->getMainTable();
292  $alias = $this->getPrimaryFieldset()['name'] == $reference['fieldset']
293  ? $this->tableAlias
294  : $reference['fieldset'];
295  $select->joinLeft(
296  [$fieldset['name'] => $currentEntityName],
297  new \Zend_Db_Expr(
298  $fieldset['name'] . '.' . $reference['from'] . '=' . $alias . '.' . $reference['to']
299  ),
300  null
301  );
302  }
303  }
304  foreach ($fieldset['fields'] as $field) {
305  $handler = $field['handler'];
307  $handler->prepareSql(
308  $this->getPrimaryResource(),
309  $this->getPrimaryFieldset()['name'] == $fieldset['name'] ? $this->tableAlias : $fieldset['name'],
310  $field
311  );
312  }
313  }
314 
315  return $this->getPrimaryResource();
316  }
317 
323  protected function prepareFields()
324  {
325  foreach ($this->data['fieldsets'] as $fieldsetName => $fieldset) {
326  $this->data['fieldsets'][$fieldsetName]['source'] = $this->sourceFactory->create($fieldset['source']);
327  if (isset($fieldset['provider'])) {
328  $fieldsetObject = $this->fieldsetPool->get($fieldset['provider']);
329  $this->data['fieldsets'][$fieldsetName] =
330  $fieldsetObject->addDynamicData($this->data['fieldsets'][$fieldsetName]);
331  }
332  foreach ($this->data['fieldsets'][$fieldsetName]['fields'] as $fieldName => $field) {
333  $this->data['fieldsets'][$fieldsetName]['fields'][$fieldName]['origin'] =
334  $this->data['fieldsets'][$fieldsetName]['fields'][$fieldName]['origin']
335  ?: $this->data['fieldsets'][$fieldsetName]['fields'][$fieldName]['name'];
336  if ($fieldsetName != 0) {
337  $this->data['fieldsets'][$fieldsetName]['fields'][$fieldName]['name'] =
338  $this->data['fieldsets'][$fieldsetName]['name'] . '_'
339  . $this->data['fieldsets'][$fieldsetName]['fields'][$fieldName]['name'];
340  }
341  $this->saveFieldByType($field);
342  $this->data['fieldsets'][$fieldsetName]['fields'][$fieldName]['handler'] =
343  $this->handlerPool->get($field['handler']);
344  $this->data['fieldsets'][$fieldsetName]['fields'][$fieldName]['dataType'] =
345  isset($field['dataType']) ? $field['dataType'] : 'varchar';
346  }
347  }
348  }
349 
358  protected function saveFieldByType($field)
359  {
360  switch ($field['type']) {
361  case 'filterable':
362  $this->filterable[] = $field;
363  break;
364  case 'searchable':
365  $this->searchable[] = $field;
366  break;
367  }
368  }
369 }
$id
Definition: fieldset.phtml:14
$source
Definition: source.php:23
$resource
Definition: bulk.php:12
const COLUMNS
Definition: Select.php:48
if(!trim($html)) $alias
Definition: details.phtml:20
__construct(AppResource $resource, SourceFactory $sourceFactory, HandlerPool $handlerPool, SaveHandlerFactory $saveHandlerFactory, FieldsetPool $fieldsetPool, StdString $string, IndexStructureInterface $indexStructure, $data=[])
Definition: Base.php:146
catch(\Exception $e) $handler
Definition: index.php:30