/modules/catalog/mysql/discount_save.php

https://gitlab.com/alexprowars/bitrix · PHP · 580 lines · 491 code · 81 blank · 8 comment · 125 complexity · 357015bf6d6ff40085c3a2738a4fcbc1 MD5 · raw file

  1. <?
  2. require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/catalog/general/discount_save.php");
  3. class CCatalogDiscountSave extends CAllCatalogDiscountSave
  4. {
  5. public static function Add($arFields, $boolCalc = false)
  6. {
  7. global $DB;
  8. if (!CCatalogDiscountSave::CheckFields("ADD", $arFields))
  9. return false;
  10. $arInsert = $DB->PrepareInsert("b_catalog_discount", $arFields);
  11. $strSql = "INSERT INTO b_catalog_discount(".$arInsert[0].") VALUES(".$arInsert[1].")";
  12. $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  13. $ID = (int)$DB->LastID();
  14. if ($ID > 0)
  15. {
  16. foreach ($arFields['RANGES'] as &$arRange)
  17. {
  18. $arRange['DISCOUNT_ID'] = $ID;
  19. $arInsert = $DB->PrepareInsert("b_catalog_disc_save_range", $arRange);
  20. $strSql = "INSERT INTO b_catalog_disc_save_range(".$arInsert[0].") VALUES(".$arInsert[1].")";
  21. $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  22. }
  23. foreach ($arFields['GROUP_IDS'] as &$intGroupID)
  24. {
  25. $strSql = "INSERT INTO b_catalog_disc_save_group(DISCOUNT_ID,GROUP_ID) VALUES(".$ID.",".$intGroupID.")";
  26. $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  27. }
  28. $boolCalc = ($boolCalc === true);
  29. if ($boolCalc)
  30. CCatalogDiscountSave::UserDiscountCalc($ID,$arFields,false);
  31. }
  32. return $ID;
  33. }
  34. public static function Update($intID, $arFields, $boolCalc = false)
  35. {
  36. global $DB;
  37. $intID = (int)$intID;
  38. if ($intID <= 0)
  39. return false;
  40. if (!CCatalogDiscountSave::CheckFields('UPDATE',$arFields,$intID))
  41. return false;
  42. $strUpdate = $DB->PrepareUpdate("b_catalog_discount", $arFields);
  43. if (!empty($strUpdate))
  44. {
  45. $strSql = "update b_catalog_discount SET ".$strUpdate." where ID = ".$intID." and TYPE = ".self::ENTITY_ID;
  46. $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  47. }
  48. if (!empty($arFields['RANGES']))
  49. {
  50. $DB->Query("delete from b_catalog_disc_save_range where DISCOUNT_ID = ".$intID, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  51. foreach ($arFields['RANGES'] as &$arRange)
  52. {
  53. $arRange['DISCOUNT_ID'] = $intID;
  54. $arInsert = $DB->PrepareInsert("b_catalog_disc_save_range", $arRange);
  55. $strSql = "insert into b_catalog_disc_save_range(".$arInsert[0].") values(".$arInsert[1].")";
  56. $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  57. }
  58. unset($arRange);
  59. }
  60. if (!empty($arFields['GROUP_IDS']))
  61. {
  62. $DB->Query("delete from b_catalog_disc_save_group where DISCOUNT_ID = ".$intID, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  63. foreach ($arFields['GROUP_IDS'] as &$intGroupID)
  64. {
  65. $strSql = "insert into b_catalog_disc_save_group(DISCOUNT_ID,GROUP_ID) values(".$intID.",".$intGroupID.")";
  66. $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  67. }
  68. unset($intGroupID);
  69. }
  70. $boolCalc = ($boolCalc === true);
  71. if ($boolCalc)
  72. CCatalogDiscountSave::UserDiscountCalc($intID, $arFields, false);
  73. return $intID;
  74. }
  75. /**
  76. * @param array $arOrder
  77. * @param array $arFilter
  78. * @param bool|array $arGroupBy
  79. * @param bool|array $arNavStartParams
  80. * @param array $arSelectFields
  81. * @return bool|CDBResult
  82. */
  83. public static function GetList($arOrder = array(), $arFilter = array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array())
  84. {
  85. global $DB;
  86. $arFields = array(
  87. "ID" => array("FIELD" => "DS.ID", "TYPE" => "int"),
  88. "XML_ID" => array("FIELD" => "DS.XML_ID", "TYPE" => "string"),
  89. 'SITE_ID' => array("FIELD" => "DS.SITE_ID", "TYPE" => "string"),
  90. "TYPE" => array("FIELD" => "DS.TYPE", "TYPE" => "int"),
  91. 'NAME' => array("FIELD" => "DS.NAME", "TYPE" => "string"),
  92. 'ACTIVE' => array("FIELD" => "DS.ACTIVE", "TYPE" => "char"),
  93. "SORT" => array("FIELD" => "DS.SORT", "TYPE" => "int"),
  94. "CURRENCY" => array("FIELD" => "DS.CURRENCY", "TYPE" => "string"),
  95. "ACTIVE_FROM" => array("FIELD" => "DS.ACTIVE_FROM", "TYPE" => "datetime"),
  96. "ACTIVE_TO" => array("FIELD" => "DS.ACTIVE_TO", "TYPE" => "datetime"),
  97. "COUNT_PERIOD" => array("FIELD" => "DS.COUNT_PERIOD", "TYPE" => "char"),
  98. "COUNT_SIZE" => array("FIELD" => "DS.COUNT_SIZE", "TYPE" => "int"),
  99. "COUNT_TYPE" => array("FIELD" => "DS.COUNT_TYPE", "TYPE" => "char"),
  100. "COUNT_FROM" => array("FIELD" => "DS.COUNT_FROM", "TYPE" => "datetime"),
  101. "COUNT_TO" => array("FIELD" => "DS.COUNT_TO", "TYPE" => "datetime"),
  102. "ACTION_SIZE" => array("FIELD" => "DS.ACTION_SIZE", "TYPE" => "int"),
  103. "ACTION_TYPE" => array("FIELD" => "DS.ACTION_TYPE", "TYPE" => "char"),
  104. "TIMESTAMP_X" => array("FIELD" => "DS.TIMESTAMP_X", "TYPE" => "datetime"),
  105. "MODIFIED_BY" => array("FIELD" => "DS.MODIFIED_BY", "TYPE" => "int"),
  106. "DATE_CREATE" => array("FIELD" => "DS.DATE_CREATE", "TYPE" => "datetime"),
  107. "CREATED_BY" => array("FIELD" => "DS.CREATED_BY", "TYPE" => "int"),
  108. "SALE_ID" => array("FIELD" => "DS.SALE_ID", "TYPE" => "int"),
  109. "RANGE_FROM" => array("FIELD" => "DSR.RANGE_FROM", "TYPE" => "double", "FROM" => "LEFT JOIN b_catalog_disc_save_range DSR ON (DS.ID = DSR.DISCOUNT_ID)"),
  110. "VALUE" => array("FIELD" => "DSR.VALUE", "TYPE" => "double", "FROM" => "LEFT JOIN b_catalog_disc_save_range DSR ON (DS.ID = DSR.DISCOUNT_ID)"),
  111. "VALUE_TYPE" => array("FIELD" => "DSR.TYPE", "TYPE" => "char", "FROM" => "LEFT JOIN b_catalog_disc_save_range DSR ON (DS.ID = DSR.DISCOUNT_ID)"),
  112. "GROUP_ID" => array("FIELD" => "DSG.GROUP_ID", "TYPE" => "int", "FROM" => "LEFT JOIN b_catalog_disc_save_group DSG ON (DS.ID = DSG.DISCOUNT_ID)"),
  113. );
  114. if (empty($arSelectFields))
  115. $arSelectFields = array('ID','XML_ID','SITE_ID','TYPE','NAME','ACTIVE','SORT','CURRENCY','ACTIVE_FROM','ACTIVE_TO','COUNT_PERIOD','COUNT_SIZE','COUNT_TYPE','COUNT_FROM','COUNT_TO','ACTION_SIZE','ACTION_TYPE','TIMESTAMP_X','MODIFIED_BY','DATE_CREATE','CREATED_BY');
  116. elseif (is_array($arSelectFields) && in_array('*',$arSelectFields))
  117. $arSelectFields = array('ID','XML_ID','SITE_ID','TYPE','NAME','ACTIVE','SORT','CURRENCY','ACTIVE_FROM','ACTIVE_TO','COUNT_PERIOD','COUNT_SIZE','COUNT_TYPE','COUNT_FROM','COUNT_TO','ACTION_SIZE','ACTION_TYPE','TIMESTAMP_X','MODIFIED_BY','DATE_CREATE','CREATED_BY');
  118. if (!is_array($arFilter))
  119. $arFilter = array();
  120. $arFilter['TYPE'] = self::ENTITY_ID;
  121. $arSqls = CCatalog::PrepareSql($arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields);
  122. $arSqls["SELECT"] = str_replace("%%_DISTINCT_%%", "DISTINCT", $arSqls["SELECT"]);
  123. if (empty($arGroupBy) && is_array($arGroupBy))
  124. {
  125. $strSql = "SELECT ".$arSqls["SELECT"]." FROM b_catalog_discount DS ".$arSqls["FROM"];
  126. if (!empty($arSqls["WHERE"]))
  127. $strSql .= " WHERE ".$arSqls["WHERE"];
  128. if (!empty($arSqls["GROUPBY"]))
  129. $strSql .= " GROUP BY ".$arSqls["GROUPBY"];
  130. $dbRes = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  131. if ($arRes = $dbRes->Fetch())
  132. return $arRes["CNT"];
  133. else
  134. return false;
  135. }
  136. $strSql = "SELECT ".$arSqls["SELECT"]." FROM b_catalog_discount DS ".$arSqls["FROM"];
  137. if (!empty($arSqls["WHERE"]))
  138. $strSql .= " WHERE ".$arSqls["WHERE"];
  139. if (!empty($arSqls["GROUPBY"]))
  140. $strSql .= " GROUP BY ".$arSqls["GROUPBY"];
  141. if (!empty($arSqls["ORDERBY"]))
  142. $strSql .= " ORDER BY ".$arSqls["ORDERBY"];
  143. $intTopCount = 0;
  144. $boolNavStartParams = (!empty($arNavStartParams) && is_array($arNavStartParams));
  145. if ($boolNavStartParams && array_key_exists('nTopCount', $arNavStartParams))
  146. {
  147. $intTopCount = intval($arNavStartParams["nTopCount"]);
  148. }
  149. if ($boolNavStartParams && 0 >= $intTopCount)
  150. {
  151. $strSql_tmp = "SELECT COUNT('x') as CNT FROM b_catalog_discount DS ".$arSqls["FROM"];
  152. if (!empty($arSqls["WHERE"]))
  153. $strSql_tmp .= " WHERE ".$arSqls["WHERE"];
  154. if (!empty($arSqls["GROUPBY"]))
  155. $strSql_tmp .= " GROUP BY ".$arSqls["GROUPBY"];
  156. $dbRes = $DB->Query($strSql_tmp, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  157. $cnt = 0;
  158. if (empty($arSqls["GROUPBY"]))
  159. {
  160. if ($arRes = $dbRes->Fetch())
  161. $cnt = $arRes["CNT"];
  162. }
  163. else
  164. {
  165. $cnt = $dbRes->SelectedRowsCount();
  166. }
  167. $dbRes = new CDBResult();
  168. $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
  169. }
  170. else
  171. {
  172. if ($boolNavStartParams && 0 < $intTopCount)
  173. {
  174. $strSql .= " LIMIT ".$intTopCount;
  175. }
  176. $dbRes = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  177. }
  178. return $dbRes;
  179. }
  180. public static function GetRangeByDiscount($arOrder = array(), $arFilter = array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array())
  181. {
  182. global $DB;
  183. $arFields = array(
  184. "ID" => array("FIELD" => "DSR.ID", "TYPE" => "int"),
  185. "DISCOUNT_ID" => array("FIELD" => "DSR.DISCOUNT_ID", "TYPE" => "int"),
  186. "RANGE_FROM" => array("FIELD" => "DSR.RANGE_FROM", "TYPE" => "double"),
  187. "VALUE" => array("FIELD" => "DSR.VALUE", "TYPE" => "double"),
  188. "TYPE" => array("FIELD" => "DSR.TYPE", "TYPE" => "char"),
  189. );
  190. $arSqls = CCatalog::PrepareSql($arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields);
  191. $arSqls["SELECT"] = str_replace("%%_DISTINCT_%%", "", $arSqls["SELECT"]);
  192. if (empty($arGroupBy) && is_array($arGroupBy))
  193. {
  194. $strSql = "SELECT ".$arSqls["SELECT"]." FROM b_catalog_disc_save_range DSR ".$arSqls["FROM"];
  195. if (!empty($arSqls["WHERE"]))
  196. $strSql .= " WHERE ".$arSqls["WHERE"];
  197. if (!empty($arSqls["GROUPBY"]))
  198. $strSql .= " GROUP BY ".$arSqls["GROUPBY"];
  199. $dbRes = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  200. if ($arRes = $dbRes->Fetch())
  201. return $arRes["CNT"];
  202. else
  203. return false;
  204. }
  205. $strSql = "SELECT ".$arSqls["SELECT"]." FROM b_catalog_disc_save_range DSR ".$arSqls["FROM"];
  206. if (!empty($arSqls["WHERE"]))
  207. $strSql .= " WHERE ".$arSqls["WHERE"];
  208. if (!empty($arSqls["GROUPBY"]))
  209. $strSql .= " GROUP BY ".$arSqls["GROUPBY"];
  210. if (!empty($arSqls["ORDERBY"]))
  211. $strSql .= " ORDER BY ".$arSqls["ORDERBY"];
  212. $intTopCount = 0;
  213. $boolNavStartParams = (!empty($arNavStartParams) && is_array($arNavStartParams));
  214. if ($boolNavStartParams && array_key_exists('nTopCount', $arNavStartParams))
  215. {
  216. $intTopCount = intval($arNavStartParams["nTopCount"]);
  217. }
  218. if ($boolNavStartParams && 0 >= $intTopCount)
  219. {
  220. $strSql_tmp = "SELECT COUNT('x') as CNT FROM b_catalog_disc_save_range DSR ".$arSqls["FROM"];
  221. if (!empty($arSqls["WHERE"]))
  222. $strSql_tmp .= " WHERE ".$arSqls["WHERE"];
  223. if (!empty($arSqls["GROUPBY"]))
  224. $strSql_tmp .= " GROUP BY ".$arSqls["GROUPBY"];
  225. $dbRes = $DB->Query($strSql_tmp, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  226. $cnt = 0;
  227. if (empty($arSqls["GROUPBY"]))
  228. {
  229. if ($arRes = $dbRes->Fetch())
  230. $cnt = $arRes["CNT"];
  231. }
  232. else
  233. {
  234. $cnt = $dbRes->SelectedRowsCount();
  235. }
  236. $dbRes = new CDBResult();
  237. $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
  238. }
  239. else
  240. {
  241. if ($boolNavStartParams && 0 < $intTopCount)
  242. {
  243. $strSql .= " LIMIT ".$intTopCount;
  244. }
  245. $dbRes = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  246. }
  247. return $dbRes;
  248. }
  249. public static function GetGroupByDiscount($arOrder = array(), $arFilter = array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array())
  250. {
  251. global $DB;
  252. $arFields = array(
  253. "ID" => array("FIELD" => "DSG.ID", "TYPE" => "int"),
  254. "DISCOUNT_ID" => array("FIELD" => "DSG.DISCOUNT_ID", "TYPE" => "int"),
  255. "GROUP_ID" => array("FIELD" => "DSG.GROUP_ID", "TYPE" => "int"),
  256. );
  257. $arSqls = CCatalog::PrepareSql($arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields);
  258. $arSqls["SELECT"] = str_replace("%%_DISTINCT_%%", "", $arSqls["SELECT"]);
  259. if (empty($arGroupBy) && is_array($arGroupBy))
  260. {
  261. $strSql = "SELECT ".$arSqls["SELECT"]." FROM b_catalog_disc_save_group DSG ".$arSqls["FROM"];
  262. if (!empty($arSqls["WHERE"]))
  263. $strSql .= " WHERE ".$arSqls["WHERE"];
  264. if (!empty($arSqls["GROUPBY"]))
  265. $strSql .= " GROUP BY ".$arSqls["GROUPBY"];
  266. $dbRes = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  267. if ($arRes = $dbRes->Fetch())
  268. return $arRes["CNT"];
  269. else
  270. return false;
  271. }
  272. $strSql = "SELECT ".$arSqls["SELECT"]." FROM b_catalog_disc_save_group DSG ".$arSqls["FROM"];
  273. if (!empty($arSqls["WHERE"]))
  274. $strSql .= " WHERE ".$arSqls["WHERE"];
  275. if (!empty($arSqls["GROUPBY"]))
  276. $strSql .= " GROUP BY ".$arSqls["GROUPBY"];
  277. if (!empty($arSqls["ORDERBY"]))
  278. $strSql .= " ORDER BY ".$arSqls["ORDERBY"];
  279. $intTopCount = 0;
  280. $boolNavStartParams = (!empty($arNavStartParams) && is_array($arNavStartParams));
  281. if ($boolNavStartParams && array_key_exists('nTopCount', $arNavStartParams))
  282. {
  283. $intTopCount = intval($arNavStartParams["nTopCount"]);
  284. }
  285. if ($boolNavStartParams && 0 >= $intTopCount)
  286. {
  287. $strSql_tmp = "SELECT COUNT('x') as CNT FROM b_catalog_disc_save_group DSG ".$arSqls["FROM"];
  288. if (!empty($arSqls["WHERE"]))
  289. $strSql_tmp .= " WHERE ".$arSqls["WHERE"];
  290. if (!empty($arSqls["GROUPBY"]))
  291. $strSql_tmp .= " GROUP BY ".$arSqls["GROUPBY"];
  292. $dbRes = $DB->Query($strSql_tmp, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  293. $cnt = 0;
  294. if (empty($arSqls["GROUPBY"]))
  295. {
  296. if ($arRes = $dbRes->Fetch())
  297. $cnt = $arRes["CNT"];
  298. }
  299. else
  300. {
  301. $cnt = $dbRes->SelectedRowsCount();
  302. }
  303. $dbRes = new CDBResult();
  304. $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
  305. }
  306. else
  307. {
  308. if ($boolNavStartParams && 0 < $intTopCount)
  309. {
  310. $strSql .= " LIMIT ".$intTopCount;
  311. }
  312. $dbRes = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  313. }
  314. return $dbRes;
  315. }
  316. public static function GetUserInfoByDiscount($arOrder = array(), $arFilter = array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array())
  317. {
  318. global $DB;
  319. $arFields = array(
  320. "ID" => array("FIELD" => "DSU.ID", "TYPE" => "int"),
  321. "DISCOUNT_ID" => array("FIELD" => "DSU.DISCOUNT_ID", "TYPE" => "int"),
  322. "USER_ID" => array("FIELD" => "DSU.USER_ID", "TYPE" => "int"),
  323. "ACTIVE_FROM" => array("FIELD" => "DSU.ACTIVE_FROM", "TYPE" => "datetime"),
  324. "ACTIVE_TO" => array("FIELD" => "DSU.ACTIVE_TO", "TYPE" => "datetime"),
  325. "RANGE_FROM" => array("FIELD" => "DSU.RANGE_FROM", "TYPE" => "double"),
  326. );
  327. $arSqls = CCatalog::PrepareSql($arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields);
  328. $arSqls["SELECT"] = str_replace("%%_DISTINCT_%%", "", $arSqls["SELECT"]);
  329. if (empty($arGroupBy) && is_array($arGroupBy))
  330. {
  331. $strSql = "SELECT ".$arSqls["SELECT"]." FROM b_catalog_disc_save_user DSU ".$arSqls["FROM"];
  332. if (!empty($arSqls["WHERE"]))
  333. $strSql .= " WHERE ".$arSqls["WHERE"];
  334. if (!empty($arSqls["GROUPBY"]))
  335. $strSql .= " GROUP BY ".$arSqls["GROUPBY"];
  336. $dbRes = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  337. if ($arRes = $dbRes->Fetch())
  338. return $arRes["CNT"];
  339. else
  340. return false;
  341. }
  342. $strSql = "SELECT ".$arSqls["SELECT"]." FROM b_catalog_disc_save_user DSU ".$arSqls["FROM"];
  343. if (!empty($arSqls["WHERE"]))
  344. $strSql .= " WHERE ".$arSqls["WHERE"];
  345. if (!empty($arSqls["GROUPBY"]))
  346. $strSql .= " GROUP BY ".$arSqls["GROUPBY"];
  347. if (!empty($arSqls["ORDERBY"]))
  348. $strSql .= " ORDER BY ".$arSqls["ORDERBY"];
  349. $intTopCount = 0;
  350. $boolNavStartParams = (!empty($arNavStartParams) && is_array($arNavStartParams));
  351. if ($boolNavStartParams && array_key_exists('nTopCount', $arNavStartParams))
  352. {
  353. $intTopCount = intval($arNavStartParams["nTopCount"]);
  354. }
  355. if ($boolNavStartParams && 0 >= $intTopCount)
  356. {
  357. $strSql_tmp = "SELECT COUNT('x') as CNT FROM b_catalog_disc_save_user DSU ".$arSqls["FROM"];
  358. if (!empty($arSqls["WHERE"]))
  359. $strSql_tmp .= " WHERE ".$arSqls["WHERE"];
  360. if (!empty($arSqls["GROUPBY"]))
  361. $strSql_tmp .= " GROUP BY ".$arSqls["GROUPBY"];
  362. $dbRes = $DB->Query($strSql_tmp, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  363. $cnt = 0;
  364. if (empty($arSqls["GROUPBY"]))
  365. {
  366. if ($arRes = $dbRes->Fetch())
  367. $cnt = $arRes["CNT"];
  368. }
  369. else
  370. {
  371. $cnt = $dbRes->SelectedRowsCount();
  372. }
  373. $dbRes = new CDBResult();
  374. $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
  375. }
  376. else
  377. {
  378. if ($boolNavStartParams && 0 < $intTopCount)
  379. {
  380. $strSql .= " LIMIT ".$intTopCount;
  381. }
  382. $dbRes = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  383. }
  384. return $dbRes;
  385. }
  386. protected static function __GetDiscountIDByGroup($arUserGroup = array())
  387. {
  388. global $DB;
  389. $arResult = array();
  390. if (!empty($arUserGroup) && is_array($arUserGroup))
  391. {
  392. $arValid = array();
  393. foreach ($arUserGroup as &$intGroupID)
  394. {
  395. $intGroupID = intval($intGroupID);
  396. if (0 < $intGroupID && 2 != $intGroupID)
  397. $arValid[] = $intGroupID;
  398. }
  399. if (isset($intGroupID))
  400. unset($intGroupID);
  401. if (!empty($arValid))
  402. {
  403. $arUserGroup = array_unique($arValid);
  404. $strUserGroup = implode(' or GROUP_ID = ',$arUserGroup);
  405. $strQuery = 'select DISCOUNT_ID from b_catalog_disc_save_group WHERE GROUP_ID = '.$strUserGroup;
  406. $rsDiscounts = $DB->Query($strQuery, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  407. while ($arDiscount = $rsDiscounts->Fetch())
  408. {
  409. $arResult[] = intval($arDiscount['DISCOUNT_ID']);
  410. }
  411. if (!empty($arResult))
  412. $arResult = array_unique($arResult);
  413. }
  414. }
  415. return $arResult;
  416. }
  417. protected static function __GetUserInfoByDiscount($arParams, $arSettings = array())
  418. {
  419. global $DB;
  420. $arResult = false;
  421. if (!empty($arParams) && is_array($arParams))
  422. {
  423. if (!is_array($arSettings))
  424. $arSettings = array();
  425. $boolActiveFromFilter = true;
  426. $boolDelete = true;
  427. if (!empty($arSettings) && isset($arSettings['ACTIVE_FROM']))
  428. $boolActiveFromFilter = (true === $arSettings['ACTIVE_FROM'] ? true : false);
  429. if (!empty($arSettings) && isset($arSettings['DELETE']))
  430. $boolDelete = (true === $arSettings['DELETE'] ? true : false);
  431. $intUserID = intval($arParams['USER_ID']);
  432. $intDiscountID = intval($arParams['DISCOUNT_ID']);
  433. $strActiveDate = strval($arParams['ACTIVE_FROM']);
  434. if (0 < $intUserID && 0 < $intDiscountID && !($boolActiveFromFilter && empty($strActiveDate)))
  435. {
  436. $strQuery = 'select U.*, '.
  437. $DB->DateToCharFunction('U.ACTIVE_FROM', 'FULL').' as ACTIVE_FROM_FORMAT, '.
  438. $DB->DateToCharFunction('U.ACTIVE_TO', 'FULL').' as ACTIVE_TO_FORMAT '.
  439. 'from b_catalog_disc_save_user U where DISCOUNT_ID = '.$intDiscountID.' AND USER_ID = '.$intUserID;
  440. if ($boolActiveFromFilter)
  441. $strQuery .= ' AND ACTIVE_FROM >= '.$DB->CharToDateFunction($strActiveDate);
  442. $rsResults = $DB->Query($strQuery, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  443. if ($arResult = $rsResults->Fetch())
  444. {
  445. }
  446. else
  447. {
  448. if ($boolDelete)
  449. {
  450. $strQuery = 'delete from b_catalog_disc_save_user where DISCOUNT_ID = '.$intDiscountID.' AND USER_ID = '.$intUserID;
  451. $DB->Query($strQuery, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  452. }
  453. }
  454. }
  455. }
  456. return $arResult;
  457. }
  458. protected static function __UpdateUserInfoByDiscount($arParams, $arSettings = array())
  459. {
  460. global $DB;
  461. if (!empty($arParams) && is_array($arParams))
  462. {
  463. if (!is_array($arSettings))
  464. $arSettings = array();
  465. $boolSearch = false;
  466. $boolDelete = true;
  467. if (!empty($arSettings) && isset($arSettings['SEARCH']))
  468. $boolSearch = (true === $arSettings['SEARCH'] ? true : false);
  469. if (!empty($arSettings) && isset($arSettings['DELETE']))
  470. $boolDelete = (true === $arSettings['DELETE'] ? true : false);
  471. $intUserID = intval($arParams['USER_ID']);
  472. $intDiscountID = intval($arParams['DISCOUNT_ID']);
  473. $strActiveFrom = strval($arParams['ACTIVE_FROM']);
  474. $strActiveTo = strval($arParams['ACTIVE_TO']);
  475. if (0 < $intUserID && 0 < $intDiscountID && !empty($strActiveFrom) && !empty($strActiveTo))
  476. {
  477. if ($boolSearch)
  478. {
  479. $strQuery = 'select ID from b_catalog_disc_save_user where DISCOUNT_ID = '.$intDiscountID.' AND USER_ID = '.$intUserID.' limit 1';
  480. $rsItems = $DB->Query($strQuery, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  481. if ($arItem = $rsItems->Fetch())
  482. {
  483. return;
  484. }
  485. }
  486. if ($boolDelete)
  487. {
  488. $strQuery = 'delete from b_catalog_disc_save_user where DISCOUNT_ID = '.$intDiscountID.' AND USER_ID = '.$intUserID;
  489. $DB->Query($strQuery, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  490. }
  491. $arInsert = $DB->PrepareInsert("b_catalog_disc_save_user", $arParams);
  492. $strQuery =
  493. "INSERT INTO b_catalog_disc_save_user(".$arInsert[0].") ".
  494. "VALUES(".$arInsert[1].")";
  495. $DB->Query($strQuery, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  496. }
  497. }
  498. }
  499. }