3namespace Bitrix\Iblock\Grid\Row;
5use Bitrix\Iblock\Grid\Entity\ElementSettings;
6use Bitrix\Iblock\Grid\Row\Assembler\ElementCountFieldAssembler;
7use Bitrix\Iblock\Grid\Row\Assembler\IntranetUserFieldAssembler;
8use Bitrix\Iblock\Grid\Row\Assembler\Property\ElementFieldAssembler;
9use Bitrix\Iblock\Grid\Row\Assembler\Property\FileFieldAssembler;
10use Bitrix\Iblock\Grid\Row\Assembler\Property\ListFieldAssembler;
11use Bitrix\Iblock\Grid\Row\Assembler\Property\MultipleFieldAssembler;
12use Bitrix\Iblock\Grid\Row\Assembler\Property\NumberFieldAssembler;
13use Bitrix\Iblock\Grid\Row\Assembler\Property\SectionFieldAssembler;
14use Bitrix\Iblock\Grid\Row\Assembler\Property\StringFieldAssembler;
15use Bitrix\Iblock\Grid\Row\Assembler\Property\UserTypePropertyFieldAssembler;
16use Bitrix\Iblock\Grid\Row\Assembler\SectionCountFieldAssembler;
17use Bitrix\Iblock\Grid\Row\Assembler\SectionNameFieldAssembler;
18use Bitrix\Iblock\Grid\RowType;
19use Bitrix\Main\Grid\Column\Columns;
20use Bitrix\Main\Grid\Editor\Types;
21use Bitrix\Main\Grid\Row\Assembler\Field\UserFieldAssembler;
22use Bitrix\Main\Grid\Row\FieldAssembler;
23use Bitrix\Main\Grid\Row\RowAssembler;
24use Bitrix\Main\ModuleManager;
32 array $visibleColumnsIds,
37 parent::__construct($visibleColumnsIds);
50 $result[] = $this->getUserAssembler();
55 $this->settings->getIblockId()
60 $this->settings->getUrlBuilder()
63 array_push(
$result, ... $this->getPropertiesAssemblers());
80 return new UserFieldAssembler($columnIds);
83 private function getPropertiesAssemblers():
array
87 $customColumnIds = [];
88 foreach ($this->columns as $column)
90 $editable = $column->getEditable();
91 if (isset($editable) && $editable->getType() === Types::CUSTOM)
93 $customColumnIds[] = $column->getId();
97 $result[] =
new StringFieldAssembler(
98 $this->settings->getIblockId(),
102 $result[] =
new NumberFieldAssembler(
103 $this->settings->getIblockId(),
107 $result[] =
new ListFieldAssembler(
108 $this->settings->getIblockId()
111 $result[] =
new ElementFieldAssembler(
112 $this->settings->getIblockId(),
116 $result[] =
new SectionFieldAssembler(
117 $this->settings->getIblockId(),
121 $result[] =
new UserTypePropertyFieldAssembler(
122 $this->settings->getIblockId(),
126 $result[] =
new FileFieldAssembler(
127 $this->settings->getIblockId()
130 $processedColumnsIds = [];
131 foreach (
$result as $assembler)
136 array_push($processedColumnsIds, ...$assembler->getColumnIds());
139 $result[] =
new MultipleFieldAssembler(
140 $this->settings->getIblockId(),
149 $result = parent::prepareRows($rowsList);
158 $row = $this->disableElementFieldsEditableForSection($row);
163 $row[
'data'][
'~DETAIL_TEXT'] = (string)($row[
'data'][
'DETAIL_TEXT'] ??
'');
164 $row[
'data'][
'~PREVIEW_TEXT'] = (string)($row[
'data'][
'PREVIEW_TEXT'] ??
'');
172 private function disableElementFieldsEditableForSection(
array $row):
array
174 $editableColumns = array_fill_keys([
181 $row[
'editableColumns'] ??= [];
184 if (!isset($row[
'editableColumns'][$columnId]))
186 $row[
'editableColumns'][$columnId] = isset($editableColumns[$columnId]);
ElementSettings $settings
prepareRows(array $rowsList)
__construct(array $visibleColumnsIds, ElementSettings $settings, Columns $columns)
static getIndex(string $type, string|int $id)
static isModuleInstalled($moduleName)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)