6require_once(
$_SERVER[
'DOCUMENT_ROOT'].
'/bitrix/modules/catalog/general/discount.php');
17 $arInsert =
$DB->PrepareInsert(
"b_catalog_discount",
$arFields);
19 $strSql =
"INSERT INTO b_catalog_discount(".$arInsert[0].
") VALUES(".$arInsert[1].
")";
45 if ($arDiscount = $rsDiscounts->Fetch())
48 $arFields[
'VALUE'] = doubleval($arDiscount[
'VALUE']);
50 $arFields[
'VALUE_TYPE'] = $arDiscount[
'VALUE_TYPE'];
64 $strUpdate =
$DB->PrepareUpdate(
"b_catalog_discount",
$arFields);
65 if (!empty($strUpdate))
67 $strSql =
"UPDATE b_catalog_discount SET ".$strUpdate.
" WHERE ID = ".
$ID.
" AND TYPE = ".self::ENTITY_ID;
85 foreach (
GetModuleEvents(
"catalog",
"OnBeforeDiscountDelete",
true) as $arEvent)
91 $DB->Query(
"delete from b_catalog_discount2iblock where DISCOUNT_ID = ".
$ID);
92 $DB->Query(
"delete from b_catalog_discount2section where DISCOUNT_ID = ".
$ID);
93 $DB->Query(
"delete from b_catalog_discount2product where DISCOUNT_ID = ".
$ID);
99 $DB->Query(
"delete from b_catalog_discount where ID = ".
$ID.
" and TYPE = ".self::ENTITY_ID);
101 foreach (
GetModuleEvents(
"catalog",
"OnDiscountDelete",
true) as $arEvent)
122 "SELECT CD.ID, CD.SITE_ID, CD.ACTIVE, CD.NAME, CD.MAX_USES, ".
123 "CD.COUNT_USES, CD.COUPON, CD.SORT, CD.MAX_DISCOUNT, CD.VALUE_TYPE, ".
124 "CD.VALUE, CD.CURRENCY, CD.MIN_ORDER_SUM, CD.NOTES, CD.RENEWAL, ".
125 $DB->DateToCharFunction(
"CD.TIMESTAMP_X",
"FULL").
" as TIMESTAMP_X, ".
126 $DB->DateToCharFunction(
"CD.ACTIVE_FROM",
"FULL").
" as ACTIVE_FROM, ".
127 $DB->DateToCharFunction(
"CD.ACTIVE_TO",
"FULL").
" as ACTIVE_TO, ".
128 "CD.CREATED_BY, CD.MODIFIED_BY, ".$DB->DateToCharFunction(
'CD.DATE_CREATE',
'FULL').
' as DATE_CREATE, '.
129 "CD.PRIORITY, CD.LAST_DISCOUNT, CD.VERSION, CD.CONDITIONS, CD.UNPACK, CD.SALE_ID ".
130 "FROM b_catalog_discount CD WHERE CD.ID = ".$ID.
" AND CD.TYPE = ".self::ENTITY_ID;
156 $dbSection = CIBlockSection::GetByID(
$val);
157 if ($arSection = $dbSection->Fetch())
160 $dbSectionTree = CIBlockSection::GetList(
161 array(
"LEFT_MARGIN" =>
"DESC"),
163 "IBLOCK_ID" => $arSection[
"IBLOCK_ID"],
165 "GLOBAL_ACTIVE" =>
"Y",
166 "IBLOCK_ACTIVE" =>
"Y",
167 ">=LEFT_BORDER" => $arSection[
"LEFT_MARGIN"],
168 "<=RIGHT_BORDER" => $arSection[
"RIGHT_MARGIN"]
171 while ($arSectionTree = $dbSectionTree->Fetch())
173 $arIDs[] = intval($arSectionTree[
"ID"]);
176 return "(CDS.SECTION_ID ".(($negative ==
"Y") ?
"NOT " :
"").
"IN (".implode(
',',$arIDs).
"))";
195 "ID" =>
array(
"FIELD" =>
"CD.ID",
"TYPE" =>
"int"),
196 "XML_ID" =>
array(
"FIELD" =>
"CD.XML_ID",
"TYPE" =>
"string"),
197 "SITE_ID" =>
array(
"FIELD" =>
"CD.SITE_ID",
"TYPE" =>
"string"),
198 "TYPE" =>
array(
"FIELD" =>
"CD.TYPE",
"TYPE" =>
"int"),
199 "ACTIVE" =>
array(
"FIELD" =>
"CD.ACTIVE",
"TYPE" =>
"char"),
200 "ACTIVE_FROM" =>
array(
"FIELD" =>
"CD.ACTIVE_FROM",
"TYPE" =>
"datetime"),
201 "ACTIVE_TO" =>
array(
"FIELD" =>
"CD.ACTIVE_TO",
"TYPE" =>
"datetime"),
202 "RENEWAL" =>
array(
"FIELD" =>
"CD.RENEWAL",
"TYPE" =>
"char"),
203 "NAME" =>
array(
"FIELD" =>
"CD.NAME",
"TYPE" =>
"string"),
204 "MAX_USES" =>
array(
"FIELD" =>
"CD.MAX_USES",
"TYPE" =>
"int"),
205 "COUNT_USES" =>
array(
"FIELD" =>
"CD.COUNT_USES",
"TYPE" =>
"int"),
206 "SORT" =>
array(
"FIELD" =>
"CD.SORT",
"TYPE" =>
"int"),
207 "MAX_DISCOUNT" =>
array(
"FIELD" =>
"CD.MAX_DISCOUNT",
"TYPE" =>
"double"),
208 "VALUE_TYPE" =>
array(
"FIELD" =>
"CD.VALUE_TYPE",
"TYPE" =>
"char"),
209 "VALUE" =>
array(
"FIELD" =>
"CD.VALUE",
"TYPE" =>
"double"),
210 "CURRENCY" =>
array(
"FIELD" =>
"CD.CURRENCY",
"TYPE" =>
"string"),
211 "MIN_ORDER_SUM" =>
array(
"FIELD" =>
"CD.MIN_ORDER_SUM",
"TYPE" =>
"double"),
212 "TIMESTAMP_X" =>
array(
"FIELD" =>
"CD.TIMESTAMP_X",
"TYPE" =>
"datetime"),
213 "MODIFIED_BY" =>
array(
"FIELD" =>
"CD.MODIFIED_BY",
"TYPE" =>
"int"),
214 "DATE_CREATE" =>
array(
"FIELD" =>
"CD.DATE_CREATE",
"TYPE" =>
"datetime"),
215 "CREATED_BY" =>
array(
"FIELD" =>
"CD.CREATED_BY",
"TYPE" =>
"int"),
216 "NOTES" =>
array(
"FIELD" =>
"CD.NOTES",
"TYPE" =>
"string"),
217 "PRIORITY" =>
array(
"FIELD" =>
"CD.PRIORITY",
"TYPE" =>
"int"),
218 "LAST_DISCOUNT" =>
array(
"FIELD" =>
"CD.LAST_DISCOUNT",
"TYPE" =>
"char"),
219 "VERSION" =>
array(
"FIELD" =>
"CD.VERSION",
"TYPE" =>
"int"),
220 "CONDITIONS" =>
array(
"FIELD" =>
"CD.CONDITIONS",
"TYPE" =>
"string"),
221 "UNPACK" =>
array(
"FIELD" =>
"CD.UNPACK",
"TYPE" =>
"string"),
222 "SALE_ID" =>
array(
"FIELD" =>
"CD.SALE_ID",
"TYPE" =>
"int"),
223 "USE_COUPONS" =>
array(
"FIELD" =>
"CD.USE_COUPONS",
"TYPE" =>
"char"),
225 "PRODUCT_ID" =>
array(
"FIELD" =>
"CDP.PRODUCT_ID",
"TYPE" =>
"int",
"FROM" =>
"LEFT JOIN b_catalog_discount2product CDP ON (CD.ID = CDP.DISCOUNT_ID)"),
226 "SECTION_ID" =>
array(
"FIELD" =>
"CDS.SECTION_ID",
"TYPE" =>
"int",
"FROM" =>
"LEFT JOIN b_catalog_discount2section CDS ON (CD.ID = CDS.DISCOUNT_ID)",
"WHERE" =>
array(
"CCatalogDiscount",
"PrepareSection4Where")),
227 "SECTION_LIST" =>
array(
"FIELD" =>
"CDSL.SECTION_ID",
"TYPE" =>
"int",
"FROM" =>
"LEFT JOIN b_catalog_discount2section CDSL ON (CD.ID = CDSL.DISCOUNT_ID)"),
228 "IBLOCK_ID" =>
array(
"FIELD" =>
"CDI.IBLOCK_ID",
"TYPE" =>
"int",
"FROM" =>
"LEFT JOIN b_catalog_discount2iblock CDI ON (CD.ID = CDI.DISCOUNT_ID)"),
229 "GROUP_ID" =>
array(
"FIELD" =>
"CDC.USER_GROUP_ID",
"TYPE" =>
"int",
"FROM" =>
"LEFT JOIN b_catalog_discount_cond CDC ON (CD.ID = CDC.DISCOUNT_ID)"),
230 "USER_GROUP_ID" =>
array(
"FIELD" =>
"CDC.USER_GROUP_ID",
"TYPE" =>
"int",
"FROM" =>
"LEFT JOIN b_catalog_discount_cond CDC ON (CD.ID = CDC.DISCOUNT_ID)"),
231 "CATALOG_GROUP_ID" =>
array(
"FIELD" =>
"CDC.PRICE_TYPE_ID",
"TYPE" =>
"int",
"FROM" =>
"LEFT JOIN b_catalog_discount_cond CDC ON (CD.ID = CDC.DISCOUNT_ID)"),
232 "PRICE_TYPE_ID" =>
array(
"FIELD" =>
"CDC.PRICE_TYPE_ID",
"TYPE" =>
"int",
"FROM" =>
"LEFT JOIN b_catalog_discount_cond CDC ON (CD.ID = CDC.DISCOUNT_ID)"),
234 "COUPON" =>
array(
"FIELD" =>
"CDCP.COUPON",
"TYPE" =>
"string",
"FROM" =>
"LEFT JOIN b_catalog_discount_coupon CDCP ON (CD.ID = CDCP.DISCOUNT_ID)"),
235 "COUPON_ACTIVE" =>
array(
"FIELD" =>
"CDCP.ACTIVE",
"TYPE" =>
"char",
"FROM" =>
"LEFT JOIN b_catalog_discount_coupon CDCP ON (CD.ID = CDCP.DISCOUNT_ID)"),
236 "COUPON_ONE_TIME" =>
array(
"FIELD" =>
"CDCP.ONE_TIME",
"TYPE" =>
"char",
"FROM" =>
"LEFT JOIN b_catalog_discount_coupon CDCP ON (CD.ID = CDCP.DISCOUNT_ID)"),
244 foreach ($filterKeys as &$oneKey)
247 preg_match(
'/^\!?\+.{0,2}(GROUP_ID|USER_GROUP_ID|CATALOG_GROUP_ID|PRICE_TYPE_ID)$/', $oneKey) == 1
260 unset($oneKey, $filterKeys);
266 $arSqls[
"SELECT"] = str_replace(
"%%_DISTINCT_%%",
"", $arSqls[
"SELECT"]);
268 if (empty($arGroupBy) && is_array($arGroupBy))
270 $strSql =
"SELECT ".$arSqls[
"SELECT"].
" FROM b_catalog_discount CD ".$arSqls[
"FROM"];
271 if (!empty($arSqls[
"WHERE"]))
272 $strSql .=
" WHERE ".$arSqls[
"WHERE"];
273 if (!empty($arSqls[
"GROUPBY"]))
274 $strSql .=
" GROUP BY ".$arSqls[
"GROUPBY"];
283 $strSql =
"SELECT ".$arSqls[
"SELECT"].
" FROM b_catalog_discount CD ".$arSqls[
"FROM"];
284 if (!empty($arSqls[
"WHERE"]))
285 $strSql .=
" WHERE ".$arSqls[
"WHERE"];
286 if (!empty($arSqls[
"GROUPBY"]))
287 $strSql .=
" GROUP BY ".$arSqls[
"GROUPBY"];
288 if (!empty($arSqls[
"ORDERBY"]))
289 $strSql .=
" ORDER BY ".$arSqls[
"ORDERBY"];
292 $boolNavStartParams = (!empty($arNavStartParams) && is_array($arNavStartParams));
293 if ($boolNavStartParams && array_key_exists(
'nTopCount', $arNavStartParams))
295 $intTopCount = intval($arNavStartParams[
"nTopCount"]);
297 if ($boolNavStartParams && 0 >= $intTopCount)
299 $strSql_tmp =
"SELECT COUNT('x') as CNT FROM b_catalog_discount CD ".$arSqls[
"FROM"];
300 if (!empty($arSqls[
"WHERE"]))
301 $strSql_tmp .=
" WHERE ".$arSqls[
"WHERE"];
302 if (!empty($arSqls[
"GROUPBY"]))
303 $strSql_tmp .=
" GROUP BY ".$arSqls[
"GROUPBY"];
307 if (empty($arSqls[
"GROUPBY"]))
314 $cnt =
$dbRes->SelectedRowsCount();
319 $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
323 if ($boolNavStartParams && 0 < $intTopCount)
325 $strSql .=
" LIMIT ".$intTopCount;
374 "ID" =>
array(
"FIELD" =>
"DG.ID",
"TYPE" =>
"int"),
375 "DISCOUNT_ID" =>
array(
"FIELD" =>
"DG.DISCOUNT_ID",
"TYPE" =>
"int"),
376 "PRODUCT_ID" =>
array(
"FIELD" =>
"DG.PRODUCT_ID",
"TYPE" =>
"int")
381 $arSqls[
"SELECT"] = str_replace(
"%%_DISTINCT_%%",
"", $arSqls[
"SELECT"]);
383 if (empty($arGroupBy) && is_array($arGroupBy))
385 $strSql =
"SELECT ".$arSqls[
"SELECT"].
" FROM b_catalog_discount2product DG ".$arSqls[
"FROM"];
386 if (!empty($arSqls[
"WHERE"]))
387 $strSql .=
" WHERE ".$arSqls[
"WHERE"];
388 if (!empty($arSqls[
"GROUPBY"]))
389 $strSql .=
" GROUP BY ".$arSqls[
"GROUPBY"];
398 $strSql =
"SELECT ".$arSqls[
"SELECT"].
" FROM b_catalog_discount2product DG ".$arSqls[
"FROM"];
399 if (!empty($arSqls[
"WHERE"]))
400 $strSql .=
" WHERE ".$arSqls[
"WHERE"];
401 if (!empty($arSqls[
"GROUPBY"]))
402 $strSql .=
" GROUP BY ".$arSqls[
"GROUPBY"];
403 if (!empty($arSqls[
"ORDERBY"]))
404 $strSql .=
" ORDER BY ".$arSqls[
"ORDERBY"];
407 $boolNavStartParams = (!empty($arNavStartParams) && is_array($arNavStartParams));
408 if ($boolNavStartParams && array_key_exists(
'nTopCount', $arNavStartParams))
410 $intTopCount = intval($arNavStartParams[
"nTopCount"]);
412 if ($boolNavStartParams && 0 >= $intTopCount)
414 $strSql_tmp =
"SELECT COUNT('x') as CNT FROM b_catalog_discount2product DG ".$arSqls[
"FROM"];
415 if (!empty($arSqls[
"WHERE"]))
416 $strSql_tmp .=
" WHERE ".$arSqls[
"WHERE"];
417 if (!empty($arSqls[
"GROUPBY"]))
418 $strSql_tmp .=
" GROUP BY ".$arSqls[
"GROUPBY"];
422 if (empty($arSqls[
"GROUPBY"]))
429 $cnt =
$dbRes->SelectedRowsCount();
434 $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
438 if ($boolNavStartParams && 0 < $intTopCount)
440 $strSql .=
" LIMIT ".$intTopCount;
463 "ID" =>
array(
"FIELD" =>
"DG.ID",
"TYPE" =>
"int"),
464 "DISCOUNT_ID" =>
array(
"FIELD" =>
"DG.DISCOUNT_ID",
"TYPE" =>
"int"),
465 "SECTION_ID" =>
array(
"FIELD" =>
"DG.SECTION_ID",
"TYPE" =>
"int")
470 $arSqls[
"SELECT"] = str_replace(
"%%_DISTINCT_%%",
"", $arSqls[
"SELECT"]);
472 if (empty($arGroupBy) && is_array($arGroupBy))
474 $strSql =
"SELECT ".$arSqls[
"SELECT"].
" FROM b_catalog_discount2section DG ".$arSqls[
"FROM"];
475 if (!empty($arSqls[
"WHERE"]))
476 $strSql .=
" WHERE ".$arSqls[
"WHERE"];
477 if (!empty($arSqls[
"GROUPBY"]))
478 $strSql .=
" GROUP BY ".$arSqls[
"GROUPBY"];
487 $strSql =
"SELECT ".$arSqls[
"SELECT"].
" FROM b_catalog_discount2section DG ".$arSqls[
"FROM"];
488 if (!empty($arSqls[
"WHERE"]))
489 $strSql .=
" WHERE ".$arSqls[
"WHERE"];
490 if (!empty($arSqls[
"GROUPBY"]))
491 $strSql .=
" GROUP BY ".$arSqls[
"GROUPBY"];
492 if (!empty($arSqls[
"ORDERBY"]))
493 $strSql .=
" ORDER BY ".$arSqls[
"ORDERBY"];
496 $boolNavStartParams = (!empty($arNavStartParams) && is_array($arNavStartParams));
497 if ($boolNavStartParams && array_key_exists(
'nTopCount', $arNavStartParams))
499 $intTopCount = intval($arNavStartParams[
"nTopCount"]);
501 if ($boolNavStartParams && 0 >= $intTopCount)
503 $strSql_tmp =
"SELECT COUNT('x') as CNT FROM b_catalog_discount2section DG ".$arSqls[
"FROM"];
504 if (!empty($arSqls[
"WHERE"]))
505 $strSql_tmp .=
" WHERE ".$arSqls[
"WHERE"];
506 if (!empty($arSqls[
"GROUPBY"]))
507 $strSql_tmp .=
" GROUP BY ".$arSqls[
"GROUPBY"];
511 if (empty($arSqls[
"GROUPBY"]))
518 $cnt =
$dbRes->SelectedRowsCount();
523 $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
527 if ($boolNavStartParams && 0 < $intTopCount)
529 $strSql .=
" LIMIT ".$intTopCount;
552 "ID" =>
array(
"FIELD" =>
"DG.ID",
"TYPE" =>
"int"),
553 "DISCOUNT_ID" =>
array(
"FIELD" =>
"DG.DISCOUNT_ID",
"TYPE" =>
"int"),
554 "IBLOCK_ID" =>
array(
"FIELD" =>
"DG.IBLOCK_ID",
"TYPE" =>
"int")
559 $arSqls[
"SELECT"] = str_replace(
"%%_DISTINCT_%%",
"", $arSqls[
"SELECT"]);
561 if (empty($arGroupBy) && is_array($arGroupBy))
563 $strSql =
"SELECT ".$arSqls[
"SELECT"].
" FROM b_catalog_discount2iblock DG ".$arSqls[
"FROM"];
564 if (!empty($arSqls[
"WHERE"]))
565 $strSql .=
" WHERE ".$arSqls[
"WHERE"];
566 if (!empty($arSqls[
"GROUPBY"]))
567 $strSql .=
" GROUP BY ".$arSqls[
"GROUPBY"];
576 $strSql =
"SELECT ".$arSqls[
"SELECT"].
" FROM b_catalog_discount2iblock DG ".$arSqls[
"FROM"];
577 if (!empty($arSqls[
"WHERE"]))
578 $strSql .=
" WHERE ".$arSqls[
"WHERE"];
579 if (!empty($arSqls[
"GROUPBY"]))
580 $strSql .=
" GROUP BY ".$arSqls[
"GROUPBY"];
581 if (!empty($arSqls[
"ORDERBY"]))
582 $strSql .=
" ORDER BY ".$arSqls[
"ORDERBY"];
585 $boolNavStartParams = (!empty($arNavStartParams) && is_array($arNavStartParams));
586 if ($boolNavStartParams && array_key_exists(
'nTopCount', $arNavStartParams))
588 $intTopCount = intval($arNavStartParams[
"nTopCount"]);
590 if ($boolNavStartParams && 0 >= $intTopCount)
592 $strSql_tmp =
"SELECT COUNT('x') as CNT FROM b_catalog_discount2iblock DG ".$arSqls[
"FROM"];
593 if (!empty($arSqls[
"WHERE"]))
594 $strSql_tmp .=
" WHERE ".$arSqls[
"WHERE"];
595 if (!empty($arSqls[
"GROUPBY"]))
596 $strSql_tmp .=
" GROUP BY ".$arSqls[
"GROUPBY"];
600 if (empty($arSqls[
"GROUPBY"]))
607 $cnt =
$dbRes->SelectedRowsCount();
612 $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
616 if ($boolNavStartParams && 0 < $intTopCount)
618 $strSql .=
" LIMIT ".$intTopCount;
639 "ID" =>
array(
"FIELD" =>
"DC.ID",
"TYPE" =>
"int"),
640 "DISCOUNT_ID" =>
array(
"FIELD" =>
"DC.DISCOUNT_ID",
"TYPE" =>
"int"),
641 "CATALOG_GROUP_ID" =>
array(
"FIELD" =>
"DC.PRICE_TYPE_ID",
"TYPE" =>
"int"),
642 "PRICE_TYPE_ID" =>
array(
"FIELD" =>
"DC.PRICE_TYPE_ID",
"TYPE" =>
"int"),
643 "USER_GROUP_ID" =>
array(
"FIELD" =>
"DC.USER_GROUP_ID",
"TYPE" =>
"int"),
644 "GROUP_ID" =>
array(
"FIELD" =>
"DC.USER_GROUP_ID",
"TYPE" =>
"int"),
649 $arSqls[
"SELECT"] = str_replace(
"%%_DISTINCT_%%",
"", $arSqls[
"SELECT"]);
651 if (empty($arGroupBy) && is_array($arGroupBy))
653 $strSql =
"SELECT ".$arSqls[
"SELECT"].
" FROM b_catalog_discount_cond DC ".$arSqls[
"FROM"];
654 if (!empty($arSqls[
"WHERE"]))
655 $strSql .=
" WHERE ".$arSqls[
"WHERE"];
656 if (!empty($arSqls[
"GROUPBY"]))
657 $strSql .=
" GROUP BY ".$arSqls[
"GROUPBY"];
666 $strSql =
"SELECT ".$arSqls[
"SELECT"].
" FROM b_catalog_discount_cond DC ".$arSqls[
"FROM"];
667 if (!empty($arSqls[
"WHERE"]))
668 $strSql .=
" WHERE ".$arSqls[
"WHERE"];
669 if (!empty($arSqls[
"GROUPBY"]))
670 $strSql .=
" GROUP BY ".$arSqls[
"GROUPBY"];
671 if (!empty($arSqls[
"ORDERBY"]))
672 $strSql .=
" ORDER BY ".$arSqls[
"ORDERBY"];
675 $boolNavStartParams = (!empty($arNavStartParams) && is_array($arNavStartParams));
676 if ($boolNavStartParams && array_key_exists(
'nTopCount', $arNavStartParams))
678 $intTopCount = intval($arNavStartParams[
"nTopCount"]);
680 if ($boolNavStartParams && 0 >= $intTopCount)
682 $strSql_tmp =
"SELECT COUNT('x') as CNT FROM b_catalog_discount_cond DC ".$arSqls[
"FROM"];
683 if (!empty($arSqls[
"WHERE"]))
684 $strSql_tmp .=
" WHERE ".$arSqls[
"WHERE"];
685 if (!empty($arSqls[
"GROUPBY"]))
686 $strSql_tmp .=
" GROUP BY ".$arSqls[
"GROUPBY"];
690 if (empty($arSqls[
"GROUPBY"]))
697 $cnt =
$dbRes->SelectedRowsCount();
702 $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
706 if ($boolNavStartParams && 0 < $intTopCount)
708 $strSql .=
" LIMIT ".$intTopCount;
725 COption::SetOptionString(
"catalog",
"do_use_discount_product",
'Y');
727 COption::SetOptionString(
"catalog",
"do_use_discount_section",
'Y');
729 COption::SetOptionString(
"catalog",
"do_use_discount_iblock",
'Y');
748 $arDiscList =
array();
749 $strQuery = str_replace(
'#ENTITY_ID#',
$arParams[
'ENTITY_ID'],
"SELECT DISCOUNT_ID FROM b_catalog_discount_cond WHERE #ENTITY_ID# != -1");
750 $rsDiscounts =
$DB->Query($strQuery);
751 while ($arDiscount = $rsDiscounts->Fetch())
753 $arDiscList[] = intval($arDiscount[
'DISCOUNT_ID']);
755 if (!empty($arDiscList))
757 $arDiscList = array_unique($arDiscList);
758 $strQuery =
"SELECT 'x' FROM b_catalog_discount D WHERE ID IN (".implode(
',', $arDiscList).
") AND D.ACTIVE = 'Y' AND (D.ACTIVE_TO > ".
$DB->CurrentTimeFunction().
" OR D.ACTIVE_TO IS NULL) LIMIT 0, 1";
759 $rsDiscounts =
$DB->Query($strQuery);
760 if ($arDiscount= $rsDiscounts->Fetch())
763 COption::SetOptionString(
"catalog",
$arParams[
'OPTION_ID'], $strFilter);
773 $intDiscountID = (int)$intDiscountID;
774 if ($intDiscountID <= 0)
776 $arMsg[] =
array(
'id' =>
'ID',
"text" =>
GetMessage(
'BT_MOD_CATALOG_DISC_ERR_DISCOUNT_ID_ABSENT'));
779 if (empty($arConditions) || !is_array($arConditions))
781 $arMsg[] =
array(
'id' =>
'SUBDISCOUNT',
"text" =>
GetMessage(
'BT_MOD_CATALOG_DISC_ERR_SUBDISCOUNT_ROWS_ABSENT'));
785 $active = (string)$active;
786 if ($active !==
'Y' && $active !==
'N')
788 $strQuery =
'select ID, ACTIVE from b_catalog_discount where ID = '.$intDiscountID;
789 $rsActive =
$DB->Query($strQuery);
790 if ($activeFromDatabase = $rsActive->Fetch())
792 $active = $activeFromDatabase[
'ACTIVE'];
796 $arMsg[] =
array(
'id' =>
'ID',
"text" =>
GetMessage(
'BT_MOD_CATALOG_DISC_ERR_DISCOUNT_ID_ABSENT'));
802 'DISCOUNT_ID' => $intDiscountID,
804 'USER_GROUP_ID' => -1,
805 'PRICE_TYPE_ID' => -1,
810 $strQuery =
'DELETE from b_catalog_discount_cond where DISCOUNT_ID = '.$intDiscountID;
811 $DB->Query($strQuery);
813 foreach ($arConditions as $arOneCondition)
815 $arRow = $arEmptyRow;
816 if (!empty($arOneCondition[
'EQUAL']) && is_array($arOneCondition[
'EQUAL']))
818 foreach ($arOneCondition[
'EQUAL'] as $strKey => $intOneEntity)
820 $arRow[$strKey] = $intOneEntity;
823 $arInsert =
$DB->PrepareInsert(
"b_catalog_discount_cond", $arRow);
824 $strInserCond =
"INSERT INTO b_catalog_discount_cond(".$arInsert[0].
") VALUES(".$arInsert[1].
")";
825 $DB->Query($strInserCond);
827 if (isset($arOneCondition))
828 unset($arOneCondition);
839 $boolRest = array_key_exists(
'RESTRICTIONS',
$arFilter);
842 "DISCOUNT_ID" =>
array(
"FIELD" =>
"DC.DISCOUNT_ID",
"TYPE" =>
"int"),
843 "ACTIVE" =>
array(
"FIELD" =>
"DC.ACTIVE",
"TYPE" =>
"char"),
844 "USER_GROUP_ID" =>
array(
"FIELD" =>
"DC.USER_GROUP_ID",
"TYPE" =>
"int"),
845 "PRICE_TYPE_ID" =>
array(
"FIELD" =>
"DC.PRICE_TYPE_ID",
"TYPE" =>
"int"),
854 if (!in_array(-1,
$arFilter[
'USER_GROUP_ID']))
868 if (!in_array(-1,
$arFilter[
'PRICE_TYPE_ID']))
877 if (array_key_exists(
'ACTIVE',
$arFilter))
888 if (array_key_exists(
'DISCOUNT_ID',
$arFilter))
891 $arSelectFields =
array(
'DISCOUNT_ID');
894 $arSelectFields[] =
'USER_GROUP_ID';
895 $arSelectFields[] =
'PRICE_TYPE_ID';
901 $arSqls[
"SELECT"] = str_replace(
"%%_DISTINCT_%%",
"", $arSqls[
"SELECT"]);
902 if (empty($arSqls[
"WHERE"]))
903 $arSqls[
"WHERE"] =
"1=1";
905 $strQuery =
"SELECT ".$arSqls[
"SELECT"].
" FROM b_catalog_discount_cond DC WHERE ".$arSqls[
"WHERE"];
907 $arDiscountID =
array();
908 $rsDiscounts =
$DB->Query($strQuery);
911 $arRestrictions =
array();
912 while ($arDiscount = $rsDiscounts->Fetch())
914 $arDiscount[
'DISCOUNT_ID'] = (int)$arDiscount[
'DISCOUNT_ID'];
915 $arDiscountID[$arDiscount[
'DISCOUNT_ID']] =
true;
916 if (!isset($arRestrictions[$arDiscount[
'DISCOUNT_ID']]))
918 $arRestrictions[$arDiscount[
'DISCOUNT_ID']] =
array(
919 'USER_GROUP' =>
array(),
920 'PRICE_TYPE' =>
array(),
923 $arDiscount[
'USER_GROUP_ID'] = (int)$arDiscount[
'USER_GROUP_ID'];
924 $arDiscount[
'PRICE_TYPE_ID'] = (int)$arDiscount[
'PRICE_TYPE_ID'];
925 $arRestrictions[$arDiscount[
'DISCOUNT_ID']][
'USER_GROUP'][$arDiscount[
'USER_GROUP_ID']] =
true;
926 $arRestrictions[$arDiscount[
'DISCOUNT_ID']][
'PRICE_TYPE'][$arDiscount[
'PRICE_TYPE_ID']] =
true;
928 if (!empty($arDiscountID))
930 $arDiscountID = array_keys($arDiscountID);
931 foreach ($arRestrictions as $intKey => $arOneRestrictions)
933 if (array_key_exists(-1, $arOneRestrictions[
'USER_GROUP']))
934 $arOneRestrictions[
'USER_GROUP'] =
array();
935 if (array_key_exists(-1, $arOneRestrictions[
'PRICE_TYPE']))
936 $arOneRestrictions[
'PRICE_TYPE'] =
array();
937 $arRestrictions[$intKey] = $arOneRestrictions;
941 'DISCOUNTS' => $arDiscountID,
942 'RESTRICTIONS' => $arRestrictions,
947 while ($arDiscount = $rsDiscounts->Fetch())
949 $arDiscount[
'DISCOUNT_ID'] = (int)$arDiscount[
'DISCOUNT_ID'];
950 $arDiscountID[$arDiscount[
'DISCOUNT_ID']] =
true;
952 if (!empty($arDiscountID))
965 'ENTITY_ID' =>
'IBLOCK_IDS',
966 'TABLE_ID' =>
'b_catalog_discount2iblock',
967 'FIELD_ID' =>
'IBLOCK_ID',
973 'ENTITY_ID' =>
'SECTION_IDS',
974 'TABLE_ID' =>
'b_catalog_discount2section',
975 'FIELD_ID' =>
'SECTION_ID',
981 'ENTITY_ID' =>
'PRODUCT_IDS',
982 'TABLE_ID' =>
'b_catalog_discount2product',
983 'FIELD_ID' =>
'PRODUCT_ID',
992 $intDiscountID = intval($intDiscountID);
993 if (0 >= $intDiscountID)
995 $strEntityID = trim(strval($strEntityID));
996 if (!empty($strEntityID) && (
'GROUP_IDS' == $strEntityID ||
'CATALOG_GROUP_IDS' == $strEntityID))
999 $strEntityResult = (
'GROUP_IDS' == $strEntityID ?
'USER_GROUP_ID' :
'PRICE_TYPE_ID');
1003 array(
'DISCOUNT_ID' => $intDiscountID),
1006 array(
'ID',
'DISCOUNT_ID', $strEntityResult)
1008 while ($arDiscount = $rsDiscounts->Fetch())
1011 $intValue = intval($arDiscount[$strEntityResult]);
1028 $discountID = (int)$discountID;
1029 if ($discountID <= 0 || empty($handlers) || !is_array($handlers))
1033 if (isset($handlers[
'MODULES']))
1037 $sqlQuery =
'delete from b_catalog_discount_module where DISCOUNT_ID = '.$discountID;
1038 $DB->Query($sqlQuery);
1040 if (!empty($handlers[
'MODULES']))
1042 foreach ($handlers[
'MODULES'] as &$oneModuleID)
1045 'DISCOUNT_ID' => $discountID,
1046 'MODULE_ID' => $oneModuleID
1048 $insert =
$DB->PrepareInsert(
'b_catalog_discount_module',
$fields);
1049 $sqlQuery =
"insert into b_catalog_discount_module(".$insert[0].
") values(".$insert[1].
")";
1050 $DB->Query($sqlQuery);
1052 unset($oneModuleID);
1061 $defaultRes =
array(
1062 'MODULES' =>
array(),
1063 'EXT_FILES' =>
array()
1067 if (!empty($discountList))
1069 $result = array_fill_keys($discountList, $defaultRes);
1070 $discountRows = array_chunk($discountList, 500);
1071 foreach ($discountRows as &$oneRow)
1073 $sqlQuery =
'select * from b_catalog_discount_module where DISCOUNT_ID IN ('.implode(
', ', $oneRow).
')';
1074 $resQuery =
$DB->Query($sqlQuery);
1075 while ($row = $resQuery->Fetch())
1077 $row[
'DISCOUNT_ID'] = (int)$row[
'DISCOUNT_ID'];
1078 $result[$row[
'DISCOUNT_ID']][
'MODULES'][] = $row[
'MODULE_ID'];
1082 unset($resQuery, $sqlQuery);
1084 unset($oneRow, $discountRows);
static deleteByDiscount($discount)
static deleteByDiscount($discount)
static deleteByDiscount($discount)
static deleteByDiscount($discount)
static normalizeArrayValuesByInt(&$map, $sorted=true)
static CheckFields($ACTION, &$arFields, $ID=0)
static __UpdateOldOneEntity($intID, &$arFields, $arParams, $boolUpdate)
static PrepareSql(&$arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields)
static SaveFilterOptions()
static GetDiscountProductsList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
static GetDiscountIBlocksList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
static __SaveFilterForEntity($arParams)
static __GetDiscountEntityList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
static GetDiscountCatsList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
static __UpdateSubdiscount($intDiscountID, &$arConditions, $active='')
static GetDiscountSectionsList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
static GetList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
static GetDiscountGroupsList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
static getDiscountHandlers($discountList)
static PrepareSection4Where($val, $key, $operation, $negative, $field, $arField, $arFilter)
static _Update($ID, &$arFields)
static updateDiscountHandlers($discountID, $handlers, $update)
static __GetDiscountID($arFilter)
static __UpdateOldEntities($ID, &$arFields, $boolUpdate)
static __FillArrays($intDiscountID, &$arFields, $strEntityID)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
$_SERVER["DOCUMENT_ROOT"]
ExecuteModuleEventEx($arEvent, $arParams=[])
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
GetMessage($name, $aReplace=null)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
if(empty($signedUserToken)) $key