22 private static array $urlElementDataCache = [];
24 private static array $urlSectionDataCache = [];
26 private static array $productIblockDataCache = [];
28 private static array $urlParentCache = [];
32 self::$productIblockDataCache = [];
33 self::$urlParentCache = [];
34 self::$urlElementDataCache = [];
35 self::$urlSectionDataCache = [];
44 if (isset(self::$urlElementDataCache[$id]))
61 if ($element !==
null)
63 $element[
'ID'] = (int)$element[
'ID'];
64 $element[
'IBLOCK_ID'] = (int)$element[
'IBLOCK_ID'];
65 $element[
'CODE'] = (string)$element[
'CODE'];
66 $element[
'XML_ID'] = (string)$element[
'XML_ID'];
67 $element[
'IBLOCK_SECTION_ID'] = (int)$element[
'IBLOCK_SECTION_ID'];
68 $element[
'IBLOCK_SECTION_CODE'] =
'';
69 $sectionId = $element[
'IBLOCK_SECTION_ID'];
72 if (!isset(self::$urlSectionDataCache[$sectionId]))
74 self::$urlSectionDataCache[$sectionId] =
false;
82 '=IBLOCK_ID' => $element[
'IBLOCK_ID'],
85 if ($section !==
null)
87 $section[
'ID'] = (int)$section[
'ID'];
88 $section[
'CODE'] = (string)$section[
'CODE'];
89 self::$urlSectionDataCache[$sectionId] = $section;
92 if (!empty(self::$urlSectionDataCache[$sectionId]))
94 $element[
'IBLOCK_SECTION_CODE'] = self::$urlSectionDataCache[$sectionId][
'CODE'];
98 self::$urlElementDataCache[$id] = $element;
102 self::$urlElementDataCache[$id] =
false;
106 private static function getUrlElementData(
int $id): ?
array
113 if (!isset(self::$urlElementDataCache[$id]))
115 static::fillUrlElementDataCache($id);
119 !empty(self::$urlElementDataCache[$id])
120 ? self::$urlElementDataCache[$id]
125 private static function getProductIblockData(
int $iblockId): ?
array
131 if (self::$catalogIncluded ===
null)
133 self::$catalogIncluded = Loader::includeModule(
'catalog');
135 if (!self::$catalogIncluded)
140 if (!isset(self::$productIblockDataCache[
$iblockId]))
165 !empty(self::$productIblockDataCache[
$iblockId])
166 ? self::$productIblockDataCache[
$iblockId]
171 private static function getProductId(
int $elementId,
int $iblockId): ?int
177 if (self::$catalogIncluded ===
null)
179 self::$catalogIncluded = Loader::includeModule(
'catalog');
181 if (!self::$catalogIncluded)
186 if (!isset(self::$urlParentCache[$elementId]))
189 self::$urlParentCache[$elementId] = $list[$elementId][
'ID'] ??
false;
193 !empty(self::$urlParentCache[$elementId])
194 ? self::$urlParentCache[$elementId]
208 if (CModule::IncludeModule(
"iblock") &&
$type <> '')
211 "LABELS" => $arLabels,
235 "add_element" => (defined(
"PANEL_ADD_ELEMENT_BTN")) ? PANEL_ADD_ELEMENT_BTN :
"/bitrix/images/iblock/icons/new_element.gif",
236 "edit_element" => (defined(
"PANEL_EDIT_ELEMENT_BTN")) ? PANEL_EDIT_ELEMENT_BTN :
"/bitrix/images/iblock/icons/edit_element.gif",
237 "edit_iblock" => (defined(
"PANEL_EDIT_IBLOCK_BTN")) ? PANEL_EDIT_IBLOCK_BTN :
"/bitrix/images/iblock/icons/edit_iblock.gif",
238 "history_element" => (defined(
"PANEL_HISTORY_ELEMENT_BTN")) ? PANEL_HISTORY_ELEMENT_BTN :
"/bitrix/images/iblock/icons/history.gif",
239 "edit_section" => (defined(
"PANEL_EDIT_SECTION_BTN")) ? PANEL_EDIT_SECTION_BTN :
"/bitrix/images/iblock/icons/edit_section.gif",
240 "add_section" => (defined(
"PANEL_ADD_SECTION_BTN")) ? PANEL_ADD_SECTION_BTN :
"/bitrix/images/iblock/icons/new_section.gif",
241 "element_list" =>
"/bitrix/themes/.default/icons/iblock/mnu_iblock_el.gif",
242 "section_list" =>
"/bitrix/themes/.default/icons/iblock/mnu_iblock_sec.gif",
247 if (!empty($arButtons[$mode]) && is_array($arButtons[$mode]))
252 $arTrace = debug_backtrace();
253 foreach($arTrace as $arCallInfo)
255 if (isset($arCallInfo[
"file"]))
257 $file = mb_strtolower(str_replace(
"\\",
"/", $arCallInfo[
"file"]));
258 if(preg_match(
"#.*/bitrix/components/(.+?)/(.+?)/#", $file, $match))
274 $componentName = Loc::getMessage(
"IBLOCK_PANEL_UNKNOWN_COMPONENT");
277 $arPanelButton =
array(
278 "SRC" =>
"/bitrix/images/iblock/icons/iblock.gif",
287 foreach($arButtons[$mode] as
$i=>$arSubButton)
289 if (isset($arImages[
$i]))
290 $arSubButton[
'IMAGE'] = $arImages[
$i];
292 if($arSubButton[
"DEFAULT"])
293 $arPanelButton[
"HREF"] = $arSubButton[
"ACTION"];
295 $arPanelButton[
"MENU"][] = $arSubButton;
298 if (!empty($arButtons[
"submenu"]) && is_array($arButtons[
"submenu"]))
301 "SRC" =>
"/bitrix/images/iblock/icons/iblock.gif",
302 "ALT" => Loc::getMessage(
"IBLOCK_PANEL_CONTROL_PANEL_ALT"),
303 "TEXT" => Loc::getMessage(
"IBLOCK_PANEL_CONTROL_PANEL"),
308 foreach($arButtons[
"submenu"] as
$i=>$arSubButton)
310 if (isset($arImages[
$i]))
311 $arSubButton[
'IMAGE'] = $arImages[
$i];
312 $arSubMenu[
"MENU"][] = $arSubButton;
315 $arPanelButton[
"MENU"][] =
array(
"SEPARATOR" =>
"Y");
316 $arPanelButton[
"MENU"][] = $arSubMenu;
321 if (!empty($arButtons[
"intranet"]) && is_array($arButtons[
"intranet"]) && CModule::IncludeModule(
"intranet"))
324 global $INTRANET_TOOLBAR;
325 foreach($arButtons[
"intranet"] as $arButton)
326 $INTRANET_TOOLBAR->AddButton($arButton);
333 "add_element" =>
"/bitrix/images/iblock/icons/new_element.gif",
334 "edit_element" =>
"/bitrix/images/iblock/icons/edit_element.gif",
335 "edit_iblock" =>
"/bitrix/images/iblock/icons/edit_iblock.gif",
336 "history_element" =>
"/bitrix/images/iblock/icons/history.gif",
337 "edit_section" =>
"/bitrix/images/iblock/icons/edit_section.gif",
338 "add_section" =>
"/bitrix/images/iblock/icons/new_section.gif",
339 "element_list" =>
"/bitrix/themes/.default/icons/iblock/mnu_iblock_el.gif",
340 "section_list" =>
"/bitrix/themes/.default/icons/iblock/mnu_iblock_sec.gif",
344 foreach($arButtons[$mode] as
$i=>$arButton)
346 if (!isset($arButton[
'SEPARATOR']))
348 $arButton[
'URL'] = $arButton[
'ACTION'] ??
null;
349 unset($arButton[
'ACTION']);
350 $arButton[
'IMAGE'] = $arImages[
$i] ??
null;
362 $windowParams =
array(
'width' => 700,
'height' => 400,
'resize' =>
false);
367 "configure" =>
array(),
368 "submenu" =>
array(),
371 $bSectionButtons = !(isset(
$arOptions[
'SECTION_BUTTONS']) &&
$arOptions[
'SECTION_BUTTONS'] ===
false);
375 $ELEMENT_ID = (int)$ELEMENT_ID;
376 $SECTION_ID = (int)$SECTION_ID;
378 if(($ELEMENT_ID > 0) && ((
$IBLOCK_ID <= 0) || ($bSectionButtons && $SECTION_ID == 0)))
380 $rsIBlockElement = CIBlockElement::GetList(
array(),
array(
382 "ACTIVE_DATE" =>
"Y",
384 "CHECK_PERMISSIONS" =>
"Y",
385 ),
false,
false,
array(
"ID",
"IBLOCK_ID",
"IBLOCK_SECTION_ID"));
386 if($arIBlockElement = $rsIBlockElement->Fetch())
389 $SECTION_ID = $arIBlockElement[
"IBLOCK_SECTION_ID"];
397 $useCatalogButtons = (($ELEMENT_ID <= 0 || isset(
$arOptions[
'SHOW_CATALOG_BUTTONS'])) && !empty(
$arOptions[
'USE_CATALOG_BUTTONS']) && is_array(
$arOptions[
'USE_CATALOG_BUTTONS']));
398 $catalogButtons =
array();
401 if (self::$catalogIncluded ===
null)
403 $bCatalog = self::$catalogIncluded;
404 if (!self::$catalogIncluded)
405 $useCatalogButtons =
false;
408 if ($useCatalogButtons)
410 if (isset(
$arOptions[
'USE_CATALOG_BUTTONS'][
'add_product']) &&
$arOptions[
'USE_CATALOG_BUTTONS'][
'add_product'] ==
true)
411 $catalogButtons[
'add_product'] =
true;
412 if (isset(
$arOptions[
'USE_CATALOG_BUTTONS'][
'add_sku']) &&
$arOptions[
'USE_CATALOG_BUTTONS'][
'add_sku'] ==
true)
413 $catalogButtons[
'add_sku'] =
true;
414 if (empty($catalogButtons))
415 $useCatalogButtons =
false;
420 "edit_element" =>
"",
422 "history_element" =>
"",
423 "edit_section" =>
"",
425 "delete_section" =>
"",
426 "delete_element" =>
"",
427 "element_list" =>
"",
428 "section_list" =>
"",
436 if(!empty(
$url) && array_key_exists(
$key, $return_url))
441 foreach($return_url as
$key =>
$url)
447 foreach($return_url as
$key =>
$url)
453 $str = \Bitrix\Main\Context::getCurrent()->getServer()->getRequestUri();
454 if(defined(
"BX_AJAX_PARAM_ID"))
463 if (self::$workflowIncluded ===
null)
465 $bWorkflow = self::$workflowIncluded && (
$arIBlock[
"WORKFLOW"] !==
"N");
466 $s = $bWorkflow?
"&WF=Y":
"";
470 'ELEMENT_EDIT_TEXT' =>
'ELEMENT_EDIT',
471 'ELEMENT_EDIT_TITLE' =>
'ELEMENT_EDIT',
472 'ELEMENT_ADD_TEXT' =>
'ELEMENT_ADD',
473 'ELEMENT_ADD_TITLE' =>
'ELEMENT_ADD',
474 'ELEMENT_DELETE_TEXT' =>
'ELEMENT_DELETE',
475 'ELEMENT_DELETE_TITLE' =>
'ELEMENT_DELETE',
476 'SECTION_EDIT_TEXT' =>
'SECTION_EDIT',
477 'SECTION_EDIT_TITLE' =>
'SECTION_EDIT',
478 'SECTION_ADD_TEXT' =>
'SECTION_ADD',
479 'SECTION_ADD_TITLE' =>
'SECTION_ADD',
480 'SECTION_DELETE_TEXT' =>
'SECTION_DELETE',
481 'SECTION_DELETE_TITLE' =>
'SECTION_DELETE',
482 'ELEMENTS_NAME_TEXT' =>
'ELEMENTS_NAME',
483 'ELEMENTS_NAME_TITLE' =>
'ELEMENTS_NAME',
484 'SECTIONS_NAME_TEXT' =>
'SECTIONS_NAME',
485 'SECTIONS_NAME_TITLE' =>
'SECTIONS_NAME',
487 foreach ($labelList as $phraseId => $iblockPhrase)
490 isset($arLabels[$phraseId])
491 && is_string($arLabels[$phraseId])
492 && $arLabels[$phraseId] !==
''
497 $arLabels[$phraseId] =
$arIBlock[$iblockPhrase];
500 if($ELEMENT_ID > 0 && CIBlockElementRights::UserHasRightTo(
$IBLOCK_ID, $ELEMENT_ID,
"element_edit"))
503 "force_catalog" => $bCatalog,
504 "filter_section" => $SECTION_ID,
506 "from_module" =>
"iblock",
507 "return_url" => $return_url[
"edit_element"],
513 "PARAMS" => $windowParams,
518 "TEXT" => $arLabels[
"ELEMENT_EDIT_TEXT"],
519 "TITLE" => $arLabels[
"ELEMENT_EDIT_TITLE"],
520 "ACTION" =>
'javascript:'.
$action,
521 "ACTION_URL" =>
$url,
523 "DEFAULT" =>
$APPLICATION->GetPublicShowMode() !==
'configure',
524 "ICON" =>
"bx-context-toolbar-edit-icon",
525 "ID" =>
"bx-context-toolbar-edit-element"
527 $arButtons[
"edit"][
"edit_element"] = $arButton;
528 $arButtons[
"configure"][
"edit_element"] = $arButton;
530 $url = str_replace(
"&bxpublic=Y&from_module=iblock",
"",
$url);
531 $arButton[
"ACTION"] =
"javascript:jsUtils.Redirect([], '".CUtil::JSEscape(
$url).
"')";
532 unset($arButton[
"ONCLICK"]);
533 $arButtons[
"submenu"][
"edit_element"] = $arButton;
537 $url =
"/bitrix/admin/iblock_history_list.php?type=".$arIBlock[
"IBLOCK_TYPE_ID"].
"&lang=".LANGUAGE_ID.
"&IBLOCK_ID=".
$IBLOCK_ID.
"&ELEMENT_ID=".$ELEMENT_ID.
"&filter_section=".$SECTION_ID.
"&return_url=".UrlEncode($return_url[
"history_element"]);
539 "TEXT" => Loc::getMessage(
"IBLOCK_PANEL_HISTORY_BUTTON"),
540 "TITLE" => Loc::getMessage(
"IBLOCK_PANEL_HISTORY_BUTTON"),
541 "ACTION" =>
"javascript:jsUtils.Redirect([], '".CUtil::JSEscape(
$url).
"')",
542 "ONCLICK" =>
"jsUtils.Redirect([], '".CUtil::JSEscape(
$url).
"')",
543 "ID" =>
"bx-context-toolbar-history-element"
545 $arButtons[
"submenu"][
"history_element"] = $arButton;
549 if(CIBlockSectionRights::UserHasRightTo(
$IBLOCK_ID, $SECTION_ID,
"section_element_bind"))
552 "force_catalog" => $bCatalog,
553 "filter_section" => $SECTION_ID,
554 "IBLOCK_SECTION_ID" => $SECTION_ID,
556 "from_module" =>
"iblock",
557 "return_url" => $return_url[
"add_element"],
560 if ($useCatalogButtons)
562 CCatalogAdminTools::setProductFormParams();
563 CCatalogAdminTools::setCatalogPanelButtons($arButtons,
$IBLOCK_ID, $catalogButtons,
$params, $windowParams);
571 "PARAMS" => $windowParams,
575 "TEXT" => $arLabels[
"ELEMENT_ADD_TEXT"],
576 "TITLE" => $arLabels[
"ELEMENT_ADD_TITLE"],
577 "ACTION" =>
'javascript:'.
$action,
578 "ACTION_URL" =>
$url,
580 "ICON" =>
"bx-context-toolbar-create-icon",
581 "ID" =>
"bx-context-toolbar-add-element",
583 $arButtons[
"edit"][
"add_element"] = $arButton;
584 $arButtons[
"configure"][
"add_element"] = $arButton;
585 $arButtons[
"intranet"][] =
array(
586 'TEXT' => $arButton[
"TEXT"],
587 'TITLE' => $arButton[
"TITLE"],
589 'ONCLICK' => $arButton[
"ACTION"],
593 $url = str_replace(
"&bxpublic=Y&from_module=iblock",
"",
$url);
594 $arButton[
"ACTION"] =
"javascript:jsUtils.Redirect([], '".CUtil::JSEscape(
$url).
"')";
595 unset($arButton[
"ONCLICK"]);
596 $arButtons[
"submenu"][
"add_element"] = $arButton;
600 if($ELEMENT_ID > 0 && CIBlockElementRights::UserHasRightTo(
$IBLOCK_ID, $ELEMENT_ID,
"element_delete"))
603 if(!empty($arButtons[
"edit"]))
604 $arButtons[
"edit"][] =
array(
"SEPARATOR" =>
"Y",
"HREF" =>
"");
605 if(!empty($arButtons[
"configure"]))
606 $arButtons[
"configure"][] =
array(
"SEPARATOR" =>
"Y",
"HREF" =>
"");
607 if(!empty($arButtons[
"submenu"]))
608 $arButtons[
"submenu"][] =
array(
"SEPARATOR" =>
"Y",
"HREF" =>
"");
612 $url .=
'&'.bitrix_sessid_get();
613 $url .=
'&ID='.(preg_match(
'/^iblock_list_admin\.php/',
$url)?
"E":
"").$ELEMENT_ID.
"&return_url=".UrlEncode($return_url[
"delete_element"]);
614 $url =
"/bitrix/admin/".$url;
616 "TEXT" => $arLabels[
"ELEMENT_DELETE_TEXT"],
617 "TITLE" => $arLabels[
"ELEMENT_DELETE_TITLE"],
618 "ACTION"=>
"javascript:if(confirm('".CUtil::JSEscape(Loc::getMessage(
"IBLOCK_PANEL_ELEMENT_DEL_CONF")).
"'))jsUtils.Redirect([], '".CUtil::JSEscape(
$url).
"')",
619 "ACTION_URL" =>
$url,
620 "ONCLICK"=>
"if(confirm('".CUtil::JSEscape(Loc::getMessage(
"IBLOCK_PANEL_ELEMENT_DEL_CONF")).
"'))jsUtils.Redirect([], '".CUtil::JSEscape(
$url).
"')",
621 "ICON" =>
"bx-context-toolbar-delete-icon",
622 "ID" =>
"bx-context-toolbar-delete-element"
624 $arButtons[
"edit"][
"delete_element"] = $arButton;
625 $arButtons[
"configure"][
"delete_element"] = $arButton;
626 $arButtons[
"submenu"][
"delete_element"] = $arButton;
629 if($ELEMENT_ID <= 0 && $bSectionButtons)
632 if(($arIBTYPE = $rsIBTYPE->Fetch()) && ($arIBTYPE[
"SECTIONS"] ==
"Y"))
634 if($SECTION_ID > 0 && CIBlockSectionRights::UserHasRightTo(
$IBLOCK_ID, $SECTION_ID,
"section_edit"))
636 if(!empty($arButtons[
"edit"]))
637 $arButtons[
"edit"][] =
array(
"SEPARATOR" =>
"Y",
"HREF" =>
"");
638 if(!empty($arButtons[
"configure"]))
639 $arButtons[
"configure"][] =
array(
"SEPARATOR" =>
"Y",
"HREF" =>
"");
640 if(!empty($arButtons[
"submenu"]))
641 $arButtons[
"submenu"][] =
array(
"SEPARATOR" =>
"Y",
"HREF" =>
"");
644 "force_catalog" => $bCatalog,
645 "filter_section" => $SECTION_ID,
647 "from_module" =>
"iblock",
648 "return_url" => $return_url[
"edit_section"],
654 "PARAMS" => $windowParams,
659 "TEXT" => $arLabels[
"SECTION_EDIT_TEXT"],
660 "TITLE" => $arLabels[
"SECTION_EDIT_TITLE"],
661 "ACTION" =>
'javascript:'.
$action,
662 "ACTION_URL" =>
$url,
663 "ICON" =>
"bx-context-toolbar-edit-icon",
665 "DEFAULT" =>
$APPLICATION->GetPublicShowMode() !==
'configure',
666 "ID" =>
"bx-context-toolbar-edit-section"
668 $arButtons[
"edit"][
"edit_section"] = $arButton;
669 $arButtons[
"configure"][
"edit_section"] = $arButton;
671 $url = str_replace(
"&bxpublic=Y&from_module=iblock",
"",
$url);
672 $arButton[
"ACTION"] =
"javascript:jsUtils.Redirect([], '".CUtil::JSEscape(
$url).
"')";
673 unset($arButton[
"ONCLICK"]);
674 $arButtons[
"submenu"][
"edit_section"] = $arButton;
677 if(CIBlockSectionRights::UserHasRightTo(
$IBLOCK_ID, $SECTION_ID,
"section_section_bind"))
680 "force_catalog" => $bCatalog,
681 "IBLOCK_SECTION_ID" => $SECTION_ID,
682 "filter_section" => $SECTION_ID,
684 "from_module" =>
"iblock",
685 "return_url" => $return_url[
"add_section"],
691 "PARAMS" => $windowParams,
696 "TEXT" => $arLabels[
"SECTION_ADD_TEXT"],
697 "TITLE" => $arLabels[
"SECTION_ADD_TITLE"],
698 "ACTION" =>
'javascript:'.
$action,
699 "ACTION_URL" =>
$url,
700 "ICON" =>
"bx-context-toolbar-create-icon",
701 "ID" =>
"bx-context-toolbar-add-section",
705 $arButtons[
"edit"][
"add_section"] = $arButton;
706 $arButtons[
"configure"][
"add_section"] = $arButton;
708 $url = str_replace(
"&bxpublic=Y&from_module=iblock",
"",
$url);
709 $arButton[
"ACTION"] =
"javascript:jsUtils.Redirect([], '".CUtil::JSEscape(
$url).
"')";
710 unset($arButton[
"ONCLICK"]);
711 $arButtons[
"submenu"][
"add_section"] = $arButton;
715 if($SECTION_ID > 0 && CIBlockSectionRights::UserHasRightTo(
$IBLOCK_ID, $SECTION_ID,
"section_delete"))
719 $url .=
'&'.bitrix_sessid_get();
720 $url .=
'&ID[]='.(preg_match(
'/^iblock_list_admin\.php/',
$url)?
"S":
"").$SECTION_ID.
"&return_url=".UrlEncode($return_url[
"delete_section"]);
721 $url =
"/bitrix/admin/".$url;
724 "TEXT" => $arLabels[
"SECTION_DELETE_TEXT"],
725 "TITLE" => $arLabels[
"SECTION_DELETE_TITLE"],
726 "ACTION" =>
"javascript:if(confirm('".CUtil::JSEscape(Loc::getMessage(
"IBLOCK_PANEL_SECTION_DEL_CONF")).
"'))jsUtils.Redirect([], '".CUtil::JSEscape(
$url).
"')",
727 "ACTION_URL" =>
$url,
728 "ONCLICK" =>
"if(confirm('".CUtil::JSEscape(Loc::getMessage(
"IBLOCK_PANEL_SECTION_DEL_CONF")).
"'))jsUtils.Redirect([], '".CUtil::JSEscape(
$url).
"')",
729 "ICON" =>
"bx-context-toolbar-delete-icon",
730 "ID" =>
"bx-context-toolbar-delete-section"
732 $arButtons[
"edit"][
"delete_section"] = $arButton;
733 $arButtons[
"configure"][
"delete_section"] = $arButton;
734 $arButtons[
"submenu"][
"delete_section"] = $arButton;
741 if(!empty($arButtons[
"submenu"]))
742 $arButtons[
"submenu"][] =
array(
"SEPARATOR" =>
"Y",
"HREF" =>
"");
745 $url =
"/bitrix/admin/".CIBlock::GetAdminElementListLink(
$IBLOCK_ID ,
array(
'find_section_section'=>$SECTION_ID));
748 'find_el_y'=>
'Y',
'clear_filter'=>
'Y',
'apply_filter'=>
'Y'));
751 "TEXT" => (($arLabels[
"ELEMENTS_NAME_TEXT"] ??
'') <>
''? $arLabels[
"ELEMENTS_NAME_TEXT"] :
$arIBlock[
"ELEMENTS_NAME"]),
752 "TITLE" => (($arLabels[
"ELEMENTS_NAME_TITLE"] ??
'') <>
''? $arLabels[
"ELEMENTS_NAME_TITLE"] :
$arIBlock[
"ELEMENTS_NAME"]),
753 "ACTION" =>
"javascript:jsUtils.Redirect([], '".CUtil::JSEscape(
$url).
"')",
754 "ACTION_URL" =>
$url,
755 "ONCLICK" =>
"jsUtils.Redirect([], '".CUtil::JSEscape(
$url).
"')",
756 "ID" =>
"bx-context-toolbar-elements-list"
758 $arButtons[
"submenu"][
"element_list"] = $arButton;
760 $arButtons[
"intranet"][
"element_list"] =
array(
761 'TEXT' => $arButton[
"TEXT"],
762 'TITLE' => $arButton[
"TITLE"],
763 'ICON' =>
'settings',
764 'ONCLICK' => $arButton[
"ACTION"],
768 $url =
"/bitrix/admin/".CIBlock::GetAdminSectionListLink(
$IBLOCK_ID,
array(
'find_section_section'=>$SECTION_ID));
770 "TEXT" => (($arLabels[
"SECTIONS_NAME_TEXT"] ??
'') <>
''? $arLabels[
"SECTIONS_NAME_TEXT"] :
$arIBlock[
"SECTIONS_NAME"]),
771 "TITLE" => (($arLabels[
"SECTIONS_NAME_TITLE"] ??
'') <>
''? $arLabels[
"SECTIONS_NAME_TITLE"] :
$arIBlock[
"SECTIONS_NAME"]),
772 "ACTION" =>
"javascript:jsUtils.Redirect([], '".CUtil::JSEscape(
$url).
"')",
773 "ACTION_URL" =>
$url,
774 "ONCLICK" =>
"jsUtils.Redirect([], '".CUtil::JSEscape(
$url).
"')",
775 "ID" =>
"bx-context-toolbar-sections-list"
777 $arButtons[
"submenu"][
"section_list"] = $arButton;
781 $url =
"/bitrix/admin/iblock_edit.php?type=".$arIBlock[
"IBLOCK_TYPE_ID"].
"&lang=".LANGUAGE_ID.
"&ID=".
$IBLOCK_ID.
"&return_url=".UrlEncode($return_url[
"edit_iblock"]);
783 "TEXT" => Loc::getMessage(
"IBLOCK_PANEL_EDIT_IBLOCK_BUTTON",
array(
"#IBLOCK_NAME#"=>
$arIBlock[
"NAME"])),
784 "TITLE" => Loc::getMessage(
"IBLOCK_PANEL_EDIT_IBLOCK_BUTTON",
array(
"#IBLOCK_NAME#"=>
$arIBlock[
"NAME"])),
785 "ACTION" =>
"javascript:jsUtils.Redirect([], '".CUtil::JSEscape(
$url).
"')",
786 "ACTION_URL" =>
$url,
787 "ONCLICK" =>
"jsUtils.Redirect([], '".CUtil::JSEscape(
$url).
"')",
788 "ID" =>
"bx-context-toolbar-edit-iblock"
790 $arButtons[
"submenu"][
"edit_iblock"] = $arButton;
806 $strSql =
"SELECT L.*, BS.* FROM b_iblock_site BS, b_lang L WHERE L.LID=BS.SITE_ID AND BS.IBLOCK_ID=".intval($iblock_id);
807 return $DB->Query($strSql);
815 return CIBlock::GetList(Array(), Array(
"ID"=>
$ID));
831 if(CACHED_b_iblock ===
false)
834 SELECT b_iblock.*,".
$DB->DateToCharFunction(
"TIMESTAMP_X").
" TIMESTAMP_X
850 $bucket_size = intval(CACHED_b_iblock_bucket_size);
851 if($bucket_size<=0) $bucket_size = 20;
853 $bucket = intval(
$ID/$bucket_size);
854 $cache_id = $bucket_size.
"iblock".$bucket;
862 $arIBlocks =
array();
864 SELECT b_iblock.*,".
$DB->DateToCharFunction(
"TIMESTAMP_X").
" TIMESTAMP_X
866 WHERE ID between ".($bucket*$bucket_size).
" AND ".(($bucket+1)*$bucket_size-1)
879 if(isset($arIBlocks[
$ID]))
883 if(!array_key_exists(
"ELEMENT_DELETE",
$arResult))
892 || !is_array(
$arResult[
"FIELDS"][
"IBLOCK_SECTION"][
"DEFAULT_VALUE"])
926 if(CACHED_b_iblock !==
false)
928 $bucket_size = intval(CACHED_b_iblock_bucket_size);
929 if($bucket_size<=0) $bucket_size = 20;
931 $bucket = intval(
$ID/$bucket_size);
932 $cache_id = $bucket_size.
"iblock".$bucket;
937 Iblock\IblockSiteTable::cleanCache();
949 $SAVED_PICTURE =
null;
977 if (array_key_exists(
"PICTURE",
$arFields))
982 (
$arFields[
"PICTURE"][
"name"] ??
'') ===
''
983 && (
$arFields[
"PICTURE"][
"del"] ??
'' ) ===
''
991 $arFields[
"PICTURE"][
"MODULE_ID"] =
"iblock";
995 if(array_key_exists(
"SITE_ID",
$arFields))
1001 if(array_key_exists(
"EXTERNAL_ID",
$arFields))
1007 if(array_key_exists(
"SECTION_PROPERTY",
$arFields))
1038 if(array_key_exists(
"PICTURE",
$arFields))
1041 CFile::SaveForDB(
$arFields,
"PICTURE",
"iblock");
1046 if(array_key_exists(
"PICTURE",
$arFields))
1060 && array_key_exists(
"GROUP_ID",
$arFields)
1065 $obIBlockRights->SetRights($obIBlockRights->ConvertGroups(
$arFields[
"GROUP_ID"]));
1073 $obIBlockRights->SetRights(
$arFields[
"RIGHTS"]);
1082 if (array_key_exists(
"IPROPERTY_TEMPLATES",
$arFields))
1084 $ipropTemplates = new \Bitrix\Iblock\InheritedProperty\IblockTemplates(
$ID);
1085 $ipropTemplates->set(
$arFields[
"IPROPERTY_TEMPLATES"]);
1091 DELETE FROM b_iblock_site WHERE IBLOCK_ID = ".
$ID.
"
1095 INSERT INTO b_iblock_site(IBLOCK_ID, SITE_ID)
1098 WHERE LID IN ('".implode(
"', '", $arLID).
"')
1111 $this->LAST_ERROR = Loc::getMessage(
"IBLOCK_TABLE_CREATION_ERROR");
1122 if (
$arFields[
"FULLTEXT_INDEX"] ===
"Y")
1134 foreach(
GetModuleEvents(
"iblock",
"OnAfterIBlockAdd",
true) as $arEvent)
1137 if(defined(
"BX_COMP_MANAGED_CACHE") && self::isEnabledClearTagCache())
1155 $SAVED_PICTURE =
null;
1160 if (array_key_exists(
"PICTURE",
$arFields))
1165 (
$arFields[
"PICTURE"][
"name"] ??
'') ===
''
1166 && (
$arFields[
"PICTURE"][
"del"] ??
'') ===
''
1174 $pic_res =
$DB->Query(
"SELECT PICTURE FROM b_iblock WHERE ID=".
$ID);
1175 if($pic_res = $pic_res->Fetch())
1177 $arFields[
"PICTURE"][
"old_file"] = $pic_res[
"PICTURE"];
1179 $arFields[
"PICTURE"][
"MODULE_ID"] =
"iblock";
1214 $RIGHTS_MODE = $iblockDataBeforeUpdate[
"RIGHTS_MODE"];
1234 foreach($arLID as $v)
1237 $str_LID .=
", '".$DB->ForSql($v).
"'";
1244 if(array_key_exists(
"PICTURE",
$arFields))
1247 CFile::SaveForDB(
$arFields,
"PICTURE",
"iblock");
1250 $strUpdate =
$DB->PrepareUpdate(
"b_iblock",
$arFields,
"iblock");
1252 if(array_key_exists(
"PICTURE",
$arFields))
1257 $arBinds[
"DESCRIPTION"] =
$arFields[
"DESCRIPTION"];
1259 if($strUpdate <>
'')
1261 $strSql =
"UPDATE b_iblock SET ".$strUpdate.
" WHERE ID=".
$ID;
1262 $DB->QueryBind($strSql, $arBinds);
1269 if(array_key_exists(
"RIGHTS_MODE",
$arFields))
1271 if(
$arFields[
"RIGHTS_MODE"] ===
"E" && $RIGHTS_MODE !==
"E")
1278 $obIBlockRights->DeleteAllRights();
1285 if($RIGHTS_MODE ===
"E")
1289 && array_key_exists(
"GROUP_ID",
$arFields)
1294 $obIBlockRights->SetRights($obIBlockRights->ConvertGroups(
$arFields[
"GROUP_ID"]));
1302 $obIBlockRights->SetRights(
$arFields[
"RIGHTS"]);
1311 if (array_key_exists(
"IPROPERTY_TEMPLATES",
$arFields))
1313 $ipropTemplates = new \Bitrix\Iblock\InheritedProperty\IblockTemplates(
$ID);
1314 $ipropTemplates->set(
$arFields[
"IPROPERTY_TEMPLATES"]);
1319 $strSql =
"DELETE FROM b_iblock_site WHERE IBLOCK_ID=".$ID;
1320 $DB->Query($strSql);
1323 "INSERT INTO b_iblock_site(IBLOCK_ID, SITE_ID) ".
1324 "SELECT ".$ID.
", LID ".
1326 "WHERE LID IN (".$str_LID.
") ";
1327 $DB->Query($strSql);
1333 && $iblockDataBeforeUpdate[
"FULLTEXT_INDEX"] ===
"N"
1341 && $iblockDataBeforeUpdate[
"FULLTEXT_INDEX"] ===
"Y"
1347 if(CModule::IncludeModule(
"search"))
1349 $dbAfter =
$DB->Query(
"SELECT ACTIVE FROM b_iblock WHERE ID=".
$ID);
1350 $arAfter = $dbAfter->Fetch();
1351 if($arAfter[
"ACTIVE"] !=
"Y")
1365 foreach (
GetModuleEvents(
"iblock",
"OnAfterIBlockUpdate",
true) as $arEvent)
1392 foreach(
GetModuleEvents(
"iblock",
"OnBeforeIBlockDelete",
true) as $arEvent)
1396 $err = Loc::getMessage(
"MAIN_BEFORE_DEL_ERR").
' '.$arEvent[
'TO_NAME'];
1399 $err .=
': '.$ex->GetString();
1405 foreach (
GetModuleEvents(
"iblock",
"OnIBlockDelete",
true) as $arEvent)
1408 $iblockSections = CIBlockSection::GetList(Array(), Array(
1411 "CHECK_PERMISSIONS" =>
"N",
1412 ),
false, Array(
"ID"));
1413 while($iblockSection = $iblockSections->Fetch())
1415 if(!CIBlockSection::Delete($iblockSection[
"ID"],
false))
1419 $iblockElements = CIBlockElement::GetList(Array(), Array(
1422 "CHECK_PERMISSIONS" =>
"N",
1423 ),
false,
false,
array(
"IBLOCK_ID",
"ID"));
1424 while($iblockElement = $iblockElements->Fetch())
1426 if(!CIBlockElement::Delete($iblockElement[
"ID"]))
1432 "CHECK_PERMISSIONS" =>
"N",
1434 while($property =
$props->Fetch())
1436 if(!CIBlockProperty::Delete($property[
"ID"]))
1440 CFile::Delete(self::GetArrayByID(
$ID ,
"PICTURE"));
1446 $obIBlockRights->DeleteAllRights();
1448 $ipropTemplates = new \Bitrix\Iblock\InheritedProperty\IblockTemplates(
$ID);
1449 $ipropTemplates->delete();
1451 CIBlockSectionPropertyLink::DeleteByIBlock(
$ID);
1453 $DB->Query(
"delete from b_iblock_offers_tmp where PRODUCT_IBLOCK_ID=".
$ID);
1454 $DB->Query(
"delete from b_iblock_offers_tmp where OFFERS_IBLOCK_ID=".
$ID);
1456 if(!
$DB->Query(
"DELETE FROM b_iblock_messages WHERE IBLOCK_ID = ".$ID))
1459 if(!
$DB->Query(
"DELETE FROM b_iblock_fields WHERE IBLOCK_ID = ".$ID))
1464 if(!
$DB->Query(
"DELETE FROM b_iblock_group WHERE IBLOCK_ID=".$ID))
1466 if(!
$DB->Query(
"DELETE FROM b_iblock_rss WHERE IBLOCK_ID=".$ID))
1468 if(!
$DB->Query(
"DELETE FROM b_iblock_site WHERE IBLOCK_ID=".$ID))
1470 if(!
$DB->Query(
"DELETE FROM b_iblock WHERE ID=".$ID))
1475 if (
$DB->TableExists(
'b_iblock_element_prop_s' .
$ID))
1477 $DB->DDL(
'DROP TABLE b_iblock_element_prop_s' .
$ID,
true);
1479 if (
$DB->TableExists(
'b_iblock_element_prop_m' .
$ID))
1481 $DB->DDL(
'DROP TABLE b_iblock_element_prop_m' .
$ID,
true);
1486 foreach(
GetModuleEvents(
"iblock",
"OnAfterIBlockDelete",
true) as $arEvent)
1503 $this->LAST_ERROR =
"";
1517 && (
string)$NAME ===
''
1519 $this->LAST_ERROR .= Loc::getMessage(
"IBLOCK_BAD_NAME").
"<br>";
1522 $this->LAST_ERROR .= Loc::getMessage(
"IBLOCK_BAD_BLOCK_TYPE").
"<br>";
1536 $this->LAST_ERROR .= Loc::getMessage(
'IBLOCK_ERR_IBLOCK_IS_ABSENT') .
'<br>';
1540 if($BIZPROC !=
"Y") $BIZPROC =
"N";
1543 if($WORKFLOW ==
"Y" && $BIZPROC ==
"Y")
1544 $this->LAST_ERROR .= Loc::getMessage(
"IBLOCK_BAD_WORKFLOW_AND_BIZPROC").
"<br>";
1550 $this->LAST_ERROR .= Loc::getMessage(
"IBLOCK_BAD_BLOCK_TYPE_ID").
"<br>";
1556 && array_key_exists(
"bucket",
$arFields[
"PICTURE"])
1557 && is_object(
$arFields[
"PICTURE"][
"bucket"])
1570 $this->LAST_ERROR .=
$error.
"<br>";
1584 $this->LAST_ERROR .= Loc::getMessage(
"IBLOCK_BAD_SITE_ID_NA").
"<br>";
1593 $r = CSite::GetByID($v);
1595 $this->LAST_ERROR .=
"'".$v.
"' - ".Loc::getMessage(
"IBLOCK_BAD_SITE_ID").
"<br>";
1607 if (!preg_match(
'/^[a-z][a-z0-9]{0,49}$/i',
$arFields[
'API_CODE']))
1609 $this->LAST_ERROR .= Loc::getMessage(
"IBLOCK_FIELD_API_CODE_FORMAT_ERROR").
'<br>';
1615 ->where(
'API_CODE',
$arFields[
'API_CODE'])
1616 ->whereNot(
'ID',
$ID)
1621 $this->LAST_ERROR .= Loc::getMessage(
"IBLOCK_FIELD_API_CODE_UNIQUE_ERROR").
'<br>';
1637 $this->LAST_ERROR .= Loc::getMessage(
"IBLOCK_BAD_REST_ON_WO_API_CODE").
'<br>';
1648 $this->LAST_ERROR .= Loc::getMessage(
"IBLOCK_BAD_FULLTEXT_INDEX") .
'<br>';
1654 $arFields[
'~TIMESTAMP_X'] = $helper->getCurrentDateTimeFunction();
1666 foreach($db_events as $arEvent)
1669 if($bEventRes===
false)
1672 $this->LAST_ERROR .= $err->GetString().
"<br>";
1676 $this->LAST_ERROR .=
"Unknown error.<br>";
1683 if(empty($this->LAST_ERROR) && (COption::GetOptionInt(
"main",
"disk_space") > 0))
1687 $this->LAST_ERROR = $quota->LAST_ERROR;
1691 if($this->LAST_ERROR <>
'')
1702 static $letters =
array(
1712 $arToDelete =
array();
1713 $arToInsert =
array();
1715 if(is_array($arGROUP_ID))
1717 foreach($arGROUP_ID as $group_id =>
$perm)
1719 $group_id = (int)$group_id;
1720 if ($group_id > 0 && isset($letters[
$perm]))
1722 $arToInsert[$group_id] =
$perm;
1728 SELECT GROUP_ID, PERMISSION
1732 while(
$ar =
$rs->Fetch())
1734 $group_id = (int)
$ar[
"GROUP_ID"];
1736 if(isset($arToInsert[$group_id]) && $arToInsert[$group_id] ===
$ar[
"PERMISSION"])
1738 unset($arToInsert[$group_id]);
1742 $arToDelete[] = $group_id;
1746 if(!empty($arToDelete))
1749 DELETE FROM b_iblock_group
1751 AND GROUP_ID in (".implode(
", ", $arToDelete).
")
1755 if(!empty($arToInsert))
1757 foreach($arToInsert as $group_id =>
$perm)
1760 INSERT INTO b_iblock_group(IBLOCK_ID, GROUP_ID, PERMISSION)
1763 WHERE ID = ".$group_id.
"
1768 if(!empty($arToDelete) || !empty($arToInsert))
1770 if(CModule::IncludeModule(
"search"))
1788 $arMessages =
array(
1800 $arUpdate =
array();
1801 foreach($arMessages as $MESSAGE_ID)
1803 if(array_key_exists($MESSAGE_ID,
$arFields))
1804 $arUpdate[] = $MESSAGE_ID;
1806 if(
count($arUpdate) > 0)
1809 DELETE FROM b_iblock_messages
1810 WHERE IBLOCK_ID = ".
$ID.
"
1811 AND MESSAGE_ID in ('".implode(
"', '", $arUpdate).
"')
1815 foreach($arUpdate as $MESSAGE_ID)
1817 $MESSAGE_TEXT = trim(
$arFields[$MESSAGE_ID]);
1818 if($MESSAGE_TEXT <>
'')
1819 $DB->Add(
"b_iblock_messages",
array(
1822 "MESSAGE_ID" => $MESSAGE_ID,
1823 "MESSAGE_TEXT" => $MESSAGE_TEXT,
1836 $arMessages =
array(
1837 "ELEMENT_NAME" => Loc::getMessage(
"IBLOCK_MESS_ELEMENT_NAME"),
1838 "ELEMENTS_NAME" =>
"",
1839 "ELEMENT_ADD" => Loc::getMessage(
"IBLOCK_MESS_ELEMENT_ADD"),
1840 "ELEMENT_EDIT" => Loc::getMessage(
"IBLOCK_MESS_ELEMENT_EDIT"),
1841 "ELEMENT_DELETE" => Loc::getMessage(
"IBLOCK_MESS_ELEMENT_DELETE"),
1842 "SECTION_NAME" => Loc::getMessage(
"IBLOCK_MESS_SECTION_NAME"),
1843 "SECTIONS_NAME" =>
"",
1844 "SECTION_ADD" => Loc::getMessage(
"IBLOCK_MESS_SECTION_ADD"),
1845 "SECTION_EDIT" => Loc::getMessage(
"IBLOCK_MESS_SECTION_EDIT"),
1846 "SECTION_DELETE" => Loc::getMessage(
"IBLOCK_MESS_SECTION_DELETE"),
1856 LEFT JOIN b_iblock_messages M ON B.ID = M.IBLOCK_ID
1864 if(
$ar[
"MESSAGE_ID"])
1865 $arMessages[
$ar[
"MESSAGE_ID"]] =
$ar[
"MESSAGE_TEXT"];
1867 if(($arMessages[
"ELEMENTS_NAME"] ==
'') || ($arMessages[
"SECTIONS_NAME"] ==
''))
1874 if($arMessages[
"ELEMENTS_NAME"] ==
'')
1875 $arMessages[
"ELEMENTS_NAME"] = $arType[
"ELEMENT_NAME"];
1876 if($arMessages[
"SECTIONS_NAME"] ==
'')
1877 $arMessages[
"SECTIONS_NAME"] = $arType[
"SECTION_NAME"];
1881 if($arMessages[
"ELEMENTS_NAME"] ==
'')
1882 $arMessages[
"ELEMENTS_NAME"] = Loc::getMessage(
"IBLOCK_MESS_ELEMENTS_NAME");
1883 if($arMessages[
"SECTIONS_NAME"] ==
'')
1884 $arMessages[
"SECTIONS_NAME"] = Loc::getMessage(
"IBLOCK_MESS_SECTIONS_NAME");
1908 static $res =
false;
1914 'IBLOCK_SECTION' => [
1915 'NAME' => Loc::getMessage(
'IBLOCK_FIELD_SECTIONS'),
1916 'IS_REQUIRED' =>
false,
1921 'NAME' => Loc::getMessage(
'IBLOCK_FIELD_ACTIVE'),
1922 'IS_REQUIRED' =>
'Y',
1927 'NAME' => Loc::getMessage(
'IBLOCK_FIELD_ACTIVE_PERIOD_FROM'),
1928 'IS_REQUIRED' =>
false,
1933 'NAME' => Loc::getMessage(
'IBLOCK_FIELD_ACTIVE_PERIOD_TO'),
1934 'IS_REQUIRED' =>
false,
1939 'NAME' => Loc::getMessage(
'IBLOCK_FIELD_SORT'),
1940 'IS_REQUIRED' =>
false,
1945 'NAME' => Loc::getMessage(
'IBLOCK_FIELD_NAME'),
1946 'IS_REQUIRED' =>
'Y',
1950 'PREVIEW_PICTURE' => [
1951 'NAME' => Loc::getMessage(
'IBLOCK_FIELD_PREVIEW_PICTURE'),
1952 'IS_REQUIRED' =>
false,
1956 'PREVIEW_TEXT_TYPE' => [
1957 'NAME' => Loc::getMessage(
'IBLOCK_FIELD_PREVIEW_TEXT_TYPE'),
1958 'IS_REQUIRED' =>
'Y',
1963 'NAME' => Loc::getMessage(
'IBLOCK_FIELD_PREVIEW_TEXT'),
1964 'IS_REQUIRED' =>
false,
1968 'DETAIL_PICTURE' => [
1969 'NAME' => Loc::getMessage(
'IBLOCK_FIELD_DETAIL_PICTURE'),
1970 'IS_REQUIRED' =>
false,
1974 'DETAIL_TEXT_TYPE' => [
1975 'NAME' => Loc::getMessage(
'IBLOCK_FIELD_DETAIL_TEXT_TYPE'),
1976 'IS_REQUIRED' =>
'Y',
1981 'NAME' => Loc::getMessage(
'IBLOCK_FIELD_DETAIL_TEXT'),
1982 'IS_REQUIRED' =>
false,
1987 'NAME' => Loc::getMessage(
'IBLOCK_FIELD_XML_ID'),
1988 'IS_REQUIRED' =>
'Y',
1993 'NAME' => Loc::getMessage(
'IBLOCK_FIELD_CODE'),
1994 'IS_REQUIRED' =>
false,
1999 'NAME' => Loc::getMessage(
'IBLOCK_FIELD_TAGS'),
2000 'IS_REQUIRED' =>
false,
2005 'NAME' => Loc::getMessage(
'IBLOCK_FIELD_NAME'),
2006 'IS_REQUIRED' =>
'Y',
2010 'SECTION_PICTURE' => [
2011 'NAME' => Loc::getMessage(
'IBLOCK_FIELD_PREVIEW_PICTURE'),
2012 'IS_REQUIRED' =>
false,
2016 'SECTION_DESCRIPTION_TYPE' => [
2017 'NAME' => Loc::getMessage(
'IBLOCK_FIELD_SECTION_DESCRIPTION_TYPE'),
2018 'IS_REQUIRED' =>
'Y',
2022 'SECTION_DESCRIPTION' => [
2023 'NAME' => Loc::getMessage(
'IBLOCK_FIELD_SECTION_DESCRIPTION'),
2024 'IS_REQUIRED' =>
false,
2028 'SECTION_DETAIL_PICTURE' => [
2029 'NAME' => Loc::getMessage(
'IBLOCK_FIELD_DETAIL_PICTURE'),
2030 'IS_REQUIRED' =>
false,
2031 'DEFAULT_VALUE' => serialize(
$defaultValues[
'SECTION_DETAIL_PICTURE']),
2034 'SECTION_XML_ID' => [
2035 'NAME' => Loc::getMessage(
'IBLOCK_FIELD_XML_ID'),
2036 'IS_REQUIRED' =>
false,
2041 'NAME' => Loc::getMessage(
'IBLOCK_FIELD_CODE'),
2042 'IS_REQUIRED' =>
false,
2046 'LOG_SECTION_ADD' => [
2047 'NAME' =>
'LOG_SECTION_ADD',
2048 'IS_REQUIRED' =>
false,
2052 'LOG_SECTION_EDIT' => [
2053 'NAME' =>
'LOG_SECTION_EDIT',
2054 'IS_REQUIRED' =>
false,
2058 'LOG_SECTION_DELETE' => [
2059 'NAME' =>
'LOG_SECTION_DELETE',
2060 'IS_REQUIRED' =>
false,
2064 'LOG_ELEMENT_ADD' => [
2065 'NAME' =>
'LOG_ELEMENT_ADD',
2066 'IS_REQUIRED' =>
false,
2070 'LOG_ELEMENT_EDIT' => [
2071 'NAME' =>
'LOG_ELEMENT_EDIT',
2072 'IS_REQUIRED' =>
false,
2076 'LOG_ELEMENT_DELETE' => [
2077 'NAME' =>
'LOG_ELEMENT_DELETE',
2078 'IS_REQUIRED' =>
false,
2082 'XML_IMPORT_START_TIME' => [
2083 'NAME' =>
'XML_IMPORT_START_TIME',
2084 'IS_REQUIRED' =>
false,
2088 'DETAIL_TEXT_TYPE_ALLOW_CHANGE' => [
2089 'NAME' =>
'DETAIL_TEXT_TYPE_ALLOW_CHANGE',
2090 'IS_REQUIRED' =>
false,
2091 'DEFAULT_VALUE' =>
$defaultValues[
'DETAIL_TEXT_TYPE_ALLOW_CHANGE'],
2094 'PREVIEW_TEXT_TYPE_ALLOW_CHANGE' => [
2095 'NAME' =>
'PREVIEW_TEXT_TYPE_ALLOW_CHANGE',
2096 'IS_REQUIRED' =>
false,
2097 'DEFAULT_VALUE' =>
$defaultValues[
'PREVIEW_TEXT_TYPE_ALLOW_CHANGE'],
2100 'SECTION_DESCRIPTION_TYPE_ALLOW_CHANGE' => [
2101 'NAME' =>
'SECTION_DESCRIPTION_TYPE_ALLOW_CHANGE',
2102 'IS_REQUIRED' =>
false,
2103 'DEFAULT_VALUE' =>
$defaultValues[
'SECTION_DESCRIPTION_TYPE_ALLOW_CHANGE'],
2118 if ($fieldName ===
'')
2123 $fields = static::GetFieldsDefaults();
2125 return (
$fields[$fieldName] ??
null);
2138 foreach (array_keys(
$arFields) as $fieldId)
2144 if (isset(
$fields[$fieldId][
'IS_REQUIRED']))
2152 $value =
$arFields[$fieldId][
'DEFAULT_VALUE'] ?? [];
2153 if (!is_array($value))
2159 $arFields[$fieldId][
'DEFAULT_VALUE'] = $value;
2168 if (isset(
$arFields[
'PREVIEW_PICTURE']))
2170 $arFields[
'PREVIEW_PICTURE'][
'DEFAULT_VALUE'] = serialize(static::preparePreviewPictureFieldSettings(
2171 $arFields[
'PREVIEW_PICTURE'][
'DEFAULT_VALUE']
2177 $arFields[
'DETAIL_PICTURE'][
'DEFAULT_VALUE'] = serialize(static::prepareDetailPictureFieldSettings(
2178 $arFields[
'DETAIL_PICTURE'][
'DEFAULT_VALUE']
2184 $arFields[
'CODE'][
'DEFAULT_VALUE'] = serialize(static::prepareCodeFieldSettings(
2189 if (isset(
$arFields[
'SECTION_PICTURE']))
2191 $arFields[
'SECTION_PICTURE'][
'DEFAULT_VALUE'] = serialize(static::preparePreviewPictureFieldSettings(
2192 $arFields[
'SECTION_PICTURE'][
'DEFAULT_VALUE']
2196 if (isset(
$arFields[
'SECTION_DETAIL_PICTURE']))
2198 $arFields[
'SECTION_DETAIL_PICTURE'][
'DEFAULT_VALUE'] = serialize(static::prepareDetailPictureFieldSettings(
2199 $arFields[
'SECTION_DETAIL_PICTURE'][
'DEFAULT_VALUE']
2204 $arFields[
'SECTION_CODE'][
'DEFAULT_VALUE'] = serialize(static::prepareCodeFieldSettings(
2205 $arFields[
'SECTION_CODE'][
'DEFAULT_VALUE']
2210 $arFields[
'SORT'][
'DEFAULT_VALUE'] = (int)(
$arFields[
'SORT'][
'DEFAULT_VALUE'] ?? 500);
2214 $arFields[
'IBLOCK_SECTION'][
'DEFAULT_VALUE'] = serialize([
2215 'KEEP_IBLOCK_SECTION_ID' =>
2216 $arFields[
'IBLOCK_SECTION'][
'DEFAULT_VALUE'][
'KEEP_IBLOCK_SECTION_ID'] ===
'Y'
2224 SELECT * FROM b_iblock_fields
2225 WHERE IBLOCK_ID = " .
$ID .
"
2230 $fieldId =
$ar[
'FIELD_ID'];
2233 if (
$fields[$fieldId][
"IS_REQUIRED"] ===
false)
2235 $IS_REQUIRED = (
$arFields[$fieldId][
"IS_REQUIRED"] ??
'N');
2239 $IS_REQUIRED =
$fields[$fieldId][
"IS_REQUIRED"];
2241 $IS_REQUIRED = ($IS_REQUIRED ===
"Y"?
"Y":
"N");
2242 if (
$ar[
"IS_REQUIRED"] !== $IS_REQUIRED)
2244 $arUpdate[
'IS_REQUIRED'] = $IS_REQUIRED;
2247 isset(
$arFields[$fieldId][
"DEFAULT_VALUE"])
2248 &&
$ar[
"DEFAULT_VALUE"] !==
$arFields[$fieldId][
"DEFAULT_VALUE"]
2251 $arUpdate[
'DEFAULT_VALUE'] =
$arFields[$fieldId][
"DEFAULT_VALUE"];
2257 $IS_REQUIRED =
$fields[$fieldId][
"IS_REQUIRED"];
2258 $IS_REQUIRED = ($IS_REQUIRED ===
"Y"?
"Y":
"N");
2259 if (
$ar[
"IS_REQUIRED"] !== $IS_REQUIRED)
2262 "IS_REQUIRED" => $IS_REQUIRED,
2263 "DEFAULT_VALUE" =>
"",
2270 $DB->Query(
"DELETE FROM b_iblock_fields WHERE IBLOCK_ID = ".
$ID.
" AND FIELD_ID = '".
$DB->ForSQL($fieldId).
"'");
2273 if (!empty($arUpdate))
2275 $strUpdate =
$DB->PrepareUpdate(
"b_iblock_fields", $arUpdate);
2276 if ($strUpdate !=
"")
2278 $strSql =
"UPDATE b_iblock_fields SET " . $strUpdate
2279 .
" WHERE IBLOCK_ID = " .
$ID
2280 .
" AND FIELD_ID = '" .
$DB->ForSQL($fieldId) .
"'";
2282 if (isset($arUpdate[
"DEFAULT_VALUE"]))
2284 $arBinds[
"DEFAULT_VALUE"] = $arUpdate[
"DEFAULT_VALUE"];
2286 $DB->QueryBind($strSql, $arBinds);
2290 foreach(
$fields as $FIELD_ID => $arDefaults)
2292 if(array_key_exists($FIELD_ID,
$arFields))
2294 if($arDefaults[
"IS_REQUIRED"] ===
false)
2295 $IS_REQUIRED =
$arFields[$FIELD_ID][
"IS_REQUIRED"];
2297 $IS_REQUIRED = $arDefaults[
"IS_REQUIRED"];
2298 $DEFAULT_VALUE =
$arFields[$FIELD_ID][
"DEFAULT_VALUE"];
2302 $IS_REQUIRED = $arDefaults[
"IS_REQUIRED"];
2303 $DEFAULT_VALUE =
false;
2305 $IS_REQUIRED = ($IS_REQUIRED ===
"Y"?
"Y":
"N");
2308 "FIELD_ID" => $FIELD_ID,
2309 "IS_REQUIRED" => $IS_REQUIRED,
2310 "DEFAULT_VALUE" => $DEFAULT_VALUE,
2312 $arInsert =
$DB->PrepareInsert(
"b_iblock_fields", $arAdd);
2313 $DB->Query(
"INSERT INTO b_iblock_fields (".$arInsert[0].
") VALUES (".$arInsert[1].
")");
2325 $fields = static::GetFieldsDefaults();
2333 LEFT JOIN b_iblock_fields F ON B.ID = F.IBLOCK_ID
2339 $fieldId =
$ar[
'FIELD_ID'];
2342 if (
$fields[$fieldId][
'IS_REQUIRED'] ===
false)
2344 $fields[$fieldId][
'IS_REQUIRED'] =
$ar[
'IS_REQUIRED'] ===
'Y' ?
'Y' :
'N';
2346 $fields[$fieldId][
'DEFAULT_VALUE'] =
$ar[
'DEFAULT_VALUE'];
2351 foreach (
$fields as $FIELD_ID => $default)
2353 if ($default[
'IS_REQUIRED'] ===
false)
2355 $fields[$FIELD_ID][
'IS_REQUIRED'] =
'N';
2360 $a = &
$fields[$FIELD_ID][
'DEFAULT_VALUE'];
2362 if (is_string(
$a) &&
$a !==
'')
2366 $a = unserialize(
$a, [
'allowed_classes' =>
false]);
2375 if (array_key_exists(
'TRANS_LEN',
$a))
2377 $trans_len = (int)
$a[
'TRANS_LEN'];
2378 if ($trans_len > 255)
2386 $a[
'TRANS_LEN'] = $trans_len;
2396 $props =
new CIBlockProperty();
2410 $dbres =
$DB->Query(
"
2411 SELECT GROUP_ID, PERMISSION
2413 WHERE IBLOCK_ID = ".
$ID.
"
2415 while(
$res = $dbres->Fetch())
2429 static $CACHE =
array();
2430 $USER_ID = is_object(
$USER)? intval(
$USER->GetID()): 0;
2432 if($FOR_USER_ID > 0 && $FOR_USER_ID != $USER_ID)
2434 $arGroups = CUser::GetUserGroup($FOR_USER_ID);
2437 && COption::GetOptionString(
"main",
"controller_member",
"N") !=
"Y"
2438 && COption::GetOptionString(
"main",
"~controller_limited_admin",
"N") !=
"Y"
2445 if(
$USER->IsAdmin())
2447 $USER_GROUPS =
$USER->GetGroups();
2457 if(!array_key_exists($CACHE_KEY, $CACHE))
2460 $CACHE[$CACHE_KEY] =
"D";
2463 SELECT MAX(IBG.PERMISSION) as P
2464 FROM b_iblock_group IBG
2465 WHERE IBG.IBLOCK_ID=".$IBLOCK_ID.
"
2466 AND IBG.GROUP_ID IN (".$USER_GROUPS.
")
2469 if($r =
$res->Fetch())
2474 $CACHE[$CACHE_KEY] = $r[
"P"];
2479 return $CACHE[$CACHE_KEY];
2492 WHERE SITE_ID='".
$DB->ForSQL(
$lang, 2).
"'
2495 $arIBlocks =
array();
2496 while(
$a = $r->Fetch())
2497 $arIBlocks[] =
$a[
"IBLOCK_ID"];
2498 if(
count($arIBlocks) > 0)
2500 $APPLICATION->ThrowException(Loc::getMessage(
"IBLOCK_SITE_LINKS_EXISTS",
array(
"#ID_LIST#" => implode(
", ", $arIBlocks))));
2519 return $DB->Query(
"DELETE FROM b_iblock_group WHERE GROUP_ID=".intval($group_id),
true);
2524 static $operations = [
2553 for (
$i = 3;
$i > 0;
$i--)
2555 $op = mb_substr(
$key, 0,
$i);
2556 if ($op && isset($operations[$op]))
2559 $result[
'OPERATION'] = $operations[$op];
2568 public static function FilterCreate($field_name, $values,
$type, $cOperationType=
false, $bSkipEmpty =
true)
2578 return str_replace(
"%",
"\\%", str_replace(
"_",
"\\_",
$DB->ForSQL(
$str)));
2581 public static function FilterCreateEx($fname, $vals,
$type, &$bFullJoin, $cOperationType=
false, $bSkipEmpty =
true)
2586 if(!is_array($vals))
2592 if(is_bool($cOperationType))
2594 if($cOperationType===
true)
2595 $cOperationType =
"N";
2597 $cOperationType =
"E";
2600 if($cOperationType==
"E")
2601 $strOperation =
"=";
2602 elseif($cOperationType==
"G")
2603 $strOperation =
">";
2604 elseif($cOperationType==
"GE")
2605 $strOperation =
">=";
2606 elseif($cOperationType==
"LE")
2607 $strOperation =
"<=";
2608 elseif($cOperationType==
"L")
2609 $strOperation =
"<";
2610 elseif($cOperationType==
'B')
2611 $strOperation =
array(
'BETWEEN',
'AND');
2612 elseif($cOperationType==
'NB')
2613 $strOperation =
array(
'BETWEEN',
'AND');
2615 $strOperation =
"=";
2617 if($cOperationType==
'B' || $cOperationType==
'NB')
2619 if(
count($vals)==2 && !is_array($vals[0]))
2620 $vals =
array($vals);
2623 $bNegative = mb_substr($cOperationType, 0, 1) ==
"N";
2625 $bWasLeftJoin =
false;
2630 foreach($vals as
$val)
2634 || (is_array($strOperation) && is_array(
$val))
2641 case "string_equal":
2642 if($cOperationType==
"?")
2647 elseif($cOperationType==
"S" || $cOperationType==
"NS")
2648 $res[] = ($cOperationType==
"NS"?
" ".$fname.
" IS NULL OR NOT ":
"").
"(".CIBlock::_Upper($fname).
" LIKE ".CIBlock::_Upper(
"'%".
CIBlock::ForLIKE(
$val).
"%'").
")";
2649 elseif(($cOperationType==
"B" || $cOperationType==
"NB") && is_array(
$val) &&
count(
$val)==2)
2650 $res[] = ($cOperationType==
"NB"?
" ".$fname.
" IS NULL OR NOT ":
"").
"(".CIBlock::_Upper($fname).
" ".$strOperation[0].
" '".CIBlock::_Upper(
$DB->ForSql(
$val[0])).
"' ".$strOperation[1].
" '".CIBlock::_Upper(
$DB->ForSql(
$val[1])).
"')";
2653 if((
string)
$val ==
'')
2654 $res[] = ($cOperationType==
"N"?
"NOT":
"").
"(".$fname.
" IS NULL OR ".
$DB->Length($fname).
"<=0)";
2656 $res[] = ($cOperationType==
"N"?
" ".$fname.
" IS NULL OR NOT ":
"").
"(".CIBlock::_Upper($fname).$strOperation.CIBlock::_Upper(
"'".
$DB->ForSql(
$val).
"'").
")";
2660 if($cOperationType==
"?")
2664 $sr =
GetFilterQuery($fname,
$val,
"Y",
array(), ($fname==
"BE.SEARCHABLE_CONTENT" || $fname==
"BE.DETAIL_TEXT" ?
"Y" :
"N"));
2669 elseif(($cOperationType==
"B" || $cOperationType==
"NB") && is_array(
$val) &&
count(
$val)==2)
2671 $res[] = ($cOperationType==
"NB"?
" ".$fname.
" IS NULL OR NOT ":
"").
"(".CIBlock::_Upper($fname).
" ".$strOperation[0].
" '".CIBlock::_Upper(
$DB->ForSql(
$val[0])).
"' ".$strOperation[1].
" '".CIBlock::_Upper(
$DB->ForSql(
$val[1])).
"')";
2673 elseif($cOperationType==
"S" || $cOperationType==
"NS")
2674 $res[] = ($cOperationType==
"NS"?
" ".$fname.
" IS NULL OR NOT ":
"").
"(".CIBlock::_Upper($fname).
" LIKE ".CIBlock::_Upper(
"'%".
CIBlock::ForLIKE(
$val).
"%'").
")";
2675 elseif($cOperationType==
"FTL")
2678 $condition = $sqlWhere->matchLike($fname,
$val);
2679 if ($condition !=
'')
2680 $res[] = $condition;
2684 if((
string)
$val ==
'')
2685 $res[] = ($bNegative?
"NOT":
"").
"(".$fname.
" IS NULL OR ".
$DB->Length($fname).
"<=0)";
2687 if($strOperation==
"=" && $cOperationType!=
"I" && $cOperationType!=
"NI")
2688 $res[] = ($cOperationType==
"N"?
" ".$fname.
" IS NULL OR NOT ":
"").
"(".(
$DB->type==
"ORACLE"?CIBlock::_Upper($fname).
" LIKE ".CIBlock::_Upper(
"'".
$DB->ForSqlLike(
$val).
"'").
" ESCAPE '\\'" : $fname.
" LIKE '".
$DB->ForSqlLike(
$val).
"'").
")";
2690 $res[] = ($bNegative?
" ".$fname.
" IS NULL OR NOT ":
"").
"(".(
$DB->type==
"ORACLE"?CIBlock::_Upper($fname).
" ".$strOperation.
" ".CIBlock::_Upper(
"'".$DB->ForSql(
$val).
"'").
" " : $fname.
" ".$strOperation.
" '".
$DB->ForSql(
$val).
"'").
")";
2696 $res[] = ($cOperationType ==
"N" ?
"NOT" :
"") .
"(" . $fname .
" IS NULL)";
2698 elseif (($cOperationType==
"B" || $cOperationType==
"NB") && is_array(
$val) &&
count(
$val)==2)
2701 static::isCorrectFullFormatDate(
$DB->ForSql(
$val[0])) &&
2702 static::isCorrectFullFormatDate(
$DB->ForSql(
$val[1]))
2705 $res[] = ($cOperationType ==
'NB' ?
' ' . $fname .
' IS NULL OR NOT ' :
'')
2711 .
$DB->CharToDateFunction(
$DB->ForSql(
$val[0]),
"FULL")
2715 .
$DB->CharToDateFunction(
$DB->ForSql(
$val[1]),
"FULL")
2721 if (static::isCorrectFullFormatDate(
$DB->ForSql(
$val)))
2723 $res[] = ($bNegative ?
" " . $fname .
" IS NULL OR NOT " :
"")
2729 .
$DB->CharToDateFunction(
$DB->ForSql(
$val),
"FULL")
2737 $res[] = $fname.
" IS ".($bNegative?
"NOT NULL":
" NULL");
2740 elseif($cOperationType==
"B" || $cOperationType==
"NB")
2747 ($cOperationType ==
'NB' ?
' ' . $fname .
' IS NULL OR NOT ' :
'')
2748 .
'(' . $fname .
' ' . $strOperation[0]
2749 .
' ' . self::getNumberValueForSql(
$val[0])
2750 .
' ' . $strOperation[1]
2751 .
' ' . self::getNumberValueForSql(
$val[1])
2758 ($cOperationType ==
'NB' ?
' ' . $fname .
' IS NULL OR NOT ' :
'')
2759 .
'(' . $fname .
' = ' . self::getNumberValueForSql(array_pop(
$val[0])) .
')'
2766 ($cOperationType==
'NB' ?
' ' . $fname .
' IS NULL OR NOT ' :
'')
2767 .
'(' . $fname .
' = ' . self::getNumberValueForSql(
$val) .
')'
2773 $parsedValue = self::getNumberValueForSql(
$val);
2774 $res[] =
" ".$fname.
" IS NULL OR NOT (".$fname.
" ".$strOperation.
" ".$parsedValue.
")";
2775 if($strOperation ==
'=')
2777 $arIn[] = $parsedValue;
2779 unset($parsedValue);
2783 $parsedValue = self::getNumberValueForSql(
$val);
2784 $res[] =
"(".$fname.
" ".$strOperation.
" ".$parsedValue.
")";
2785 if($strOperation ==
'=')
2787 $arIn[] = $parsedValue;
2791 case "number_above":
2793 $res[] = ($cOperationType==
"N"?
"NOT":
"").
"(".$fname.
" IS NULL)";
2795 $res[] = ($cOperationType==
"N"?
" ".$fname.
" IS NULL OR NOT ":
"").
"(".$fname.
" ".$strOperation.
" '".
$DB->ForSql(
$val).
"')";
2798 if($cOperationType==
"FT" || $cOperationType==
"FTI")
2801 $condition = $sqlWhere->match($fname,
$val, $cOperationType==
"FT");
2802 if ($condition !=
'')
2803 $res[] = $condition;
2805 elseif($cOperationType==
"FTL")
2808 $condition = $sqlWhere->matchLike($fname,
$val);
2809 if ($condition !=
'')
2810 $res[] = $condition;
2812 elseif($cOperationType==
"?")
2816 $sr =
GetFilterQuery($fname,
$val,
"Y",
array(), ($fname==
"BE.SEARCHABLE_CONTENT" || $fname==
"BE.DETAIL_TEXT" ?
"Y" :
"N"));
2821 elseif(($cOperationType==
"B" || $cOperationType==
"NB") && is_array(
$val) &&
count(
$val)==2)
2823 $res[] = ($cOperationType==
"NB"?
" ".$fname.
" IS NULL OR NOT ":
"").
"(".CIBlock::_Upper($fname).
" ".$strOperation[0].
" '".CIBlock::_Upper(
$DB->ForSql(
$val[0])).
"' ".$strOperation[1].
" '".CIBlock::_Upper(
$DB->ForSql(
$val[1])).
"')";
2825 elseif($cOperationType==
"S" || $cOperationType==
"NS")
2826 $res[] = ($cOperationType==
"NS"?
" ".$fname.
" IS NULL OR NOT ":
"").
"(".CIBlock::_Upper($fname).
" LIKE ".CIBlock::_Upper(
"'%".
CIBlock::ForLIKE(
$val).
"%'").
")";
2829 if((
string)
$val ==
'')
2830 $res[] = ($bNegative?
"NOT":
"").
"(".$fname.
" IS NULL OR ".
$DB->Length($fname).
"<=0)";
2832 if($strOperation==
"=" && $cOperationType!=
"I" && $cOperationType!=
"NI")
2833 $res[] = ($cOperationType==
"N"?
" ".$fname.
" IS NULL OR NOT ":
"").
"(".(
$DB->type==
"ORACLE"?CIBlock::_Upper($fname).
" LIKE ".CIBlock::_Upper(
"'".
$DB->ForSqlLike(
$val).
"'").
" ESCAPE '\\'" : $fname.
" LIKE '".
$DB->ForSqlLike(
$val).
"'").
")";
2835 $res[] = ($bNegative?
" ".$fname.
" IS NULL OR NOT ":
"").
"(".(
$DB->type==
"ORACLE"?CIBlock::_Upper($fname).
" ".$strOperation.
" ".CIBlock::_Upper(
"'".$DB->ForSql(
$val).
"'").
" " : $fname.
" ".$strOperation.
" '".
$DB->ForSql(
$val).
"'").
")";
2840 if((is_array(
$val) || (
string)
$val <> '') && !$bNegative)
2843 $bWasLeftJoin =
true;
2849 $cntIn =
count($arIn);
2855 ||
$DB->type ==
"MYSQL"
2860 $res =
array($fname.
" IS NULL OR NOT (".$fname.
" IN (".implode(
", ", $arIn).
"))");
2862 $res =
array($fname.
" IN (".implode(
", ", $arIn).
")");
2868 $strResult .= ($bNegative?
" AND ":
" OR ");
2869 $strResult .=
"(".$val.
")";
2873 $strResult =
"(".$strResult.
")";
2875 if($bFullJoin && $bWasLeftJoin && !$bNegative)
2887 private static function getNumberValueForSql(mixed $value): string|float
2889 $value = (float)$value;
2890 if (is_nan($value) || is_infinite($value))
2892 return "'" . $value .
"'";
2905 $value = clone $value;
2906 $value->toUserTime();
2912 $format =
$culture->getFormatDatetime();
2916 $format = CLang::GetDateFormat(
'FULL');
2919 $formatDate = CDatabase::FormatDate($value, $format,
"YYYY-MM-DD HH:MI:SS");
2921 if ($formatDate ===
false || $formatDate ===
'')
2929 public static function _MergeIBArrays($iblock_id, $iblock_code =
false, $iblock_id2 =
false, $iblock_code2 =
false)
2931 if(!is_array($iblock_id))
2933 if(is_numeric($iblock_id) || $iblock_id <>
'')
2934 $iblock_id = Array($iblock_id);
2935 elseif(is_array($iblock_id2))
2936 $iblock_id = $iblock_id2;
2937 elseif(is_numeric($iblock_id2) || $iblock_id2 <>
'')
2938 $iblock_id = Array($iblock_id2);
2941 if(!is_array($iblock_code))
2943 if(is_numeric($iblock_code) || $iblock_code <>
'')
2944 $iblock_code = Array($iblock_code);
2945 elseif(is_array($iblock_code2))
2946 $iblock_code = $iblock_code2;
2947 elseif(is_numeric($iblock_code2) || $iblock_code2 <>
'')
2948 $iblock_code = Array($iblock_code2);
2951 if(is_array($iblock_code) && is_array($iblock_id))
2952 return array_merge($iblock_code, $iblock_id);
2954 if(is_array($iblock_code))
2955 return $iblock_code;
2957 if(is_array($iblock_id))
2967 static $arIBlockCache =
array();
2974 if(!array_key_exists(
$IBLOCK_ID, $arIBlockCache))
2980 CODE as IBLOCK_CODE,
2981 XML_ID as IBLOCK_EXTERNAL_ID,
2998 if(mb_substr(
$arFields[
"ITEM_ID"], 0, 1) !==
'S')
3031 public static function _GetProductUrl($OF_ELEMENT_ID, $OF_IBLOCK_ID, $server_name =
false, $arrType =
false)
3035 'ID' => $OF_ELEMENT_ID,
3036 'IBLOCK_ID' => $OF_IBLOCK_ID,
3046 $id = (int)($element[
'ID'] ?? 0);
3047 $iblockId = (int)($element[
'IBLOCK_ID'] ?? 0);
3054 if (self::$catalogIncluded ===
null)
3058 if (!self::$catalogIncluded)
3069 $parentId = (int)($element[
'PROPERTY_' .
$iblock[
'SKU_PROPERTY_ID'] .
'_VALUE'] ?? self::getProductId($id,
$iblockId));
3075 $parent = self::getUrlElementData($parentId);
3076 if ($parent ===
null)
3082 $iblock[
'PRODUCT_IBLOCK'][
'DETAIL_PAGE_URL'],
3084 'LANG_DIR' => (
string)($element[
'LANG_DIR'] ??
''),
3085 'ID' => $parent[
'ID'],
3086 'ELEMENT_ID' => $parent[
'ID'],
3087 'CODE' => $parent[
'CODE'],
3088 'ELEMENT_CODE' => $parent[
'CODE'],
3089 'EXTERNAL_ID' => $parent[
'XML_ID'],
3090 'IBLOCK_TYPE_ID' =>
$iblock[
'PRODUCT_IBLOCK'][
'IBLOCK_TYPE_ID'],
3091 'IBLOCK_ID' => $parent[
'IBLOCK_ID'],
3092 'IBLOCK_CODE' =>
$iblock[
'PRODUCT_IBLOCK'][
'CODE'],
3093 'IBLOCK_EXTERNAL_ID' =>
$iblock[
'PRODUCT_IBLOCK'][
'XML_ID'],
3094 'IBLOCK_SECTION_ID' => $parent[
'IBLOCK_SECTION_ID'],
3095 'SECTION_CODE' => $parent[
'IBLOCK_SECTION_CODE'],
3108 $url = str_replace(
'#LANG#', (
string)(
$arr[
'LANG_DIR'] ??
''),
$url);
3111 || !defined(
'BX_STARTED')
3114 static $cache =
array();
3115 if (isset(
$arr[
'LID']))
3117 if (!isset($cache[
$arr[
'LID']]))
3119 $db_lang = CLang::GetByID(
$arr[
'LID']);
3120 $arLang = $db_lang->Fetch();
3121 if (!empty($arLang))
3123 $arLang[
'DIR'] = (string)$arLang[
'DIR'];
3124 $arLang[
'SERVER_NAME'] = (string)$arLang[
'SERVER_NAME'];
3126 $cache[
$arr[
'LID']] = $arLang;
3128 $arLang = $cache[
$arr[
'LID']];
3129 if (!empty($arLang))
3138 $arLang[
'SERVER_NAME'],
3161 $id = (int)(
$arr[
'ID'] ?? 0);
3162 $preparedId = $id > 0 ? $id :
'';
3164 static $arSearch = [
3173 '#IBLOCK_EXTERNAL_ID#',
3179 '#SECTION_CODE_PATH#',
3182 $preparedCode = rawurlencode(
3183 (
string)(
$arr[
'~CODE'] ?? (
$arr[
'CODE'] ??
''))
3185 $iblockSectionId = (int)(
$arr[
'IBLOCK_SECTION_ID'] ?? 0);
3187 (string)(
$arr[
'LANG_DIR'] ??
''),
3191 (
string)(
$arr[
'~EXTERNAL_ID'] ?? (
$arr[
'EXTERNAL_ID'] ??
''))
3194 (
string)(
$arr[
'~IBLOCK_TYPE_ID'] ?? (
$arr[
'IBLOCK_TYPE_ID'] ??
''))
3198 (
string)(
$arr[
'~IBLOCK_CODE'] ?? (
$arr[
'IBLOCK_CODE'] ??
''))
3201 (
string)(
$arr[
'~IBLOCK_EXTERNAL_ID'] ?? (
$arr[
'IBLOCK_EXTERNAL_ID'] ??
''))
3205 if ($arrType ===
"E")
3207 if (strpos(
$url,
'#PRODUCT_URL#') !==
false)
3211 self::getProductUrlValue(
$arr, $server_name),
3216 $arReplace[] = $preparedId;
3217 $arReplace[] = rawurlencode(
3218 (
string)(
$arr[
'~CODE'] ?? (
$arr[
'CODE'] ??
''))
3221 #Deal with symbol codes
3223 $SECTION_CODE_PATH =
'';
3224 if ($iblockSectionId > 0)
3226 if (strpos(
$url,
'#SECTION_CODE#') !==
false)
3228 $SECTION_CODE = CIBlockSection::getSectionCode($iblockSectionId);
3231 if (strpos(
$url,
'#SECTION_CODE_PATH#') !==
false)
3233 $SECTION_CODE_PATH = CIBlockSection::getSectionCodePath($iblockSectionId);
3237 $arReplace[] = $iblockSectionId > 0 ? $iblockSectionId:
'';
3238 $arReplace[] = $SECTION_CODE;
3239 $arReplace[] = $SECTION_CODE_PATH;
3241 elseif ($arrType ===
"S")
3243 $SECTION_CODE_PATH =
'';
3246 && strpos(
$url,
'#SECTION_CODE_PATH#') !==
false
3249 $SECTION_CODE_PATH = CIBlockSection::getSectionCodePath($id);
3253 $arReplace[] = $preparedId;
3254 $arReplace[] = $preparedCode;
3255 $arReplace[] = $SECTION_CODE_PATH;
3259 $elementId = (int)(
$arr[
'ELEMENT_ID'] ?? 0);
3260 $preparedElementId = $elementId > 0 ? $elementId :
'';
3261 $arReplace[] = $preparedElementId;
3262 $arReplace[] = rawurlencode((
string)(
$arr[
'~ELEMENT_CODE'] ?? (
$arr[
'ELEMENT_CODE'] ??
'')));
3263 $arReplace[] = $iblockSectionId > 0 ? $iblockSectionId :
'';
3264 $arReplace[] = rawurlencode((
string)(
$arr[
'~SECTION_CODE'] ?? (
$arr[
'SECTION_CODE'] ??
'')));
3268 $url = str_replace($arSearch, $arReplace,
$url);
3270 return preg_replace(
"'(?<!:)/+'s",
"/",
$url);
3285 if(
$NS[
"MODULE"]==
"iblock" &&
$NS[
"ID"] <>
'')
3287 $arrTmp = explode(
".",
$NS[
"ID"]);
3288 $strNSFilter1 =
" AND B.ID>=".intval($arrTmp[0]).
" ";
3289 if(mb_substr($arrTmp[1], 0, 1) !=
'S')
3291 $strNSFilter2 =
" AND BE.ID>".intval($arrTmp[1]).
" ";
3295 $strNSFilter2 =
false;
3296 $strNSFilter3 =
" AND BS.ID>".intval(mb_substr($arrTmp[1], 1)).
" ";
3299 if(
$NS[
"SITE_ID"]!=
"")
3301 $strNSJoin1 .=
" INNER JOIN b_iblock_site BS ON BS.IBLOCK_ID=B.ID ";
3302 $strNSFilter1 .=
" AND BS.SITE_ID='".$DB->ForSQL(
$NS[
"SITE_ID"]).
"' ";
3305 SELECT B.ID, B.IBLOCK_TYPE_ID, B.INDEX_ELEMENT, B.INDEX_SECTION, B.RIGHTS_MODE,
3306 B.IBLOCK_TYPE_ID, B.CODE as IBLOCK_CODE, B.XML_ID as IBLOCK_EXTERNAL_ID,
3310 WHERE B.ACTIVE = 'Y'
3311 AND (B.INDEX_ELEMENT='Y' OR B.INDEX_SECTION='Y')
3316 $dbrIBlock =
$DB->Query($strSql);
3325 "FROM b_iblock_group ".
3326 "WHERE IBLOCK_ID= ".$IBLOCK_ID.
" ".
3327 " AND PERMISSION>='R' ".
3329 "ORDER BY GROUP_ID";
3331 $dbrIBlockGroup =
$DB->Query($strSql);
3332 while($arIBlockGroup = $dbrIBlockGroup->Fetch())
3334 $arGroups[] = $arIBlockGroup[
"GROUP_ID"];
3335 if($arIBlockGroup[
"GROUP_ID"]==2)
break;
3341 "FROM b_iblock_site ".
3342 "WHERE IBLOCK_ID= ".$IBLOCK_ID;
3344 $dbrIBlockSite =
$DB->Query($strSql);
3345 while($arIBlockSite = $dbrIBlockSite->Fetch())
3346 $arSITE[] = $arIBlockSite[
"SITE_ID"];
3348 if(
$arIBlock[
"INDEX_ELEMENT"]==
'Y' && ($strNSFilter2 !==
false))
3351 "SELECT BE.ID, BE.NAME, BE.TAGS, ".
3352 " ".$DB->DateToCharFunction(
"BE.ACTIVE_FROM").
" as DATE_FROM, ".
3353 " ".$DB->DateToCharFunction(
"BE.ACTIVE_TO").
" as DATE_TO, ".
3354 " ".$DB->DateToCharFunction(
"BE.TIMESTAMP_X").
" as LAST_MODIFIED, ".
3355 " BE.PREVIEW_TEXT_TYPE, BE.PREVIEW_TEXT, ".
3356 " BE.DETAIL_TEXT_TYPE, BE.DETAIL_TEXT, ".
3357 " BE.XML_ID as EXTERNAL_ID, BE.CODE, ".
3358 " BE.IBLOCK_SECTION_ID ".
3359 "FROM b_iblock_element BE ".
3360 "WHERE BE.IBLOCK_ID=".$IBLOCK_ID.
" ".
3361 " AND BE.ACTIVE='Y' ".
3362 CIBlockElement::WF_GetSqlLimit(
"BE.",
"N").
3368 if(
$DB->type==
"MYSQL")
3371 $strSql .=
" LIMIT ".$limit;
3378 $dbrIBlockElement =
$DB->Query($strSql);
3379 while($arIBlockElement = $dbrIBlockElement->Fetch())
3382 "=ID=".urlencode($arIBlockElement[
"ID"]).
3383 "&EXTERNAL_ID=".urlencode($arIBlockElement[
"EXTERNAL_ID"]).
3384 "&CODE=".urlencode($arIBlockElement[
"CODE"]).
3385 "&IBLOCK_SECTION_ID=".urlencode($arIBlockElement[
"IBLOCK_SECTION_ID"]).
3386 "&IBLOCK_TYPE_ID=".urlencode(
$arIBlock[
"IBLOCK_TYPE_ID"]).
3388 "&IBLOCK_CODE=".urlencode(
$arIBlock[
"IBLOCK_CODE"]).
3389 "&IBLOCK_EXTERNAL_ID=".urlencode(
$arIBlock[
"IBLOCK_EXTERNAL_ID"]);
3392 ($arIBlockElement[
"PREVIEW_TEXT_TYPE"]==
"html" ?
3394 $arIBlockElement[
"PREVIEW_TEXT"]
3396 ($arIBlockElement[
"DETAIL_TEXT_TYPE"]==
"html" ?
3398 $arIBlockElement[
"DETAIL_TEXT"]
3401 $dbrProperties = CIBlockElement::GetProperty(
$IBLOCK_ID, $arIBlockElement[
"ID"],
"sort",
"asc",
array(
"ACTIVE"=>
"Y",
"SEARCHABLE"=>
"Y"));
3407 $UserType = CIBlockProperty::GetUserType(
$arProperties[
"USER_TYPE"]);
3409 $UserType =
array();
3411 if(array_key_exists(
"GetSearchContent", $UserType))
3414 call_user_func_array($UserType[
"GetSearchContent"],
3423 elseif(array_key_exists(
"GetPublicViewHTML", $UserType))
3426 call_user_func_array($UserType[
"GetPublicViewHTML"],
3441 $arFile = CIBlockElement::__GetFileContent(
$arProperties[
"VALUE"]);
3442 if(is_array($arFile))
3444 $BODY .= $arFile[
"CONTENT"];
3445 $arIBlockElement[
"TAGS"] .=
",".$arFile[
"PROPERTIES"][COption::GetOptionString(
"search",
"page_tag_property")];
3459 $arPermissions = $obElementRights->GetGroups(
array(
"element_read"));
3463 "ID" => $arIBlockElement[
"ID"],
3464 "LAST_MODIFIED" => ($arIBlockElement[
"DATE_FROM"] <>
''? $arIBlockElement[
"DATE_FROM"]: $arIBlockElement[
"LAST_MODIFIED"]),
3465 "TITLE" => $arIBlockElement[
"NAME"],
3467 "TAGS" => $arIBlockElement[
"TAGS"],
3468 "SITE_ID" => $arSITE,
3469 "PARAM1" =>
$arIBlock[
"IBLOCK_TYPE_ID"],
3471 "DATE_FROM" => ($arIBlockElement[
"DATE_FROM"] <>
''? $arIBlockElement[
"DATE_FROM"] :
false),
3472 "DATE_TO" => ($arIBlockElement[
"DATE_TO"] <>
''? $arIBlockElement[
"DATE_TO"] :
false),
3473 "PERMISSIONS" => $arPermissions,
3474 "URL" => $DETAIL_URL
3478 $Result[
"PARAMS"] =
array(
3479 "socnet_group" =>
$arIBlock[
"SOCNET_GROUP_ID"],
3484 $res = call_user_func(
array($oCallback, $callback_method), $Result);
3486 return $IBLOCK_ID.
".".$arIBlockElement[
"ID"];
3493 if($limit !==
false)
3497 return $IBLOCK_ID.
".".$arIBlockElement[
"ID"];
3505 "SELECT BS.ID, BS.NAME, ".
3506 " ".$DB->DateToCharFunction(
"BS.TIMESTAMP_X").
" as LAST_MODIFIED, ".
3507 " BS.DESCRIPTION_TYPE, BS.DESCRIPTION, BS.XML_ID as EXTERNAL_ID, BS.CODE, ".
3509 "FROM b_iblock_section BS ".
3510 "WHERE BS.IBLOCK_ID=".$IBLOCK_ID.
" ".
3511 " AND BS.GLOBAL_ACTIVE='Y' ".
3515 $dbrIBlockSection =
$DB->Query($strSql);
3516 while($arIBlockSection = $dbrIBlockSection->Fetch())
3519 "=ID=".$arIBlockSection[
"ID"].
3520 "&EXTERNAL_ID=".$arIBlockSection[
"EXTERNAL_ID"].
3521 "&CODE=".$arIBlockSection[
"CODE"].
3522 "&IBLOCK_TYPE_ID=".$arIBlock[
"IBLOCK_TYPE_ID"].
3523 "&IBLOCK_ID=".$arIBlockSection[
"IBLOCK_ID"].
3524 "&IBLOCK_CODE=".$arIBlock[
"IBLOCK_CODE"].
3525 "&IBLOCK_EXTERNAL_ID=".$arIBlock[
"IBLOCK_EXTERNAL_ID"];
3527 ($arIBlockSection[
"DESCRIPTION_TYPE"]==
"html" ?
3530 $arIBlockSection[
"DESCRIPTION"]
3532 $BODY .=
$USER_FIELD_MANAGER->OnSearchIndex(
"IBLOCK_".$arIBlockSection[
"IBLOCK_ID"].
"_SECTION", $arIBlockSection[
"ID"]);
3539 $arPermissions = $obSectionRights->GetGroups(
array(
"section_read"));
3543 "ID" =>
"S".$arIBlockSection[
"ID"],
3544 "LAST_MODIFIED" => $arIBlockSection[
"LAST_MODIFIED"],
3545 "TITLE" => $arIBlockSection[
"NAME"],
3547 "SITE_ID" => $arSITE,
3548 "PARAM1" =>
$arIBlock[
"IBLOCK_TYPE_ID"],
3550 "PERMISSIONS" => $arPermissions,
3551 "URL" => $DETAIL_URL,
3555 $Result[
"PARAMS"] =
array(
3556 "socnet_group" =>
$arIBlock[
"SOCNET_GROUP_ID"],
3561 $res = call_user_func(
array($oCallback, $callback_method), $Result);
3563 return $IBLOCK_ID.
".S".$arIBlockSection[
"ID"];
3587 SELECT COUNT('x') as C
3588 FROM b_iblock_element BE
3589 WHERE BE.IBLOCK_ID=".intval($iblock_id).
"
3591 (BE.WF_STATUS_ID=1 AND BE.WF_PARENT_ELEMENT_ID IS NULL)
3598 return (
int)(
$ar[
"C"] ?? 0);
3603 if($arFile[
"tmp_name"] ==
'')
3606 if(array_key_exists(
"error", $arFile) && $arFile[
"error"] !== 0)
3607 return Loc::getMessage(
"IBLOCK_BAD_FILE_ERROR");
3609 $file = $arFile[
"tmp_name"];
3611 if(!file_exists($file) && !is_file($file))
3612 return Loc::getMessage(
"IBLOCK_BAD_FILE_NOT_FOUND");
3614 $width = (int)$arResize[
"WIDTH"];
3615 $height = (int)$arResize[
"HEIGHT"];
3617 if(
$width <= 0 && $height <= 0)
3620 $image =
new Image($file);
3621 $imageInfo = $image->getInfo(
false);
3622 if (empty($imageInfo))
3624 return Loc::getMessage(
"IBLOCK_BAD_FILE_NOT_PICTURE");
3627 0 => $imageInfo->getWidth(),
3628 1 => $imageInfo->getHeight(),
3629 2 => $imageInfo->getFormat(),
3630 3 => $imageInfo->getAttributes(),
3631 "mime" => $imageInfo->getMime(),
3634 $width_orig = $orig[0];
3635 $height_orig = $orig[1];
3639 $image_type = $orig[2];
3640 if($image_type == Image::FORMAT_JPEG)
3642 $exifData = $image->getExifData();
3643 if (isset($exifData[
'Orientation']))
3645 $orientation = $exifData[
'Orientation'];
3646 if ($orientation >= 5 && $orientation <= 8)
3648 $width_orig = $orig[1];
3649 $height_orig = $orig[0];
3654 if((
$width > 0 && $orig[0] >
$width) || ($height > 0 && $orig[1] > $height))
3656 if($arFile[
"COPY_FILE"] ==
"Y")
3658 $new_file = CTempFile::GetFileName(basename($file));
3660 $arFile[
"copy"] =
true;
3662 if(copy($file, $new_file))
3665 return Loc::getMessage(
"IBLOCK_BAD_FILE_NOT_FOUND");
3672 $height = $height_orig;
3674 $height_new = $height_orig;
3676 $height_new =
$width * $height_orig / $width_orig;
3678 if($height_new > $height)
3679 $width = $height * $width_orig / $height_orig;
3681 $height = $height_new;
3683 $image_type = $orig[2];
3684 if ($image_type == Image::FORMAT_JPEG)
3686 $image = imagecreatefromjpeg($file);
3687 if ($image ===
false)
3689 ini_set(
'gd.jpeg_ignore_warning', 1);
3690 $image = imagecreatefromjpeg($file);
3693 if ($orientation > 1)
3695 if ($orientation == 7 || $orientation == 8)
3696 $image = imagerotate($image, 90,
null);
3697 elseif ($orientation == 3 || $orientation == 4)
3698 $image = imagerotate($image, 180,
null);
3699 elseif ($orientation == 5 || $orientation == 6)
3700 $image = imagerotate($image, 270,
null);
3703 $orientation == 2 || $orientation == 7
3704 || $orientation == 4 || $orientation == 5
3713 elseif ($image_type == Image::FORMAT_GIF)
3715 $image = imagecreatefromgif($file);
3717 elseif ($image_type == Image::FORMAT_PNG)
3719 $image = imagecreatefrompng($file);
3721 elseif ($image_type == Image::FORMAT_WEBP)
3723 $image = imagecreatefromwebp($file);
3727 return Loc::getMessage(
"IBLOCK_ERR_BAD_FILE_UNSUPPORTED");
3730 $image_p = imagecreatetruecolor(
$width, $height);
3731 if($image_type == Image::FORMAT_JPEG)
3733 if($arResize[
"METHOD"] ===
"resample")
3734 imagecopyresampled($image_p, $image, 0, 0, 0, 0,
$width, $height, $width_orig, $height_orig);
3736 imagecopyresized($image_p, $image, 0, 0, 0, 0,
$width, $height, $width_orig, $height_orig);
3738 if($arResize[
"COMPRESSION"] > 0)
3739 imagejpeg($image_p, $file, $arResize[
"COMPRESSION"]);
3741 imagejpeg($image_p, $file);
3743 elseif($image_type == Image::FORMAT_GIF && function_exists(
"imagegif"))
3745 imagetruecolortopalette($image_p,
true, imagecolorstotal($image));
3746 imagepalettecopy($image_p, $image);
3749 $transparentColor = imagecolortransparent($image);
3750 if($transparentColor >= 0 && $transparentColor < imagecolorstotal($image))
3752 $transparentColor = imagecolortransparent($image_p, $transparentColor);
3753 imagefilledrectangle($image_p, 0, 0,
$width, $height, $transparentColor);
3756 if($arResize[
"METHOD"] ===
"resample")
3757 imagecopyresampled($image_p, $image, 0, 0, 0, 0,
$width, $height, $width_orig, $height_orig);
3759 imagecopyresized($image_p, $image, 0, 0, 0, 0,
$width, $height, $width_orig, $height_orig);
3760 imagegif($image_p, $file);
3765 $transparentColor = imagecolorallocatealpha($image_p, 0, 0, 0, 127);
3766 imagefilledrectangle($image_p, 0, 0,
$width, $height, $transparentColor);
3767 $transparentColor = imagecolortransparent($image_p, $transparentColor);
3769 imagealphablending($image_p,
false);
3770 if($arResize[
"METHOD"] ===
"resample")
3771 imagecopyresampled($image_p, $image, 0, 0, 0, 0,
$width, $height, $width_orig, $height_orig);
3773 imagecopyresized($image_p, $image, 0, 0, 0, 0,
$width, $height, $width_orig, $height_orig);
3775 imagesavealpha($image_p,
true);
3776 imagepng($image_p, $file);
3779 imagedestroy($image);
3780 imagedestroy($image_p);
3782 $arFile[
"size"] = filesize($file);
3783 $arFile[
"tmp_name"] = $file;
3794 if (!file_exists($filePath))
3806 $image =
new Image($filePath);
3807 $imageInfo = $image->getInfo();
3808 if (empty($imageInfo))
3812 if (!$image->load())
3818 $exifData = $image->getExifData();
3819 if (isset($exifData[
'Orientation']))
3821 $orientation = $exifData[
'Orientation'];
3823 $image->autoRotate($orientation);
3832 $arFilter[
'text_width'] = ($imageInfo->getWidth() - 5) *
$arFilter[
'coefficient'] / 100;
3835 $image->drawWatermark($watermark);
3838 $image->save(self::getDefaultJpegQuality());
3848 $res = preg_replace(
"#\\.([0-9]*?)(0+)\$#",
".\\1", $num);
3849 return rtrim(
$res,
".");
3857 public static function _Order($by,
$order, $default_order, $nullable =
true)
3859 static $arOrder =
array(
3860 "nulls,asc" =>
array(
true,
"asc" ),
3861 "asc,nulls" =>
array(
false,
"asc" ),
3862 "nulls,desc" =>
array(
true,
"desc"),
3863 "desc,nulls" =>
array(
false,
"desc"),
3864 "asc" =>
array(
true,
"asc" ),
3865 "desc" =>
array(
false,
"desc"),
3872 $default_order = mb_strtolower(trim($default_order));
3873 if (isset($arOrder[
$order]))
3875 elseif(isset($arOrder[$default_order]))
3876 $o = $arOrder[$default_order];
3878 $o = $arOrder[
"desc,nulls"];
3884 $o[0] = ($o[1] ==
"asc");
3894 defined(
"CATALOG_PRODUCT")
3896 || array_key_exists(
'catalog',
$arParams)
3901 $url =
"cat_catalog_edit.php";
3902 $param =
"IBLOCK_ID";
3906 $url =
"iblock_edit.php";
3913 $url.=
"&lang=".urlencode(LANGUAGE_ID);
3916 $url.=
"&".urlencode(
$name).
"=".urlencode($value);
3920 $url = self::replaceScriptName(
$url);
3923 $url = str_replace(
"&skip_public=1",
"",
$url);
3925 return $url.$strAdd;
3942 defined(
"CATALOG_PRODUCT")
3944 || array_key_exists(
'catalog',
$arParams)
3948 $url =
"cat_section_edit.php";
3950 $url =
"iblock_section_edit.php";
3954 if($SECTION_ID !==
null)
3955 $url.=
"&ID=".intval($SECTION_ID);
3956 $url.=
"&lang=".urlencode(LANGUAGE_ID);
3959 $url.=
"&".urlencode(
$name).
"=".urlencode($value);
3963 $url = self::replaceScriptName(
$url);
3966 $url = str_replace(
"&skip_public=1",
"",
$url);
3968 return $url.$strAdd;
3985 defined(
"CATALOG_PRODUCT")
3990 $url =
"cat_product_edit.php";
3992 $url =
"iblock_element_edit.php";
3996 if($ELEMENT_ID !==
null)
3997 $url.=
"&ID=".intval($ELEMENT_ID);
3998 $url.=
"&lang=".urlencode(LANGUAGE_ID);
4001 $url.=
"&".urlencode(
$name).
"=".urlencode($value);
4005 $url = self::replaceScriptName(
$url);
4008 $url = str_replace(
"&skip_public=1",
"",
$url);
4010 return $url.$strAdd;
4015 $absoluteUrl = ($absoluteUrl ===
true);
4017 if (defined(
'SELF_FOLDER_URL'))
4019 $url =
'/bitrix/tools/iblock/iblock_subelement_edit.php';
4023 $url = ($absoluteUrl ?
'/bitrix/admin/' :
'') .
'iblock_subelement_edit.php';
4026 $url .=
'&PRODUCT_ID='.(int)$ELEMENT_ID.
'&ID='.(
int)$SUBELEMENT_ID.
'&lang='.LANGUAGE_ID;
4030 $url.=
'&'.urlencode(
$name).
'='.urlencode($value);
4034 $url = self::replaceScriptName(
$url);
4037 $url = str_replace(
"&skip_public=1",
"",
$url);
4039 return $url.$strAdd;
4056 $url.=
"&lang=".urlencode(LANGUAGE_ID);
4059 $url.=
"&".urlencode(
$name).
"=".urlencode($value);
4063 $url = self::replaceScriptName(
$url);
4066 $url = str_replace(
"&skip_public=1",
"",
$url);
4068 return $url.$strAdd;
4085 if (defined(
"PUBLIC_MODE") && PUBLIC_MODE == 1 || self::isPublicSidePanel())
4091 if (defined(
"CATALOG_PRODUCT") && !array_key_exists(
"menu",
$arParams))
4094 $url =
"cat_product_list.php";
4096 $url =
"cat_product_admin.php";
4101 $url =
"iblock_list_admin.php";
4103 $url =
"iblock_element_admin.php";
4123 $url.=
"&lang=".urlencode(LANGUAGE_ID);
4126 $url.=
"&".urlencode(
$name).
"=".urlencode($value);
4130 $url = self::replaceScriptName(
$url);
4133 $url = str_replace(
"&skip_public=1",
"",
$url);
4135 return $url.$strAdd;
4152 if (defined(
"PUBLIC_MODE") && PUBLIC_MODE == 1 || self::isPublicSidePanel())
4154 return "menu_catalog_category_".$IBLOCK_ID.
"/";
4158 if ((defined(
"CATALOG_PRODUCT") || array_key_exists(
'catalog',
$arParams)) && !array_key_exists(
"menu",
$arParams))
4161 $url =
"cat_product_list.php";
4163 $url =
"cat_section_admin.php";
4168 $url =
"iblock_list_admin.php";
4170 $url =
"iblock_section_admin.php";
4176 private static function isPublicSidePanel()
4179 $iframeType =
$_REQUEST[
"IFRAME_TYPE"] ??
null;
4180 $publicSidePanel =
$_REQUEST[
"publicSidePanel"] ??
null;
4184 && ($publicSidePanel ===
"Y" || $iframeType ===
"PUBLIC_FRAME")
4188 private static function replaceScriptName(
$url)
4190 if (defined(
"PUBLIC_MODE") && PUBLIC_MODE == 1 || self::isPublicSidePanel())
4192 $url = str_replace(
".php",
"/",
$url);
4195 return str_replace(
"&replace_script_name=1",
"",
$url);
4231 &&
$ar[
"UNIQUE"] ==
"Y"
4232 && !
$DB->IndexExists(
"b_iblock_element",
array(
"IBLOCK_ID",
"CODE"))
4234 $DB->DDL(
"create index ix_iblock_element_code on b_iblock_element (IBLOCK_ID, CODE)");
4236 $ar =
$arIBlock[
"FIELDS"][
"SECTION_CODE"][
"DEFAULT_VALUE"];
4239 &&
$ar[
"UNIQUE"] ==
"Y"
4240 && !
$DB->IndexExists(
"b_iblock_section",
array(
"IBLOCK_ID",
"CODE"))
4242 $DB->DDL(
"create index ix_iblock_section_code on b_iblock_section (IBLOCK_ID, CODE)");
4248 "IBLOCK_SECTION_ADD" =>
"[IBLOCK_SECTION_ADD] ".Loc::getMessage(
"IBLOCK_SECTION_ADD"),
4249 "IBLOCK_SECTION_EDIT" =>
"[IBLOCK_SECTION_EDIT] ".Loc::getMessage(
"IBLOCK_SECTION_EDIT"),
4250 "IBLOCK_SECTION_DELETE" =>
"[IBLOCK_SECTION_DELETE] ".Loc::getMessage(
"IBLOCK_SECTION_DELETE"),
4251 "IBLOCK_ELEMENT_ADD" =>
"[IBLOCK_ELEMENT_ADD] ".Loc::getMessage(
"IBLOCK_ELEMENT_ADD"),
4252 "IBLOCK_ELEMENT_EDIT" =>
"[IBLOCK_ELEMENT_EDIT] ".Loc::getMessage(
"IBLOCK_ELEMENT_EDIT"),
4253 "IBLOCK_ELEMENT_DELETE" =>
"[IBLOCK_ELEMENT_DELETE] ".Loc::getMessage(
"IBLOCK_ELEMENT_DELETE"),
4254 "IBLOCK_ADD" =>
"[IBLOCK_ADD] ".Loc::getMessage(
"IBLOCK_ADD"),
4255 "IBLOCK_EDIT" =>
"[IBLOCK_EDIT] ".Loc::getMessage(
"IBLOCK_EDIT"),
4256 "IBLOCK_DELETE" =>
"[IBLOCK_DELETE] ".Loc::getMessage(
"IBLOCK_DELETE"),
4264 $wholePartLength = 14;
4265 $emptyFraction =
'.0000';
4267 $borderInt = 100000000000000;
4277 if ($value >= $borderInt)
4279 $value = intdiv($value, $borderInt);
4282 return $sign . $value . $emptyFraction;
4284 elseif (is_string($value))
4286 $value = trim($value);
4293 if (preg_match(
'/^([+-]?)([0-9]*)(\.[0-9]*)?$/', $value, $parsedValue))
4295 $sign = $parsedValue[1] ===
'-' ?
'-' :
'';
4296 $wholePart = $parsedValue[2] ===
'' ?
'0' : $parsedValue[2];
4297 if (strlen($wholePart) > $wholePartLength)
4299 return $sign . substr($wholePart, 0, $wholePartLength) . $emptyFraction;
4303 $fraction = $parsedValue[3] ?? $emptyFraction;
4304 if ($fraction ===
'' || $fraction ===
'.' || $fraction === $emptyFraction)
4310 $len = strlen($fraction) - 1;
4311 if ($len > $decimals)
4313 $result .= substr($fraction, 0, $decimals + 1);
4318 if ($len !== $decimals)
4320 $result .= str_repeat(
'0', $decimals - $len);
4331 $rounded = round((
float)$value + $eps, $commonLength);
4332 if (is_nan($rounded) || is_infinite($rounded))
4334 return '0' . $emptyFraction;
4337 $sign = $rounded < 0 ? 1 : 0;
4338 $result = sprintf(
'%01.' . $decimals .
'f', $rounded);
4339 $decimalPos = strpos(
$result,
'.');
4340 $limit = $wholePartLength +
$sign;
4341 if ($decimalPos ===
false)
4348 elseif ($decimalPos > $limit)
4361 $DB->Query(
"UPDATE b_iblock set TMP_ID = '".md5(mt_rand()).
"' WHERE ID = ".
$IBLOCK_ID);
4367 unset($arDate[
"DD"]);
4368 unset($arDate[
"MMMM"]);
4369 unset($arDate[
"MM"]);
4370 unset($arDate[
"M"]);
4371 unset($arDate[
"YYYY"]);
4372 return array_sum($arDate) == 0;
4392 if (is_array(
$data) && array_key_exists(
"VALUE",
$data))
4403 if (array_key_exists(
"description",
$data[
"VALUE"] ?? []))
4405 $data[
"DESCRIPTION"] =
$data[
"VALUE"][
"description"];
4460 if (isset(
$options[
"allow_file_id"]) &&
$options[
"allow_file_id"] ===
true)
4462 $result = CFile::MakeFileArray($file_id);
4485 if (preg_match(
"/^https?:\\/\\//", $file_path))
4492 $normPath =
$io->CombinePath(
"/", $file_path);
4493 $absPath =
$io->CombinePath(
$_SERVER[
"DOCUMENT_ROOT"], $normPath);
4494 if (
$io->ValidatePathString($absPath) &&
$io->FileExists($absPath))
4496 $physicalName =
$io->GetPhysicalName($absPath);
4497 $uploadDir =
$io->GetPhysicalName(preg_replace(
"#[\\\\\\/]+#",
"/",
$_SERVER[
'DOCUMENT_ROOT'].
'/'.(COption::GetOptionString(
'main',
'upload_dir',
'upload')).
'/'));
4498 if (mb_strpos($physicalName, $uploadDir) === 0)
4526 if (is_uploaded_file($file_array[
"tmp_name"]))
4533 $file_array[
"tmp_name"] <>
''
4534 && mb_strpos($file_array[
"tmp_name"], CTempFile::GetAbsoluteRoot()) === 0
4538 $absPath =
$io->CombinePath(
"/", $file_array[
"tmp_name"]);
4540 if (mb_strpos($absPath, $tmpPath) === 0 || (($absPath = ltrim($absPath,
"/")) && mb_strpos($absPath, $tmpPath) === 0))
4543 $result[
"tmp_name"] = $absPath;
4549 elseif ($file_array[
"tmp_name"] <>
'')
4552 $normPath =
$io->CombinePath(
"/", $file_array[
"tmp_name"]);
4553 $absPath =
$io->CombinePath(CTempFile::GetAbsoluteRoot(), $normPath);
4555 if (mb_strpos($absPath, $tmpPath) === 0 &&
$io->FileExists($absPath) ||
4556 ($absPath =
$io->CombinePath(
$_SERVER[
"DOCUMENT_ROOT"], $normPath)) && mb_strpos($absPath, $tmpPath) === 0)
4559 $result[
"tmp_name"] = $absPath;
4574 if ($file_array == $emptyFile)
4587 $iblock_id = (int)$iblock_id;
4589 self::$disabledCacheTag[$iblock_id] = $iblock_id;
4594 $iblock_id = (int)$iblock_id;
4595 if (isset(self::$disabledCacheTag[$iblock_id]))
4596 unset(self::$disabledCacheTag[$iblock_id]);
4602 $iblock_id = (int)$iblock_id;
4603 if (defined(
"BX_COMP_MANAGED_CACHE") && $iblock_id > 0 && self::isEnabledClearTagCache())
4610 $iblock_id = (int)$iblock_id;
4611 if ($iblock_id > 0 && !isset(self::$disabledCacheTag[$iblock_id]))
4617 self::$enableClearTagCache++;
4622 self::$enableClearTagCache--;
4627 return (self::$enableClearTagCache >= 0);
4632 $jpgQuality = (int)
Main\
Config\Option::get(
'main',
'image_resize_quality',
'95');
4633 if ($jpgQuality <= 0 || $jpgQuality > 100)
4648 $currentTime = time();
4649 $result =
'\CIBlock::checkActivityDatesAgent('.$iblockId.
', '.$currentTime.
');';
4650 $previousTime = (int)$previousTime;
4651 if ($previousTime <= 0)
4660 'select' =>
array(
'ID'),
4664 '=WF_STATUS_ID' => 1,
4665 '=WF_PARENT_ELEMENT_ID' =>
null,
4669 '>ACTIVE_FROM' =>
$start,
4670 '<=ACTIVE_FROM' => $finish
4674 '<=ACTIVE_TO' => $finish
4701 1 => \CIBlockRights::FULL_ACCESS,
4702 2 => \CIBlockRights::PUBLIC_READ
4713 $iblock = static::GetFields($id);
4716 isset(
$iblock[
'CODE'][
'DEFAULT_VALUE'][
'UNIQUE'])
4717 &&
$iblock[
'CODE'][
'DEFAULT_VALUE'][
'UNIQUE'] ===
'Y'
4728 $iblock = static::GetFields($id);
4731 isset(
$iblock[
'SECTION_CODE'][
'DEFAULT_VALUE'][
'UNIQUE'])
4732 &&
$iblock[
'SECTION_CODE'][
'DEFAULT_VALUE'][
'UNIQUE'] ===
'Y'
4738 $jpgQuality = static::getDefaultJpegQuality();
4741 'IBLOCK_SECTION' => [
4742 'KEEP_IBLOCK_SECTION_ID' =>
'N',
4745 'ACTIVE_FROM' =>
'',
4749 'PREVIEW_PICTURE' => [
4750 'FROM_DETAIL' =>
'N',
4751 'UPDATE_WITH_DETAIL' =>
'N',
4752 'DELETE_WITH_DETAIL' =>
'N',
4756 'IGNORE_ERRORS' =>
'N',
4757 'METHOD' =>
'resample',
4758 'COMPRESSION' => $jpgQuality,
4759 'USE_WATERMARK_TEXT' =>
'N',
4760 'WATERMARK_TEXT' =>
'',
4761 'WATERMARK_TEXT_FONT' =>
'',
4762 'WATERMARK_TEXT_COLOR' =>
'',
4763 'WATERMARK_TEXT_SIZE' =>
'',
4764 'WATERMARK_TEXT_POSITION' =>
'',
4765 'USE_WATERMARK_FILE' =>
'N',
4766 'WATERMARK_FILE' =>
'',
4767 'WATERMARK_FILE_ALPHA' =>
'',
4768 'WATERMARK_FILE_POSITION' =>
'',
4769 'WATERMARK_FILE_ORDER' =>
'',
4771 'PREVIEW_TEXT_TYPE' =>
'text',
4772 'PREVIEW_TEXT' =>
'',
4773 'DETAIL_PICTURE' =>
array(
4777 'IGNORE_ERRORS' =>
'N',
4778 'METHOD' =>
'resample',
4779 'COMPRESSION' => $jpgQuality,
4780 'USE_WATERMARK_TEXT' =>
'N',
4781 'WATERMARK_TEXT' =>
'',
4782 'WATERMARK_TEXT_FONT' =>
'',
4783 'WATERMARK_TEXT_COLOR' =>
'',
4784 'WATERMARK_TEXT_SIZE' =>
'',
4785 'WATERMARK_TEXT_POSITION' =>
'',
4786 'USE_WATERMARK_FILE' =>
'N',
4787 'WATERMARK_FILE' =>
'',
4788 'WATERMARK_FILE_ALPHA' =>
'',
4789 'WATERMARK_FILE_POSITION' =>
'',
4790 'WATERMARK_FILE_ORDER' =>
'',
4792 'DETAIL_TEXT_TYPE' =>
'text',
4793 'DETAIL_TEXT' =>
'',
4797 'TRANSLITERATION' =>
'N',
4799 'TRANS_CASE' =>
'L',
4800 'TRANS_SPACE' =>
'-',
4801 'TRANS_OTHER' =>
'-',
4803 'USE_GOOGLE' =>
'N',
4806 'SECTION_NAME' =>
'',
4807 'SECTION_PICTURE' => [
4808 'FROM_DETAIL' =>
'N',
4809 'UPDATE_WITH_DETAIL' =>
'N',
4810 'DELETE_WITH_DETAIL' =>
'N',
4814 'IGNORE_ERRORS' =>
'N',
4815 'METHOD' =>
'resample',
4816 'COMPRESSION' => $jpgQuality,
4817 'USE_WATERMARK_TEXT' =>
'N',
4818 'WATERMARK_TEXT' =>
'',
4819 'WATERMARK_TEXT_FONT' =>
'',
4820 'WATERMARK_TEXT_COLOR' =>
'',
4821 'WATERMARK_TEXT_SIZE' =>
'',
4822 'WATERMARK_TEXT_POSITION' =>
'',
4823 'USE_WATERMARK_FILE' =>
'N',
4824 'WATERMARK_FILE' =>
'',
4825 'WATERMARK_FILE_ALPHA' =>
'',
4826 'WATERMARK_FILE_POSITION' =>
'',
4827 'WATERMARK_FILE_ORDER' =>
'',
4829 'SECTION_DESCRIPTION_TYPE' =>
'text',
4830 'SECTION_DESCRIPTION' =>
'',
4831 'SECTION_DETAIL_PICTURE' => [
4835 'IGNORE_ERRORS' =>
'N',
4836 'METHOD' =>
'resample',
4837 'COMPRESSION' => $jpgQuality,
4838 'USE_WATERMARK_TEXT' =>
'N',
4839 'WATERMARK_TEXT' =>
'',
4840 'WATERMARK_TEXT_FONT' =>
'',
4841 'WATERMARK_TEXT_COLOR' =>
'',
4842 'WATERMARK_TEXT_SIZE' =>
'',
4843 'WATERMARK_TEXT_POSITION' =>
'',
4844 'USE_WATERMARK_FILE' =>
'N',
4845 'WATERMARK_FILE' =>
'',
4846 'WATERMARK_FILE_ALPHA' =>
'',
4847 'WATERMARK_FILE_POSITION' =>
'',
4848 'WATERMARK_FILE_ORDER' =>
'',
4850 'SECTION_XML_ID' =>
'',
4853 'TRANSLITERATION' =>
'N',
4855 'TRANS_CASE' =>
'L',
4856 'TRANS_SPACE' =>
'-',
4857 'TRANS_OTHER' =>
'-',
4859 'USE_GOOGLE' =>
'N',
4861 'LOG_SECTION_ADD' =>
false,
4862 'LOG_SECTION_EDIT' =>
false,
4863 'LOG_SECTION_DELETE' =>
false,
4864 'LOG_ELEMENT_ADD' =>
false,
4865 'LOG_ELEMENT_EDIT' =>
false,
4866 'LOG_ELEMENT_DELETE' =>
false,
4867 'XML_IMPORT_START_TIME' =>
false,
4868 'DETAIL_TEXT_TYPE_ALLOW_CHANGE' =>
'Y',
4869 'PREVIEW_TEXT_TYPE_ALLOW_CHANGE' =>
'Y',
4870 'SECTION_DESCRIPTION_TYPE_ALLOW_CHANGE' =>
'Y',
4876 $compression = (int)
$settings[
'COMPRESSION'];
4877 if ($compression > 100)
4881 elseif ($compression <= 0)
4887 'SCALE' =>
$settings[
'SCALE'] ===
'Y'?
'Y':
'N',
4888 'WIDTH' => (int)
$settings[
'WIDTH'] ?:
'',
4889 'HEIGHT' => (int)
$settings[
'HEIGHT'] ?:
'',
4890 'IGNORE_ERRORS' =>
$settings[
'IGNORE_ERRORS'] ===
'Y'?
'Y':
'N',
4891 'METHOD' =>
$settings[
'METHOD'] ===
'resample'?
'resample':
'',
4892 'COMPRESSION' => $compression,
4893 'USE_WATERMARK_TEXT' =>
$settings[
'USE_WATERMARK_TEXT'] ===
'Y'?
'Y':
'N',
4894 'WATERMARK_TEXT' =>
$settings[
'WATERMARK_TEXT'],
4895 'WATERMARK_TEXT_FONT' =>
$settings[
'WATERMARK_TEXT_FONT'],
4896 'WATERMARK_TEXT_COLOR' =>
$settings[
'WATERMARK_TEXT_COLOR'],
4897 'WATERMARK_TEXT_SIZE' => (int)
$settings[
'WATERMARK_TEXT_SIZE'] ?:
'',
4898 'WATERMARK_TEXT_POSITION' =>
$settings[
'WATERMARK_TEXT_POSITION'],
4899 'USE_WATERMARK_FILE' =>
$settings[
'USE_WATERMARK_FILE'] ===
'Y'?
'Y':
'N',
4900 'WATERMARK_FILE' =>
$settings[
'WATERMARK_FILE'],
4901 'WATERMARK_FILE_ALPHA' => (int)
$settings[
'WATERMARK_FILE_ALPHA'] ?:
'',
4902 'WATERMARK_FILE_POSITION' =>
$settings[
'WATERMARK_FILE_POSITION'],
4903 'WATERMARK_FILE_ORDER' =>
$settings[
'WATERMARK_FILE_ORDER'],
4912 $result[
'DELETE_WITH_DETAIL'] =
$settings[
'DELETE_WITH_DETAIL'] ===
'Y'?
'Y':
'N';
4913 $result[
'UPDATE_WITH_DETAIL'] =
$settings[
'UPDATE_WITH_DETAIL'] ===
'Y'?
'Y':
'N';
4920 $maxLength = (int)
$settings[
'TRANS_LEN'];
4921 if ($maxLength > 255)
4929 $transCase = (string)
$settings[
'TRANS_CASE'];
4930 if ($transCase !==
'U' && $transCase !==
'')
4936 'UNIQUE' =>
$settings[
'UNIQUE'] ===
'Y'?
'Y':
'N',
4937 'TRANSLITERATION' =>
$settings[
'TRANSLITERATION'] ===
'Y'?
'Y':
'N',
4938 'TRANS_LEN' => $maxLength,
4939 'TRANS_CASE' => $transCase,
4940 'TRANS_SPACE' => substr(
$settings[
'TRANS_SPACE'], 0, 1),
4941 'TRANS_OTHER' => substr(
$settings[
'TRANS_OTHER'], 0, 1),
4942 'TRANS_EAT' =>
$settings[
'TRANS_EAT'] ===
'N'?
'N':
'Y',
4943 'USE_GOOGLE' =>
$settings[
'USE_GOOGLE'] ===
'Y'?
'Y':
'N',
4949 return self::TABLE_PREFIX_SINGLE_PROPERTY_VALUES .
$iblockId;
4954 return self::TABLE_PREFIX_MULTIPLE_PROPERTY_VALUES .
$iblockId;
4959 return self::TABLE_COMMON_PROPERTY_VALUES;
static createTable(int $iblockId)
static drop(int $iblockId)
static getConnection($name="")
static get($moduleId, $name, $default="", $siteId=false)
static createSharpen($precision)
static createFromArray($params)
static includeModule($moduleName)
static getRow(array $parameters)
static getList(array $parameters=array())
static getCount($filter=array(), array $cache=array())
static createFromTimestamp($timestamp)
static GetAdminElementListScriptName($IBLOCK_ID, $arParams=array())
static GetAdminSubElementEditLink($IBLOCK_ID, $ELEMENT_ID, $SUBELEMENT_ID, $arParams=array(), $strAdd='', $absoluteUrl=false)
static GetAdminSectionListLink($IBLOCK_ID, $arParams=array(), $strAdd="")
static prepareCodeFieldSettings(array $settings)
static SetMessages($ID, $arFields)
static isUniqueSectionCode(int $id)
static getCommonPropertyValuesTableName()
const TABLE_PREFIX_MULTIPLE_PROPERTY_VALUES
static AddPanelButtons($mode, $componentName, $arButtons)
static CheckForIndexes($IBLOCK_ID)
static disableClearTagCache()
static GetArrayByID($ID, $FIELD="")
static ReplaceSectionUrl($url, $arr, $server_name=false, $arrType=false)
static SetPermission($IBLOCK_ID, $arGROUP_ID)
static getMultiplePropertyValuesTableName(int $iblockId)
static GetFieldsDefaults()
static preparePreviewPictureFieldSettings(array $settings)
static makeFileArray($data, $del=false, $description=null, $options=array())
static GetAdminElementListLink($IBLOCK_ID, $arParams=array(), $strAdd="")
static fillUrlElementDataCache(int $id)
static GetGroupPermissions($ID)
static GetAdminListMode($IBLOCK_ID)
static getFieldsDefaultValues()
CheckFields(&$arFields, $ID=false)
static OnSearchReindex($NS=Array(), $oCallback=NULL, $callback_method="")
static SetFields($ID, $arFields)
static GetElementCount($iblock_id)
static ResizePicture($arFile, $arResize)
static _Order($by, $order, $default_order, $nullable=true)
static isUniqueElementCode(int $id)
static FilterCreate($field_name, $values, $type, $cOperationType=false, $bSkipEmpty=true)
static GetAdminSectionListScriptName($IBLOCK_ID, $arParams=array())
static ShowPanel($IBLOCK_ID=0, $ELEMENT_ID=0, $SECTION_ID="", $type="news", $bGetIcons=false, $componentName="", $arLabels=array())
static GetSite($iblock_id)
static checkActivityDatesAgent($iblockId, $previousTime)
static getSinglePropertyValuesTableName(int $iblockId)
static ReplaceDetailUrl($url, $arr, $server_name=false, $arrType=false)
static enableClearTagCache()
static GetAdminIBlockEditLink($IBLOCK_ID, $arParams=array(), $strAdd="")
static clearIblockTagCache($iblock_id)
static _transaction_lock($IBLOCK_ID)
static GetAdminElementEditLink($IBLOCK_ID, $ELEMENT_ID, $arParams=array(), $strAdd="")
static getProductUrlValue(array $element, bool $serverName)
static isShortDate($strDate)
static enableTagCache($iblock_id)
static MkOperationFilter($key)
static getDefaultJpegQuality()
static GetAdminSectionEditLink($IBLOCK_ID, $SECTION_ID, $arParams=array(), $strAdd="")
static FilterPicture($filePath, $arFilter)
static clearUrlDataCache()
static GetProperties($ID, $arOrder=array(), $arFilter=array())
static GetComponentMenu($mode, $arButtons)
static GetPermission($IBLOCK_ID, $FOR_USER_ID=false)
static OnSearchGetURL($arFields)
static OnLangDelete($lang)
static FilterCreateEx($fname, $vals, $type, &$bFullJoin, $cOperationType=false, $bSkipEmpty=true)
static GetPanelButtons($IBLOCK_ID=0, $ELEMENT_ID=0, $SECTION_ID=0, $arOptions=array())
static isCorrectFullFormatDate($value)
static prepareDetailPictureFieldSettings(array $settings)
static OnGroupDelete($group_id)
static _MergeIBArrays($iblock_id, $iblock_code=false, $iblock_id2=false, $iblock_code2=false)
static int $enableClearTagCache
static OnBeforeLangDelete($lang)
const TABLE_COMMON_PROPERTY_VALUES
static registerWithTagCache($iblock_id)
static getFieldDefaultSettings(string $fieldName)
static disableTagCache($iblock_id)
static _GetProductUrl($OF_ELEMENT_ID, $OF_IBLOCK_ID, $server_name=false, $arrType=false)
const TABLE_PREFIX_SINGLE_PROPERTY_VALUES
static bool $catalogIncluded
static NumberFormat($num)
static array $disabledCacheTag
static makeFilePropArray($data, $del=false, $description=null, $options=array())
static isEnabledClearTagCache()
static bool $workflowIncluded
static GetMessages($ID, $type="")
static _NotEmpty($column)
static getDefaultRights()
static ChangePermission($MODULE_ID, $arGroups, $ITEM_ID=false, $PARAM1=false, $PARAM2=false, $SITE_ID=false, $PARAMS=false)
static DeleteIndex($MODULE_ID, $ITEM_ID=false, $PARAM1=false, $PARAM2=false, $SITE_ID=false)
static GetInfoByOfferIBlock($intIBlockID)
static getProductList($offerID, $iblockID=0)
static GetComponentDescr($componentName)
static recalculateDb(bool $mode=true)
static MakeFileArray($path, $mimetype=false, $skipInternal=false, $external_id="")
static urlDeleteParams($url, $delete_params, $options=array())
static GetByIDLang($ID, $LID, $bFindAny=true)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
global $USER_FIELD_MANAGER
if(Loader::includeModule( 'bitrix24')) elseif(Loader::includeModule('intranet') &&CIntranetUtils::getPortalZone() !=='ru') $description
if(! $catalogEdit->isSuccess()) $iblock
$_SERVER["DOCUMENT_ROOT"]
const BX_AJAX_PARAM_ID(!defined('TAGGED_user_card_size'))
const SITE_DIR(!defined('LANG'))
if(!defined('SITE_ID')) $lang
if(!defined('NOT_CHECK_PERMISSIONS')) $NS
CheckSerializedData($str, $max_depth=200)
ExecuteModuleEventEx($arEvent, $arParams=[])
ParseDateTime($datetime, $format=false)
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
if(empty($signedUserToken)) $key
</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."%"
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
if( $site[ 'SERVER_NAME']==='') if($site['SERVER_NAME']==='') $arProperties