15 $MAX_LOCK = (int)COption::GetOptionString(
"workflow",
"MAX_LOCK_TIME",
"60");
21 $arIblockElementFields =
array(
23 "TIMESTAMP_X"=>
$DB->DateToCharFunction(
"BE.TIMESTAMP_X"),
24 "TIMESTAMP_X_UNIX"=>
'UNIX_TIMESTAMP(BE.TIMESTAMP_X)',
25 "MODIFIED_BY"=>
"BE.MODIFIED_BY",
26 "DATE_CREATE"=>
$DB->DateToCharFunction(
"BE.DATE_CREATE"),
27 "DATE_CREATE_UNIX"=>
'UNIX_TIMESTAMP(BE.DATE_CREATE)',
28 "CREATED_BY"=>
"BE.CREATED_BY",
29 "IBLOCK_ID"=>
"BE.IBLOCK_ID",
30 "IBLOCK_SECTION_ID"=>
"BE.IBLOCK_SECTION_ID",
31 "ACTIVE"=>
"BE.ACTIVE",
35 $DB->DateToCharFunction(
"BE.ACTIVE_FROM", $shortFormatActiveDates)
37 "BE.ACTIVE_FROM as ACTIVE_FROM_X, case when EXTRACT(HOUR FROM BE.ACTIVE_FROM) > 0 OR EXTRACT(MINUTE FROM BE.ACTIVE_FROM) > 0 OR EXTRACT(SECOND FROM BE.ACTIVE_FROM) > 0 then ".$DB->DateToCharFunction(
"BE.ACTIVE_FROM",
"FULL").
" else ".
$DB->DateToCharFunction(
"BE.ACTIVE_FROM",
"SHORT").
" end"
42 $DB->DateToCharFunction(
"BE.ACTIVE_TO", $shortFormatActiveDates)
44 "case when EXTRACT(HOUR FROM BE.ACTIVE_TO) > 0 OR EXTRACT(MINUTE FROM BE.ACTIVE_TO) > 0 OR EXTRACT(SECOND FROM BE.ACTIVE_TO) > 0 then ".$DB->DateToCharFunction(
"BE.ACTIVE_TO",
"FULL").
" else ".
$DB->DateToCharFunction(
"BE.ACTIVE_TO",
"SHORT").
" end"
49 $DB->DateToCharFunction(
"BE.ACTIVE_FROM", $shortFormatActiveDates)
51 "case when EXTRACT(HOUR FROM BE.ACTIVE_FROM) > 0 OR EXTRACT(MINUTE FROM BE.ACTIVE_FROM) > 0 OR EXTRACT(SECOND FROM BE.ACTIVE_FROM) > 0 then ".$DB->DateToCharFunction(
"BE.ACTIVE_FROM",
"FULL").
" else ".
$DB->DateToCharFunction(
"BE.ACTIVE_FROM",
"SHORT").
" end"
56 $DB->DateToCharFunction(
"BE.ACTIVE_TO", $shortFormatActiveDates)
58 "case when EXTRACT(HOUR FROM BE.ACTIVE_TO) > 0 OR EXTRACT(MINUTE FROM BE.ACTIVE_TO) > 0 OR EXTRACT(SECOND FROM BE.ACTIVE_TO) > 0 then ".$DB->DateToCharFunction(
"BE.ACTIVE_TO",
"FULL").
" else ".
$DB->DateToCharFunction(
"BE.ACTIVE_TO",
"SHORT").
" end"
62 "PREVIEW_PICTURE"=>
"BE.PREVIEW_PICTURE",
63 "PREVIEW_TEXT"=>
"BE.PREVIEW_TEXT",
64 "PREVIEW_TEXT_TYPE"=>
"BE.PREVIEW_TEXT_TYPE",
65 "DETAIL_PICTURE"=>
"BE.DETAIL_PICTURE",
66 "DETAIL_TEXT"=>
"BE.DETAIL_TEXT",
67 "DETAIL_TEXT_TYPE"=>
"BE.DETAIL_TEXT_TYPE",
68 "SEARCHABLE_CONTENT"=>
"BE.SEARCHABLE_CONTENT",
69 "WF_STATUS_ID"=>
"BE.WF_STATUS_ID",
70 "WF_PARENT_ELEMENT_ID"=>
"BE.WF_PARENT_ELEMENT_ID",
71 "WF_LAST_HISTORY_ID"=>
"BE.WF_LAST_HISTORY_ID",
72 "WF_NEW"=>
"BE.WF_NEW",
73 "LOCK_STATUS"=>
"case when BE.WF_DATE_LOCK is null then 'green' when " . $helper->addSecondsToDateTime($MAX_LOCK * 60,
'BE.WF_DATE_LOCK') .
" < " . $helper->getCurrentDateTimeFunction() .
" then 'green' when BE.WF_LOCKED_BY = " .
$uid .
" then 'yellow' else 'red' end",
74 "WF_LOCKED_BY"=>
"BE.WF_LOCKED_BY",
75 "WF_DATE_LOCK"=>
$DB->DateToCharFunction(
"BE.WF_DATE_LOCK"),
76 "WF_COMMENTS"=>
"BE.WF_COMMENTS",
77 "IN_SECTIONS"=>
"BE.IN_SECTIONS",
78 "SHOW_COUNTER"=>
"BE.SHOW_COUNTER",
79 "SHOW_COUNTER_START"=>
$DB->DateToCharFunction(
"BE.SHOW_COUNTER_START"),
80 "SHOW_COUNTER_START_X"=>
"BE.SHOW_COUNTER_START",
83 "XML_ID"=>
"BE.XML_ID",
84 "EXTERNAL_ID"=>
"BE.XML_ID",
85 "TMP_ID"=>
"BE.TMP_ID",
86 'USER_NAME' => self::getUserNameSql(
'U'),
87 'LOCKED_USER_NAME' => self::getUserNameSql(
'UL'),
88 'CREATED_USER_NAME' => self::getUserNameSql(
'UC'),
91 "IBLOCK_TYPE_ID"=>
"B.IBLOCK_TYPE_ID",
92 "IBLOCK_CODE"=>
"B.CODE",
93 "IBLOCK_NAME"=>
"B.NAME",
94 "IBLOCK_EXTERNAL_ID"=>
"B.XML_ID",
95 "DETAIL_PAGE_URL"=>
"B.DETAIL_PAGE_URL",
96 "LIST_PAGE_URL"=>
"B.LIST_PAGE_URL",
97 "CANONICAL_PAGE_URL"=>
"B.CANONICAL_PAGE_URL",
98 "CREATED_DATE"=>
$DB->DateFormatToDB(
"YYYY.MM.DD",
"BE.DATE_CREATE"),
99 "BP_PUBLISHED"=>
"case when BE.WF_STATUS_ID = 1 then 'Y' else 'N' end",
101 unset($shortFormatActiveDates);
102 unset($formatActiveDates);
104 $this->bDistinct =
false;
107 $arIblockElementFields,
131 foreach ($arJoinProps[
"FPS"] as $iblock_id => $iPropCnt)
137 $tableAlias =
'FPS' . $iPropCnt;
138 $tableJoin =
"\t\t\tINNER JOIN b_iblock_element_prop_s" . $iblock_id .
" " . $tableAlias
139 .
" ON " . $tableAlias .
".IBLOCK_ELEMENT_ID = BE.ID\n"
146 $this->arFilterIBlocks[$iblock_id] = $iblock_id;
149 foreach ($arJoinProps[
"FP"] as $propID => $db_prop)
166 $tableAlias =
'FP' . $db_prop[
'CNT'];
167 $joinType = $db_prop[
'bFullJoin'] ?
'INNER JOIN' :
'LEFT JOIN';
168 $tableJoin =
"\t\t\t" . $joinType .
" b_iblock_property " . $tableAlias
169 .
" ON " . $tableAlias .
".IBLOCK_ID = B.ID AND "
172 ? $tableAlias .
".ID=" . (int)$propID .
"\n"
173 : $tableAlias .
".CODE='" .
$DB->ForSQL($propID, 200) .
"'\n"
177 if (self::useCountJoin($db_prop))
186 if (isset($db_prop[
"IBLOCK_ID"]) && $db_prop[
"IBLOCK_ID"])
188 $this->arFilterIBlocks[$db_prop[
"IBLOCK_ID"]] = $db_prop[
"IBLOCK_ID"];
192 foreach ($arJoinProps[
'FPV'] as $db_prop)
194 if ($db_prop[
'MULTIPLE'] ===
'Y')
196 $this->bDistinct =
true;
201 $tableName =
'b_iblock_element_prop_m' . $db_prop[
'IBLOCK_ID'];
205 $tableName =
'b_iblock_element_property';
219 $tableAlias =
'FPV' . $db_prop[
'CNT'];
220 $joinType = $db_prop[
'bFullJoin'] ?
'INNER JOIN' :
'LEFT JOIN';
221 $tableJoin =
"\t\t\t" . $joinType .
" " . $tableName .
" " . $tableAlias
222 .
" ON " . $tableAlias .
".IBLOCK_PROPERTY_ID = FP" . $db_prop[
"JOIN"] .
".ID"
223 .
" AND " . $tableAlias .
".IBLOCK_ELEMENT_ID = BE.ID\n"
226 if (self::useCountJoin($db_prop))
236 if (isset($db_prop[
"IBLOCK_ID"]) && $db_prop[
"IBLOCK_ID"])
238 $this->arFilterIBlocks[$db_prop[
"IBLOCK_ID"]] = $db_prop[
"IBLOCK_ID"];
242 foreach ($arJoinProps[
"FPEN"] as $db_prop)
262 $tableAlias =
'FPEN' . $db_prop[
'CNT'];
263 $joinType = $db_prop[
'bFullJoin'] ?
'INNER JOIN' :
'LEFT JOIN';
266 $tableJoin =
"\t\t\t" . $joinType .
" " . $tableName .
" " . $tableAlias
267 .
" ON " . $tableAlias .
".PROPERTY_ID = " . $db_prop[
"ORIG_ID"]
268 .
" AND FPS" . $db_prop[
"JOIN"] .
".PROPERTY_" . $db_prop[
"ORIG_ID"] .
" = " . $tableAlias .
".ID\n"
273 $tableJoin =
"\t\t\t" . $joinType .
" " . $tableName .
" " . $tableAlias
274 .
" ON " . $tableAlias .
".PROPERTY_ID = FPV" . $db_prop[
"JOIN"] .
".IBLOCK_PROPERTY_ID"
275 .
" AND FPV".$db_prop[
"JOIN"].
".VALUE_ENUM = " . $tableAlias .
".ID\n"
279 if (self::useCountJoin($db_prop))
288 if (isset($db_prop[
"IBLOCK_ID"]) && $db_prop[
"IBLOCK_ID"])
290 $this->arFilterIBlocks[$db_prop[
"IBLOCK_ID"]] = $db_prop[
"IBLOCK_ID"];
294 $showHistory = (
$arFilter[
'SHOW_HISTORY'] ??
null) ===
'Y';
295 $showNew = (
$arFilter[
'SHOW_NEW'] ??
null) ===
'Y';
296 foreach($arJoinProps[
"BE"] as $db_prop)
298 $i = $db_prop[
"CNT"];
300 $tableJoin =
"\t\t\tLEFT JOIN b_iblock_element BE".$i.
" ON BE".
$i.
".ID = ".
302 $db_prop[
"VERSION"]==2 && $db_prop[
"MULTIPLE"]==
"N"?
303 "FPS".$db_prop[
"JOIN"].
".PROPERTY_".$db_prop[
"ORIG_ID"]
304 :
"FPV".$db_prop[
"JOIN"].
".VALUE_NUM"
308 " AND ((BE.WF_STATUS_ID=1 AND BE.WF_PARENT_ELEMENT_ID IS NULL)".($showNew ?
" OR BE.WF_NEW='Y'":
"").
")":
312 if ($db_prop[
"bJoinIBlock"])
314 $tableJoin .=
"\t\t\tLEFT JOIN b_iblock B".$i.
" ON B".
$i.
".ID = BE".
$i.
".IBLOCK_ID\n";
317 if ($db_prop[
"bJoinSection"])
319 $tableJoin .=
"\t\t\tLEFT JOIN b_iblock_section BS".$i.
" ON BS".
$i.
".ID = BE".
$i.
".IBLOCK_SECTION_ID\n";
323 if (self::useCountJoin($db_prop))
332 if (isset($db_prop[
"IBLOCK_ID"]) && $db_prop[
"IBLOCK_ID"])
334 $this->arFilterIBlocks[$db_prop[
"IBLOCK_ID"]] = $db_prop[
"IBLOCK_ID"];
338 foreach($arJoinProps[
"BE_FPS"] as $iblock_id => $db_prop)
340 if (str_contains($iblock_id,
'~'))
342 [$iblock_id, ] = explode(
"~", $iblock_id, 2);
344 $tableJoin =
"\t\t\tLEFT JOIN b_iblock_element_prop_s" . $iblock_id .
" JFPS" . $db_prop[
"CNT"]
345 .
" ON JFPS" . $db_prop[
"CNT"] .
".IBLOCK_ELEMENT_ID = BE" . $db_prop[
"JOIN"] .
".ID\n"
349 if (self::useCountJoin($db_prop))
356 if (isset($db_prop[
"IBLOCK_ID"]) && $db_prop[
"IBLOCK_ID"])
358 $this->arFilterIBlocks[$db_prop[
"IBLOCK_ID"]] = $db_prop[
"IBLOCK_ID"];
362 foreach($arJoinProps[
"BE_FP"] as $propID => $db_prop)
365 $tableAlias =
'JFP' . $db_prop[
'CNT'];
366 $joinType = $db_prop[
'bFullJoin'] ?
'INNER JOIN' :
'LEFT JOIN';
368 if (str_contains($propID,
'~'))
370 [$propID, ] = explode(
"~", $propID, 2);
373 $tableJoin =
"\t\t\t" . $joinType .
" " . $tableName .
" " . $tableAlias
374 .
" ON " . $tableAlias .
".IBLOCK_ID = BE". $db_prop[
"JOIN"] .
".IBLOCK_ID AND "
377 ? $tableAlias .
".ID=" . (int)$propID .
"\n"
378 : $tableAlias .
".CODE='" .
$DB->ForSQL($propID, 200) .
"'\n"
383 if (self::useCountJoin($db_prop))
390 if (isset($db_prop[
"IBLOCK_ID"]) && $db_prop[
"IBLOCK_ID"])
392 $this->arFilterIBlocks[$db_prop[
"IBLOCK_ID"]] = $db_prop[
"IBLOCK_ID"];
396 foreach($arJoinProps[
"BE_FPV"] as $propID => $db_prop)
398 if (str_contains($propID,
'~'))
400 [$propID, ] = explode(
"~", $propID, 2);
403 if($db_prop[
"MULTIPLE"]==
"Y")
404 $this->bDistinct =
true;
408 $tableName =
'b_iblock_element_prop_m' . $db_prop[
'IBLOCK_ID'];
412 $tableName =
'b_iblock_element_property';
415 $tableAlias =
'JFPV' . $db_prop[
'CNT'];
416 $joinType = $db_prop[
'bFullJoin'] ?
'INNER JOIN' :
'LEFT JOIN';
418 $tableJoin =
"\t\t\t" . $joinType .
" " . $tableName .
" " . $tableAlias
419 .
" ON " . $tableAlias .
".IBLOCK_PROPERTY_ID = JFP" .$db_prop[
"JOIN"] .
".ID"
420 .
" AND " . $tableAlias .
".IBLOCK_ELEMENT_ID = BE" . $db_prop[
"BE_JOIN"] .
".ID\n"
424 if (self::useCountJoin($db_prop))
434 if (isset($db_prop[
"IBLOCK_ID"]) && $db_prop[
"IBLOCK_ID"])
436 $this->arFilterIBlocks[$db_prop[
"IBLOCK_ID"]] = $db_prop[
"IBLOCK_ID"];
440 foreach($arJoinProps[
"BE_FPEN"] as $propID => $db_prop)
442 if (str_contains($propID,
'~'))
444 [$propID, ] = explode(
"~", $propID, 2);
448 $tableAlias =
'JFPEN' . $db_prop[
'CNT'];
449 $joinType = $db_prop[
'bFullJoin'] ?
'INNER JOIN' :
'LEFT JOIN';
452 $tableJoin =
"\t\t\t" . $joinType .
" " . $tableName .
" " .$tableAlias
453 .
" ON " . $tableAlias .
".PROPERTY_ID = " . $db_prop[
"ORIG_ID"]
454 .
" AND JFPS" . $db_prop[
"JOIN"] .
".PROPERTY_" . $db_prop[
"ORIG_ID"] .
" = " . $tableAlias.
".ID\n"
459 $tableJoin =
"\t\t\t" . $joinType .
" " . $tableName .
" " . $tableAlias
460 .
" ON " . $tableAlias .
".PROPERTY_ID = JFPV" . $db_prop[
"JOIN"] .
".IBLOCK_PROPERTY_ID"
461 .
" AND JFPV" . $db_prop[
"JOIN"].
".VALUE_ENUM = " . $tableAlias .
".ID\n"
466 if (self::useCountJoin($db_prop))
476 if (isset($db_prop[
"IBLOCK_ID"]) && $db_prop[
"IBLOCK_ID"])
478 $this->arFilterIBlocks[$db_prop[
"IBLOCK_ID"]] = $db_prop[
"IBLOCK_ID"];
482 if($arJoinProps[
"BES"] !==
'')
484 $sFrom .=
"\t\t\t".$arJoinProps[
"BES"].
"\n";
485 $countFrom .=
"\t\t\t".$arJoinProps[
"BES"].
"\n";
488 if(!empty($arJoinProps[
"BESI"]))
490 $sFrom .=
"\t\t\t".$arJoinProps[
"BESI"].
"\n";
491 $countFrom .=
"\t\t\t".$arJoinProps[
"BESI"].
"\n";
494 if($arJoinProps[
"FC"] !==
'')
496 $sFrom .=
"\t\t\t".$arJoinProps[
"FC"].
"\n";
497 $countFrom .=
"\t\t\t".$arJoinProps[
"FC"].
"\n";
498 $this->bDistinct = $this->bDistinct || (isset($arJoinProps[
"FC_DISTINCT"]) && $arJoinProps[
"FC_DISTINCT"] ==
"Y");
501 if($arJoinProps[
"RV"])
503 $sFrom .=
"\t\t\tLEFT JOIN b_rating_voting RV ON RV.ENTITY_TYPE_ID = 'IBLOCK_ELEMENT' AND RV.ENTITY_ID = BE.ID\n";
505 if($arJoinProps[
"RVU"])
507 $sFrom .=
"\t\t\tLEFT JOIN b_rating_vote RVU ON RVU.ENTITY_TYPE_ID = 'IBLOCK_ELEMENT' AND RVU.ENTITY_ID = BE.ID AND RVU.USER_ID = ".$uid.
"\n";
509 if (is_array($arJoinProps[
"RVV"]))
511 $joinType = $arJoinProps[
'RVV'][
'bFullJoin'] ?
'INNER JOIN' :
'LEFT JOIN';
512 $tableJoin =
"\t\t\t" . $joinType .
" b_rating_vote RVV ON RVV.ENTITY_TYPE_ID = 'IBLOCK_ELEMENT' AND RVV.ENTITY_ID = BE.ID\n";
514 if (self::useCountJoin($arJoinProps[
'RVV']))
524 $this->bCatalogSort =
false;
525 if(!empty($arAddSelectFields) || !empty($arAddWhereFields) || !empty($arAddOrderByFields))
530 'select' => $arAddSelectFields,
531 'filter' => $arAddWhereFields,
532 'order' => $arAddOrderByFields
534 if (!empty($catalogQueryResult))
537 !empty($catalogQueryResult[
'select'])
539 && !$this->bOnlyCount
540 && !isset($this->strField)
543 $sSelect .=
', '.implode(
', ', $catalogQueryResult[
'select']).
' ';
546 if (!empty($catalogQueryResult[
'order']))
548 $this->bCatalogSort =
true;
549 foreach ($catalogQueryResult[
'order'] as $index => $field)
550 $arSqlOrder[$index] = $field;
554 if (!empty($catalogQueryResult[
'join']))
556 $sFrom .=
"\n\t\t\t".implode(
"\n\t\t\t", $catalogQueryResult[
'join']).
"\n";
559 unset($catalogQueryResult);
560 if (!empty($arAddWhereFields))
565 !empty($catalogQueryResult[
'filter'])
566 && !empty($catalogQueryResult[
'join'])
569 $countFrom .=
"\n\t\t\t".implode(
"\n\t\t\t", $catalogQueryResult[
'join']).
"\n";
571 unset($catalogQueryResult);
576 $i = array_search(
"CREATED_BY_FORMATTED", $arSelectFields);
582 && !$this->bOnlyCount
583 && !isset($this->strField)
586 $sSelect .=
",UC.NAME UC_NAME, UC.LAST_NAME UC_LAST_NAME, UC.SECOND_NAME UC_SECOND_NAME, UC.EMAIL UC_EMAIL, UC.ID UC_ID, UC.LOGIN UC_LOGIN";
590 unset($arSelectFields[
$i]);
595 foreach($arSqlOrder as
$i=>
$val)
616 $this->bDistinct = $this->bDistinct || (isset(
$arFilter[
"INCLUDE_SUBSECTIONS"]) &&
$arFilter[
"INCLUDE_SUBSECTIONS"] ==
"Y");
625 INNER JOIN b_lang L ON B.LID=L.LID
626 INNER JOIN b_iblock_element BE ON BE.IBLOCK_ID = B.ID
628 .(in_array(
"USER_NAME", $arSelectFields)?
"\t\t\tLEFT JOIN b_user U ON U.ID=BE.MODIFIED_BY\n":
"")
629 .(in_array(
"LOCKED_USER_NAME", $arSelectFields)?
"\t\t\tLEFT JOIN b_user UL ON UL.ID=BE.WF_LOCKED_BY\n":
"")
630 .(in_array(
"CREATED_USER_NAME", $arSelectFields) || in_array(
"CREATED_BY_FORMATTED", $arSelectFields)?
"\t\t\tLEFT JOIN b_user UC ON UC.ID=BE.CREATED_BY\n":
"").
"
635 INNER JOIN b_lang L ON B.LID=L.LID
636 INNER JOIN b_iblock_element BE ON BE.IBLOCK_ID = B.ID
664 &&
$arFilter[
'CHECK_PERMISSIONS'] ===
'Y'
667 $filterIblockId = static::getSingleIblockIdFromFilter(
$arFilter);
669 $filterIblockId !==
null
672 $minPermission = (string)(
$arFilter[
'MIN_PERMISSION'] ?? CIBlockRights::PUBLIC_READ);
673 if (strlen($minPermission) !== 1)
675 $minPermission = CIBlockRights::PUBLIC_READ;
683 !defined(
'ADMIN_SECTION')
685 && CIBlock::GetArrayByID($filterIblockId,
'ACTIVE') !==
'Y'
699 $el->prepareSql($arSelectFields,
$arFilter, $arGroupBy, $arOrder);
704 SELECT ".$el->sSelect.
"
706 WHERE 1=1 ".$el->sWhere.
"
713 if (!empty($arNavStartParams) && is_array($arNavStartParams))
715 $nTopCount = (int)($arNavStartParams[
'nTopCount'] ?? 0);
716 $nElementID = (int)($arNavStartParams[
'nElementID'] ?? 0);
720 $offset = (int)($arNavStartParams[
'nOffset'] ?? 0);
722 SELECT ".$el->sSelect.
"
724 WHERE 1=1 ".$el->sWhere.
"
729 ?
' OFFSET ' . $offset
737 && $el->sGroupBy ==
""
738 && $el->sOrderBy !=
""
739 && mb_strpos($el->sSelect,
"BE.ID") !==
false
740 && !$el->bCatalogSort
743 $nPageSize = (int)($arNavStartParams[
'nPageSize'] ?? 0);
757 case when be.ID = ' . $nElementID .
' then 1 else 0 end
758 ) OVER (' . $el->sOrderBy .
' rows between ' . $nPageSize .
' preceding and ' . $nPageSize .
' following) as wndrank,
759 row_number() OVER (' . $el->sOrderBy .
') as rank,
761 from ' . $el->sFrom .
'
762 where 1=1 ' . $el->sWhere .
'
763 ' . $el->sGroupBy .
'
764 ' . $el->sOrderBy .
'
765 ) t where t.wndrank > 0
773 $DB->Query(
"SET @ranx=0");
775 SELECT /*+ NO_DERIVED_CONDITION_PUSHDOWN() */ @ranx:=el1.ranx
777 SELECT @ranx:=@ranx+1 AS ranx, el0.*
779 SELECT ".$el->sSelect.
"
781 WHERE 1=1 ".$el->sWhere.
"
784 LIMIT 18446744073709551615
787 WHERE el1.ID = ".$nElementID.
"
789 $DB->Query(
"SET @ranx2=0");
794 SELECT @ranx2:=@ranx2+1 AS ".$helper->quote(
'RANK').
", el0.*
796 SELECT ".$el->sSelect.
"
798 WHERE 1=1 ".$el->sWhere.
"
801 LIMIT 18446744073709551615
804 WHERE el1.".$helper->quote(
'RANK').
" between @ranx-$nPageSize and @ranx+$nPageSize
809 $DB->Query(
"SET @ranx=0");
811 SELECT /*+ NO_DERIVED_CONDITION_PUSHDOWN() */ el1.*
813 SELECT @ranx:=@ranx+1 AS ".$helper->quote(
'RANK').
", el0.*
815 SELECT ".$el->sSelect.
"
817 WHERE 1=1 ".$el->sWhere.
"
820 LIMIT 18446744073709551615
823 WHERE el1.ID = ".$nElementID.
"
830 if ($el->sGroupBy ==
"")
832 $res_cnt =
$DB->Query(
"
833 SELECT COUNT(".($el->bDistinct?
"DISTINCT BE.ID":
"'x'").
") as C
834 FROM ".$el->countFrom.
"
835 WHERE 1=1 ".$el->sWhere.
"
838 $res_cnt = $res_cnt->Fetch();
839 $cnt = $res_cnt[
"C"];
843 $res_cnt =
$DB->Query(
"
845 FROM ".$el->countFrom.
"
846 WHERE 1=1 ".$el->sWhere.
"
849 $cnt = $res_cnt->SelectedRowsCount();
853 SELECT ".$el->sSelect.
"
855 WHERE 1=1 ".$el->sWhere.
"
860 $res->NavQuery($strSql, $cnt, $arNavStartParams);
866 SELECT ".$el->sSelect.
"
868 WHERE 1=1 ".$el->sWhere.
"
876 $res->SetIBlockTag($el->arFilterIBlocks);
877 $res->arIBlockMultProps = $el->arIBlockMultProps;
878 $res->arIBlockConvProps = $el->arIBlockConvProps;
879 $res->arIBlockAllProps = $el->arIBlockAllProps;
880 $res->arIBlockNumProps = $el->arIBlockNumProps;
881 $res->arIBlockLongProps = $el->arIBlockLongProps;
889 public function Update(
$ID,
$arFields, $bWorkFlow=
false, $bUpdateSearch=
true, $bResizePictures=
false, $bCheckDiskQuota=
true)
915 "WF_PARENT_ELEMENT_ID",
925 if(!($ar_element = $db_element->Fetch()))
928 if ($this->iblock !==
null && $this->iblock[
'ID'] === (
int)$ar_element[
"IBLOCK_ID"])
934 $arIBlock = CIBlock::GetArrayByID($ar_element[
"IBLOCK_ID"]);
937 $bWorkFlow = $bWorkFlow && is_array(
$arIBlock) && (
$arIBlock[
"WORKFLOW"] !=
"N") && $this->workflowIncluded;
939 $ar_wf_element = $ar_element;
950 if(!($ar_wf_element = $db_element->Fetch()))
959 $bFieldProps =
array();
961 $bFieldProps[
$k]=
true;
963 $arFieldProps = &
$arFields[
'PROPERTY_VALUES'];
965 while($arProp =
$props->Fetch())
967 $pr_val_id = $arProp[
'PROPERTY_VALUE_ID'];
968 if($arProp[
'PROPERTY_TYPE']==
'F' && $pr_val_id <>
'')
970 if($arProp[
"CODE"] <>
'' &&
is_set($arFieldProps, $arProp[
"CODE"]))
971 $pr_id = $arProp[
"CODE"];
973 $pr_id = $arProp[
'ID'];
976 isset($arFieldProps[$pr_id][$pr_val_id])
977 && is_array($arFieldProps[$pr_id][$pr_val_id])
980 $new_value = $arFieldProps[$pr_id][$pr_val_id];
982 $new_value[
'name'] ==
''
983 && $new_value[
'del'] !=
"Y"
984 && $new_value[
'VALUE'][
'name'] ==
''
985 && $new_value[
'VALUE'][
'del'] !=
"Y"
989 array_key_exists(
'DESCRIPTION', $new_value)
990 && ($new_value[
'DESCRIPTION'] != $arProp[
'DESCRIPTION'])
993 $p = Array(
"VALUE"=>CFile::MakeFileArray($arProp[
'VALUE']));
994 $p[
"DESCRIPTION"] = $new_value[
"DESCRIPTION"];
995 $p[
"MODULE_ID"] =
"iblock";
996 $arFieldProps[$pr_id][$pr_val_id] =
$p;
998 elseif($arProp[
'VALUE'] > 0)
1000 $arFieldProps[$pr_id][$pr_val_id] =
array(
"VALUE"=>$arProp[
'VALUE'],
"DESCRIPTION"=>$arProp[
"DESCRIPTION"]);
1006 $arFieldProps[$pr_id][$pr_val_id] =
array(
"VALUE"=>$arProp[
'VALUE'],
"DESCRIPTION"=>$arProp[
"DESCRIPTION"]);
1014 || array_key_exists($arProp[
"ID"], $bFieldProps)
1016 $arProp[
"CODE"] <>
''
1017 && array_key_exists($arProp[
"CODE"], $bFieldProps)
1022 $arFieldProps[$arProp[
"ID"]][$pr_val_id] =
array(
"VALUE"=>$arProp[
'VALUE'],
"DESCRIPTION"=>$arProp[
"DESCRIPTION"]);
1025 if($ar_wf_element[
"IN_SECTIONS"] ==
"Y")
1027 $ar_wf_element[
"IBLOCK_SECTION"] =
array();
1029 while($arSection = $rsSections->Fetch())
1030 $ar_wf_element[
"IBLOCK_SECTION"][] = $arSection[
"ID"];
1033 unset($ar_wf_element[
"DATE_ACTIVE_FROM"],
1034 $ar_wf_element[
"DATE_ACTIVE_TO"],
1035 $ar_wf_element[
"EXTERNAL_ID"],
1036 $ar_wf_element[
"TIMESTAMP_X"],
1037 $ar_wf_element[
"IBLOCK_SECTION_ID"],
1038 $ar_wf_element[
"ID"]
1046 $bBizProc = is_array(
$arIBlock) && (
$arIBlock[
"BIZPROC"] ==
"Y") && $this->bizprocInstalled;
1047 if(array_key_exists(
"BP_PUBLISHED",
$arFields))
1084 if (isset(
$arFields[
"PREVIEW_TEXT_TYPE"]) &&
$arFields[
"PREVIEW_TEXT_TYPE"] !=
"html")
1086 $arFields[
"PREVIEW_TEXT_TYPE"] =
"text";
1095 if($bResizePictures)
1097 $arDef =
$arIBlock[
"FIELDS"][
"PREVIEW_PICTURE"][
"DEFAULT_VALUE"];
1100 $arDef[
"DELETE_WITH_DETAIL"] ===
"Y"
1102 && is_array(
$arFields[
"DETAIL_PICTURE"])
1103 &&
$arFields[
"DETAIL_PICTURE"][
"del"] ===
"Y"
1106 $arFields[
"PREVIEW_PICTURE"][
"del"] =
"Y";
1110 $arDef[
"FROM_DETAIL"] ===
"Y"
1113 || (is_array(
$arFields[
"PREVIEW_PICTURE"]) &&
$arFields[
"PREVIEW_PICTURE"][
"size"] <= 0)
1114 || $arDef[
"UPDATE_WITH_DETAIL"] ===
"Y"
1117 && is_array(
$arFields[
"DETAIL_PICTURE"])
1118 &&
$arFields[
"DETAIL_PICTURE"][
"size"] > 0
1122 $arFields[
"PREVIEW_PICTURE"][
"del"] !==
"Y"
1123 && $arDef[
"UPDATE_WITH_DETAIL"] !==
"Y"
1126 $rsElement =
CIBlockElement::GetList(Array(
"ID" =>
"DESC"), Array(
"ID" => $ar_wf_element[
"ID"],
"IBLOCK_ID" => $ar_wf_element[
"IBLOCK_ID"],
"SHOW_HISTORY"=>
"Y"),
false,
false, Array(
"ID",
"PREVIEW_PICTURE"));
1127 $arOldElement = $rsElement->Fetch();
1131 $arOldElement =
false;
1134 if(!$arOldElement || !$arOldElement[
"PREVIEW_PICTURE"])
1136 $arNewPreview =
$arFields[
"DETAIL_PICTURE"];
1137 $arNewPreview[
"COPY_FILE"] =
"Y";
1140 && is_array(
$arFields[
"PREVIEW_PICTURE"])
1141 && isset(
$arFields[
"PREVIEW_PICTURE"][
"description"])
1144 $arNewPreview[
"description"] =
$arFields[
"PREVIEW_PICTURE"][
"description"];
1147 $arFields[
"PREVIEW_PICTURE"] = $arNewPreview;
1153 && is_array(
$arFields[
"PREVIEW_PICTURE"])
1154 &&
$arFields[
"PREVIEW_PICTURE"][
"size"] > 0
1155 && $arDef[
"SCALE"] ===
"Y"
1158 $arNewPicture = CIBlock::ResizePicture(
$arFields[
"PREVIEW_PICTURE"], $arDef);
1159 if(is_array($arNewPicture))
1161 $arNewPicture[
"description"] =
$arFields[
"PREVIEW_PICTURE"][
"description"];
1162 $arFields[
"PREVIEW_PICTURE"] = $arNewPicture;
1164 elseif($arDef[
"IGNORE_ERRORS"] !==
"Y")
1173 && is_array(
$arFields[
"PREVIEW_PICTURE"])
1174 && $arDef[
"USE_WATERMARK_FILE"] ===
"Y"
1177 $arFields[
"PREVIEW_PICTURE"][
"copy"] ??=
null;
1179 $arFields[
"PREVIEW_PICTURE"][
"tmp_name"] <>
''
1182 || (
$arFields[
"PREVIEW_PICTURE"][
"COPY_FILE"] ==
"Y" && !
$arFields[
"PREVIEW_PICTURE"][
"copy"])
1186 $tmp_name = CTempFile::GetFileName(basename(
$arFields[
"PREVIEW_PICTURE"][
"tmp_name"]));
1188 copy(
$arFields[
"PREVIEW_PICTURE"][
"tmp_name"], $tmp_name);
1189 $arFields[
"PREVIEW_PICTURE"][
"copy"] =
true;
1190 $arFields[
"PREVIEW_PICTURE"][
"tmp_name"] = $tmp_name;
1193 CIBlock::FilterPicture(
$arFields[
"PREVIEW_PICTURE"][
"tmp_name"],
array(
1194 "name" =>
"watermark",
1195 "position" => $arDef[
"WATERMARK_FILE_POSITION"],
1198 "alpha_level" => 100 - min(max($arDef[
"WATERMARK_FILE_ALPHA"], 0), 100),
1199 "file" =>
$_SERVER[
"DOCUMENT_ROOT"].
Rel2Abs(
"/", $arDef[
"WATERMARK_FILE"]),
1205 && is_array(
$arFields[
"PREVIEW_PICTURE"])
1206 && $arDef[
"USE_WATERMARK_TEXT"] ===
"Y"
1209 $arFields[
"PREVIEW_PICTURE"][
"copy"] ??=
null;
1211 $arFields[
"PREVIEW_PICTURE"][
"tmp_name"] <>
''
1214 || (
$arFields[
"PREVIEW_PICTURE"][
"COPY_FILE"] ==
"Y" && !
$arFields[
"PREVIEW_PICTURE"][
"copy"])
1218 $tmp_name = CTempFile::GetFileName(basename(
$arFields[
"PREVIEW_PICTURE"][
"tmp_name"]));
1220 copy(
$arFields[
"PREVIEW_PICTURE"][
"tmp_name"], $tmp_name);
1221 $arFields[
"PREVIEW_PICTURE"][
"copy"] =
true;
1222 $arFields[
"PREVIEW_PICTURE"][
"tmp_name"] = $tmp_name;
1225 CIBlock::FilterPicture(
$arFields[
"PREVIEW_PICTURE"][
"tmp_name"],
array(
1226 "name" =>
"watermark",
1227 "position" => $arDef[
"WATERMARK_TEXT_POSITION"],
1229 "coefficient" => $arDef[
"WATERMARK_TEXT_SIZE"],
1230 "text" => $arDef[
"WATERMARK_TEXT"],
1231 "font" =>
$_SERVER[
"DOCUMENT_ROOT"].
Rel2Abs(
"/", $arDef[
"WATERMARK_TEXT_FONT"]),
1232 "color" => $arDef[
"WATERMARK_TEXT_COLOR"],
1236 $arDef =
$arIBlock[
"FIELDS"][
"DETAIL_PICTURE"][
"DEFAULT_VALUE"];
1240 && is_array(
$arFields[
"DETAIL_PICTURE"])
1241 && $arDef[
"SCALE"] ===
"Y"
1244 $arNewPicture = CIBlock::ResizePicture(
$arFields[
"DETAIL_PICTURE"], $arDef);
1245 if(is_array($arNewPicture))
1247 $arNewPicture[
"description"] =
$arFields[
"DETAIL_PICTURE"][
"description"];
1248 $arFields[
"DETAIL_PICTURE"] = $arNewPicture;
1250 elseif($arDef[
"IGNORE_ERRORS"] !==
"Y")
1259 && is_array(
$arFields[
"DETAIL_PICTURE"])
1260 && $arDef[
"USE_WATERMARK_FILE"] ===
"Y"
1263 $arFields[
"DETAIL_PICTURE"][
"copy"] ??=
null;
1265 $arFields[
"DETAIL_PICTURE"][
"tmp_name"] <>
''
1268 || (
$arFields[
"DETAIL_PICTURE"][
"COPY_FILE"] ==
"Y" && !
$arFields[
"DETAIL_PICTURE"][
"copy"])
1272 $tmp_name = CTempFile::GetFileName(basename(
$arFields[
"DETAIL_PICTURE"][
"tmp_name"]));
1274 copy(
$arFields[
"DETAIL_PICTURE"][
"tmp_name"], $tmp_name);
1275 $arFields[
"DETAIL_PICTURE"][
"copy"] =
true;
1276 $arFields[
"DETAIL_PICTURE"][
"tmp_name"] = $tmp_name;
1279 CIBlock::FilterPicture(
$arFields[
"DETAIL_PICTURE"][
"tmp_name"],
array(
1280 "name" =>
"watermark",
1281 "position" => $arDef[
"WATERMARK_FILE_POSITION"],
1284 "alpha_level" => 100 - min(max($arDef[
"WATERMARK_FILE_ALPHA"], 0), 100),
1285 "file" =>
$_SERVER[
"DOCUMENT_ROOT"].
Rel2Abs(
"/", $arDef[
"WATERMARK_FILE"]),
1291 && is_array(
$arFields[
"DETAIL_PICTURE"])
1292 && $arDef[
"USE_WATERMARK_TEXT"] ===
"Y"
1295 $arFields[
"DETAIL_PICTURE"][
"copy"] ??=
null;
1297 $arFields[
"DETAIL_PICTURE"][
"tmp_name"] <>
''
1300 || (
$arFields[
"DETAIL_PICTURE"][
"COPY_FILE"] ==
"Y" && !
$arFields[
"DETAIL_PICTURE"][
"copy"])
1304 $tmp_name = CTempFile::GetFileName(basename(
$arFields[
"DETAIL_PICTURE"][
"tmp_name"]));
1306 copy(
$arFields[
"DETAIL_PICTURE"][
"tmp_name"], $tmp_name);
1307 $arFields[
"DETAIL_PICTURE"][
"copy"] =
true;
1308 $arFields[
"DETAIL_PICTURE"][
"tmp_name"] = $tmp_name;
1311 CIBlock::FilterPicture(
$arFields[
"DETAIL_PICTURE"][
"tmp_name"],
array(
1312 "name" =>
"watermark",
1313 "position" => $arDef[
"WATERMARK_TEXT_POSITION"],
1315 "coefficient" => $arDef[
"WATERMARK_TEXT_SIZE"],
1316 "text" => $arDef[
"WATERMARK_TEXT"],
1317 "font" =>
$_SERVER[
"DOCUMENT_ROOT"].
Rel2Abs(
"/", $arDef[
"WATERMARK_TEXT_FONT"]),
1318 "color" => $arDef[
"WATERMARK_TEXT_COLOR"],
1323 $ipropTemplates = new \Bitrix\Iblock\InheritedProperty\ElementTemplates($ar_element[
"IBLOCK_ID"], $ar_element[
"ID"]);
1327 (
$arFields[
"PREVIEW_PICTURE"][
"name"] ??
'') ===
''
1328 && (
$arFields[
"PREVIEW_PICTURE"][
"del"] ??
'') ===
''
1336 $arFields[
"PREVIEW_PICTURE"][
"MODULE_ID"] =
"iblock";
1337 $arFields[
"PREVIEW_PICTURE"][
"old_file"] = $ar_wf_element[
"PREVIEW_PICTURE"];
1340 ,
"ELEMENT_PREVIEW_PICTURE_FILE_NAME"
1350 (
$arFields[
"DETAIL_PICTURE"][
"name"] ??
'') ===
''
1351 && (
$arFields[
"DETAIL_PICTURE"][
"del"] ??
'') ===
''
1359 $arFields[
"DETAIL_PICTURE"][
"MODULE_ID"] =
"iblock";
1360 $arFields[
"DETAIL_PICTURE"][
"old_file"] = $ar_wf_element[
"DETAIL_PICTURE"];
1363 ,
"ELEMENT_DETAIL_PICTURE_FILE_NAME"
1382 $existFields =
array(
1384 'PREVIEW_TEXT' => array_key_exists(
'PREVIEW_TEXT',
$arFields),
1385 'DETAIL_TEXT' => array_key_exists(
'DETAIL_TEXT',
$arFields)
1387 $searchableFields = [
1388 'NAME' => $existFields[
'NAME'] ?
$arFields[
"NAME"] : $ar_wf_element[
"NAME"],
1389 'PREVIEW_TEXT' => $existFields[
'PREVIEW_TEXT'] ?
$arFields[
"PREVIEW_TEXT"]: $ar_wf_element[
"PREVIEW_TEXT"],
1390 'PREVIEW_TEXT_TYPE' =>
$arFields[
"PREVIEW_TEXT_TYPE"] ?? $ar_wf_element[
"PREVIEW_TEXT_TYPE"],
1391 'DETAIL_TEXT' => $existFields[
'DETAIL_TEXT'] ?
$arFields[
"DETAIL_TEXT"]: $ar_wf_element[
"DETAIL_TEXT"],
1392 'DETAIL_TEXT_TYPE' =>
$arFields[
"DETAIL_TEXT_TYPE"] ?? $ar_wf_element[
"DETAIL_TEXT_TYPE"],
1395 if ($this->searchIncluded)
1397 $arFields[
"SEARCHABLE_CONTENT"] = mb_strtoupper($searchableFields[
'NAME'].
"\r\n".
1398 ($searchableFields[
'PREVIEW_TEXT_TYPE'] ==
"html" ?
HTMLToTxt($searchableFields[
'PREVIEW_TEXT']) : $searchableFields[
'PREVIEW_TEXT']).
"\r\n".
1399 ($searchableFields[
'DETAIL_TEXT_TYPE'] ==
"html" ?
HTMLToTxt($searchableFields[
'DETAIL_TEXT']) : $searchableFields[
'DETAIL_TEXT']));
1402 if(array_key_exists(
"IBLOCK_SECTION_ID",
$arFields))
1404 if (!array_key_exists(
"IBLOCK_SECTION",
$arFields))
1415 $arFields[
"IBLOCK_ID"] = $ar_element[
"IBLOCK_ID"];
1421 $arFields[
"RESULT_MESSAGE"] = &$this->LAST_ERROR;
1427 if(array_key_exists(
"PREVIEW_PICTURE",
$arFields))
1429 $SAVED_PREVIEW_PICTURE =
$arFields[
"PREVIEW_PICTURE"];
1433 $SAVED_PREVIEW_PICTURE =
false;
1436 if(array_key_exists(
"DETAIL_PICTURE",
$arFields))
1438 $SAVED_DETAIL_PICTURE =
$arFields[
"DETAIL_PICTURE"];
1442 $SAVED_DETAIL_PICTURE =
false;
1450 if(array_key_exists(
"PREVIEW_PICTURE",
$arFields))
1452 if(is_array(
$arFields[
"PREVIEW_PICTURE"]))
1455 $arFields[
"PREVIEW_PICTURE"][
"name"] ==
''
1456 && (
$arFields[
"PREVIEW_PICTURE"][
"del"] ??
null) ==
''
1459 if(array_key_exists(
"description",
$arFields[
"PREVIEW_PICTURE"]))
1461 $arFile = CFile::GetFileArray($ar_wf_element[
"PREVIEW_PICTURE"]);
1462 if(
$arFields[
"PREVIEW_PICTURE"][
"description"] != $arFile[
"DESCRIPTION"])
1464 $arNewFile = CFile::MakeFileArray($ar_wf_element[
"PREVIEW_PICTURE"]);
1465 $arNewFile[
"description"] =
$arFields[
"PREVIEW_PICTURE"][
"description"];
1466 $arNewFile[
"MODULE_ID"] =
"iblock";
1467 $arFields[
"PREVIEW_PICTURE"] = $arNewFile;
1471 $arFields[
"PREVIEW_PICTURE"] = $ar_wf_element[
"PREVIEW_PICTURE"];
1477 $arFields[
"PREVIEW_PICTURE"] = $ar_wf_element[
"PREVIEW_PICTURE"];
1482 unset(
$arFields[
"PREVIEW_PICTURE"][
"old_file"]);
1488 $arFields[
"PREVIEW_PICTURE"] = $ar_wf_element[
"PREVIEW_PICTURE"];
1491 if(array_key_exists(
"DETAIL_PICTURE",
$arFields))
1493 if(is_array(
$arFields[
"DETAIL_PICTURE"]))
1496 $arFields[
"DETAIL_PICTURE"][
"name"] ==
''
1497 && (
$arFields[
"DETAIL_PICTURE"][
"del"] ??
null) ==
''
1500 if(array_key_exists(
"description",
$arFields[
"DETAIL_PICTURE"]))
1502 $arFile = CFile::GetFileArray($ar_wf_element[
"DETAIL_PICTURE"]);
1503 if(
$arFields[
"DETAIL_PICTURE"][
"description"] != $arFile[
"DESCRIPTION"])
1505 $arNewFile = CFile::MakeFileArray($ar_wf_element[
"DETAIL_PICTURE"]);
1506 $arNewFile[
"description"] =
$arFields[
"DETAIL_PICTURE"][
"description"];
1507 $arNewFile[
"MODULE_ID"] =
"iblock";
1508 $arFields[
"DETAIL_PICTURE"] = $arNewFile;
1512 $arFields[
"DETAIL_PICTURE"] = $ar_wf_element[
"DETAIL_PICTURE"];
1518 $arFields[
"DETAIL_PICTURE"] = $ar_wf_element[
"DETAIL_PICTURE"];
1523 unset(
$arFields[
"DETAIL_PICTURE"][
"old_file"]);
1529 $arFields[
"DETAIL_PICTURE"] = $ar_wf_element[
"DETAIL_PICTURE"];
1537 $DB->Query(
"UPDATE b_iblock_element SET TIMESTAMP_X=TIMESTAMP_X, WF_NEW=null WHERE ID=".
$ID);
1538 $DB->Query(
"UPDATE b_iblock_element SET TIMESTAMP_X=TIMESTAMP_X, WF_NEW=null WHERE WF_PARENT_ELEMENT_ID=".
$ID);
1539 $ar_wf_element[
"WF_NEW"] =
false;
1542 if($this->bWF_SetMove)
1545 if($ar_element[
"WF_STATUS_ID"] != 1
1546 && $ar_wf_element[
"WF_STATUS_ID"] !=
$arFields[
"WF_STATUS_ID"]
1550 $DB->Query(
"UPDATE b_iblock_element SET TIMESTAMP_X=TIMESTAMP_X, WF_STATUS_ID=".(
int)
$arFields[
"WF_STATUS_ID"].
" WHERE ID=".
$ID);
1557 || (!
is_set(
$arFields,
"WF_STATUS_ID") && $ar_wf_element[
"WF_STATUS_ID"]!=1)
1564 $arFields[
'WF_PARENT_ELEMENT_ID'] =
false;
1566 $rs =
$DB->Query(
"SELECT PREVIEW_PICTURE, DETAIL_PICTURE from b_iblock_element WHERE ID = ".(
int)$NID);
1567 $ar_new_element =
$rs->Fetch();
1571 $ar_new_element =
false;
1576 if((
int)$ar_new_element[
"PREVIEW_PICTURE"] <= 0)
1579 $arFields[
"PREVIEW_PICTURE"] = $ar_new_element[
"PREVIEW_PICTURE"];
1581 if((
int)$ar_new_element[
"DETAIL_PICTURE"] <= 0)
1584 $arFields[
"DETAIL_PICTURE"] = $ar_new_element[
"DETAIL_PICTURE"];
1589 $db_prop = CIBlockProperty::GetList(
array(),
array(
1591 "CHECK_PERMISSIONS" =>
"N",
1592 "PROPERTY_TYPE" =>
"F",
1594 while($arProp = $db_prop->Fetch())
1597 unset(
$arFields[
"PROPERTY_VALUES"][$arProp[
"CODE"]]);
1598 unset(
$arFields[
"PROPERTY_VALUES"][$arProp[
"ID"]]);
1606 while($arProp =
$props->Fetch())
1608 $arFields[
"PROPERTY_VALUES"][$arProp[
"ID"]][$arProp[
'PROPERTY_VALUE_ID']] =
array(
1612 "DESCRIPTION" =>
false,
1618 while($arProp =
$props->Fetch())
1620 if(!array_key_exists($arProp[
"VALUE"], $arDup))
1622 $arFields[
"PROPERTY_VALUES"][$arProp[
"ID"]][$arProp[
'PROPERTY_VALUE_ID']] =
array(
1623 "VALUE" => $arProp[
"VALUE"],
1624 "DESCRIPTION" => $arProp[
"DESCRIPTION"],
1626 $arDup[$arProp[
"VALUE"]] =
true;
1634 if(array_key_exists(
"PREVIEW_PICTURE",
$arFields))
1635 CFile::SaveForDB(
$arFields,
"PREVIEW_PICTURE",
"iblock");
1636 if(array_key_exists(
"DETAIL_PICTURE",
$arFields))
1637 CFile::SaveForDB(
$arFields,
"DETAIL_PICTURE",
"iblock");
1641 $newFields[
"ID"] =
$ID;
1642 $IBLOCK_SECTION_ID =
$arFields[
"IBLOCK_SECTION_ID"] ??
null;
1645 $bTimeStampNA =
false;
1648 $bTimeStampNA =
true;
1650 unset($newFields[
"TIMESTAMP_X"]);
1653 foreach (
GetModuleEvents(
"iblock",
"OnIBlockElementUpdate",
true) as $arEvent)
1657 $strUpdate =
$DB->PrepareUpdate(
"b_iblock_element",
$arFields,
"iblock");
1659 if(!empty($strUpdate))
1662 $strSql =
"UPDATE b_iblock_element SET ".$strUpdate.($bTimeStampNA?
"TIMESTAMP_X=TIMESTAMP_X":
"TIMESTAMP_X=now()").
" WHERE ID=".
$ID;
1663 $DB->Query($strSql);
1665 $existFields[
'PROPERTY_VALUES'] = (
1667 && is_array(
$arFields[
'PROPERTY_VALUES'])
1670 if ($existFields[
'PROPERTY_VALUES'])
1675 if (!$this->searchIncluded)
1678 !array_key_exists(
'SEARCHABLE_CONTENT',
$arFields)
1680 $existFields[
'NAME']
1681 || $existFields[
'PREVIEW_TEXT']
1682 || $existFields[
'DETAIL_TEXT']
1683 || $existFields[
'PROPERTY_VALUES']
1688 if (!$existFields[
'NAME'])
1690 $elementFields[
'NAME'] = $searchableFields[
'NAME'];
1692 if (!$existFields[
'PREVIEW_TEXT'])
1694 $elementFields[
'PREVIEW_TEXT'] = $searchableFields[
'PREVIEW_TEXT'];
1695 if (!isset($elementFields[
'PREVIEW_TEXT_TYPE']))
1697 $elementFields[
'PREVIEW_TEXT_TYPE'] = $searchableFields[
'PREVIEW_TEXT_TYPE'];
1700 if (!$existFields[
'DETAIL_TEXT'])
1702 $elementFields[
'DETAIL_TEXT'] = $searchableFields[
'DETAIL_TEXT'];
1703 if (!isset($elementFields[
'DETAIL_TEXT_TYPE']))
1705 $elementFields[
'DETAIL_TEXT_TYPE'] = $searchableFields[
'DETAIL_TEXT_TYPE'];
1709 unset($elementFields);
1713 $searchIndexParams = [
1714 "SEARCH_CONTENT" =>
$arFields[
'SEARCHABLE_CONTENT'],
1720 $updateFields =
array(
1721 'SEARCHABLE_CONTENT' =>
$arFields[
'SEARCHABLE_CONTENT']
1723 $updateQuery =
$DB->PrepareUpdate(
"b_iblock_element", $updateFields,
"iblock");
1724 if ($updateQuery !=
"")
1726 $updateQuery .=
', TIMESTAMP_X = TIMESTAMP_X';
1727 $DB->Query(
"UPDATE b_iblock_element SET ".$updateQuery.
" WHERE ID = ".
$ID);
1729 unset($updateFields);
1740 $obElementRights->SetRights(
$arFields[
"RIGHTS"]);
1743 if (array_key_exists(
"IPROPERTY_TEMPLATES",
$arFields))
1745 $ipropTemplates = new \Bitrix\Iblock\InheritedProperty\ElementTemplates(
$arIBlock[
"ID"],
$ID);
1746 $ipropTemplates->set(
$arFields[
"IPROPERTY_TEMPLATES"]);
1751 if ($this->searchIncluded)
1765 if($SAVED_PREVIEW_PICTURE !==
false)
1768 $arFields[
"PREVIEW_PICTURE"] = $SAVED_PREVIEW_PICTURE;
1775 if($SAVED_DETAIL_PICTURE !==
false)
1778 $arFields[
"DETAIL_PICTURE"] = $SAVED_DETAIL_PICTURE;
1785 if(
$arIBlock[
"FIELDS"][
"LOG_ELEMENT_EDIT"][
"IS_REQUIRED"] ==
"Y")
1792 array(
"=ID" =>
$ID,
"CHECK_PERMISSIONS" =>
"N",
"SHOW_NEW" =>
"Y"),
1794 array(
"ID",
"NAME",
"LIST_PAGE_URL",
"CODE")
1796 $arElement = $rsElement->GetNext();
1799 "CODE" => $arElement[
"CODE"],
1800 "NAME" => $arElement[
"NAME"],
1801 "ELEMENT_NAME" =>
$arIBlock[
"ELEMENT_NAME"],
1802 "USER_ID" => $this->userId,
1803 "IBLOCK_PAGE_URL" => $arElement[
"LIST_PAGE_URL"],
1807 "IBLOCK_ELEMENT_EDIT",
1825 $arFields[
"IBLOCK_ID"] = $ar_element[
"IBLOCK_ID"];
1830 && is_array(
$arFields[
"PREVIEW_PICTURE"])
1831 && (
$arFields[
"PREVIEW_PICTURE"][
"COPY_FILE"] ??
'') ===
"Y"
1832 && (
$arFields[
"PREVIEW_PICTURE"][
"copy"] ??
null)
1835 @unlink(
$arFields[
"PREVIEW_PICTURE"][
"tmp_name"]);
1836 @rmdir(dirname(
$arFields[
"PREVIEW_PICTURE"][
"tmp_name"]));
1841 && is_array(
$arFields[
"DETAIL_PICTURE"])
1842 && (
$arFields[
"DETAIL_PICTURE"][
"COPY_FILE"] ??
'') ===
"Y"
1843 && (
$arFields[
"DETAIL_PICTURE"][
"copy"] ??
null)
1846 @unlink(
$arFields[
"DETAIL_PICTURE"][
"tmp_name"]);
1847 @rmdir(dirname(
$arFields[
"DETAIL_PICTURE"][
"tmp_name"]));
1850 foreach (
GetModuleEvents(
"iblock",
"OnAfterIBlockElementUpdate",
true) as $arEvent)
1853 CIBlock::clearIblockTagCache(
$arIBlock[
'ID']);
1862 $ELEMENT_ID = (int)$ELEMENT_ID;
1865 if (!is_array($PROPERTY_VALUES))
1866 $PROPERTY_VALUES =
array($PROPERTY_VALUES);
1871 "CHECK_PERMISSIONS" =>
"N",
1874 if ($PROPERTY_CODE ===
false)
1877 $uniq_flt .=
"|ACTIVE:".$arFilter[
"ACTIVE"];
1879 elseif((
int)$PROPERTY_CODE > 0)
1882 $uniq_flt .=
"|ID:".$arFilter[
"ID"];
1887 $uniq_flt .=
"|CODE:".$arFilter[
"CODE"];
1898 while($prop = $db_prop->Fetch())
1907 $bRecalcSections =
false;
1914 $arDBProps =
array();
1922 where IBLOCK_ELEMENT_ID = ".$ELEMENT_ID.
"
1925 while (
$ar =
$rs->fetch())
1927 $propertyId = (int)
$ar[
"IBLOCK_PROPERTY_ID"];
1928 if (!isset($arDBProps[$propertyId]))
1930 $arDBProps[$propertyId] = [];
1933 $arDBProps[$propertyId][
$ar[
"ID"]] =
$ar;
1941 where IBLOCK_ELEMENT_ID = ".$ELEMENT_ID.
"
1946 foreach ($ar_prop as $property)
1948 $propertyId = (int)$property[
"ID"];
1949 $valueKey =
'PROPERTY_' . $propertyId;
1950 $valueIdKey = $ELEMENT_ID .
':' . $propertyId;
1952 $property[
"MULTIPLE"] ===
"N"
1953 && isset(
$ar[$valueKey])
1954 &&
$ar[$valueKey] !==
''
1957 if (!isset($arDBProps[$propertyId]))
1959 $arDBProps[$propertyId] = [];
1962 $arDBProps[$propertyId][$valueIdKey] = [
1963 'ID' => $valueIdKey,
1964 'IBLOCK_PROPERTY_ID' => $propertyId,
1965 'VALUE' =>
$ar[$valueKey],
1966 'DESCRIPTION' =>
$ar[
'DESCRIPTION_' . $propertyId] ??
'',
1975 insert into b_iblock_element_prop_s".
$IBLOCK_ID.
"
1976 (IBLOCK_ELEMENT_ID) values (".$ELEMENT_ID.
")
1986 from b_iblock_element_property
1987 where IBLOCK_ELEMENT_ID = ".$ELEMENT_ID.
"
1990 while (
$ar =
$rs->fetch())
1992 $propertyId = (int)
$ar[
"IBLOCK_PROPERTY_ID"];
1993 if (!isset($arDBProps[$propertyId]))
1995 $arDBProps[$propertyId] = [];
1998 $arDBProps[$propertyId][
$ar[
"ID"]] =
$ar;
2004 foreach (
GetModuleEvents(
"iblock",
"OnIBlockElementSetPropertyValues",
true) as $arEvent)
2006 if (isset($arEvent))
2009 $arFilesToDelete =
array();
2010 $arV2ClearCache =
array();
2011 foreach ($ar_prop as $prop)
2013 $propertyId = (int)$prop[
'ID'];
2014 $isMultiple = $prop[
'MULTIPLE'] ===
'Y';
2015 $isSingle = !$isMultiple;
2017 $separateSingle = $separateStorage && !$isMultiple;
2018 $separateMultiple = $separateStorage && $isMultiple;
2019 $clearSeparateCache =
false;
2022 $PROP = $PROPERTY_VALUES;
2026 if ($prop[
"CODE"] <>
'' && array_key_exists($prop[
"CODE"], $PROPERTY_VALUES))
2027 $PROP = $PROPERTY_VALUES[$prop[
"CODE"]];
2029 $PROP = $PROPERTY_VALUES[$prop[
"ID"]] ?? [];
2037 array_key_exists(
"tmp_name", $PROP)
2038 || array_key_exists(
"del", $PROP)
2043 && array_key_exists(
"VALUE", $PROP)
2044 && array_key_exists(
"DESCRIPTION", $PROP)
2048 $PROP =
array($PROP);
2051 if ($prop[
"USER_TYPE"] !=
"")
2053 $arUserType = CIBlockProperty::GetUserType($prop[
"USER_TYPE"]);
2054 if (isset($arUserType[
'ConvertToDB']))
2056 foreach ($PROP as
$key => $value)
2060 || !array_key_exists(
"VALUE", $value)
2063 $value =
array(
"VALUE"=>$value);
2065 $prop[
"ELEMENT_ID"] = $ELEMENT_ID;
2066 $PROP[
$key] = call_user_func_array($arUserType[
"ConvertToDB"],
array($prop, $value));
2071 if ($separateStorage)
2075 ?
'b_iblock_element_prop_m' . $prop[
'IBLOCK_ID']
2076 :
'b_iblock_element_prop_s' . $prop[
'IBLOCK_ID']
2081 $strTable =
'b_iblock_element_property';
2086 if (isset($arDBProps[$propertyId]) || $separateSingle)
2090 $clearSeparateCache =
true;
2093 foreach ($PROP as $value)
2095 if (is_array($value))
2096 $value = (int)$value[
"VALUE"];
2098 $value = (int)$value;
2113 $flatIds = implode(
',', $ids);
2114 if ($separateSingle)
2116 $connection->queryExecute($helper->prepareCorrelatedUpdate(
2117 'b_iblock_element_prop_s' . $prop[
'IBLOCK_ID'],
2120 'PROPERTY_' . $prop[
'ID'] =>
'PEN.ID',
2122 'b_iblock_property_enum as PEN',
2124 E.IBLOCK_ELEMENT_ID = " . $ELEMENT_ID.
"
2125 AND PEN.PROPERTY_ID = " . $propertyId .
"
2126 AND PEN.ID IN (" . $flatIds .
")
2133 INSERT INTO " . $strTable .
"
2134 (IBLOCK_ELEMENT_ID, IBLOCK_PROPERTY_ID, VALUE, VALUE_ENUM)
2135 SELECT " . $ELEMENT_ID .
" as IBLOCK_ELEMENT_ID, " . $propertyId .
" as IBLOCK_PROPERTY_ID, PEN.ID as VALUE, PEN.ID as VALUE_ENUM
2137 b_iblock_property_enum PEN
2139 PEN.PROPERTY_ID = " . $propertyId .
"
2140 AND PEN.ID IN (" . $flatIds .
")
2149 $bRecalcSections =
true;
2150 if (isset($arDBProps[$propertyId]) || $separateSingle)
2154 $clearSeparateCache =
true;
2157 DELETE FROM b_iblock_section_element
2158 WHERE ADDITIONAL_PROPERTY_ID = ".$prop[
"ID"].
"
2159 AND IBLOCK_ELEMENT_ID = ".$ELEMENT_ID.
"
2163 foreach ($PROP as $value)
2165 if (is_array($value))
2166 $value = (int)$value[
"VALUE"];
2168 $value = (int)$value;
2183 $linkIblockId = (int)$prop[
'LINK_IBLOCK_ID'];
2184 $flatIds = implode(
',', $ids);
2185 if ($separateSingle)
2188 'PROPERTY_' . $prop[
'ID'] =>
'S.ID',
2190 $fieldName =
'DESCRIPTION_' . $prop[
'ID'];
2191 if (isset($tableFields[$fieldName]))
2197 $connection->queryExecute($helper->prepareCorrelatedUpdate(
2198 'b_iblock_element_prop_s' . $prop[
'IBLOCK_ID'],
2201 'b_iblock_section as S',
2203 E.IBLOCK_ELEMENT_ID = " . $ELEMENT_ID .
"
2204 AND S.ID IN (". $flatIds .
")"
2205 . ($linkIblockId > 0 ?
'AND S.IBLOCK_ID = ' . $linkIblockId :
'') .
"
2213 INSERT INTO " . $strTable .
"
2214 (IBLOCK_ELEMENT_ID, IBLOCK_PROPERTY_ID, VALUE, VALUE_NUM)
2215 SELECT " . $ELEMENT_ID .
", " . $propertyId .
", S.ID, S.ID
2219 S.ID IN (" . $flatIds .
")"
2220 . ($linkIblockId > 0 ?
'AND S.IBLOCK_ID = ' . $linkIblockId :
'') .
"
2225 INSERT INTO b_iblock_section_element
2226 (IBLOCK_ELEMENT_ID, IBLOCK_SECTION_ID, ADDITIONAL_PROPERTY_ID)
2227 SELECT " . $ELEMENT_ID .
", S.ID, " . $propertyId .
"
2231 S.ID IN (" . $flatIds .
")"
2232 . ($linkIblockId > 0 ?
'AND S.IBLOCK_ID = ' . $linkIblockId :
'') .
"
2244 if (isset($arDBProps[$prop[
"ID"]]))
2246 foreach($arDBProps[$prop[
"ID"]] as
$res)
2251 $val_desc =
$val[
"DESCRIPTION"] ??
'';
2259 if (isset($arWas[
$val]))
2262 $arWas[
$val] =
true;
2264 if ((
string)
$val ===
'')
2266 if ($separateSingle)
2269 UPDATE b_iblock_element_prop_s".$prop[
"IBLOCK_ID"].
"
2270 SET PROPERTY_".$prop[
"ID"].
" = null
2271 ".self::__GetDescriptionUpdateSql($prop[
"IBLOCK_ID"], $prop[
"ID"]).
"
2272 WHERE IBLOCK_ELEMENT_ID = ".$ELEMENT_ID.
"
2278 DELETE FROM ".$strTable.
"
2279 WHERE ID=".
$res[
"ID"].
"
2283 $clearSeparateCache =
true;
2287 ||
$res[
"DESCRIPTION"].
'' !== $val_desc.
''
2290 if ($separateSingle)
2293 UPDATE b_iblock_element_prop_s".$prop[
"IBLOCK_ID"].
"
2294 SET PROPERTY_".$prop[
"ID"].
" = '".$helper->forSql(
$val).
"'
2295 ".self::__GetDescriptionUpdateSql($prop[
"IBLOCK_ID"], $prop[
"ID"], $val_desc).
"
2296 WHERE IBLOCK_ELEMENT_ID = ".$ELEMENT_ID.
"
2302 UPDATE ".$strTable.
"
2303 SET VALUE = '".$helper->forSql(
$val).
"'
2304 ,VALUE_NUM = ".CIBlock::roundDB(
$val).
"
2305 ".($val_desc!==
false ?
",DESCRIPTION = '".$helper->forSql($val_desc, 255).
"'" :
"").
"
2306 WHERE ID=".
$res[
"ID"].
"
2310 $clearSeparateCache =
true;
2313 unset($PROP[
$res[
"ID"]]);
2318 foreach ($PROP as
$val)
2322 $val_desc =
$val[
"DESCRIPTION"] ??
'';
2330 if (isset($arWas[
$val]))
2333 $arWas[
$val] =
true;
2335 if ((
string)
$val ===
'')
2340 if ($separateSingle)
2343 UPDATE b_iblock_element_prop_s".$prop[
"IBLOCK_ID"].
"
2345 PROPERTY_".$prop[
"ID"].
" = '".$helper->forSql(
$val).
"'
2346 ".self::__GetDescriptionUpdateSql($prop[
"IBLOCK_ID"], $prop[
"ID"], $val_desc).
"
2347 WHERE IBLOCK_ELEMENT_ID=".$ELEMENT_ID.
"
2354 . $ELEMENT_ID .
', '
2355 . $propertyId .
', '
2356 .
"'" . $helper->forSql((
string)
$val) .
"', "
2357 . CIBlock::roundDB(
$val) .
', '
2358 . ($val_desc !==
false ?
"'" . $helper->forSql((
string)$val_desc, 255) .
"'" :
'NULL')
2363 $clearSeparateCache =
true;
2370 if (!empty($insertValues))
2373 INSERT INTO " . $strTable .
"
2374 (IBLOCK_ELEMENT_ID, IBLOCK_PROPERTY_ID, VALUE, VALUE_NUM, DESCRIPTION)
2376 " . implode(
', ', $insertValues)
2390 ? array_reverse($PROP,
true)
2394 if (isset($arDBProps[$prop[
"ID"]]))
2397 foreach (array_reverse($arDBProps[$prop[
"ID"]],
true) as
$res)
2400 if(
$res[
"DESCRIPTION"] <>
'')
2409 if (!array_key_exists(
$res[
"ID"], $orderedPROP))
2412 "VALUE" =>
$res[
"VALUE"],
2421 && !array_key_exists(
"tmp_name",
$val)
2422 && !array_key_exists(
"del",
$val)
2428 (!isset(
$val[
"tmp_name"]) ||
$val[
"tmp_name"] ===
'')
2429 && (!isset(
$val[
"del"]) ||
$val[
"del"] ===
'')
2433 if (is_array(
$val) && array_key_exists(
"description",
$val))
2438 is_array($orderedPROP[
$res[
"ID"]])
2439 && array_key_exists(
"DESCRIPTION", $orderedPROP[
$res[
"ID"]])
2446 "VALUE" =>
$res[
"VALUE"],
2457 $orderedPROP = array_reverse($orderedPROP,
true);
2460 $preserveID =
array();
2462 if (isset($arDBProps[$prop[
"ID"]]))
2464 foreach ($arDBProps[$prop[
"ID"]] as
$res)
2466 $val = $orderedPROP[
$res[
"ID"]] ??
null;
2469 && !array_key_exists(
"tmp_name",
$val)
2470 && !array_key_exists(
"del",
$val)
2478 && (
string)(
$val[
'del'] ??
'') !==
''
2481 unset($orderedPROP[
$res[
"ID"]]);
2482 $arFilesToDelete[
$res[
"VALUE"]] =
array(
2483 "FILE_ID" =>
$res[
"VALUE"],
2484 "ELEMENT_ID" => $ELEMENT_ID,
2485 "IBLOCK_ID" => $prop[
"IBLOCK_ID"],
2491 is_array(
$val) && isset(
$val[
"tmp_name"]) &&
$val[
"tmp_name"] !=
''
2496 $arFilesToDelete[
$res[
"VALUE"]] =
array(
2497 "FILE_ID" =>
$res[
"VALUE"],
2498 "ELEMENT_ID" => $ELEMENT_ID,
2499 "IBLOCK_ID" => $prop[
"IBLOCK_ID"],
2503 if ($separateSingle)
2506 UPDATE b_iblock_element_prop_s".$prop[
"IBLOCK_ID"].
"
2507 SET PROPERTY_".$prop[
"ID"].
" = null
2508 ".self::__GetDescriptionUpdateSql($prop[
"IBLOCK_ID"], $prop[
"ID"]).
"
2509 WHERE IBLOCK_ELEMENT_ID = ".$ELEMENT_ID.
"
2514 $connection->queryExecute(
"DELETE FROM ".$strTable.
" WHERE ID = ".
$res[
"ID"]);
2515 $preserveID[
$res[
"ID"]] =
$res[
"ID"];
2518 $clearSeparateCache =
true;
2523 foreach ($orderedPROP as $propertyValueId =>
$val)
2527 && !array_key_exists(
"tmp_name",
$val)
2530 $val_desc =
$val[
"DESCRIPTION"] ??
'';
2540 $val[
"MODULE_ID"] =
"iblock";
2541 if ($val_desc !==
false)
2542 $val[
"description"] = $val_desc;
2544 $val = CFile::SaveFile(
$val,
"iblock");
2548 && $val_desc !==
false
2551 CFile::UpdateDesc(
$val, $val_desc);
2557 if ($separateSingle)
2560 UPDATE b_iblock_element_prop_s".$prop[
"IBLOCK_ID"].
"
2562 PROPERTY_".$prop[
"ID"].
" = '".$helper->forSql(
$val).
"'
2563 ".self::__GetDescriptionUpdateSql($prop[
"IBLOCK_ID"], $prop[
"ID"], $val_desc).
"
2564 WHERE IBLOCK_ELEMENT_ID=".$ELEMENT_ID.
"
2570 INSERT INTO " . $strTable .
"
2571 (ID, IBLOCK_ELEMENT_ID, IBLOCK_PROPERTY_ID, VALUE, VALUE_NUM" . ($val_desc !==
false ?
", DESCRIPTION" :
"") .
")
2573 " . array_shift($preserveID) .
"
2574 , " . $ELEMENT_ID .
"
2575 , " . $propertyId .
"
2576 ,'" . $helper->forSql((
string)
$val) .
"'
2577 ," . CIBlock::roundDB(
$val) .
"
2578 " . ($val_desc !==
false ?
", '" . $helper->forSql((
string)$val_desc, 255) .
"'" :
"") .
"
2585 INSERT INTO " . $strTable .
"
2586 (IBLOCK_ELEMENT_ID, IBLOCK_PROPERTY_ID, VALUE, VALUE_NUM" . ($val_desc !==
false ?
", DESCRIPTION" :
"") .
")
2589 , " . $propertyId .
"
2590 , '" . $helper->forSql((
string)
$val) .
"'
2591 , " . CIBlock::roundDB(
$val) .
"
2592 " . ($val_desc !==
false ?
", '" . $helper->forSql((
string)$val_desc, 255) .
"'" :
"") .
"
2597 $clearSeparateCache =
true;
2608 if (isset($arDBProps[$prop[
"ID"]]))
2610 foreach ($arDBProps[$prop[
"ID"]] as
$res)
2615 $val_desc =
$val[
"DESCRIPTION"] ??
'';
2623 if ((
string)
$val ===
'')
2625 if ($separateSingle)
2628 UPDATE b_iblock_element_prop_s".$prop[
"IBLOCK_ID"].
"
2630 PROPERTY_".$prop[
"ID"].
" = null
2631 ".self::__GetDescriptionUpdateSql($prop[
"IBLOCK_ID"], $prop[
"ID"]).
"
2632 WHERE IBLOCK_ELEMENT_ID=".$ELEMENT_ID.
"
2637 $connection->queryExecute(
"DELETE FROM ".$strTable.
" WHERE ID=".
$res[
"ID"]);
2640 $clearSeparateCache =
true;
2644 if ($separateSingle)
2646 if ($isNumberProperty)
2652 UPDATE b_iblock_element_prop_s".$prop[
"IBLOCK_ID"].
"
2653 SET PROPERTY_".$prop[
"ID"].
"='".$helper->forSql(
$val).
"'
2654 ".self::__GetDescriptionUpdateSql($prop[
"IBLOCK_ID"], $prop[
"ID"], $val_desc).
"
2655 WHERE IBLOCK_ELEMENT_ID=".$ELEMENT_ID.
"
2661 UPDATE ".$strTable.
"
2663 VALUE='".$helper->forSql(
$val).
"'
2664 ,VALUE_NUM=".CIBlock::roundDB(
$val).
"
2665 ".($val_desc!==
false ?
",DESCRIPTION='".$helper->forSql($val_desc, 255).
"'" :
"").
"
2666 WHERE ID=".
$res[
"ID"].
"
2670 $clearSeparateCache =
true;
2672 unset($PROP[
$res[
"ID"]]);
2677 foreach($PROP as
$val)
2679 if (is_array(
$val) && !array_key_exists(
'tmp_name',
$val))
2681 $val_desc =
$val[
"DESCRIPTION"] ??
'';
2689 if (!is_scalar(
$val) || (
string)
$val ===
'')
2694 if ($separateSingle)
2696 if ($isNumberProperty)
2702 UPDATE b_iblock_element_prop_s".$prop[
"IBLOCK_ID"].
"
2704 PROPERTY_".$prop[
"ID"].
" = '".$helper->forSql(
$val).
"'
2705 ".self::__GetDescriptionUpdateSql($prop[
"IBLOCK_ID"], $prop[
"ID"], $val_desc).
"
2706 WHERE IBLOCK_ELEMENT_ID=".$ELEMENT_ID.
"
2713 . $ELEMENT_ID .
', '
2714 . $propertyId .
', '
2715 .
"'" . $helper->forSql((
string)
$val) .
"', "
2716 . CIBlock::roundDB(
$val) .
', '
2717 . ($val_desc !==
false ?
"'" . $helper->forSql((
string)$val_desc, 255) .
"'" :
'NULL')
2722 $clearSeparateCache =
true;
2729 if (!empty($insertValues))
2732 INSERT INTO " . $strTable .
"
2733 (IBLOCK_ELEMENT_ID, IBLOCK_PROPERTY_ID, VALUE, VALUE_NUM, DESCRIPTION)
2735 " . implode(
', ', $insertValues)
2743 if ($clearSeparateCache && $separateMultiple)
2745 $arV2ClearCache[$propertyId] =
2746 'PROPERTY_' . $propertyId .
' = NULL'
2747 . self::__GetDescriptionUpdateSql($prop[
"IBLOCK_ID"], $propertyId)
2759 unset($tableFields);
2761 if ($arV2ClearCache)
2765 SET ".implode(
",", $arV2ClearCache).
"
2766 WHERE IBLOCK_ELEMENT_ID = ".$ELEMENT_ID.
"
2775 foreach ($arFilesToDelete as $deleteTask)
2778 $deleteTask[
"FILE_ID"],
2780 "PROPERTY", $deleteTask[
"ELEMENT_ID"],
2781 $deleteTask[
"IBLOCK_ID"]
2785 if($bRecalcSections)
2792 foreach (
GetModuleEvents(
"iblock",
"OnAfterIBlockElementSetPropertyValues",
true) as $arEvent)
2801 return ' ' . $helper->getRandomFunction() .
' ';
2806 return " coalesce(BE.SHOW_COUNTER/((UNIX_TIMESTAMP(now())-UNIX_TIMESTAMP(BE.SHOW_COUNTER_START)+0.1)/60/60),0) ";
2816 $strUpdate =
$DB->PrepareUpdate(
"b_iblock_element",
$arFields,
"iblock",
false,
"BE");
2817 if ($strUpdate ==
"")
2821 $element->strField =
"ID";
2825 UPDATE ".$element->sFrom.
" SET ".$strUpdate.
"
2826 WHERE 1=1 ".$element->sWhere.
"
2829 return $DB->Query($strSql);
2832 private static function getUserNameSql(
string $tableAlias): string
2837 return $helper->getConcatFunction(
2839 $tableAlias .
'.LOGIN',
2841 $helper->getIsNullFunction($tableAlias .
'.NAME',
"''"),
2843 $helper->getIsNullFunction($tableAlias .
'.LAST_NAME',
"''")
if($canUseYandexMarket) $strWarning
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
static update(int $iblockId, int $elementId, array $searchIndexParams)
const PROPERTY_STORAGE_SEPARATE
static updateElementIndex($iblockId, $elementId)
static makeFileName(\Bitrix\Iblock\InheritedProperty\BaseTemplate $ipropTemplates, string $templateName, array $fields, array $file)
static getConnection($name="")
static includeModule($moduleName)
static GetElementGroups($ID, $bElementOnly=false, $arSelect=array())
static WF_CleanUpHistoryCopies($ELEMENT_ID=false, $HISTORY_COPIES=false)
CheckFields(&$arFields, $ID=false, $bCheckDiskQuota=true)
WF_SetMove($NEW_ID, $OLD_ID=0)
static DeleteFile($FILE_ID, $ELEMENT_ID, $TYPE=false, $PARENT_ID=-1, $IBLOCK_ID=false, $bCheckOnly=false)
static RecalcSections($ID, $sectionId=null)
getSearchableContent(int $id, array $fields, array $iblock)
PrepareGetList(&$arIblockElementFields, &$arJoinProps, &$arSelectFields, &$sSelect, &$arAddSelectFields, &$arFilter, &$sWhere, &$sSectionWhere, &$arAddWhereFields, &$arGroupBy, &$sGroupBy, &$arOrder, &$arSqlOrder, &$arAddOrderByFields)
static SetElementSection($ID, $arSections, $bNew=false, $bRightsIBlock=0, $sectionId=null)
Add($arFields, $bWorkFlow=false, $bUpdateSearch=true, $bResizePictures=false)
static DeletePropertySQL($property, $iblock_element_id)
static GetProperty($IBLOCK_ID, $ELEMENT_ID, $by="sort", $order="asc", $arFilter=Array())
static UpdateSearch($ID, $bOverWrite=false)
static GetOptionString($module_id, $name, $def="", $site=false)
static recalculateDb(bool $mode=true)
static Log($SEVERITY, $AUDIT_TYPE_ID, $MODULE_ID, $ITEM_ID, $DESCRIPTION=false, $SITE_ID=false)
static GetShowedFunction()
Update($ID, $arFields, $bWorkFlow=false, $bUpdateSearch=true, $bResizePictures=false, $bCheckDiskQuota=true)
static GetList($arOrder=array("SORT"=>"ASC"), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
static SetPropertyValues($ELEMENT_ID, $IBLOCK_ID, $PROPERTY_VALUES, $PROPERTY_CODE=false)
UpdateList($arFields, $arFilter=array())
prepareSql($arSelectFields=array(), $arFilter=array(), $arGroupBy=false, $arOrder=array("SORT"=>"ASC"))
static makeQuery(array $parameters, array $options=[])
static makeFilter(array $filter, array $options=[])
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
if(Loader::includeModule( 'bitrix24')) elseif(Loader::includeModule('intranet') &&CIntranetUtils::getPortalZone() !=='ru') $description
global $BX_IBLOCK_PROP_CACHE
if(! $catalogEdit->isSuccess()) $iblock
$_SERVER["DOCUMENT_ROOT"]
ExecuteModuleEventEx($arEvent, $arParams=[])
HTMLToTxt($str, $strSiteUrl="", $aDelete=[], $maxlen=70)
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
Rel2Abs($curdir, $relpath)
GetMessage($name, $aReplace=null)
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."%"