1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
filter.php
См. документацию.
1<?php
2namespace Bitrix\Main\Filter;
3
4class Filter
5{
7 protected $ID = '';
9 protected $entityDataProvider = null;
11 protected $extraProviders = null;
12
14 protected $params = null;
15
17 protected $fields = null;
18
19 protected $uiFilterPostfixes = [
20 '_datesel', '_month', '_quarter', '_year', '_days', // date
21 '_numsel', // number
22 '_from', '_to', // date and number ranges
23 '_isEmpty', // has no value
24 '_hasAnyValue', // has any value
25 '_label', // custom entity title
26 ];
27
29 'FILTER_ID',
30 'FILTER_APPLIED',
31 'PRESET_ID',
32 'FIND',
33 ];
34
35 function __construct($ID, DataProvider $entityDataProvider, array $extraDataProviders = null, array $params = null)
36 {
37 $this->ID = $ID;
38 $this->entityDataProvider = $entityDataProvider;
39
40 $this->extraProviders = [];
41 if(is_array($extraDataProviders))
42 {
43 foreach($extraDataProviders as $dataProvider)
44 {
45 if($dataProvider instanceof DataProvider)
46 {
47 $this->extraProviders[] = $dataProvider;
48 }
49 }
50 }
51
52 $this->params = is_array($params) ? $params : [];
53 }
54
59 function getID()
60 {
61 return $this->ID;
62 }
63
68 public function getDefaultFieldIDs()
69 {
70 $results = [];
71 foreach($this->getFields() as $fieldID => $field)
72 {
73 if($field->isDefault())
74 {
75 $results[] = $fieldID;
76 }
77 }
78 return $results;
79 }
80
85 public function getFields()
86 {
87 if($this->fields === null)
88 {
89 $this->fields = $this->entityDataProvider->prepareFields();
90 foreach($this->extraProviders as $dataProvider)
91 {
92 $fields = $dataProvider->prepareFields();
93 if(!empty($fields))
94 {
95 $this->fields += $fields;
96 }
97 }
98 }
99 return $this->fields;
100 }
101
108 public function getFieldArrays(array $fieldMask = [])
109 {
110 $results = [];
111 $allFields = true;
112 if (!empty($fieldMask))
113 {
114 $fieldMask = array_fill_keys($fieldMask, true);
115 $allFields = false;
116 }
117 $fields = $this->getFields();
118 foreach($fields as $field)
119 {
120 if ($allFields || isset($fieldMask[$field->getId()]))
121 {
122 $results[] = $field->toArray();
123 }
124 }
125 return $results;
126 }
127
133 public function getField($fieldID)
134 {
135 $fields = $this->getFields();
136 return $fields[$fieldID] ?? null;
137 }
138
142 public function getEntityDataProvider()
143 {
144 return $this->entityDataProvider;
145 }
146
153 {
154 foreach ($filter as $k => $v)
155 {
156 $this->entityDataProvider->prepareListFilterParam($filter, $k);
157 }
158 }
159
168 public function getValue(?array $rawValue = null): array
169 {
170 $gridId = $this->getEntityDataProvider()->getSettings()->getID();
171
172 if (!isset($rawValue))
173 {
174 $options = new \Bitrix\Main\UI\Filter\Options($gridId);
175 $rawValue =
176 $options->getFilter()
177 + $options->getFilterLogic($this->getFieldArrays())
178 ;
179 }
180
181 $result = $rawValue;
186
187 return $result;
188 }
189
194 protected function removeServiceUiFilterFields(array &$filter): void
195 {
196 foreach ($filter as $fieldId => $fieldValue)
197 {
198 if (in_array($fieldId, $this->uiFilterServiceFields, true))
199 {
200 unset($filter[$fieldId]);
201 continue;
202 }
203 foreach ($this->uiFilterPostfixes as $postfix)
204 {
205 if (str_ends_with($fieldId, $postfix))
206 {
207 unset($filter[$fieldId]);
208 }
209 }
210 }
211 }
212
217 protected function removeNotUiFilterFields(array &$filter): void
218 {
219 $filterFieldsIds = array_map(
220 function(Field $filterField)
221 {
222 return $filterField->getId();
223 },
224 $this->getFields()
225 );
226 $sqlWhere = new \CSQLWhere();
227
228 foreach ($filter as $fieldId => $fieldValue)
229 {
230 if (in_array($fieldId, $this->uiFilterServiceFields, true))
231 {
232 continue;
233 }
234 if (in_array($fieldId, $filterFieldsIds, true))
235 {
236 continue;
237 }
238
239 $fieldIdWithoutOperation = $sqlWhere->makeOperation($fieldId)['FIELD'];
240 if (in_array($fieldIdWithoutOperation, $filterFieldsIds, true))
241 {
242 continue;
243 }
244
245 foreach ($this->uiFilterPostfixes as $postfix)
246 {
247 if (str_ends_with($fieldId, $postfix))
248 {
249 $realFieldId = substr($fieldId, 0, -strlen($postfix));
250 if (in_array($realFieldId, $filterFieldsIds, true))
251 {
252 continue(2);
253 }
254 }
255 }
256 unset($filter[$fieldId]); // not a valid filter field
257 }
258 }
259
260 protected function prepareFilterValue(array &$value): void
261 {
262 $dataProviders = array_merge(
263 [
264 $this->getEntityDataProvider(),
265 ],
266 $this->extraProviders,
267 );
268
269 foreach ($dataProviders as $dataProvider)
270 {
271 $value = $dataProvider->prepareFilterValue($value);
272 }
273 }
274}
getId()
Определения field.php:82
$uiFilterServiceFields
Определения filter.php:28
getID()
Определения filter.php:59
getEntityDataProvider()
Определения filter.php:142
getDefaultFieldIDs()
Определения filter.php:68
__construct($ID, DataProvider $entityDataProvider, array $extraDataProviders=null, array $params=null)
Определения filter.php:35
prepareFilterValue(array &$value)
Определения filter.php:260
removeServiceUiFilterFields(array &$filter)
Определения filter.php:194
removeNotUiFilterFields(array &$filter)
Определения filter.php:217
getValue(?array $rawValue=null)
Определения filter.php:168
getField($fieldID)
Определения filter.php:133
getFieldArrays(array $fieldMask=[])
Определения filter.php:108
$entityDataProvider
Определения filter.php:9
$extraProviders
Определения filter.php:11
prepareListFilterParams(array &$filter)
Определения filter.php:152
$uiFilterPostfixes
Определения filter.php:19
getFields()
Определения filter.php:85
$options
Определения commerceml2.php:49
</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
if($ajaxMode) $ID
Определения get_user.php:27
$filter
Определения iblock_catalog_list.php:54
$k
Определения template_pdf.php:567
$fields
Определения yandex_run.php:501