1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
admin_form.php
См. документацию.
1<?php
2
4
11
13{
17 var $group = "";
18 var $group_ajax = false;
22 var $arButtonsParams = false;
24
29
31 var $bCustomFields = false;
33 var $bCurrentReq = false;
34
35 var $bShowSettings = true;
36
38 protected $session;
39
40 public function __construct($name, $tabs, $bCanExpand = true, $bDenyAutosave = false)
41 {
42 if (is_array($tabs))
43 {
44 foreach (array_keys($tabs) as $index)
45 {
46 $tabs[$index]['required'] = $tabs[$index]['required'] ?? false;
47 }
48 }
49 parent::__construct($name, $tabs, $bCanExpand, $bDenyAutosave);
50 $this->session = Main\Application::getInstance()->getSession();
51
52 $this->tabIndex = 0;
53 foreach($this->tabs as $i => $arTab)
54 $this->tabs[$i]["FIELDS"] = array();
55
56 //Parse customized labels
57 $this->arCustomLabels = array();
58
59 $arDisabled = CUserOptions::GetOption("form", $this->name."_disabled", "N");
60 if(!is_array($arDisabled) || $arDisabled["disabled"] !== "Y")
61 {
62 foreach (CAdminFormSettings::getTabsArray($this->name) as $arTab)
63 {
64 foreach ($arTab["FIELDS"] as $customID => $customName)
65 {
66 $this->arCustomLabels[$customID] = $customName;
67 }
68 }
69 }
70 ob_start();
71 }
72
73 function SetSelectedTab()
74 {
75 parent::SetSelectedTab();
76
77 $arDisabled = CUserOptions::GetOption("form", $this->name."_disabled", "N");
78 if(!is_array($arDisabled) || $arDisabled["disabled"] !== "Y")
79 {
80 if(isset($_REQUEST[$this->name."_active_tab"]))
81 {
82 $arCustomTabs = CAdminFormSettings::getTabsArray($this->name);
83 foreach($arCustomTabs as $tab_id => $arTab)
84 {
85 if($tab_id == $_REQUEST[$this->name."_active_tab"])
86 {
87 $this->selectedTab = $_REQUEST[$this->name."_active_tab"];
88 break;
89 }
90 }
91 }
92 }
93 }
94
95 function SetShowSettings($v)
96 {
97 $this->bShowSettings = $v;
98 }
99
100 function ShowSettings()
101 {
104 global $APPLICATION, $USER;
105
106 $APPLICATION->RestartBuffer();
107
108 require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_js.php");
109
110 require($_SERVER['DOCUMENT_ROOT']."/bitrix/modules/main/interface/settings_admin_form.php");
111
112 require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin_js.php");
113
114 die();
115 }
116
117 function SetFieldsValues($bVarsFromForm, $db_record, $default_values)
118 {
119 foreach($default_values as $key=>$value)
120 $this->SetFieldValue($key, $bVarsFromForm, $db_record, $value);
121 }
122
123 function SetFieldValue($field_name, $bVarsFromForm, $db_record, $default_value = false)
124 {
126 {
127 if(array_key_exists($field_name, $_REQUEST))
128 $this->arFieldValues[$field_name] = $_REQUEST[$field_name];
129 else
130 $this->arFieldValues[$field_name] = $default_value;
131 }
132 else
133 {
134 if(is_array($db_record) && array_key_exists($field_name, $db_record) && isset($db_record[$field_name]))
135 $this->arFieldValues[$field_name] = $db_record[$field_name];
136 else
137 $this->arFieldValues[$field_name] = $default_value;
138 }
139 }
140
141 function GetFieldValue($field_name)
142 {
143 return $this->arFieldValues[$field_name];
144 }
145
146 function GetHTMLFieldValue($field_name)
147 {
148 return htmlspecialcharsbx($this->arFieldValues[$field_name]);
149 }
150
151 function GetHTMLFieldValueEx($field_name)
152 {
153 return htmlspecialcharsex($this->arFieldValues[$field_name]);
154 }
155
156 function GetFieldLabel($id)
157 {
158 return $this->arFields[$id]["content"];
159 }
160
161 function ShowTabButtons()
162 {
164 global $APPLICATION;
165
166 $s = '';
167 if (!$this->bPublicMode)
168 {
169 if ($this->bShowSettings)
170 {
171 $link = DeleteParam(array("mode"));
172 $link = $APPLICATION->GetCurPage()."?mode=settings".($link <> ""? "&".$link:"");
173
174 $aAdditionalMenu = array();
175
176 $aAdditionalMenu[] = array(
177 "TEXT"=>GetMessage("admin_lib_menu_settings"),
178 "TITLE"=>GetMessage("admin_lib_context_sett_title"),
179 "ONCLICK"=>$this->name.".ShowSettings('".htmlspecialcharsbx(CUtil::JSEscape($link))."')",
180 "GLOBAL_ICON"=>"adm-menu-setting"
181 );
182
183 $nameExists = isset($this->session["ADMIN_CUSTOM_FIELDS"])
184 && is_array($this->session["ADMIN_CUSTOM_FIELDS"])
185 && array_key_exists($this->name, $this->session["ADMIN_CUSTOM_FIELDS"])
186 ;
187 if($this->bCustomFields)
188 {
189 if ($nameExists)
190 {
191 $aAdditionalMenu[] = array(
192 "TEXT" => GetMessage("admin_lib_sett_sett_enable_text"),
193 "TITLE" => GetMessage("admin_lib_sett_sett_enable"),
194 "ONCLICK" => $this->name.'.EnableSettings();',
195 "ICON" => 'custom-fields-on',
196 );
197 }
198 else
199 {
200 $aAdditionalMenu[] = array(
201 "TEXT" => GetMessage("admin_lib_sett_sett_disable_text"),
202 "TITLE" => GetMessage("admin_lib_sett_sett_disable"),
203 "ONCLICK" => $this->name.'.DisableSettings();',
204 "ICON" => 'custom-fields-off'
205 );
206
207 }
208 }
209
210 if (count($aAdditionalMenu) > 1)
211 {
212 $sMenuUrl = "BX.adminShowMenu(this, ".htmlspecialcharsbx(CAdminPopup::PhpToJavaScript($aAdditionalMenu)).", {active_class: 'bx-settings-btn-active'});";
213 $s .= '<span id="'.$this->name.'_settings_btn" class="adm-detail-settings adm-detail-settings-arrow'.($nameExists ? '' : ' adm-detail-settings-active').'" onclick="'.$sMenuUrl.'"></span>';
214 }
215 else
216 {
217 $s .= '<a class="adm-detail-settings" href="javascript:void(0)" onclick="'.$aAdditionalMenu[0]['ONCLICK'].'"></a>';
218 }
219 }
220 }
221
222 return $s.parent::ShowTabButtons();
223 }
224
225 function Begin($arParams = array())
226 {
227 $this->tabIndex = -1;
228 $this->arParams = (is_array($arParams) ? $arParams : []);
229
230 $this->arParams['FORM_ATTRIBUTES'] = (string)($this->arParams['FORM_ATTRIBUTES'] ?? '');
231 }
232
234 {
235 if($this->tabIndex >= count($this->tabs))
236 return;
237
238 $this->tabIndex++;
239 while(
240 isset($this->tabs[$this->tabIndex])
241 && array_key_exists("CUSTOM", $this->tabs[$this->tabIndex])
242 && $this->tabs[$this->tabIndex]["CUSTOM"] == "Y"
243 )
244 {
245 ob_start();
246 $this->customTabber->ShowTab($this->tabs[$this->tabIndex]["DIV"]);
247 $this->tabs[$this->tabIndex]["required"] = true;
248 $this->tabs[$this->tabIndex]["CONTENT"] = ob_get_contents();
249 ob_end_clean();
250 $this->tabIndex++;
251 }
252 }
253
254 function Show()
255 {
257 global $APPLICATION;
258
259 //Save form defined tabs
260 $this->arSavedTabs = $this->tabs;
261 $this->arSystemTabs = array();
262 $this->arReqiredTabs = array();
263
264 foreach($this->tabs as $arTab)
265 {
266 $this->arSystemTabs[$arTab["DIV"]] = $arTab;
267
268 if(is_array($arTab["FIELDS"]))
269 {
270 foreach($arTab["FIELDS"] as $arField)
271 $this->arFields[$arField["id"]] = $arField;
272 }
273
274 if (
275 $arTab["required"]
276 && (
277 (
278 isset($arTab["FIELDS"])
279 && is_array($arTab["FIELDS"])
280 )
281 || isset($arTab["CONTENT"])
282 )
283 )
284 {
285 $this->arReqiredTabs[$arTab["DIV"]] = $arTab;
286 }
287 }
288 //Save form defined fields
289 $this->arSystemFields = $this->arFields;
290
291 $arCustomTabs = CAdminFormSettings::getTabsArray($this->name);
292 if (!empty($arCustomTabs))
293 {
294 $this->bCustomFields = true;
295 $this->tabs = array();
296 foreach($arCustomTabs as $tab_id => $arTab)
297 {
298 if(array_key_exists($tab_id, $this->arSystemTabs))
299 {
300 $arNewTab = $this->arSystemTabs[$tab_id];
301 $arNewTab["TAB"] = $arTab["TAB"];
302 $arNewTab["FIELDS"] = array();
303 }
304 else
305 {
306 $arNewTab = array(
307 "DIV" => $tab_id,
308 "TAB" => $arTab["TAB"],
309 "ICON" => "main_user_edit",
310 "TITLE" => "",
311 "FIELDS" => array(),
312 );
313 }
314
315 $bHasFields = false;
316 foreach($arTab["FIELDS"] as $field_id => $content)
317 {
318 if(array_key_exists($field_id, $this->arSystemFields))
319 {
320 $arNewField = $this->arSystemFields[$field_id];
321 $arNewField["content"] = $content;
322 $bHasFields = true;
323 }
324 elseif(array_key_exists($field_id, $this->arForbiddenFields))
325 {
326 $arNewField = false;
327 }
329 {
330 $arNewField = array(
331 "id" => $field_id,
332 "content" => $content,
333 "html" => '<td colspan="2">'.htmlspecialcharsex($content).'</td>',
334 "delimiter" => true,
335 );
336 }
337 else
338 {
339 $arNewField = false;
340 }
341
342 if(is_array($arNewField))
343 {
344 $this->arFields[$field_id] = $arNewField;
345 $arNewTab["FIELDS"][] = $arNewField;
346 foreach ($this->arReqiredTabs as $tab_id => $arReqTab)
347 {
348 if (is_array($arReqTab["FIELDS"]))
349 {
350 foreach ($arReqTab["FIELDS"] as $i => $arReqTabField)
351 {
352 if ($arReqTabField["id"] == $field_id)
353 unset($this->arReqiredTabs[$tab_id]["FIELDS"][$i]);
354 }
355 }
356 }
357 }
358 }
359
360 if ($bHasFields)
361 $this->tabs[] = $arNewTab;
362 }
363
364 foreach ($this->arReqiredTabs as $arReqTab)
365 {
366 if (!empty($arReqTab["FIELDS"]))
367 {
368 $this->tabs[] = $arReqTab;
369 foreach ($arReqTab["FIELDS"] as $arReqTabField)
370 {
371 $this->arFields[$arReqTabField["id"]] = $arReqTabField;
372 }
373 }
374 elseif (isset($arReqTab["CONTENT"]))
375 {
376 $this->tabs[] = $arReqTab;
377 }
378 }
379 }
380
381 if (isset($_REQUEST["mode"]) && $_REQUEST["mode"] === "settings")
382 {
383 ob_end_clean();
384 $this->ShowSettings();
385 die();
386 }
387 else
388 {
389 ob_end_flush();
390 }
391
392 if (
393 !isset($this->session["ADMIN_CUSTOM_FIELDS"])
394 || !is_array($this->session["ADMIN_CUSTOM_FIELDS"])
395 )
396 {
397 $this->session["ADMIN_CUSTOM_FIELDS"] = [];
398 }
399 $arDisabled = CUserOptions::GetOption("form", $this->name."_disabled", "N");
400 if(is_array($arDisabled) && $arDisabled["disabled"] === "Y")
401 {
402 $this->session["ADMIN_CUSTOM_FIELDS"][$this->name] = true;
403 $this->tabs = $this->arSavedTabs;
404 $this->arFields = $this->arSystemFields;
405 }
406 else
407 {
408 unset($this->session["ADMIN_CUSTOM_FIELDS"][$this->name]);
409 }
410
411 if(isset($_REQUEST[$this->name."_active_tab"]))
412 $this->selectedTab = $_REQUEST[$this->name."_active_tab"];
413 else
414 $this->selectedTab = $this->tabs[0]["DIV"];
415
416 foreach (array_keys($this->arFields) as $index)
417 {
418 $this->arFields[$index]['custom_html'] = (string)($this->arFields[$index]['custom_html'] ?? '');
419 $this->arFields[$index]['delimiter'] = (bool)($this->arFields[$index]['delimiter'] ?? false);
420 $this->arFields[$index]['valign'] = (string)($this->arFields[$index]['valign'] ?? '');
421 }
422
423 //To show
424 $arHiddens = $this->arFields;
425 echo $this->sPrologContent;
426 if(array_key_exists("FORM_ACTION", $this->arParams))
427 $action = htmlspecialcharsbx($this->arParams["FORM_ACTION"]);
428 else
429 $action = htmlspecialcharsbx($APPLICATION->GetCurPage());
430 echo '<form method="POST" action="'.$action.'" enctype="multipart/form-data" id="'.$this->name.'_form" name="'.$this->name.'_form"'.($this->arParams["FORM_ATTRIBUTES"] <> ''? ' '.$this->arParams["FORM_ATTRIBUTES"]:'').'>';
431
432 $htmlGroup = "";
433 if($this->group)
434 {
435 if (!empty($arCustomTabs))
436 {
437 foreach($this->tabs as $arTab)
438 {
439 if(is_array($arTab["FIELDS"]))
440 {
441 foreach($arTab["FIELDS"] as $arField)
442 {
443 if(
444 ($this->arFields[$arField["id"]]["custom_html"] !== '')
445 || ($this->arFields[$arField["id"]]["html"] !== '')
446 )
447 {
448 $p = array_search($arField["id"], $this->arFields[$this->group]["group"]);
449 if($p !== false)
450 unset($this->arFields[$this->group]["group"][$p]);
451 }
452 }
453 }
454 }
455 }
456
457 if(!empty($this->arFields[$this->group]["group"]))
458 {
459 $htmlGroup .= '<tr class="heading" id="tr_'.$this->arFields[$this->group]["id"].'">'
460 .$this->arFields[$this->group]["html"].'</tr>'
461 ."\n";
462 }
463 }
464
465 $this->OnAdminTabControlBegin();
466 $this->tabIndex = 0;
467 while($this->tabIndex < count($this->tabs))
468 {
469 ob_start();//Start of the tab content
470 $arTab = $this->tabs[$this->tabIndex];
471 if(is_array($arTab["FIELDS"]))
472 {
473 foreach($arTab["FIELDS"] as $arField)
474 {
475 if(isset($this->arFields[$arField["id"]]["group"]))
476 {
477 if(!empty($this->arFields[$arField["id"]]["group"]))
478 {
479 echo $htmlGroup;
480 foreach($this->arFields[$arField["id"]]["group"] as $p)
481 {
482 if($this->arFields[$p]["custom_html"])
483 echo preg_replace("/^\\s*<tr/is", "<tr class=\"bx-in-group\"", $this->arFields[$p]["custom_html"]);
484 elseif($this->arFields[$p]["html"] && !$this->arFields[$p]["delimiter"])
485 echo '<tr class="bx-in-group" '.($this->arFields[$p]["valign"] <> ''? ' valign="'.$this->arFields[$p]["valign"].'"':'').' id="tr_'.$p.'">', $this->arFields[$p]["html"], "</tr>\n";
486 unset($arHiddens[$this->arFields[$p]["id"]]);
487 $this->arFields[$p] = array();
488 }
489 }
490 }
491 elseif(!empty($this->arFields[$arField["id"]]["custom_html"]))
492 {
493 if($this->group_ajax)
494 echo preg_replace("#<script[^>]*>.*?</script>#imu", "", $this->arFields[$arField["id"]]["custom_html"]);
495 else
496 echo $this->arFields[$arField["id"]]["custom_html"];
497 }
498 elseif(!empty($this->arFields[$arField["id"]]["html"]))
499 {
500 $rowClass = (
501 array_key_exists("rowClass", $this->arFields[$arField["id"]])
502 ? ' class="'.$this->arFields[$arField["id"]]["rowClass"].'"'
503 : ''
504 );
505
506 if($this->arFields[$arField["id"]]["delimiter"])
507 echo '<tr class="heading" id="tr_'.$arField["id"].'"'.$rowClass.'>';
508 else
509 echo '<tr'.($this->arFields[$arField["id"]]["valign"] <> ''? ' valign="'.$this->arFields[$arField["id"]]["valign"].'"':'').' id="tr_'.$arField["id"].'"'.$rowClass.'>';
510 echo $this->arFields[$arField["id"]]["html"].'</tr>'."\n";
511 }
512 unset($arHiddens[$arField["id"]]);
513 }
514 }
515 elseif (isset($arTab["CONTENT"]))
516 {
517 echo $arTab["CONTENT"];
518 }
519 $tabContent = ob_get_contents();
520 ob_end_clean(); //Dispose tab content
521
522 if ($tabContent == "")
523 {
524 array_splice($this->tabs, $this->tabIndex, 1); // forget about tab
525 }
526 else
527 {
528
529 $this->tabs[$this->tabIndex]["CONTENT"] = $tabContent;
530 $this->tabIndex++;
531 }
532 }
533
534 //sometimes form settings are incorrect but we must show required fields
535 $requiredFields = '';
536 foreach($arHiddens as $arField)
537 {
538 if(isset($arField["required"]) && $arField["required"])
539 {
540 if(!empty($this->arFields[$arField["id"]]["custom_html"]))
541 {
542 $requiredFields .= $this->arFields[$arField["id"]]["custom_html"];
543 }
544 elseif(!empty($this->arFields[$arField["id"]]["html"]))
545 {
546 if($this->arFields[$arField["id"]]["delimiter"])
547 $requiredFields .= '<tr class="heading">';
548 else
549 $requiredFields .= '<tr>';
550 $requiredFields .= $this->arFields[$arField["id"]]["html"].'</tr>';
551 }
552 unset($arHiddens[$arField["id"]]);
553 }
554 }
555 if($requiredFields <> '')
556 {
557 $this->tabs[] = array(
558 "CONTENT" => $requiredFields,
559 "DIV" => "bx_req",
560 "TAB" => GetMessage("admin_lib_required"),
561 "TITLE" => GetMessage("admin_lib_required"),
562 );
563 }
564
565 parent::Begin();
566
567 while($this->tabIndex < count($this->tabs))
568 {
569 $this->BeginNextTab();
570 if (isset($this->tabs[$this->tabIndex])) // last item not exists, because tabIndex starts from 0
571 {
572 echo $this->tabs[$this->tabIndex]["CONTENT"];
573 }
574 }
575
576 parent::Buttons($this->arButtonsParams);
577 echo $this->sButtonsContent;
578
579 $this->End();
580 echo $this->sEpilogContent;
581
582 echo '<span class="bx-fields-hidden">';
583 foreach($arHiddens as $arField)
584 {
585 echo $arField["hidden"] ?? '';
586 }
587 echo '</span>';
588
589 echo '</form>';
590 }
591
592 function GetName()
593 {
594 return $this->name;
595 }
596
597 function GetFormName()
598 {
599 return $this->name."_form";
600 }
601
603 {
604 $bColumnNeeded = str_ends_with($content, ":");
605
606 if($id === false)
607 return $this->sCurrentLabel;
608 elseif(array_key_exists($id, $this->arCustomLabels))
609 return $this->arCustomLabels[$id].($bColumnNeeded? ":": "");
610 else
611 return $content;
612 }
613
614 function GetCustomLabelHTML($id = false, $content = "")
615 {
616 $bColumnNeeded = false;
617 if ($content !== '')
618 {
619 $bColumnNeeded = str_ends_with($content, ":");
620 }
621
622 if ($id === false)
623 {
624 return (
625 $this->bCurrentReq
626 ? '<span class="adm-required-field">' . htmlspecialcharsex($this->sCurrentLabel) . '</span>'
627 : htmlspecialcharsex($this->sCurrentLabel)
628 );
629 }
630 elseif (array_key_exists($id, $this->arCustomLabels))
631 {
632 return (
633 isset($this->arFields[$id]['required']) && $this->arFields[$id]['required']
634 ? '<span class="adm-required-field">'
635 . htmlspecialcharsex($this->arCustomLabels[$id])
636 . ($bColumnNeeded ? ":" : "")
637 . '</span>'
638 : htmlspecialcharsex($this->arCustomLabels[$id]) . ($bColumnNeeded ? ":" : "")
639 );
640 }
641 else
642 {
643 return (
644 isset($this->tabs[$this->tabIndex]["FIELDS"][$id]["required"]) && $this->tabs[$this->tabIndex]["FIELDS"][$id]["required"]
645 ? '<span class="adm-required-field">' . htmlspecialcharsex($content) . '</span>'
646 : htmlspecialcharsex($content)
647 );
648 }
649 }
650
651 function ShowWarnings($form, $messages, $aFields=false)
652 {
653 parent::ShowWarnings($this->name.'_form', $messages, $aFields);
654 }
655
657 {
658 ob_start();
659 }
660
662 {
663 $this->sPrologContent = ob_get_contents();
664 ob_end_clean();
665 }
666
668 {
669 ob_start();
670 }
671
673 {
674 $this->sEpilogContent = ob_get_contents();
675 ob_end_clean();
676 }
677
678 function AddFieldGroup($id, $content, $arFields, $bAjax = false)
679 {
680 $this->group = $id;
681 $this->group_ajax = $bAjax;
682 $this->tabs[$this->tabIndex]["FIELDS"][$id] = array(
683 "id" => $id,
684 "content" => $content,
685 "group" => $arFields,
686 "html" => '<td colspan="2">'.$this->GetCustomLabelHTML($id, $content).'</td>',
687 );
688 }
689
690 function HideField($id)
691 {
692 $this->arForbiddenFields[$id] = true;
693 }
694
695 function AddSection($id, $content, $required = false)
696 {
697 $this->tabs[$this->tabIndex]["FIELDS"][$id] = array(
698 "id" => $id,
699 "required" => $required,
700 "delimiter" => true,
701 "content" => $content,
702 "html" => '<td colspan="2">'.($required? '<span class="adm-required-field">'.$this->GetCustomLabelHTML($id, $content).'</span>': $this->GetCustomLabelHTML($id, $content)).'</td>',
703 );
704 }
705
706 function AddViewField($id, $content, $html, $required=false)
707 {
708 $this->tabs[$this->tabIndex]["FIELDS"][$id] = array(
709 "id" => $id,
710 "required" => $required,
711 "content" => $content,
712 "html" => ($html <> ''? '<td width="40%">'.$this->GetCustomLabelHTML($id, $content).'</td><td>'.$html.'</td>' : ''),
713 );
714 }
715
716 function AddDropDownField($id, $content, $required, $arSelect, $value=false, $arParams=array())
717 {
718 if($value === false)
719 $value = $this->arFieldValues[$id];
720
721 $html = '<select name="'.$id.'"';
722 foreach($arParams as $param)
723 $html .= ' '.$param;
724 $html .= '>';
725
726 foreach($arSelect as $key => $val)
727 $html .= '<option value="'.htmlspecialcharsbx($key).'"'.($value == $key? ' selected': '').'>'.htmlspecialcharsex($val).'</option>';
728 $html .= '</select>';
729
730 $this->tabs[$this->tabIndex]["FIELDS"][$id] = array(
731 "id" => $id,
732 "required" => $required,
733 "content" => $content,
734 "html" => '<td width="40%">'.($required? '<span class="adm-required-field">'.$this->GetCustomLabelHTML($id, $content).'</span>': $this->GetCustomLabelHTML($id, $content)).'</td><td>'.$html.'</td>',
735 "hidden" => '<input type="hidden" name="'.$id.'" value="'.htmlspecialcharsbx($value).'">',
736 );
737 }
738
739 function AddEditField($id, $content, $required, $arParams = array(), $value = false)
740 {
741 $arParams['id'] = (string)($arParams['id'] ?? '');
742 $arParams['size'] = (int)($arParams['size'] ?? 0);
743 $arParams['maxlength'] = (int)($arParams['maxlength'] ?? 0);
744 if($value === false)
745 $value = htmlspecialcharsbx($this->arFieldValues[$id]);
746 else
748
749 $html = '<input type="text" name="'.$id.'" value="'.$value.'"';
750 if ($arParams['size'] > 0)
751 {
752 $html .= ' size="' . $arParams['size'] . '"';
753 }
754 if ($arParams['maxlength'] > 0)
755 {
756 $html .= ' maxlength="' . $arParams['maxlength'] . '"';
757 }
758 if ($arParams["id"] !== '')
759 {
760 $html .= ' id="' . htmlspecialcharsbx($arParams["id"]) . '"';
761 }
762 $html .= '>';
763
764 $this->tabs[$this->tabIndex]["FIELDS"][$id] = array(
765 "id" => $id,
766 "required" => $required,
767 "content" => $content,
768 "html" => '<td width="40%">'.($required? '<span class="adm-required-field">'.$this->GetCustomLabelHTML($id, $content).'</span>': $this->GetCustomLabelHTML($id, $content)).'</td><td>'.$html.'</td>',
769 "hidden" => '<input type="hidden" name="'.$id.'" value="'.$value.'">',
770 );
771 }
772
773 function AddTextField($id, $label, $value, $arParams=array(), $required=false)
774 {
776
777 $html = '<textarea name="'.$id.'"';
778 if(intval($arParams["cols"]) > 0)
779 $html .= ' cols="'.intval($arParams["cols"]).'"';
780 if(intval($arParams["rows"]) > 0)
781 $html .= ' rows="'.intval($arParams["rows"]).'"';
782 $html .= '>'.$value.'</textarea>';
783
784 $this->tabs[$this->tabIndex]["FIELDS"][$id] = array(
785 "id" => $id,
786 "required" => $required,
787 "content" => $label,
788 "html" => '<td width="40%">'.($required? '<span class="adm-required-field">'.$this->GetCustomLabelHTML($id, $label).'</span>': $this->GetCustomLabelHTML($id, $label)).'</td><td>'.$html.'</td>',
789 "hidden" => '<input type="hidden" name="'.$id.'" value="'.$value.'">',
790 "valign" => "top",
791 );
792 }
793
794 function AddCalendarField($id, $label, $value, $required=false)
795 {
796 $html = CalendarDate($id, $value, $this->GetFormName());
797
799
800 $this->tabs[$this->tabIndex]["FIELDS"][$id] = array(
801 "id" => $id,
802 "required" => $required,
803 "content" => $label,
804 "html" => '<td width="40%">'.($required? '<span class="adm-required-field">'.$this->GetCustomLabelHTML($id, $label).'</span>': $this->GetCustomLabelHTML($id, $label)).'</td><td>'.$html.'</td>',
805 "hidden" => '<input type="hidden" name="'.$id.'" value="'.$value.'">',
806 );
807 }
808
809 function AddCheckBoxField($id, $content, $required, $value, $checked, $arParams=array())
810 {
811 if (is_array($value))
812 {
813 $html = '<input type="hidden" name="'.$id.'" value="'.htmlspecialcharsbx($value[1]).'">
814 <input type="checkbox" name="'.$id.'" value="'.htmlspecialcharsbx($value[0]).'"'.($checked? ' checked': '');
815 $hidden = '<input type="hidden" name="'.$id.'" value="'.htmlspecialcharsbx($checked? $value[0]: $value[1]).'">';
816 }
817 else
818 {
819 $html = '<input type="checkbox" name="'.$id.'" value="'.htmlspecialcharsbx($value).'"'.($checked? ' checked': '');
820 $hidden = '<input type="hidden" name="'.$id.'" value="'.htmlspecialcharsbx($value).'">';
821 }
822
823 foreach($arParams as $param)
824 $html .= ' '.$param;
825 $html .= '>';
826
827 $label = $this->GetCustomLabelHTML($id, $content);
828 if ($required)
829 {
830 $label = '<span class="adm-required-field">'.$label.'</span>';
831 }
832
833 $this->tabs[$this->tabIndex]["FIELDS"][$id] = array(
834 "id" => $id,
835 "required" => $required,
836 "content" => $content,
837 "html" => '<td width="40%">'.$label.'</td><td>'.$html.'</td>',
838 "hidden" => $hidden,
839 );
840 }
841
842 function AddFileField($id, $label, $value, $arParams=array(), $required=false)
843 {
844 $arDefParams = array("iMaxW"=>150, "iMaxH"=>150, "sParams"=>"border=0", "strImageUrl"=>"", "bPopup"=>true, "sPopupTitle"=>false);
845 foreach($arDefParams as $key=>$val)
846 if(!array_key_exists($key, $arParams))
848
849 $html = CFile::InputFile($id, 20, $value);
850 if($value <> '')
851 $html .= '<div class="adm-detail-file-image">'.CFile::ShowImage($value, $arParams["iMaxW"], $arParams["iMaxH"], $arParams["sParams"], $arParams["strImageUrl"], $arParams["bPopup"], $arParams["sPopupTitle"])."</div>";
852
853 $this->tabs[$this->tabIndex]["FIELDS"][$id] = array(
854 "id" => $id,
855 "required" => $required,
856 "content" => $label,
857 "html" => '<td width="40%">'.($required? '<span class="adm-required-field">'.$this->GetCustomLabelHTML($id, $label).'</span>': $this->GetCustomLabelHTML($id, $label)).'</td><td>'.$html.'</td>',
858 "valign" => "top",
859 "rowClass" => "adm-detail-file-row"
860 );
861 }
862
863 function BeginCustomField($id, $content, $required = false)
864 {
865 $this->sCurrentLabel = $this->GetCustomLabel($id, $content);
866 $this->bCurrentReq = $required;
867 $this->tabs[$this->tabIndex]["FIELDS"][$id] = array(
868 "id" => $id,
869 "required" => $required,
870 "content" => $content,
871 );
872
873 ob_start();
874 }
875
876 function EndCustomField($id, $hidden = "")
877 {
878 $html = ob_get_contents();
879 ob_end_clean();
880
881 $this->tabs[$this->tabIndex]["FIELDS"][$id]["custom_html"] = $html;
882 $this->tabs[$this->tabIndex]["FIELDS"][$id]["hidden"] = $hidden;
883 }
884
885 function ShowUserFields($PROPERTY_ID, $ID, $bVarsFromForm)
886 {
892
893 if($USER_FIELD_MANAGER->GetRights($PROPERTY_ID) >= "W")
894 {
895 $this->BeginCustomField("USER_FIELDS_ADD", GetMessage("admin_lib_add_user_field"));
896 ?>
897 <tr>
898 <td colspan="2" align="left">
899 <a href="/bitrix/admin/userfield_edit.php?lang=<?echo LANGUAGE_ID?>&amp;ENTITY_ID=<?echo urlencode($PROPERTY_ID)?>&amp;back_url=<?echo urlencode($APPLICATION->GetCurPageParam($this->name.'_active_tab=user_fields_tab', array($this->name.'_active_tab')))?>"><?echo $this->GetCustomLabelHTML()?></a>
900 </td>
901 </tr>
902 <?
903 $this->EndCustomField("USER_FIELDS_ADD", '');
904 }
905
906 $arUserFields = $USER_FIELD_MANAGER->GetUserFields($PROPERTY_ID, $ID, LANGUAGE_ID);
907 foreach($arUserFields as $FIELD_NAME => $arUserField)
908 {
909 $arUserField["VALUE_ID"] = intval($ID);
910 if(array_key_exists($FIELD_NAME, $this->arCustomLabels))
911 $strLabel = $this->arCustomLabels[$FIELD_NAME];
912 else
913 $strLabel = $arUserField["EDIT_FORM_LABEL"]? $arUserField["EDIT_FORM_LABEL"]: $arUserField["FIELD_NAME"];
914 $arUserField["EDIT_FORM_LABEL"] = $strLabel;
915
916 $this->BeginCustomField($FIELD_NAME, $strLabel, $arUserField["MANDATORY"]=="Y");
917
918 if(isset($_REQUEST['def_'.$FIELD_NAME]))
919 $arUserField['SETTINGS']['DEFAULT_VALUE'] = $_REQUEST['def_'.$FIELD_NAME];
920
921 echo $USER_FIELD_MANAGER->GetEditFormHTML($bVarsFromForm, $GLOBALS[$FIELD_NAME] ?? '', $arUserField);
922
923 $form_value = $GLOBALS[$FIELD_NAME] ?? '';
924 if(!$bVarsFromForm)
925 $form_value = $arUserField["VALUE"];
926 elseif($arUserField["USER_TYPE"]["BASE_TYPE"]=="file")
927 $form_value = $GLOBALS[$arUserField["FIELD_NAME"]."_old_id"];
928
929 $hidden = "";
930 if(is_array($form_value))
931 {
932 foreach($form_value as $value)
933 $hidden .= '<input type="hidden" name="'.$FIELD_NAME.'[]" value="'.htmlspecialcharsbx($value).'">';
934 }
935 else
936 {
937 $hidden .= '<input type="hidden" name="'.$FIELD_NAME.'" value="'.htmlspecialcharsbx($form_value).'">';
938 }
939 $this->EndCustomField($FIELD_NAME, $hidden);
940 }
941 }
942
943 function ShowUserFieldsWithReadyData($PROPERTY_ID, $readyData, $bVarsFromForm, $primaryIdName = 'VALUE_ID')
944 {
950
951 if($USER_FIELD_MANAGER->GetRights($PROPERTY_ID) >= "W")
952 {
953 $this->BeginCustomField("USER_FIELDS_ADD", GetMessage("admin_lib_add_user_field"));
954 ?>
955 <tr>
956 <td colspan="2" align="left">
957 <a href="/bitrix/admin/userfield_edit.php?lang=<?echo LANGUAGE_ID?>&amp;ENTITY_ID=<?echo urlencode($PROPERTY_ID)?>&amp;back_url=<?echo urlencode($APPLICATION->GetCurPageParam($this->name.'_active_tab=user_fields_tab', array($this->name.'_active_tab')))?>"><?echo $this->GetCustomLabelHTML()?></a>
958 </td>
959 </tr>
960 <?
961 $this->EndCustomField("USER_FIELDS_ADD", '');
962 }
963
964 $arUserFields = $USER_FIELD_MANAGER->getUserFieldsWithReadyData($PROPERTY_ID, $readyData, LANGUAGE_ID, false, $primaryIdName);
965
966 foreach($arUserFields as $FIELD_NAME => $arUserField)
967 {
968 $arUserField["VALUE_ID"] = (int)($readyData[$primaryIdName] ?? null);
969 if(array_key_exists($FIELD_NAME, $this->arCustomLabels))
970 $strLabel = $this->arCustomLabels[$FIELD_NAME];
971 else
972 $strLabel = $arUserField["EDIT_FORM_LABEL"]? $arUserField["EDIT_FORM_LABEL"]: $arUserField["FIELD_NAME"];
973 $arUserField["EDIT_FORM_LABEL"] = $strLabel;
974
975 $this->BeginCustomField($FIELD_NAME, $strLabel, $arUserField["MANDATORY"]=="Y");
976
977 if(isset($_REQUEST['def_'.$FIELD_NAME]))
978 $arUserField['SETTINGS']['DEFAULT_VALUE'] = $_REQUEST['def_'.$FIELD_NAME];
979
980 echo $USER_FIELD_MANAGER->GetEditFormHTML(
982 $GLOBALS[$FIELD_NAME] ?? null,
983 $arUserField
984 );
985
986 $form_value = $GLOBALS[$FIELD_NAME] ?? null;
987 if(!$bVarsFromForm)
988 $form_value = $arUserField["VALUE"];
989 elseif($arUserField["USER_TYPE"]["BASE_TYPE"]=="file")
990 $form_value = $GLOBALS[$arUserField["FIELD_NAME"]."_old_id"];
991
992 $hidden = "";
993 if(is_array($form_value))
994 {
995 foreach($form_value as $value)
996 $hidden .= '<input type="hidden" name="'.$FIELD_NAME.'[]" value="'.htmlspecialcharsbx($value).'">';
997 }
998 else
999 {
1000 $hidden .= '<input type="hidden" name="'.$FIELD_NAME.'" value="'.htmlspecialcharsbx($form_value).'">';
1001 }
1002 $this->EndCustomField($FIELD_NAME, $hidden);
1003 }
1004 }
1005
1006 function Buttons($aParams=false, $additional_html="")
1007 {
1008 if($aParams === false)
1009 $this->arButtonsParams = false;
1010 else
1011 $this->arButtonsParams = $aParams;
1012 $this->sButtonsContent = $additional_html;
1013
1014 while($this->tabIndex < count($this->tabs))
1015 $this->BeginNextFormTab();
1016 }
1017
1022 function ButtonsPublic($arJSButtons = false)
1023 {
1024 if ($this->bPublicMode)
1025 {
1026 if (!empty($_REQUEST['from_module']))
1027 {
1028 $this->sButtonsContent .= '<input type="hidden" name="from_module" value="'.htmlspecialcharsbx($_REQUEST['from_module']).'" />';
1029 }
1030
1031 ob_start();
1032 if ($arJSButtons === false)
1033 {
1034 echo '
1035<input type="hidden" name="bxpublic" value="Y" /><input type="hidden" name="save" value="Y" />
1036<script>'.$this->publicObject.'.SetButtons(['.$this->publicObject.'.btnSave, '.$this->publicObject.'.btnCancel]);</script>
1037';
1038 }
1039 elseif (is_array($arJSButtons))
1040 {
1041 $arJSButtons = array_values($arJSButtons);
1042 echo '
1043<input type="hidden" name="bxpublic" value="Y" />
1044<script>'.$this->publicObject.'.SetButtons([
1045';
1046 foreach ($arJSButtons as $key => $btn)
1047 {
1048 if (str_starts_with($btn, '.'))
1049 $btn = $this->publicObject.$btn;
1050 echo $key ? ',' : '', $btn, "\r\n"; // NO JSESCAPE HERE! string must contain valid js object
1051 }
1052 echo '
1053]);</script>
1054';
1055 }
1056 $this->sButtonsContent .= ob_get_clean();
1057 }
1058 }
1059}
1060
1062{
1063 public static function getTabsArray($formId)
1064 {
1065 $arCustomTabs = array();
1066 $customTabs = CUserOptions::GetOption("form", $formId);
1067 if($customTabs && $customTabs["tabs"])
1068 {
1069 $arTabs = explode("--;--", $customTabs["tabs"]);
1070 foreach($arTabs as $customFields)
1071 {
1072 if ($customFields == "")
1073 continue;
1074
1075 $arCustomFields = explode("--,--", $customFields);
1076 $arCustomTabID = "";
1077 foreach($arCustomFields as $customField)
1078 {
1079 if($arCustomTabID == "")
1080 {
1081 list($arCustomTabID, $arCustomTabName) = explode("--#--", $customField);
1082 $arCustomTabs[$arCustomTabID] = array(
1083 "TAB" => $arCustomTabName,
1084 "FIELDS" => array(),
1085 );
1086 }
1087 else
1088 {
1089 list($arCustomFieldID, $arCustomFieldName) = explode("--#--", $customField);
1090 $arCustomFieldName = ltrim($arCustomFieldName, "* -\xa0\xc2");
1091 $arCustomTabs[$arCustomTabID]["FIELDS"][$arCustomFieldID] = $arCustomFieldName;
1092 }
1093 }
1094 }
1095 }
1096 return $arCustomTabs;
1097 }
1098
1099 public static function setTabsArray($formId, $arCustomTabs, $common = false, $userID = false)
1100 {
1101 $option = "";
1102 if (is_array($arCustomTabs))
1103 {
1104 foreach($arCustomTabs as $arCustomTabID => $arTab)
1105 {
1106 if (is_array($arTab) && isset($arTab["TAB"]))
1107 {
1108 $option .= $arCustomTabID.'--#--'.$arTab["TAB"];
1109 if (isset($arTab["FIELDS"]) && is_array($arTab["FIELDS"]))
1110 {
1111 foreach ($arTab["FIELDS"] as $arCustomFieldID => $arCustomFieldName)
1112 {
1113 $option .= '--,--'.$arCustomFieldID.'--#--'.$arCustomFieldName;
1114 }
1115 }
1116 }
1117 $option .= '--;--';
1118 }
1119 }
1120 CUserOptions::SetOption("form", $formId, array("tabs" => $option), $common, $userID);
1121 }
1122}
global $APPLICATION
Определения include.php:80
static getInstance()
Определения application.php:98
Определения admin_form.php:13
$group_ajax
Определения admin_form.php:18
Begin($arParams=array())
Определения admin_form.php:225
$sButtonsContent
Определения admin_form.php:23
HideField($id)
Определения admin_form.php:690
$arFieldValues
Определения admin_form.php:19
AddEditField($id, $content, $required, $arParams=array(), $value=false)
Определения admin_form.php:739
SetSelectedTab()
Определения admin_form.php:73
$arReqiredTabs
Определения admin_form.php:28
$arFields
Определения admin_form.php:15
AddCalendarField($id, $label, $value, $required=false)
Определения admin_form.php:794
EndCustomField($id, $hidden="")
Определения admin_form.php:876
SetFieldValue($field_name, $bVarsFromForm, $db_record, $default_value=false)
Определения admin_form.php:123
AddSection($id, $content, $required=false)
Определения admin_form.php:695
AddCheckBoxField($id, $content, $required, $value, $checked, $arParams=array())
Определения admin_form.php:809
ShowWarnings($form, $messages, $aFields=false)
Определения admin_form.php:651
$arSavedTabs
Определения admin_form.php:25
SetFieldsValues($bVarsFromForm, $db_record, $default_values)
Определения admin_form.php:117
Show()
Определения admin_form.php:254
EndPrologContent()
Определения admin_form.php:661
$arForbiddenFields
Определения admin_form.php:16
EndEpilogContent()
Определения admin_form.php:672
AddViewField($id, $content, $html, $required=false)
Определения admin_form.php:706
BeginNextFormTab()
Определения admin_form.php:233
AddDropDownField($id, $content, $required, $arSelect, $value=false, $arParams=array())
Определения admin_form.php:716
$arParams
Определения admin_form.php:14
$arButtonsParams
Определения admin_form.php:22
GetName()
Определения admin_form.php:592
GetCustomLabelHTML($id=false, $content="")
Определения admin_form.php:614
$sEpilogContent
Определения admin_form.php:21
$sPrologContent
Определения admin_form.php:20
ShowSettings()
Определения admin_form.php:100
GetCustomLabel($id, $content)
Определения admin_form.php:602
GetFieldLabel($id)
Определения admin_form.php:156
SetShowSettings($v)
Определения admin_form.php:95
Buttons($aParams=false, $additional_html="")
Определения admin_form.php:1006
ShowUserFields($PROPERTY_ID, $ID, $bVarsFromForm)
Определения admin_form.php:885
AddFileField($id, $label, $value, $arParams=array(), $required=false)
Определения admin_form.php:842
AddTextField($id, $label, $value, $arParams=array(), $required=false)
Определения admin_form.php:773
$arSystemFields
Определения admin_form.php:27
BeginEpilogContent()
Определения admin_form.php:667
$bCurrentReq
Определения admin_form.php:33
$bCustomFields
Определения admin_form.php:31
$arSystemTabs
Определения admin_form.php:26
__construct($name, $tabs, $bCanExpand=true, $bDenyAutosave=false)
Определения admin_form.php:40
GetHTMLFieldValue($field_name)
Определения admin_form.php:146
GetFormName()
Определения admin_form.php:597
$session
Определения admin_form.php:38
ShowUserFieldsWithReadyData($PROPERTY_ID, $readyData, $bVarsFromForm, $primaryIdName='VALUE_ID')
Определения admin_form.php:943
BeginCustomField($id, $content, $required=false)
Определения admin_form.php:863
$bShowSettings
Определения admin_form.php:35
$arCustomLabels
Определения admin_form.php:30
$group
Определения admin_form.php:17
ShowTabButtons()
Определения admin_form.php:161
ButtonsPublic($arJSButtons=false)
Определения admin_form.php:1022
GetHTMLFieldValueEx($field_name)
Определения admin_form.php:151
$sCurrentLabel
Определения admin_form.php:32
BeginPrologContent()
Определения admin_form.php:656
GetFieldValue($field_name)
Определения admin_form.php:141
AddFieldGroup($id, $content, $arFields, $bAjax=false)
Определения admin_form.php:678
static getTabsArray($formId)
Определения admin_form.php:1063
static setTabsArray($formId, $arCustomTabs, $common=false, $userID=false)
Определения admin_form.php:1099
static PhpToJavaScript($items)
Определения admin_lib.php:1448
OnAdminTabControlBegin()
Определения admin_tabcontrol.php:120
$bCanExpand
Определения admin_tabcontrol.php:21
BeginNextTab($options=array())
Определения admin_tabcontrol.php:220
$tabs
Определения options.php:101
$content
Определения commerceml.php:144
$arFields
Определения dblapprove.php:5
$bVarsFromForm
Определения file_edit.php:44
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
global $USER_FIELD_MANAGER
Определения attempt.php:6
$_REQUEST["admin_mnu_menu_id"]
Определения get_menu.php:8
if($ajaxMode) $ID
Определения get_user.php:27
$p
Определения group_list_element_edit.php:23
foreach( $arCellTemplates as $key=> $value) foreach( $arCellTemplates as $key=> $value)
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
global $USER
Определения csv_new_run.php:40
CalendarDate($fieldName, $value, $formName="", $size="10", $param="class=\"typeinput\"")
Определения tools.php:319
DeleteParam($ParamNames)
Определения tools.php:4548
htmlspecialcharsback($str)
Определения tools.php:2693
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
Определения tools.php:2701
GetMessage($name, $aReplace=null)
Определения tools.php:3397
$name
Определения menu_edit.php:35
$GLOBALS['____1690880296']
Определения license.php:1
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
if(empty($signedUserToken)) $key
Определения quickway.php:257
die
Определения quickway.php:367
$i
Определения factura.php:643
</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
$messages
Определения template.php:8
text align
Определения template.php:556
$option
Определения options.php:1711
$val
Определения options.php:1793
$arCustomFields
Определения settings_admin_form.php:66
foreach($this->arSystemTabs as $arTab) $arSystemFields
Определения settings_admin_form.php:43
arSystemTabs
Определения settings_admin_form.php:108
$action
Определения file_dialog.php:21