5require_once(
$_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/modules/catalog/general/cataloggroup.php");
13 foreach(
GetModuleEvents(
"catalog",
"OnBeforeGroupAdd",
true) as $arEvent)
19 if (!static::CheckFields(
"ADD",
$arFields, 0))
27 $arInsert =
$DB->PrepareInsert(
"b_catalog_group",
$arFields);
29 $strSql =
"INSERT INTO b_catalog_group(".$arInsert[0].
") VALUES(".$arInsert[1].
")";
32 $groupID = (int)
$DB->LastID();
34 foreach (
$arFields[
"USER_GROUP"] as &$intValue)
36 $strSql =
"INSERT INTO b_catalog_group2group(CATALOG_GROUP_ID, GROUP_ID, BUY) VALUES(".$groupID.
", ".$intValue.
", 'N')";
42 foreach (
$arFields[
"USER_GROUP_BUY"] as &$intValue)
44 $strSql =
"INSERT INTO b_catalog_group2group(CATALOG_GROUP_ID, GROUP_ID, BUY) VALUES(".$groupID.
", ".$intValue.
", 'Y')";
55 "INSERT INTO b_catalog_group_lang(CATALOG_GROUP_ID, LANG, NAME) VALUES(".$groupID.
", '".
$DB->ForSql(
$key).
"', '".
$DB->ForSql($value).
"')";
60 if (!defined(
"CATALOG_SKIP_CACHE") || !CATALOG_SKIP_CACHE)
90 foreach(
GetModuleEvents(
"catalog",
"OnBeforeGroupUpdate",
true) as $arEvent)
99 $strUpdate =
$DB->PrepareUpdate(
"b_catalog_group",
$arFields);
100 if (!empty($strUpdate))
107 $strSql =
"UPDATE b_catalog_group SET ".$strUpdate.
" WHERE ID = ".
$ID;
113 $DB->Query(
"DELETE FROM b_catalog_group2group WHERE CATALOG_GROUP_ID = ".
$ID.
" AND BUY <> 'Y'");
114 foreach (
$arFields[
"USER_GROUP"] as &$intValue)
116 $strSql =
"INSERT INTO b_catalog_group2group(CATALOG_GROUP_ID, GROUP_ID, BUY) VALUES(".$ID.
", ".$intValue.
", 'N')";
119 if (isset($intValue))
125 $DB->Query(
"DELETE FROM b_catalog_group2group WHERE CATALOG_GROUP_ID = ".
$ID.
" AND BUY = 'Y'");
126 foreach (
$arFields[
"USER_GROUP_BUY"] as &$intValue)
128 $strSql =
"INSERT INTO b_catalog_group2group(CATALOG_GROUP_ID, GROUP_ID, BUY) VALUES(".$ID.
", ".$intValue.
", 'Y')";
131 if (isset($intValue))
137 $DB->Query(
"DELETE FROM b_catalog_group_lang WHERE CATALOG_GROUP_ID = ".
$ID);
141 "INSERT INTO b_catalog_group_lang(CATALOG_GROUP_ID, LANG, NAME) VALUES(".$ID.
", '".
$DB->ForSql(
$key).
"', '".
$DB->ForSql($value).
"')";
146 if (!defined(
"CATALOG_SKIP_CACHE") || !CATALOG_SKIP_CACHE)
171 if (
$res = static::GetByID(
$ID))
173 if (
$res[
"BASE"] !=
"Y")
175 foreach(
GetModuleEvents(
"catalog",
"OnBeforeGroupDelete",
true) as $arEvent)
186 if (!defined(
"CATALOG_SKIP_CACHE") || !CATALOG_SKIP_CACHE)
192 $DB->Query(
"DELETE FROM b_catalog_price WHERE CATALOG_GROUP_ID = ".
$ID);
193 $DB->Query(
"DELETE FROM b_catalog_group2group WHERE CATALOG_GROUP_ID = ".
$ID);
194 $DB->Query(
"DELETE FROM b_catalog_group_lang WHERE CATALOG_GROUP_ID = ".
$ID);
199 return $DB->Query(
"DELETE FROM b_catalog_group WHERE ID = ".
$ID,
true);
223 if (!is_array($arOrder) && !is_array(
$arFilter))
225 $arOrder = strval($arOrder);
231 if (is_array($arGroupBy))
236 if ($arNavStartParams !=
false &&
'' != $arNavStartParams)
246 if (empty($arSelectFields))
247 $arSelectFields =
array(
"ID",
"NAME",
"BASE",
"SORT",
"XML_ID",
"MODIFIED_BY",
"CREATED_BY",
"DATE_CREATE",
"TIMESTAMP_X",
"NAME_LANG",
"CAN_ACCESS",
"CAN_BUY");
248 if ($arGroupBy ==
false)
249 $arGroupBy =
array(
"ID",
"NAME",
"BASE",
"SORT",
"XML_ID",
"MODIFIED_BY",
"CREATED_BY",
"DATE_CREATE",
"TIMESTAMP_X",
"NAME_LANG",
"CAN_ACCESS",
"CAN_BUY");
252 "ID" =>
array(
"FIELD" =>
"CG.ID",
"TYPE" =>
"int"),
253 "NAME" =>
array(
"FIELD" =>
"CG.NAME",
"TYPE" =>
"string"),
254 "BASE" =>
array(
"FIELD" =>
"CG.BASE",
"TYPE" =>
"char"),
255 "SORT" =>
array(
"FIELD" =>
"CG.SORT",
"TYPE" =>
"int"),
256 "XML_ID" =>
array(
"FIELD" =>
"CG.XML_ID",
"TYPE" =>
"string"),
257 "TIMESTAMP_X" =>
array(
"FIELD" =>
"CG.TIMESTAMP_X",
"TYPE" =>
"datetime"),
258 "MODIFIED_BY" =>
array(
"FIELD" =>
"CG.MODIFIED_BY",
"TYPE" =>
"int"),
259 "DATE_CREATE" =>
array(
"FIELD" =>
"CG.DATE_CREATE",
"TYPE" =>
"datetime"),
260 "CREATED_BY" =>
array(
"FIELD" =>
"CG.CREATED_BY",
"TYPE" =>
"int"),
261 "NAME_LANG" =>
array(
"FIELD" =>
"CGL.NAME",
"TYPE" =>
"string",
"FROM" =>
"LEFT JOIN b_catalog_group_lang CGL ON (CG.ID = CGL.CATALOG_GROUP_ID AND CGL.LANG = '".
$DB->ForSql(
$arFilter[
"LID"], 2).
"')"),
265 "FIELD" =>
"CASE WHEN CGG.ID IS NULL THEN 'N' ELSE 'Y' END",
267 "FROM" =>
"LEFT JOIN b_catalog_group2group CGG ON (CG.ID = CGG.CATALOG_GROUP_ID AND CGG.GROUP_ID IN (".$strUserGroups.
") AND CGG.BUY <> 'Y')",
271 "FIELD" =>
"CASE WHEN CGG1.ID IS NULL THEN 'N' ELSE 'Y' END",
273 "FROM" =>
"LEFT JOIN b_catalog_group2group CGG1 ON (CG.ID = CGG1.CATALOG_GROUP_ID AND CGG1.GROUP_ID IN (".$strUserGroups.
") AND CGG1.BUY = 'Y')",
279 $arSqls[
"SELECT"] = str_replace(
"%%_DISTINCT_%%",
"", $arSqls[
"SELECT"]);
281 if (empty($arGroupBy) && is_array($arGroupBy))
283 $strSql =
"SELECT ".$arSqls[
"SELECT"].
" FROM b_catalog_group CG ".$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[
"HAVING"]))
289 $strSql .=
" HAVING ".$arSqls[
"HAVING"];
298 $strSql =
"SELECT ".$arSqls[
"SELECT"].
" FROM b_catalog_group CG ".$arSqls[
"FROM"];
299 if (!empty($arSqls[
"WHERE"]))
300 $strSql .=
" WHERE ".$arSqls[
"WHERE"];
301 if (!empty($arSqls[
"GROUPBY"]))
302 $strSql .=
" GROUP BY ".$arSqls[
"GROUPBY"];
303 if (!empty($arSqls[
"HAVING"]))
304 $strSql .=
" HAVING ".$arSqls[
"HAVING"];
305 if (!empty($arSqls[
"ORDERBY"]))
306 $strSql .=
" ORDER BY ".$arSqls[
"ORDERBY"];
309 $boolNavStartParams = (!empty($arNavStartParams) && is_array($arNavStartParams));
310 if ($boolNavStartParams && array_key_exists(
'nTopCount', $arNavStartParams))
312 $intTopCount = intval($arNavStartParams[
"nTopCount"]);
314 if ($boolNavStartParams && 0 >= $intTopCount)
316 $strSql_tmp =
"SELECT COUNT('x') as CNT FROM b_catalog_group CG ".$arSqls[
"FROM"];
317 if (!empty($arSqls[
"WHERE"]))
318 $strSql_tmp .=
" WHERE ".$arSqls[
"WHERE"];
319 if (!empty($arSqls[
"GROUPBY"]))
320 $strSql_tmp .=
" GROUP BY ".$arSqls[
"GROUPBY"];
321 if (!empty($arSqls[
"HAVING"]))
322 $strSql_tmp .=
" HAVING ".$arSqls[
"HAVING"];
326 if (empty($arSqls[
"GROUPBY"]))
333 $cnt =
$dbRes->SelectedRowsCount();
338 $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
342 if ($boolNavStartParams && 0 < $intTopCount)
344 $strSql .=
" LIMIT ".$intTopCount;
364 if (empty($arSelectFields))
365 $arSelectFields =
array(
"ID",
"NAME",
"BASE",
"SORT",
"NAME_LANG",
"XML_ID",
"MODIFIED_BY",
"CREATED_BY",
"DATE_CREATE",
"TIMESTAMP_X");
368 "ID" =>
array(
"FIELD" =>
"CG.ID",
"TYPE" =>
"int"),
369 "NAME" =>
array(
"FIELD" =>
"CG.NAME",
"TYPE" =>
"string"),
370 "BASE" =>
array(
"FIELD" =>
"CG.BASE",
"TYPE" =>
"char"),
371 "SORT" =>
array(
"FIELD" =>
"CG.SORT",
"TYPE" =>
"int"),
372 "XML_ID" =>
array(
"FIELD" =>
"CG.XML_ID",
"TYPE" =>
"string"),
373 "TIMESTAMP_X" =>
array(
"FIELD" =>
"CG.TIMESTAMP_X",
"TYPE" =>
"datetime"),
374 "MODIFIED_BY" =>
array(
"FIELD" =>
"CG.MODIFIED_BY",
"TYPE" =>
"int"),
375 "DATE_CREATE" =>
array(
"FIELD" =>
"CG.DATE_CREATE",
"TYPE" =>
"datetime"),
376 "CREATED_BY" =>
array(
"FIELD" =>
"CG.CREATED_BY",
"TYPE" =>
"int"),
378 "GROUP_ID" =>
array(
"FIELD" =>
"CG2G.ID",
"TYPE" =>
"int",
"FROM" =>
"INNER JOIN b_catalog_group2group CG2G ON (CG.ID = CG2G.CATALOG_GROUP_ID)"),
379 "GROUP_CATALOG_GROUP_ID" =>
array(
"FIELD" =>
"CG2G.CATALOG_GROUP_ID",
"TYPE" =>
"int",
"FROM" =>
"INNER JOIN b_catalog_group2group CG2G ON (CG.ID = CG2G.CATALOG_GROUP_ID)"),
380 "GROUP_GROUP_ID" =>
array(
"FIELD" =>
"CG2G.GROUP_ID",
"TYPE" =>
"int",
"FROM" =>
"INNER JOIN b_catalog_group2group CG2G ON (CG.ID = CG2G.CATALOG_GROUP_ID)"),
381 "GROUP_BUY" =>
array(
"FIELD" =>
"CG2G.BUY",
"TYPE" =>
"char",
"FROM" =>
"INNER JOIN b_catalog_group2group CG2G ON (CG.ID = CG2G.CATALOG_GROUP_ID)"),
383 "NAME_LANG" =>
array(
"FIELD" =>
"CGL.NAME",
"TYPE" =>
"string",
"FROM" =>
"LEFT JOIN b_catalog_group_lang CGL ON (CG.ID = CGL.CATALOG_GROUP_ID AND CGL.LANG = '".LANGUAGE_ID.
"')"),
388 $arSqls[
"SELECT"] = str_replace(
"%%_DISTINCT_%%",
"", $arSqls[
"SELECT"]);
390 if (empty($arGroupBy) && is_array($arGroupBy))
392 $strSql =
"SELECT ".$arSqls[
"SELECT"].
" FROM b_catalog_group CG ".$arSqls[
"FROM"];
393 if (!empty($arSqls[
"WHERE"]))
394 $strSql .=
" WHERE ".$arSqls[
"WHERE"];
395 if (!empty($arSqls[
"GROUPBY"]))
396 $strSql .=
" GROUP BY ".$arSqls[
"GROUPBY"];
397 if (!empty($arSqls[
"HAVING"]))
398 $strSql .=
" HAVING ".$arSqls[
"HAVING"];
407 $strSql =
"SELECT ".$arSqls[
"SELECT"].
" FROM b_catalog_group CG ".$arSqls[
"FROM"];
408 if (!empty($arSqls[
"WHERE"]))
409 $strSql .=
" WHERE ".$arSqls[
"WHERE"];
410 if (!empty($arSqls[
"GROUPBY"]))
411 $strSql .=
" GROUP BY ".$arSqls[
"GROUPBY"];
412 if (!empty($arSqls[
"HAVING"]))
413 $strSql .=
" HAVING ".$arSqls[
"HAVING"];
414 if (!empty($arSqls[
"ORDERBY"]))
415 $strSql .=
" ORDER BY ".$arSqls[
"ORDERBY"];
418 $boolNavStartParams = (!empty($arNavStartParams) && is_array($arNavStartParams));
419 if ($boolNavStartParams && array_key_exists(
'nTopCount', $arNavStartParams))
421 $intTopCount = intval($arNavStartParams[
"nTopCount"]);
423 if ($boolNavStartParams && 0 >= $intTopCount)
425 $strSql_tmp =
"SELECT COUNT('x') as CNT FROM b_catalog_group CG ".$arSqls[
"FROM"];
426 if (!empty($arSqls[
"WHERE"]))
427 $strSql_tmp .=
" WHERE ".$arSqls[
"WHERE"];
428 if (!empty($arSqls[
"GROUPBY"]))
429 $strSql_tmp .=
" GROUP BY ".$arSqls[
"GROUPBY"];
430 if (!empty($arSqls[
"HAVING"]))
431 $strSql_tmp .=
" HAVING ".$arSqls[
"HAVING"];
435 if (empty($arSqls[
"GROUPBY"]))
442 $cnt =
$dbRes->SelectedRowsCount();
447 $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
451 if ($boolNavStartParams && 0 < $intTopCount)
453 $strSql .=
" LIMIT ".$intTopCount;
466 "ID" =>
array(
"FIELD" =>
"CGG.ID",
"TYPE" =>
"int"),
467 "CATALOG_GROUP_ID" =>
array(
"FIELD" =>
"CGG.CATALOG_GROUP_ID",
"TYPE" =>
"int"),
468 "GROUP_ID" =>
array(
"FIELD" =>
"CGG.GROUP_ID",
"TYPE" =>
"int"),
469 "BUY" =>
array(
"FIELD" =>
"CGG.BUY",
"TYPE" =>
"char")
474 $arSqls[
"SELECT"] = str_replace(
"%%_DISTINCT_%%",
"", $arSqls[
"SELECT"]);
476 $strSql =
"SELECT ".$arSqls[
"SELECT"].
" FROM b_catalog_group2group CGG ".$arSqls[
"FROM"];
477 if (!empty($arSqls[
"WHERE"]))
478 $strSql .=
" WHERE ".$arSqls[
"WHERE"];
479 if (!empty($arSqls[
"GROUPBY"]))
480 $strSql .=
" GROUP BY ".$arSqls[
"GROUPBY"];
481 if (!empty($arSqls[
"ORDERBY"]))
482 $strSql .=
" ORDER BY ".$arSqls[
"ORDERBY"];
484 return $DB->Query($strSql);
492 "ID" =>
array(
"FIELD" =>
"CGL.ID",
"TYPE" =>
"int"),
493 "CATALOG_GROUP_ID" =>
array(
"FIELD" =>
"CGL.CATALOG_GROUP_ID",
"TYPE" =>
"int"),
494 "LID" =>
array(
"FIELD" =>
"CGL.LANG",
"TYPE" =>
"string"),
495 "LANG" =>
array(
"FIELD" =>
"CGL.LANG",
"TYPE" =>
"string"),
496 "NAME" =>
array(
"FIELD" =>
"CGL.NAME",
"TYPE" =>
"string")
501 $arSqls[
"SELECT"] = str_replace(
"%%_DISTINCT_%%",
"", $arSqls[
"SELECT"]);
503 $strSql =
"SELECT ".$arSqls[
"SELECT"].
" FROM b_catalog_group_lang CGL ".$arSqls[
"FROM"];
504 if (!empty($arSqls[
"WHERE"]))
505 $strSql .=
" WHERE ".$arSqls[
"WHERE"];
506 if (!empty($arSqls[
"GROUPBY"]))
507 $strSql .=
" GROUP BY ".$arSqls[
"GROUPBY"];
508 if (!empty($arSqls[
"ORDERBY"]))
509 $strSql .=
" ORDER BY ".$arSqls[
"ORDERBY"];
511 return $DB->Query($strSql);
520 '~TIMESTAMP_X' =>
$DB->GetNowFunction(),
522 if (isset(
$fields[
'MODIFIED_BY']))
527 $parsedData =
$DB->PrepareUpdate(
'b_catalog_group',
$data);
529 $query =
'UPDATE b_catalog_group SET '.$parsedData.
' WHERE ';
530 $query .= $id !==
null ?
'ID != '.$id.
' and BASE = \'Y\'' :
'BASE = \'Y\'';
535 self::$arBaseGroupCache = [];
536 if (defined(
'CATALOG_GLOBAL_VARS') &&
'Y' == CATALOG_GLOBAL_VARS)
539 global $CATALOG_BASE_GROUP;
540 $CATALOG_BASE_GROUP = self::$arBaseGroupCache;
static deleteByPriceType(string|int $priceType)
static PrepareSql(&$arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields)
static _PrepareSql(&$arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields)
static clearBaseGroupFlag(?int $id, array $fields)
static GetGroupsList($arFilter=array())
static GetList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
static GetListEx($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
static GetLangList($arFilter=array())
static Update($ID, $arFields)
</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(empty($signedUserToken)) $key