Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/main/lib/grid/row/ |
Upload File : |
<?php namespace Bitrix\Main\Grid\Row; use Generator; /** * Assembles row values. * * The main task of this class is to form a list of `FieldAssembler'. * * Usage example: * ```php final class ProductRowAssembler extends RowAssembler { protected function prepareFieldAssemblers(): array { return [ new UserFieldAssembler([ 'CREATED_BY', 'MODIFIED_BY', ]), new StoreWithInfoFieldAssembler([ 'STORE_ID', ]), ]; } } * ``` * * @see \Bitrix\Main\Grid\Row\FieldAssembler * @see \Bitrix\Main\Grid\Row\Assembler\EmptyRowAssembler */ abstract class RowAssembler { /** * @var FieldAssembler[] */ private array $fieldAssemblers; /** * @var string[] */ private array $visibleColumnIds; /** * @param string[] $visibleColumnIds */ public function __construct(array $visibleColumnIds) { $this->visibleColumnIds = $visibleColumnIds; } /** * @return FieldAssembler[] */ abstract protected function prepareFieldAssemblers(): array; /** * @return string[] */ final protected function getVisibleColumnIds(): array { return $this->visibleColumnIds; } /** * @return FieldAssembler[] */ private function getAssemblers(): array { if (!isset($this->fieldAssemblers)) { $this->fieldAssemblers = []; foreach ($this->prepareFieldAssemblers() as $assembler) { $this->fieldAssemblers[] = $assembler; } } return $this->fieldAssemblers; } /** * @return FieldAssembler[] */ private function getFilteredAssemblers(): Generator { foreach ($this->getAssemblers() as $fieldAssembler) { $assemblerColumnsIds = $fieldAssembler->getColumnIds(); $columnsIds = array_intersect($assemblerColumnsIds, $this->getVisibleColumnIds()); if (!empty($columnsIds)) { if (count($assemblerColumnsIds) !== count($columnsIds)) { yield $fieldAssembler->clone($columnsIds); } else { yield $fieldAssembler; } } } } /** * Gets rows prepared for output. * * @param array[] $rowsList * * @return array[] */ public function prepareRows(array $rowsList): array { foreach ($this->getFilteredAssemblers() as $fieldAssembler) { $rowsList = $fieldAssembler->prepareRows($rowsList); } return $rowsList; } }