1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
admin_filter.php
См. документацию.
1<?php
8
11
13{
14 public $id;
15 private $popup;
16 private $arItems = array();
17 private $arOptFlt = array();
18 private static $defaultSort = 100;
19 private static $defaultPresetSort = 50;
20 private $url=false;
21 private $tableId=false;
22
23 const SESS_PARAMS_NAME = "main.adminFilter";
24
25 public function __construct($id, $popup=false, $arExtraParams=array())
26 {
27 global $USER;
28
29 $uid = $USER->GetID();
30 $isAdmin = $USER->CanDoOperation('edit_other_settings');
31
32 if(empty($popup) || !is_array($popup))
33 $popup = false;
34
35 $this->id = preg_replace('/[^a-z0-9_]/i', '', $id);
36 $this->popup = $popup;
37
38 if(is_array($arExtraParams))
39 {
40 if(isset($arExtraParams["url"]) && !empty($arExtraParams["url"]))
41 $this->url = $arExtraParams["url"];
42
43 if(isset($arExtraParams["table_id"]) && !empty($arExtraParams["table_id"]))
44 $this->tableId = $arExtraParams["table_id"];
45 }
46
47 $this->arOptFlt = CUserOptions::GetOption("filter", $this->id, array(
48 "rows" => "",
49 "styleFolded" => "N",
50 "presetsDeleted" => ""
51 ));
52 $this->arOptFlt['styleFolded'] = (string)($this->arOptFlt['styleFolded'] ?? 'N');
53
54 $presetsDeleted = [];
55 if (isset($this->arOptFlt["presetsDeleted"]))
56 {
57 $presetsDeleted = explode(",", $this->arOptFlt["presetsDeleted"]);
58 }
59
60 $this->arOptFlt["presetsDeleted"] = $presetsDeleted ?: array();
61
62 $presetsDeletedJS='';
63
64 if(is_array($presetsDeleted))
65 foreach($presetsDeleted as $preset)
66 if(trim($preset) <> "")
67 $presetsDeletedJS .= ($presetsDeletedJS <> "" ? ",":"").'"'.CUtil::JSEscape(trim($preset)).'"';
68
69 $this->arOptFlt["presetsDeletedJS"] = $presetsDeletedJS;
70
71 $dbRes = self::GetList(array(), array("USER_ID" => $uid, "FILTER_ID" => $this->id), true);
72 while($arFilter = $dbRes->Fetch())
73 {
74 if(!is_null($arFilter["LANGUAGE_ID"]) && $arFilter["LANGUAGE_ID"] != LANG )
75 continue;
76
77 $arItem = $arFilter;
78 $arItem["FIELDS"] = unserialize($arFilter["FIELDS"], ['allowed_classes' => false]);
79
80 if(!is_null($arFilter["SORT_FIELD"]))
81 $arItem["SORT_FIELD"] = unserialize($arFilter["SORT_FIELD"], ['allowed_classes' => false]);
82
83 if($arFilter["PRESET"] == "Y" && is_null($arFilter["LANGUAGE_ID"]))
84 {
85 $langName = GetMessage($arFilter["NAME"]);
86
87 if($langName)
88 $arItem["NAME"] = $langName;
89
90 foreach ($arItem["FIELDS"] as $key => $field)
91 {
92 $langValue = GetMessage($arItem["FIELDS"][$key]["value"]);
93
94 if($langValue)
95 $arItem["FIELDS"][$key]["value"] = $langValue;
96 }
97 }
98
99 $arItem["EDITABLE"] = ((($isAdmin || $arFilter["USER_ID"] == $uid ) && $arFilter["PRESET"] != "Y") ? true : false );
100
101 $this->AddItem($arItem);
102 }
103 }
104
105 private function AddItem($arItem, $bInsertFirst = false)
106 {
107 //if user "deleted" preset http://jabber.bx/view.php?id=34405
108 if(!$arItem["EDITABLE"] && !empty($this->arOptFlt["presetsDeleted"]))
109 if(in_array($arItem["ID"], $this->arOptFlt["presetsDeleted"]))
110 return false;
111
112 $customPresetId = $this->FindItemByPresetId($arItem["ID"]);
113
114 if($customPresetId)
115 {
116 $this->arItems[$customPresetId]["SORT"] = $arItem["SORT"];
117 return false;
118 }
119
120 if(isset($arItem["PRESET_ID"]))
121 {
122 $presetID = $this->FindItemByID($arItem["PRESET_ID"]);
123
124 if($presetID)
125 {
126 $arItem["SORT"] = $this->arItems[$presetID]["SORT"];
127 unset($this->arItems[$presetID]);
128 }
129
130 }
131
132 if(!isset($arItem["SORT"]))
133 $arItem["SORT"] = self::$defaultSort;
134
135 if($bInsertFirst)
136 {
137 $arNewItems[$arItem["ID"]] = $arItem;
138
139 foreach ($this->arItems as $key => $item)
140 $arNewItems[$key] = $item;
141
142 $this->arItems = $arNewItems;
143 }
144 else
145 $this->arItems[$arItem["ID"]] = $arItem;
146
147 unset($this->arItems[$arItem["ID"]][$arItem["ID"]]);
148
149 return true;
150 }
151
152 private static function CheckFields($arFields)
153 {
155 global $APPLICATION;
156
157 $aMsg = array();
158
159 if(!is_set($arFields, "FILTER_ID") || (is_set($arFields, "FILTER_ID") && trim($arFields["FILTER_ID"])==""))
160 $aMsg[] = array("id"=>"FILTER_ID", "text"=>GetMessage("filters_error_table_name"));
161
162 if(!is_set($arFields, "NAME") || (is_set($arFields, "NAME") && trim($arFields["NAME"])==""))
163 $aMsg[] = array("id"=>"NAME", "text"=>GetMessage("filters_error_name"));
164
165 if(!is_set($arFields, "FIELDS") || (is_set($arFields, "FIELDS") && trim($arFields["FIELDS"])==""))
166 $aMsg[] = array("id"=>"FIELDS", "text"=>GetMessage("filters_error_fields"));
167
168 if((!is_set($arFields, "USER_ID") && $arFields["COMMON"] != "Y") || (is_set($arFields, "USER_ID") && trim($arFields["USER_ID"])==""))
169 $aMsg[] = array("id"=>"USER_ID", "text"=>GetMessage("filters_error_user"));
170
171 if(is_set($arFields, "USER_ID"))
172 {
173 if(intval($arFields["USER_ID"]) > 0)
174 {
175 $res = CUser::GetByID(intval($arFields["USER_ID"]));
176 if(!$res->Fetch())
177 $aMsg[] = array("id"=>"USER_ID", "text"=>GetMessage("filters_error_user"));
178 }
179 }
180
181 if(!empty($aMsg))
182 {
183 $e = new CAdminException($aMsg);
184 $APPLICATION->ThrowException($e);
185 return false;
186 }
187
188 return true;
189 }
190
191 private static function FieldsExcess($arFields)
192 {
193 $arResult = array();
194
195 if(is_array($arFields))
196 foreach ($arFields as $key => $field)
198 "value" => $field,
199 "hidden" => "false",
200 );
201 return $arResult;
202 }
203
204 private static function FieldsDelHiddenEmpty($arFields)
205 {
206 $arResult = array();
207
208 if(!is_array($arFields))
209 return false;
210
211 foreach ($arFields as $key => $field)
212 {
213 if(!empty($field["value"]) || $field["hidden"] == "false")
215 "value" => $field["value"],
216 "hidden" => $field["hidden"],
217 );
218 }
219 return $arResult;
220 }
221
230 public function SetDefaultRows($rows)
231 {
232 if(is_array($rows))
233 $outRows = implode(",",$rows);
234 else
235 $outRows = $rows;
236
237 if(!$outRows)
238 return false;
239
240 if(!empty($this->arOptFlt["rows"]))
241 return true;
242
243 $this->arOptFlt["rows"] = $outRows;
244
245 return true;
246 }
247
248 public static function SetDefaultRowsOption($filterId, $rows)
249 {
250 if(!$filterId)
251 return false;
252
253 if(is_array($rows))
254 $outRows = implode(",",$rows);
255 else
256 $outRows = $rows;
257
258 if(!$outRows)
259 return false;
260
261 return CUserOptions::SetOption("filter", $filterId, array("rows" => $outRows),true);
262 }
263
291 public function AddPreset($arFields)
292 {
293 if(!isset($arFields["NAME"]) || empty($arFields["NAME"]))
294 return false;
295
296 if(!isset($arFields["ID"]) || empty($arFields["ID"]))
297 return false;
298
299 $item = array(
300 "ID" => "page-".$arFields["ID"],
301 "FILTER_ID" => $this->id,
302 "NAME" => $arFields["NAME"],
303 "EDITABLE" => false,
304 "PRESET" => "Y"
305 );
306
307 if(isset($arFields["FIELDS"]))
308 $item["FIELDS"] = CAdminFilter::FieldsExcess($arFields["FIELDS"]);
309 else
310 $item["FIELDS"] = array();
311
312 if(isset($arFields["SORT"]) && !empty($arFields["SORT"]))
313 $item["SORT"] = intval($arFields["SORT"]);
314 else
315 $item["SORT"] =self::$defaultPresetSort+count($this->arItems)*10;
316
317 if(isset($arFields["SORT_FIELD"]) && is_array($arFields["SORT_FIELD"]) && !empty($arFields["SORT_FIELD"]))
318 $item["SORT_FIELD"] = $arFields["SORT_FIELD"];
319
320 return $this->AddItem($item, false);
321 }
322
323
324 private function FindItemByPresetId($strID)
325 {
326 if (!is_array($this->arItems))
327 {
328 return false;
329 }
330
331 foreach ($this->arItems as $key => $item)
332 {
333 if (isset($item["PRESET_ID"]) && $item["PRESET_ID"] == $strID)
334 {
335 return $key;
336 }
337 }
338
339 return false;
340 }
341
342 private function FindItemByID($strID)
343 {
344 if(!is_array($this->arItems))
345 return false;
346
347 foreach ($this->arItems as $key => $item)
348 if($item["ID"] == $strID)
349 return $key;
350
351 return false;
352 }
353
354 public static function AddPresetToBase($arFields)
355 {
356 if(!isset($arFields["NAME"]) || empty($arFields["NAME"]))
357 return false;
358
359 $arFields["PRESET"] = "Y";
360 $arFields["COMMON"] = "Y";
361
362 if(isset($arFields["FIELDS"]))
363 $arFields["FIELDS"] = CAdminFilter::FieldsExcess($arFields["FIELDS"]);
364 else
365 $item["FIELDS"] = array();
366
367
368 if(!isset($arFields["SORT"]) || empty($arFields["SORT"]))
369 $arFields["SORT"] = self::$defaultPresetSort;
370
372 }
373
374 public static function Add($arFields)
375 {
376 global $DB;
377
378 $arFields["FIELDS"] = CAdminFilter::FieldsDelHiddenEmpty($arFields["FIELDS"]);
379
380 if(!$arFields["FIELDS"])
381 return false;
382
383 $arFields["FIELDS"] = serialize($arFields["FIELDS"]);
384
385 if(isset($arFields["SORT_FIELD"]))
386 $arFields["SORT_FIELD"] = serialize($arFields["SORT_FIELD"]);
387
388 if(!CAdminFilter::CheckFields($arFields))
389 return false;
390
391 $ID = $DB->Add("b_filters", $arFields, array("FIELDS"));
392 return $ID;
393 }
394
395 public static function Delete($ID)
396 {
397 global $DB;
398
399 return ($DB->Query("DELETE FROM b_filters WHERE ID='".intval($ID)."'"));
400 }
401
402 public static function Update($ID, $arFields)
403 {
404 global $DB;
405 $ID = intval($ID);
406
407 $arFields["FIELDS"] = CAdminFilter::FieldsDelHiddenEmpty($arFields["FIELDS"]);
408
409 if(!$arFields["FIELDS"])
410 return false;
411
412 $arFields["FIELDS"] = serialize($arFields["FIELDS"]);
413
414 if(isset($arFields["SORT_FIELD"]))
415 $arFields["SORT_FIELD"] = serialize($arFields["SORT_FIELD"]);
416
417 if(!CAdminFilter::CheckFields($arFields))
418 return false;
419
420 $strUpdate = $DB->PrepareUpdate("b_filters", $arFields);
421
422 $arBinds=Array();
423 if(is_set($arFields, "FIELDS"))
424 $arBinds["FIELDS"] = $arFields["FIELDS"];
425
426
427 if($strUpdate <> '')
428 {
429 $strSql = "UPDATE b_filters SET ".$strUpdate." WHERE ID=".$ID;
430 return $DB->QueryBind($strSql, $arBinds);
431
432 //if(!$DB->Query($strSql))
433 // return false;
434 }
435
436 return false;
437 }
438
439 public static function GetList($aSort=array(), $arFilter=Array(), $getCommon=true)
440 {
441 global $DB;
442
443 $arSqlSearch = Array();
444 if (is_array($arFilter))
445 {
446 foreach ($arFilter as $key => $val)
447 {
448 if ((string)$val == '' || $val=="NOT_REF")
449 continue;
450
451 switch(mb_strtoupper($key))
452 {
453 case "ID":
454 $arSqlSearch[] = GetFilterQuery("F.ID", $val, "N");
455 break;
456 case "USER_ID":
457 if($getCommon)
458 {
459 $arSqlSearch[] = "F.USER_ID=".intval($val)." OR F.COMMON='Y'";
460 }
461 else
462 {
463 $arSqlSearch[] = "F.USER_ID = ".intval($val);
464 }
465 break;
466 case "FILTER_ID":
467 $arSqlSearch[] = "F.FILTER_ID = '".$DB->ForSql($val)."'";
468 break;
469 case "NAME":
470 $arSqlSearch[] = GetFilterQuery("F.NAME", $val);
471 break;
472 case "FIELDS":
473 $arSqlSearch[] = GetFilterQuery("F.FIELDS", $val);
474 break;
475 case "COMMON":
476 $arSqlSearch[] = "F.COMMON = '".$DB->ForSql($val, 1)."'";
477 break;
478 case "PRESET":
479 $arSqlSearch[] = "F.PRESET = '".$DB->ForSql($val, 1)."'";
480 break;
481 case "LANGUAGE_ID":
482 $arSqlSearch[] = "F.LANGUAGE_ID = '".$DB->ForSql($val, 2)."'";
483 break;
484 case "PRESET_ID":
485 $arSqlSearch[] = GetFilterQuery("F.PRESET_ID", $val);
486 break;
487 case "SORT":
488 $arSqlSearch[] = GetFilterQuery("F.SORT", $val);
489 break;
490 case "SORT_FIELD":
491 $arSqlSearch[] = GetFilterQuery("F.SORT_FIELD", $val);
492 break;
493 }
494 }
495 }
496
497 $sOrder = "";
498 foreach($aSort as $key=>$val)
499 {
500 $ord = (mb_strtoupper($val) <> "ASC"? "DESC":"ASC");
501 switch(mb_strtoupper($key))
502 {
503 case "ID":
504 $sOrder .= ", F.ID ".$ord;
505 break;
506 case "USER_ID":
507 $sOrder .= ", F.USER_ID ".$ord;
508 break;
509 case "FILTER_ID":
510 $sOrder .= ", F.FILTER_ID ".$ord;
511 break;
512 case "NAME":
513 $sOrder .= ", F.NAME ".$ord;
514 break;
515 case "FIELDS":
516 $sOrder .= ", F.FIELDS ".$ord;
517 break;
518 case "COMMON":
519 $sOrder .= ", F.COMMON ".$ord;
520 break;
521 case "PRESET":
522 $sOrder .= ", F.PRESET ".$ord;
523 break;
524 case "LANGUAGE_ID":
525 $sOrder .= ", F.LANGUAGE_ID ".$ord;
526 break;
527 case "PRESET_ID":
528 $sOrder .= ", F.PRESET_ID ".$ord;
529 break;
530 case "SORT":
531 $sOrder .= ", F.SORT ".$ord;
532 break;
533 case "SORT_FIELD":
534 $sOrder .= ", F.SORT_FIELD ".$ord;
535 break;
536 }
537 }
538 if ($sOrder == '')
539 $sOrder = "F.ID ASC";
540 $strSqlOrder = " ORDER BY ".trim($sOrder, ", ");
541
542 $strSqlSearch = GetFilterSqlSearch($arSqlSearch,"noFilterLogic");
543 $strSql = "
544 SELECT
545 F.ID, F.USER_ID, F.NAME, F.FILTER_ID, F.FIELDS, F.COMMON, F.PRESET, F.LANGUAGE_ID, F.PRESET_ID, F.SORT, F.SORT_FIELD
546 FROM
547 b_filters F
548 WHERE
549 ".$strSqlSearch."
550 ".$strSqlOrder;
551
552 $res = $DB->Query($strSql);
553 return $res;
554 }
555
556 private static function Cmp($a, $b)
557 {
558 if ($a["SORT"] == $b["SORT"])
559 return ($a["ID"] < $b["ID"]) ? -1 : 1;
560
561 return ($a["SORT"] < $b["SORT"]) ? -1 : 1;
562 }
563
564 public function Begin()
565 {
566 uasort($this->arItems, "CAdminFilter::Cmp");
567
568 echo '
569<div id="adm-filter-tab-wrap-'.$this->id.'" class="adm-filter-wrap'.($this->arOptFlt['styleFolded'] === "Y" ? " adm-filter-folded" : "").'" style = "display: none;">
570 <table class="adm-filter-main-table">
571 <tr>
572 <td class="adm-filter-main-table-cell">
573 <div class="adm-filter-tabs-block" id="filter-tabs-'.$this->id.'">
574 <span id="adm-filter-tab-'.$this->id.'-0" class="adm-filter-tab adm-filter-tab-active" onclick="'.$this->id.'.SetActiveTab(this); '.$this->id.'.ApplyFilter(\'0\'); " title="'.GetMessage("admin_lib_filter_goto_dfilter").'">'.GetMessage("admin_lib_filter_filter").'</span>';
575
576 if(is_array($this->arItems) && !empty($this->arItems))
577 {
578 foreach($this->arItems as $filter_id => $filter)
579 {
580 $name = ($filter["NAME"] <> '' ? $filter["NAME"] : GetMessage("admin_lib_filter_no_name"));
581 echo '<span id="adm-filter-tab-'.$this->id.'-'.$filter_id.'" class="adm-filter-tab" onclick="'.$this->id.'.SetActiveTab(this); '.$this->id.'.ApplyFilter(\''.$filter_id.'\');" title="'.GetMessage("admin_lib_filter_goto_filter").": &quot;".htmlspecialcharsbx($name).'&quot;">'.htmlspecialcharsbx($name).'</span>';
582 }
583 }
584
585 echo '<span id="adm-filter-add-tab-'.$this->id.'" class="adm-filter-tab adm-filter-add-tab" onclick="'.$this->id.'.SaveAs();" title="'.GetMessage("admin_lib_filter_new").'"></span><span onclick="'.$this->id.'.SetFoldedView();" class="adm-filter-switcher-tab"><span id="adm-filter-switcher-tab" class="adm-filter-switcher-tab-icon"></span></span><span class="adm-filter-tabs-block-underlay"></span>
586 </div>
587 </td>
588 </tr>
589 <tr>
590 <td class="adm-filter-main-table-cell">
591 <div class="adm-filter-content" id="'.$this->id.'_content">
592 <div class="adm-filter-content-table-wrap">
593 <table cellspacing="0" class="adm-filter-content-table" id="'.$this->id.'">';
594 }
595
599 public function Buttons($aParams=false)
600 {
601 $hkInst = CHotKeys::getInstance();
602
603 echo '
604
605 </table>
606 </div>
607 <div class="adm-filter-bottom-separate" id="'.$this->id.'_bottom_separator"></div>
608 <div class="adm-filter-bottom">';
609
610 if($aParams !== false)
611 {
612 $url = $aParams["url"];
613 if(!str_contains($url, "?"))
614 $url .= "?";
615 else
616 $url .= "&";
617
618 if(!str_contains($url, "lang="))
619 $url .= "lang=".LANGUAGE_ID;
620
621 if(!$this->url)
622 $this->url = $url;
623
624 if(!$this->tableId)
625 $this->tableId = $aParams["table_id"];
626
627 if(isset($aParams['report']) && $aParams['report'])
628 {
629 echo '
630 <input type="submit" class="adm-btn" id="'.$this->id.'set_filter" name="set_filter" title="'.GetMessage("admin_lib_filter_set_rep_title").$hkInst->GetTitle("set_filter").'" onclick="return '.htmlspecialcharsbx($this->id.'.OnSet(\''.CUtil::AddSlashes($aParams["table_id"]).'\', \''.CUtil::AddSlashes($url).'\', this);').'" value="'.GetMessage("admin_lib_filter_set_rep").'">
631 <input type="submit" class="adm-btn" id="'.$this->id.'del_filter" name="del_filter" title="'.GetMessage("admin_lib_filter_clear_butt_title").$hkInst->GetTitle("del_filter").'" onclick="return '.htmlspecialcharsbx($this->id.'.OnClear(\''.CUtil::AddSlashes($aParams["table_id"]).'\', \''.CUtil::AddSlashes($url).'\', this);').'" value="'.GetMessage("admin_lib_filter_clear_butt").'">';
632 }
633 else
634 echo '
635 <input type="submit" class="adm-btn" id="'.$this->id.'set_filter" name="set_filter" title="'.GetMessage("admin_lib_filter_set_butt").$hkInst->GetTitle("set_filter").'" onclick="return '.htmlspecialcharsbx($this->id.'.OnSet(\''.CUtil::AddSlashes($aParams["table_id"]).'\', \''.CUtil::AddSlashes($url).'\', this);').'" value="'.GetMessage("admin_lib_filter_set_butt").'">
636 <input type="submit" class="adm-btn" id="'.$this->id.'del_filter" name="del_filter" title="'.GetMessage("admin_lib_filter_clear_butt").$hkInst->GetTitle("del_filter").'" onclick="return '.htmlspecialcharsbx($this->id.'.OnClear(\''.CUtil::AddSlashes($aParams["table_id"]).'\', \''.CUtil::AddSlashes($url).'\', this);').'" value="'.GetMessage("admin_lib_filter_clear_butt").'">';
637
638 }
639 if($this->popup)
640 {
641
642 echo '
643 <div class="adm-filter-setting-block">
644 <span class="adm-filter-setting" onClick="this.blur();'.$this->id.'.SaveMenuShow(this);return false;" hidefocus="true" title="'.GetMessage("admin_lib_filter_savedel_title").'"></span>
645 <span class="adm-filter-add-button" onClick="this.blur();'.$this->id.'.SettMenuShow(this);return false;" hidefocus="true" title="'.GetMessage("admin_lib_filter_more_title").'"></span>
646 </div>';
647 }
648 }
649
650 public function End()
651 {
652
653 echo '
654 </div>
655 </div>
656 </td>
657 </tr>
658 </table>
659</div>';
660
661 $sRowIds = $sVisRowsIds = "";
662
663
664 if(is_array($this->popup))
665 {
666 foreach($this->popup as $key=>$item)
667 if($item !== null)
668 $sRowIds .= ($sRowIds <> ""? ",":"").'"'.CUtil::JSEscape($key).'"';
669
670 $aRows = explode(",", $this->arOptFlt["rows"]);
671
672 if(is_array($aRows))
673 foreach($aRows as $row)
674 if(trim($row) <> "")
675 $sVisRowsIds .= ($sVisRowsIds <> ""? ",":"").'"'.CUtil::JSEscape(trim($row)).'":true';
676 }
677
678 $this->PrintSaveOptionsDIV();
679 $this->GetParamsFromCookie();
680
681 $openedTabUri = false;
682 $openedTabSes = $filteredTab = null;
683
684 if(isset($_REQUEST["adm_filter_applied"]) && !empty($_REQUEST["adm_filter_applied"]))
685 {
686 $openedTabUri = $_REQUEST["adm_filter_applied"];
687 }
688 else
689 {
690 $session = \Bitrix\Main\Application::getInstance()->getSession();
691 if (isset($session[self::SESS_PARAMS_NAME][$this->id]["activeTabId"]))
692 {
693 $openedTabSes = $session[self::SESS_PARAMS_NAME][$this->id]["activeTabId"];
694 }
695 if (isset($session[self::SESS_PARAMS_NAME][$this->id]["filteredId"]))
696 {
697 $filteredTab = $session[self::SESS_PARAMS_NAME][$this->id]["filteredId"];
698 }
699 unset($session);
700 }
701
702 echo '
703<script>
704 var '.$this->id.' = {};
705 BX.ready(function(){
706 '.$this->id.' = new BX.AdminFilter("'.$this->id.'", ['.$sRowIds.']);
707 if (!BX.adminMenu)
708 {
709 BX.adminMenu = new BX.adminMenu();
710 }
711 '.$this->id.'.state.init = true;
712 '.$this->id.'.state.folded = '.($this->arOptFlt["styleFolded"] === "Y" ? "true" : "false").';
713 '.$this->id.'.InitFilter({'.$sVisRowsIds.'});
714 '.$this->id.'.oOptions = ' . Json::encode($this->arItems) . ';
715 '.$this->id.'.popupItems = ' . Json::encode($this->popup) . ';
716 '.$this->id.'.InitFirst();
717 '.$this->id.'.url = "'.CUtil::JSEscape($this->url).'";
718 '.$this->id.'.table_id = "'.CUtil::JSEscape($this->tableId).'";
719 '.$this->id.'.presetsDeleted = ['.$this->arOptFlt["presetsDeletedJS"].'];';
720
721 if($filteredTab != null || $openedTabUri != false)
722 {
723 $tabToInit = ($openedTabUri ? $openedTabUri : $filteredTab);
724
725 echo '
726 '.$this->id.'.InitFilteredTab("'.CUtil::JSEscape($tabToInit).'");';
727 }
728
729 if($openedTabSes != null || $openedTabUri != false)
730 echo '
731 var openedFTab = '.$this->id.'.InitOpenedTab("'.CUtil::JSEscape($openedTabUri).'", "'.CUtil::JSEscape($openedTabSes).'");';
732
733 echo '
734 '.$this->id.'.state.init = false;
735 BX("adm-filter-tab-wrap-'.$this->id.'").style.display = "block";';
736
737 //making filter tabs draggable
738 if($this->url)
739 {
740 $registerUrl = (new Uri($this->url))
741 ->deleteParams(["adm_filter_applied", "adm_filter_preset"])
742 ->getUri()
743 ;
744
745 foreach($this->arItems as $filter_id => $filter)
746 {
747 $arParamsAdd = array("adm_filter_applied"=>$filter_id);
748
749 if(isset($filter["PRESET_ID"]))
750 $arParamsAdd["adm_filter_preset"] = $filter["PRESET_ID"];
751
752 $filterUrl = (new Uri($registerUrl))
753 ->addParams($arParamsAdd)
754 ->getUri();
755
756 echo "
757 if(BX.adminMenu && BX.adminMenu.registerItem) // todo: find true reason in sliders.
758 {
759 BX.adminMenu.registerItem('adm-filter-tab-".$this->id.'-'.$filter_id."', {URL:'".$filterUrl."', TITLE: true});
760 }";
761 }
762 }
763
764 echo '
765 });
766</script>';
767
768 $hkInst = CHotKeys::getInstance();
769 $Execs = $hkInst->GetCodeByClassName("CAdminFilter");
770 echo $hkInst->PrintJSExecs($Execs);
771 }
772
773
774 //experemental
775 //extracting filter params from cookie and transfer them to session
776 private function GetParamsFromCookie()
777 {
778 $cookieName = COption::GetOptionString("main", "cookie_name", "BITRIX_SM")."_ADM_FLT_PARAMS";
779 if(!isset($_COOKIE[$cookieName]) || $_COOKIE[$cookieName] == "")
780 return false;
781
782 $aParams = explode(",",$_COOKIE[$cookieName]);
783 SetCookie($cookieName,'');
784
785 if(empty($aParams))
786 return false;
787
788 $filterId = "";
789
790 foreach ($aParams as $key => $aValue)
791 {
792 $aParam = explode(":",$aValue);
793 unset($aParams[$key]);
794
795 if(!empty($aParam) && $aParam[0] != "filter_id")
796 $aParams[$aParam[0]] = $aParam[1];
797 elseif($aParam[0] == "filter_id")
798 $filterId = $aParam[1];
799 }
800
801 if($filterId == "")
802 return false;
803
804 foreach ($aParams as $paramName => $value)
805 \Bitrix\Main\Application::getInstance()->getSession()[self::SESS_PARAMS_NAME][$filterId][$paramName] = $value;
806
807 return true;
808 }
809
810 //experemental
811 private function IsFiltered()
812 {
813 $fltTable = \Bitrix\Main\Application::getInstance()->getSession()["SESS_ADMIN"][$this->tableId];
814
815 if(!isset($fltTable) || !is_array($fltTable))
816 return false;
817
818 foreach ($fltTable as $value)
819 if(!is_null($value))
820 return true;
821
822 return false;
823 }
824
825 private function PrintSaveOptionsDIV()
826 {
827 global $USER;
828 $isAdmin = $USER->CanDoOperation('edit_other_settings');
829 ?>
830<div style="display:none">
831 <div id="filter_save_opts_<?=$this->id?>">
832 <table width="100%">
833 <tr>
834 <td align="right" width="40%"><?=GetMessage("admin_lib_filter_sett_name")?></td>
835 <td><input type="text" name="save_filter_name" value="" size="30" maxlength="255"></td>
836 </tr>
837 <?if($isAdmin):?>
838 <tr>
839 <td align="right" width="40%"><?=GetMessage("admin_lib_filter_sett_common")?></td>
840 <td><input type="checkbox" name="common" ></td>
841 </tr>
842 <?endif;?>
843 </table>
844 </div>
845</div>
846 <?
847 }
848
852 public static function UnEscape()
853 {
854 }
855}
& quot
Определения access_edit.php:332
global $APPLICATION
Определения include.php:80
$arResult
Определения generate_coupon.php:16
Определения json.php:9
Определения uri.php:17
Определения admin_filter.php:13
static AddPresetToBase($arFields)
Определения admin_filter.php:354
SetDefaultRows($rows)
Определения admin_filter.php:230
static Delete($ID)
Определения admin_filter.php:395
static Add($arFields)
Определения admin_filter.php:374
AddPreset($arFields)
Определения admin_filter.php:291
static SetDefaultRowsOption($filterId, $rows)
Определения admin_filter.php:248
Begin()
Определения admin_filter.php:564
static GetList($aSort=array(), $arFilter=Array(), $getCommon=true)
Определения admin_filter.php:439
const SESS_PARAMS_NAME
Определения admin_filter.php:23
static Update($ID, $arFields)
Определения admin_filter.php:402
__construct($id, $popup=false, $arExtraParams=array())
Определения admin_filter.php:25
$id
Определения admin_filter.php:14
static GetByID($ID)
Определения user.php:3820
$arFields
Определения dblapprove.php:5
</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
GetFilterSqlSearch($arSqlSearch=array(), $FilterLogic="FILTER_logic")
Определения filter_tools.php:397
GetFilterQuery($field, $val, $procent="Y", $ex_sep=array(), $clob="N", $div_fields="Y", $clob_upper="N")
Определения filter_tools.php:383
if($ajaxMode) $ID
Определения get_user.php:27
$uid
Определения hot_keys_act.php:8
$filter
Определения iblock_catalog_list.php:54
global $DB
Определения cron_frame.php:29
global $USER
Определения csv_new_run.php:40
is_set($a, $k=false)
Определения tools.php:2133
GetMessage($name, $aReplace=null)
Определения tools.php:3397
$name
Определения menu_edit.php:35
return false
Определения prolog_main_admin.php:185
if(empty($signedUserToken)) $key
Определения quickway.php:257
lang
Определения options.php:182
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936
else $a
Определения template.php:137
$val
Определения options.php:1793
margin right
Определения options_user_settings.php:273
$rows
Определения options.php:264
$arFilter
Определения user_search.php:106
$dbRes
Определения yandex_detail.php:168
adm detail iblock types adm detail iblock list tr_SITE_ID display
Определения yandex_setup.php:388