1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
grids.php
См. документацию.
1<?php
2
4
6
8{
9 protected $grid_id;
10 protected $all_options;
11 protected $options;
12 protected $filter;
13 protected $filterPresets;
14 protected $currentView;
15
17 {
18 $this->grid_id = $grid_id;
19 $this->options = array();
20 $this->filter = array();
21 $this->filterPresets = $filterPresets;
22
23 $aOptions = CUserOptions::GetOption("main.interface.grid", $this->grid_id, array());
24
25 if(!is_array($aOptions))
26 {
27 $aOptions = array();
28 }
29 if (!isset($aOptions["views"]) || !is_array($aOptions["views"]))
30 {
31 $aOptions["views"] = [];
32 }
33
34 if (!isset($aOptions["filters"]) || !is_array($aOptions["filters"]))
35 {
36 $aOptions["filters"] = [];
37 }
38
39 if(!isset($aOptions["current_view"]) || $aOptions["current_view"] == '' || !isset($aOptions["views"][$aOptions["current_view"]]))
40 {
41 $aOptions["current_view"] = "default";
42 }
43
44 $defaultOptions = CUserOptions::GetOption("main.interface.grid.common", $this->grid_id, array());
45
46 if (isset($defaultOptions["view"]) && is_array($defaultOptions["view"]) && !isset($aOptions["views"]["default"]))
47 {
48 $aOptions["views"]["default"] = $defaultOptions["view"];
49 }
50 if(!isset($aOptions["views"]["default"]))
51 {
52 $aOptions["views"]["default"] = array("columns"=>"");
53 }
54
55 $this->all_options = $aOptions;
56 $this->currentView = $aOptions["current_view"];
57
58 if(isset($aOptions["views"][$this->currentView]))
59 {
60 $this->options = $aOptions["views"][$this->currentView];
61 }
62 }
63
64 public function InitFilter()
65 {
66 if(isset($this->options["saved_filter"]) && $this->options["saved_filter"] <> '')
67 {
68 if(isset($this->all_options["filters"][$this->options["saved_filter"]]) && is_array($this->all_options["filters"][$this->options["saved_filter"]]["fields"]))
69 {
70 $this->filter = $this->all_options["filters"][$this->options["saved_filter"]]["fields"];
71 }
72 elseif(isset($this->filterPresets[$this->options["saved_filter"]]) && is_array($this->filterPresets[$this->options["saved_filter"]]["fields"]))
73 {
74 $this->filter = $this->filterPresets[$this->options["saved_filter"]]["fields"];
75 }
76 }
77 }
78
79 public function GetOptions()
80 {
81 return $this->all_options;
82 }
83
84 public function GetSorting($default=array())
85 {
86 if (!isset($default["vars"]) || !is_array($default["vars"]))
87 {
88 $default["vars"] = ["by" => "by", "order" => "order"];
89 }
90 if (!isset($default["sort"]) || !is_array($default["sort"]))
91 {
92 $default["sort"] = [];
93 }
94
96 "sort" => $default["sort"],
97 "vars" => $default["vars"],
98 );
99
100 $key = '';
101 if(isset($_REQUEST[$default["vars"]["by"]]))
102 {
103 Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["sort_by"] = $_REQUEST[$default["vars"]["by"]];
104 }
105 elseif(!isset(Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["sort_by"]))
106 {
107 if(!empty($this->options["sort_by"]))
108 {
109 //sorting explicitly set in the view
110 $key = $this->options["sort_by"];
111 }
112 elseif(!empty($this->options["last_sort_by"]))
113 {
114 //last saved user sorting
115 $key = $this->options["last_sort_by"];
116 }
117 }
118 if(isset(Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["sort_by"]))
119 $key = Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["sort_by"];
120
121 if($key <> '')
122 {
123 if(isset($_REQUEST[$default["vars"]["order"]]))
124 {
125 Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["sort_order"] = $_REQUEST[$default["vars"]["order"]];
126 }
127 elseif(!isset(Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["sort_order"]))
128 {
129 if(!empty($this->options["sort_order"]))
130 {
131 $arResult["sort"] = array($key => $this->options["sort_order"]);
132 }
133 elseif(!empty($this->options["last_sort_order"]))
134 {
135 $arResult["sort"] = array($key => $this->options["last_sort_order"]);
136 }
137 else
138 {
139 $arResult["sort"] = array($key => reset($default["sort"]));
140 }
141 }
142 if(isset(Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["sort_order"]))
143 $arResult["sort"] = array($key => Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["sort_order"]);
144 }
145
146 return $arResult;
147 }
148
149 public function GetNavParams($arParams=array())
150 {
152 "nPageSize" => $arParams["nPageSize"] ?? 20,
153 );
154
155 if(!empty($this->options["page_size"]))
156 $arResult["nPageSize"] = $this->options["page_size"];
157
158 return $arResult;
159 }
160
161 public function GetVisibleColumns()
162 {
163 if(!empty($this->options["columns"]))
164 return explode(",", $this->options["columns"]);
165 return [];
166 }
167
168 public function SetVisibleColumns($arColumns)
169 {
170 $this->options['columns'] = implode(',', $arColumns);
171 $aOptions = CUserOptions::GetOption('main.interface.grid', $this->grid_id, array());
172 if (!is_array($aOptions['views']))
173 $aOptions['views'] = array();
174 if (!is_array($aOptions['filters']))
175 $aOptions['filters'] = array();
176 if (!array_key_exists('default', $aOptions['views']))
177 $aOptions['views']['default'] = array('columns'=>'');
178 if ($aOptions['current_view'] == '' || !array_key_exists($aOptions['current_view'], $aOptions['views']))
179 $aOptions['current_view'] = 'default';
180
181 $aOptions['views'][$aOptions['current_view']]['columns'] = $this->options['columns'];
182 CUserOptions::SetOption('main.interface.grid', $this->grid_id, $aOptions);
183 }
184
185 public function GetFilter($arFilter)
186 {
187 $aRes = array();
188 foreach($arFilter as $field)
189 {
190 //date
191 if(isset($_REQUEST[$field["id"]."_datesel"]))
192 {
193 if($_REQUEST[$field["id"]."_datesel"] <> '')
194 {
195 $aRes[$field["id"]."_datesel"] = $_REQUEST[$field["id"]."_datesel"];
196 CGridOptions::CalcDates($field["id"], $_REQUEST, $aRes);
197 }
198 else
199 {
200 unset(Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["filter"][$field["id"]."_datesel"]);
201 unset(Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["filter"][$field["id"]."_from"]);
202 unset(Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["filter"][$field["id"]."_to"]);
203 unset(Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["filter"][$field["id"]."_days"]);
204 }
205 continue;
206 }
207
208 //quick
209 if (
210 isset($_REQUEST[$field["id"] . "_list"])
211 && $_REQUEST[$field["id"] . "_list"] <> ''
212 && isset($_REQUEST[$field["id"]])
213 && $_REQUEST[$field["id"]] <> ''
214 )
215 {
216 $aRes[$field["id"] . "_list"] = $_REQUEST[$field["id"] . "_list"];
217 }
218
219 //number interval
220 if(isset($_REQUEST[$field["id"]."_from"]))
221 {
222 if($_REQUEST[$field["id"]."_from"] <> '')
223 $aRes[$field["id"]."_from"] = $_REQUEST[$field["id"]."_from"];
224 else
225 unset(Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["filter"][$field["id"]."_from"]);
226 }
227 if(isset($_REQUEST[$field["id"]."_to"]))
228 {
229 if($_REQUEST[$field["id"]."_to"] <> '')
230 $aRes[$field["id"]."_to"] = $_REQUEST[$field["id"]."_to"];
231 else
232 unset(Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["filter"][$field["id"]."_to"]);
233 }
234
235 //filtered outside, we don't control the filter field value
236 if(isset($field["filtered"]) && $field["filtered"])
237 {
238 if(isset($field["filter_value"]))
239 $aRes[$field["id"]] = $field["filter_value"];
240 else
241 $aRes[$field["id"]] = true;
242 continue;
243 }
244
245 //list or string
246 if(isset($_REQUEST[$field["id"]]))
247 {
248 if(is_array($_REQUEST[$field["id"]]) && !empty($_REQUEST[$field["id"]]) && reset($_REQUEST[$field["id"]]) <> '' || !is_array($_REQUEST[$field["id"]]) && $_REQUEST[$field["id"]] <> '')
249 $aRes[$field["id"]] = $_REQUEST[$field["id"]];
250 else
251 unset(Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["filter"][$field["id"]]);
252 }
253 }
254
255 //Check for filter ID -->
256 if(isset($_REQUEST["apply_filter"]) && $_REQUEST["apply_filter"] === 'Y' && isset($_REQUEST["grid_filter_id"]))
257 {
258 $aRes["GRID_FILTER_APPLIED"] = true;
259 $aRes["GRID_FILTER_ID"] = $_REQUEST["grid_filter_id"];
260 }
261 //<-- Check for filter ID
262
263 if(!empty($aRes))
264 {
265 Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["filter"] = $aRes;
266 }
267 elseif(isset($_REQUEST["clear_filter"]) && $_REQUEST["clear_filter"] <> '')
268 {
269 Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["filter"] = array();
270 }
271 elseif(
272 isset(Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["filter"])
273 && is_array(Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["filter"])
274 )
275 {
276 $aRes = Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["filter"];
277 }
278 else
279 {
280 $this->InitFilter();
281 if(!empty($this->filter))
282 {
283 foreach($arFilter as $field)
284 {
285 if($this->filter[$field["id"]."_datesel"] <> '')
286 {
287 $aRes[$field["id"]."_datesel"] = $this->filter[$field["id"]."_datesel"];
288 CGridOptions::CalcDates($field["id"], $this->filter, $aRes);
289 continue;
290 }
291 if($this->filter[$field["id"]."_list"] <> '' && $this->filter[$field["id"]] <> '')
292 {
293 $aRes[$field["id"]."_list"] = $this->filter[$field["id"]."_list"];
294 }
295 if($this->filter[$field["id"]."_from"] <> '')
296 {
297 $aRes[$field["id"]."_from"] = $this->filter[$field["id"]."_from"];
298 }
299 if($this->filter[$field["id"]."_to"] <> '')
300 {
301 $aRes[$field["id"]."_to"] = $this->filter[$field["id"]."_to"];
302 }
303 if(is_array($this->filter[$field["id"]]))
304 {
305 //multiselect values
306 if(!empty($this->filter[$field["id"]]) && reset($this->filter[$field["id"]]) <> '')
307 {
308 $aRes[$field["id"]] = array_values($this->filter[$field["id"]]);
309 }
310 }
311 elseif($this->filter[$field["id"]] <> '')
312 {
313 $aRes[$field["id"]] = $this->filter[$field["id"]];
314 }
315 }
316 if(!empty($aRes))
317 {
318 Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["filter"] = $aRes;
319 }
320 }
321 }
322
323 return $aRes;
324 }
325
326 public function Save()
327 {
328 CUserOptions::SetOption("main.interface.grid", $this->grid_id, $this->all_options);
329 }
330
331 public function SetColumns($columns)
332 {
333 $aColsTmp = explode(",", $columns);
334 $aCols = array();
335 foreach($aColsTmp as $col)
336 if(($col = trim($col)) <> "")
337 $aCols[] = $col;
338 $this->all_options["views"][$this->currentView]["columns"] = implode(",", $aCols);
339 }
340
341 public function SetSorting($by, $order)
342 {
343 $this->all_options["views"][$this->currentView]["last_sort_by"] = $by;
344 $this->all_options["views"][$this->currentView]["last_sort_order"] = $order;
345 }
346
347 public function SetTheme($theme)
348 {
349 $this->all_options["theme"] = $theme;
350 }
351
352 public function SetViewSettings($view_id, $settings)
353 {
354 $this->all_options["views"][$view_id] = array(
355 "name"=>$settings["name"],
356 "columns"=>$settings["columns"],
357 "sort_by"=>$settings["sort_by"],
358 "sort_order"=>$settings["sort_order"],
359 "page_size"=>$settings["page_size"],
360 "saved_filter"=>$settings["saved_filter"],
361 "custom_names"=>$settings["custom_names"] ?? [],
362 );
363 }
364
365 public function SetDefaultView($settings)
366 {
367 $options = array(
368 "view" => array(
369 "name"=>$settings["name"],
370 "columns"=>$settings["columns"],
371 "sort_by"=>$settings["sort_by"],
372 "sort_order"=>$settings["sort_order"],
373 "page_size"=>$settings["page_size"],
374 "saved_filter"=>$settings["saved_filter"],
375 "custom_names"=>$settings["custom_names"],
376 )
377 );
378
379 CUserOptions::SetOption("main.interface.grid.common", $this->grid_id, $options, true);
380 }
381
382 public function ResetDefaultView()
383 {
384 $res = CUserOptions::GetList(
385 null,
386 array(
387 "CATEGORY" => "main.interface.grid",
388 "NAME" => $this->grid_id,
389 )
390 );
391 while($row = $res->Fetch())
392 {
393 $options = unserialize($row["VALUE"], ['allowed_classes' => false]);
394 if(!is_array($options))
395 {
396 $options = array();
397 }
398 unset($options["views"]["default"]);
399 $options["current_view"] = "default";
400 CUserOptions::SetOption("main.interface.grid", $this->grid_id, $options, false, $row["USER_ID"]);
401 }
402 }
403
404 public function DeleteView($viewId)
405 {
406 unset($this->all_options["views"][$viewId]);
407 }
408
409 public function SetView($view_id)
410 {
411 if(!array_key_exists($view_id, $this->all_options["views"]))
412 $view_id = "default";
413
414 $this->all_options["current_view"] = $view_id;
415 $this->currentView = $view_id;
416
417 //get sorting from view, not session
418 unset(Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["sort_by"]);
419 unset(Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["sort_order"]);
420 }
421
422 public function SetFilterRows($rows, $filter_id='')
423 {
424 $aColsTmp = explode(",", $rows);
425 $aCols = array();
426 foreach($aColsTmp as $col)
427 if(($col = trim($col)) <> "")
428 $aCols[] = $col;
429 if($filter_id <> '')
430 $this->all_options["filters"][$filter_id]["filter_rows"] = implode(",", $aCols);
431 else
432 $this->all_options["filter_rows"] = implode(",", $aCols);
433 }
434
435 public function SetFilterSettings($filter_id, $settings)
436 {
437 $option = array(
438 "name"=>$settings["name"],
439 "fields"=>$settings["fields"] ?? [],
440 );
441
442 if(isset($settings["rows"]))
443 {
444 $rows = $settings["rows"];
445 if(is_array($rows))
446 {
447 $result = array();
448 foreach($rows as $id)
449 {
450 $id = trim($id);
451 if($id !== "")
452 {
453 $result[] = $id;
454 }
455 }
456 $option["filter_rows"] = implode(",", $result);
457 }
458 elseif(is_string($settings["rows"]))
459 {
460 $option["filter_rows"] = $settings["rows"];
461 }
462 }
463
464 $this->all_options["filters"][$filter_id] = $option;
465 }
466
467 public function DeleteFilter($filter_id)
468 {
469 unset($this->all_options["filters"][$filter_id]);
470 }
471
472 public function SetFilterSwitch($show)
473 {
474 $this->all_options["filter_shown"] = ($show == "Y"? "Y":"N");
475 }
476
477 public static function CalcDates($field_id, $aInput, &$aRes)
478 {
479 switch($aInput[$field_id."_datesel"])
480 {
481 case "today":
482 $aRes[$field_id."_from"] = $aRes[$field_id."_to"] = ConvertTimeStamp();
483 break;
484 case "yesterday":
485 $aRes[$field_id."_from"] = $aRes[$field_id."_to"] = ConvertTimeStamp(time()-86400);
486 break;
487 case "tomorrow":
488 $aRes[$field_id."_from"] = $aRes[$field_id."_to"] = ConvertTimeStamp(time()+86400);
489 break;
490 case "week":
491 $day = date("w");
492 if($day == 0)
493 $day = 7;
494 $aRes[$field_id."_from"] = ConvertTimeStamp(time()-($day-1)*86400);
495 $aRes[$field_id."_to"] = ConvertTimeStamp(time()+(7-$day)*86400);
496 break;
497 case "week_ago":
498 $day = date("w");
499 if($day == 0)
500 $day = 7;
501 $aRes[$field_id."_from"] = ConvertTimeStamp(time()-($day-1+7)*86400);
502 $aRes[$field_id."_to"] = ConvertTimeStamp(time()-($day)*86400);
503 break;
504 case "month":
505 $aRes[$field_id."_from"] = ConvertTimeStamp(mktime(0, 0, 0, date("n"), 1));
506 $aRes[$field_id."_to"] = ConvertTimeStamp(mktime(0, 0, 0, (int)date("n") + 1, 0));
507 break;
508 case "month_ago":
509 $aRes[$field_id."_from"] = ConvertTimeStamp(mktime(0, 0, 0, (int)date("n") - 1, 1));
510 $aRes[$field_id."_to"] = ConvertTimeStamp(mktime(0, 0, 0, date("n"), 0));
511 break;
512 case "days":
513 $aRes[$field_id."_days"] = $aInput[$field_id."_days"];
514 $aRes[$field_id."_from"] = ConvertTimeStamp(time() - intval($aRes[$field_id."_days"])*86400);
515 $aRes[$field_id."_to"] = "";
516 break;
517 case "exact":
518 $aRes[$field_id."_from"] = $aRes[$field_id."_to"] = $aInput[$field_id."_from"];
519 break;
520 case "after":
521 $aRes[$field_id."_from"] = $aInput[$field_id."_from"];
522 $aRes[$field_id."_to"] = "";
523 break;
524 case "before":
525 $aRes[$field_id."_from"] = "";
526 $aRes[$field_id."_to"] = $aInput[$field_id."_to"];
527 break;
528 case "interval":
529 $aRes[$field_id."_from"] = $aInput[$field_id."_from"];
530 $aRes[$field_id."_to"] = $aInput[$field_id."_to"];
531 break;
532 }
533 }
534
535 public static function GetThemes($path)
536 {
537 //color schemes
538 $aColorNames = array(
539 "grey"=>GetMessage("interface_grid_theme_grey"),
540 "blue"=>GetMessage("interface_grid_theme_blue"),
541 "brown"=>GetMessage("interface_grid_theme_brown"),
542 "green"=>GetMessage("interface_grid_theme_green"),
543 "lightblue"=>GetMessage("interface_grid_theme_lightblue"),
544 "red"=>GetMessage("interface_grid_theme_red"),
545 "lightgrey"=>GetMessage("interface_grid_theme_lightgrey"),
546 );
547 $arThemes = array();
548 $themesPath = $_SERVER["DOCUMENT_ROOT"].$path.'/themes';
549 if(is_dir($themesPath))
550 {
551 if($dir = opendir($themesPath))
552 {
553 while(($file = readdir($dir)) !== false)
554 {
555 if($file != '.' && $file != '..' && is_dir($themesPath."/".$file))
556 $arThemes[$file] = array("theme"=>$file, "name"=>($aColorNames[$file] ?? $file));
557 }
558 closedir($dir);
559 }
560 }
561
562 uasort(
563 $arThemes,
564 function ($a, $b) {
565 return strcmp($a["name"], $b["name"]);
566 }
567 );
568
569 return $arThemes;
570 }
571
572 public static function GetTheme($grid_id)
573 {
574 $aOptions = CUserOptions::GetOption("main.interface.grid", $grid_id, array());
575 if($aOptions["theme"] == '')
576 {
577 $aGlobalOptions = CUserOptions::GetOption("main.interface", "global", array(), 0);
578 if($aGlobalOptions["theme_template"][SITE_TEMPLATE_ID] <> '')
579 $theme = $aGlobalOptions["theme_template"][SITE_TEMPLATE_ID];
580 else
581 $theme = "";
582 }
583 else
584 {
585 $theme = $aOptions["theme"];
586 }
587 if($theme <> '')
588 {
589 $theme = preg_replace("/[^a-z0-9_.-]/i", "", $theme);
590 }
591 return $theme;
592 }
593}
$arParams
Определения access_dialog.php:21
$path
Определения access_edit.php:21
$arResult
Определения generate_coupon.php:16
Определения grids.php:8
$options
Определения grids.php:11
SetVisibleColumns($arColumns)
Определения grids.php:168
GetNavParams($arParams=array())
Определения grids.php:149
$all_options
Определения grids.php:10
static GetTheme($grid_id)
Определения grids.php:572
SetDefaultView($settings)
Определения grids.php:365
GetVisibleColumns()
Определения grids.php:161
SetColumns($columns)
Определения grids.php:331
GetOptions()
Определения grids.php:79
SetFilterSwitch($show)
Определения grids.php:472
$grid_id
Определения grids.php:9
InitFilter()
Определения grids.php:64
SetSorting($by, $order)
Определения grids.php:341
static GetThemes($path)
Определения grids.php:535
GetFilter($arFilter)
Определения grids.php:185
GetSorting($default=array())
Определения grids.php:84
SetFilterRows($rows, $filter_id='')
Определения grids.php:422
$filterPresets
Определения grids.php:13
SetTheme($theme)
Определения grids.php:347
SetView($view_id)
Определения grids.php:409
SetViewSettings($view_id, $settings)
Определения grids.php:352
DeleteView($viewId)
Определения grids.php:404
$filter
Определения grids.php:12
DeleteFilter($filter_id)
Определения grids.php:467
$currentView
Определения grids.php:14
__construct($grid_id, array $filterPresets=array())
Определения grids.php:16
SetFilterSettings($filter_id, $settings)
Определения grids.php:435
static CalcDates($field_id, $aInput, &$aRes)
Определения grids.php:477
Save()
Определения grids.php:326
ResetDefaultView()
Определения grids.php:382
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$res
Определения filter_act.php:7
$_REQUEST["admin_mnu_menu_id"]
Определения get_menu.php:8
$result
Определения get_property_values.php:14
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
Определения tools.php:3778
GetMessage($name, $aReplace=null)
Определения tools.php:3397
$order
Определения payment.php:8
$settings
Определения product_settings.php:43
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
$dir
Определения quickway.php:303
if(empty($signedUserToken)) $key
Определения quickway.php:257
else $a
Определения template.php:137
$option
Определения options.php:1711
$rows
Определения options.php:264
$arFilter
Определения user_search.php:106