1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
columns.php
См. документацию.
1<?php
2
3namespace Bitrix\Main\Grid\Column;
4
13class Columns implements \IteratorAggregate, \Countable
14{
18 private array $providers;
19 private array $columns;
20 private array $providersColumns;
21
25 public function __construct(DataProvider ...$providers)
26 {
27 $this->providers = [];
28 foreach ($providers as $provider)
29 {
30 $this->providers[] = $provider;
31 }
32 }
33
39 final public function getIterator(): \ArrayIterator
40 {
41 return new \ArrayIterator($this->getColumns());
42 }
43
49 final public function count(): int
50 {
51 return count($this->getColumns());
52 }
53
61 final public function getColumn(string $id): ?Column
62 {
63 return $this->getColumns()[$id] ?? null;
64 }
65
80 final public function getColumns(): array
81 {
82 if (!isset($this->columns))
83 {
84 $this->columns = [];
85
86 foreach ($this->getProvidersColumns() as $providerColumns)
87 {
91 foreach ($providerColumns as $column)
92 {
93 $this->columns[$column->getId()] = $column;
94 }
95 }
96
97 $this->columns = $this->prepareColumns($this->columns);
98 }
99
100 return $this->columns;
101 }
102
108 protected function prepareColumns(array $columns): array
109 {
110 return $columns;
111 }
112
118 final protected function getProvidersColumns(): array
119 {
120 if (!isset($this->providersColumns))
121 {
122 $this->providersColumns = [];
123
124 foreach ($this->providers as $provider)
125 {
126 $providerColumns = $provider->prepareColumns();
127 if (empty($providerColumns))
128 {
129 continue;
130 }
131
132 $providerClass = get_class($provider);
133 $this->providersColumns[$providerClass] = $providerColumns;
134 }
135 }
136
137 return $this->providersColumns;
138 }
139
189 public function getSelect(?array $columnIds = null, ?array $providers = null): array
190 {
191 $result = [];
192
193 // filter by providers
194 if (isset($providers))
195 {
196 $columns = [];
197 foreach ($providers as $providerClass)
198 {
199 $providerColumns = $this->getProvidersColumns()[$providerClass] ?? null;
200 if (!empty($providerColumns))
201 {
202 array_push($columns, ...$providerColumns);
203 }
204 }
205
206 if (empty($columns))
207 {
208 return [];
209 }
210
211 $columns = $this->prepareColumns($columns);
212 }
213 else
214 {
215 $columns = $this->getColumns();
216 }
217
218 // filter by columns
219 if (isset($columnIds))
220 {
221 $columnIds = array_fill_keys($columnIds, true);
222 foreach ($columns as $column)
223 {
224 if (
225 $column->isNecessary()
226 || isset($columnIds[$column->getId()])
227 )
228 {
229 array_push($result, ...$column->getSelect());
230 }
231 }
232 }
233 else
234 {
235 foreach ($columns as $column)
236 {
237 array_push($result, ...$column->getSelect());
238 }
239 }
240
241 return $result;
242 }
243
251 public function prepareEditableColumnsValues(array $values): array
252 {
253 $result = [];
254
255 foreach ($this->getColumns() as $column)
256 {
257 if (!$column->isEditable())
258 {
259 continue;
260 }
261
262 $id = $column->getId();
263 if (array_key_exists($id, $values))
264 {
265 $result[$id] = $values[$id];
266 }
267 }
268
269 return $result;
270 }
271}
if(!Loader::includeModule('messageservice')) $provider
Определения callback_ednaruimhpx.php:21
getProvidersColumns()
Определения columns.php:118
prepareEditableColumnsValues(array $values)
Определения columns.php:251
__construct(DataProvider ... $providers)
Определения columns.php:25
prepareColumns(array $columns)
Определения columns.php:108
getColumn(string $id)
Определения columns.php:61
getSelect(?array $columnIds=null, ?array $providers=null)
Определения columns.php:189
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$result
Определения get_property_values.php:14
Определения color.php:3