1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
basket.php
См. документацию.
1<?php
2
4
5require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/sale/general/basket.php");
6
8{
15 public static function _ClearProductSubscribe($LID)
16 {
17 global $DB;
18
19 $subProp = COption::GetOptionString("sale", "subscribe_prod", "");
20 $arSubProp = unserialize($subProp, ['allowed_classes' => false]);
21
22 $dayDelete = intval($arSubProp[$LID]["del_after"]);
23
24 $strSql =
25 "DELETE ".
26 "FROM b_sale_basket ".
27 "WHERE ((ORDER_ID IS NULL) OR (ORDER_ID = 0)) AND CAN_BUY = 'N' AND SUBSCRIBE = 'Y' AND TO_DAYS(DATE_INSERT) < (TO_DAYS(NOW()) - ".$dayDelete.") LIMIT 500";
28 $db_res = $DB->Query($strSql);
29
30 return true;
31 }
32
33 public static function GetList($arOrder = array(), $arFilter = array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array())
34 {
35 global $DB, $USER;
36
37 $isOrderConverted = \Bitrix\Main\Config\Option::get("main", "~sale_converted_15", 'Y');
38
39 if (!is_array($arOrder) && !is_array($arFilter))
40 {
41 $arOrder = strval($arOrder);
42 $arFilter = strval($arFilter);
43 if ($arOrder <> '' && $arFilter <> '')
44 $arOrder = array($arOrder => $arFilter);
45 else
46 $arOrder = array();
47 if (is_array($arGroupBy))
48 $arFilter = $arGroupBy;
49 else
50 $arFilter = array();
51 $arGroupBy = false;
52
53 if (mb_strtoupper($arFilter["ORDER_ID"]) == "NULL")
54 {
55 $arFilter["ORDER_ID"] = 0;
56 }
57 }
58
59 if ($isOrderConverted != 'N')
60 {
62 $arOrder,
64 $arGroupBy,
65 $arNavStartParams,
66 $arSelectFields
67 );
68 if ($result instanceof \Bitrix\Sale\Compatible\CDBResult)
69 $result->addFetchAdapter(new \Bitrix\Sale\Compatible\BasketFetchAdapter());
70 return $result;
71 }
72
73 if (empty($arSelectFields) || !is_array($arSelectFields))
74 {
75 $arSelectFields = array(
76 "ID",
77 "FUSER_ID",
78 "ORDER_ID",
79 "PRODUCT_ID",
80 "PRODUCT_PRICE_ID",
81 "PRICE", "CURRENCY",
82 "DATE_INSERT",
83 "DATE_UPDATE",
84 "WEIGHT",
85 "QUANTITY",
86 "LID",
87 "DELAY",
88 "NAME",
89 "CAN_BUY",
90 "MODULE",
91 "CALLBACK_FUNC",
92 "NOTES",
93 "ORDER_CALLBACK_FUNC",
94 "PAY_CALLBACK_FUNC",
95 "CANCEL_CALLBACK_FUNC",
96 "PRODUCT_PROVIDER_CLASS",
97 "DETAIL_PAGE_URL",
98 "DISCOUNT_PRICE",
99 "CATALOG_XML_ID",
100 "PRODUCT_XML_ID",
101 "DISCOUNT_NAME",
102 "DISCOUNT_VALUE",
103 "DISCOUNT_COUPON",
104 "VAT_RATE",
105 "USER_ID",
106 "SUBSCRIBE",
107 "BARCODE_MULTI",
108 "RESERVED",
109 "DEDUCTED",
110 "RESERVE_QUANTITY",
111 "CUSTOM_PRICE",
112 "DIMENSIONS",
113 "TYPE",
114 "SET_PARENT_ID",
115 "RECOMMENDATION"
116 );
117 }
118 elseif (in_array("*", $arSelectFields))
119 {
120 $arSelectFields = array(
121 "ID",
122 "FUSER_ID",
123 "ORDER_ID",
124 "PRODUCT_ID",
125 "PRODUCT_PRICE_ID",
126 "PRICE",
127 "CURRENCY",
128 "DATE_INSERT",
129 "DATE_UPDATE",
130 "WEIGHT",
131 "QUANTITY",
132 "LID",
133 "DELAY",
134 "NAME",
135 "CAN_BUY",
136 "MODULE",
137 "CALLBACK_FUNC",
138 "NOTES",
139 "ORDER_CALLBACK_FUNC",
140 "PAY_CALLBACK_FUNC",
141 "CANCEL_CALLBACK_FUNC",
142 "PRODUCT_PROVIDER_CLASS",
143 "DETAIL_PAGE_URL",
144 "DISCOUNT_PRICE",
145 "CATALOG_XML_ID",
146 "PRODUCT_XML_ID",
147 "DISCOUNT_NAME",
148 "DISCOUNT_VALUE",
149 "DISCOUNT_COUPON",
150 "VAT_RATE",
151 "ORDER_ALLOW_DELIVERY",
152 "ORDER_DATE_ALLOW_DELIVERY",
153 "ORDER_STATUS",
154 "ORDER_CANCELED",
155 "ORDER_PAYED",
156 "ORDER_PRICE",
157 "ORDER_DATE",
158 "ORDER_DATE_PAYED",
159 "USER_ID",
160 "SUBSCRIBE",
161 "BARCODE_MULTI",
162 "RESERVED",
163 "DEDUCTED",
164 "RESERVE_QUANTITY",
165 "CUSTOM_PRICE",
166 "DIMENSIONS",
167 "TYPE",
168 "SET_PARENT_ID",
169 "MEASURE_CODE",
170 "MEASURE_NAME",
171 "RECOMMENDATION"
172 );
173 }
174
175 // FIELDS -->
177 "ID" => array("FIELD" => "B.ID", "TYPE" => "int"),
178 "FUSER_ID" => array("FIELD" => "B.FUSER_ID", "TYPE" => "int"),
179 "ORDER_ID" => array("FIELD" => "B.ORDER_ID", "TYPE" => "int"),
180 "PRODUCT_ID" => array("FIELD" => "B.PRODUCT_ID", "TYPE" => "int"),
181 "PRODUCT_PRICE_ID" => array("FIELD" => "B.PRODUCT_PRICE_ID", "TYPE" => "int"),
182 "PRICE" => array("FIELD" => "B.PRICE", "TYPE" => "double"),
183 "CURRENCY" => array("FIELD" => "B.CURRENCY", "TYPE" => "string"),
184 "DATE_INSERT" => array("FIELD" => "B.DATE_INSERT", "TYPE" => "datetime"),
185 "DATE_UPDATE" => array("FIELD" => "B.DATE_UPDATE", "TYPE" => "datetime"),
186 "WEIGHT" => array("FIELD" => "B.WEIGHT", "TYPE" => "double"),
187 "QUANTITY" => array("FIELD" => "B.QUANTITY", "TYPE" => "double"),
188 "LID" => array("FIELD" => "B.LID", "TYPE" => "string"),
189 "DELAY" => array("FIELD" => "B.DELAY", "TYPE" => "char"),
190 "NAME" => array("FIELD" => "B.NAME", "TYPE" => "string"),
191 "CAN_BUY" => array("FIELD" => "B.CAN_BUY", "TYPE" => "char"),
192 "MODULE" => array("FIELD" => "B.MODULE", "TYPE" => "string"),
193 "CALLBACK_FUNC" => array("FIELD" => "B.CALLBACK_FUNC", "TYPE" => "string"),
194 "NOTES" => array("FIELD" => "B.NOTES", "TYPE" => "string"),
195 "ORDER_CALLBACK_FUNC" => array("FIELD" => "B.ORDER_CALLBACK_FUNC", "TYPE" => "string"),
196 "PAY_CALLBACK_FUNC" => array("FIELD" => "B.PAY_CALLBACK_FUNC", "TYPE" => "string"),
197 "CANCEL_CALLBACK_FUNC" => array("FIELD" => "B.CANCEL_CALLBACK_FUNC", "TYPE" => "string"),
198 "PRODUCT_PROVIDER_CLASS" => array("FIELD" => "B.PRODUCT_PROVIDER_CLASS", "TYPE" => "string"),
199 "DETAIL_PAGE_URL" => array("FIELD" => "B.DETAIL_PAGE_URL", "TYPE" => "string"),
200 "DISCOUNT_PRICE" => array("FIELD" => "B.DISCOUNT_PRICE", "TYPE" => "double"),
201 "CATALOG_XML_ID" => array("FIELD" => "B.CATALOG_XML_ID", "TYPE" => "string"),
202 "PRODUCT_XML_ID" => array("FIELD" => "B.PRODUCT_XML_ID", "TYPE" => "string"),
203 "DISCOUNT_NAME" => array("FIELD" => "B.DISCOUNT_NAME", "TYPE" => "string"),
204 "DISCOUNT_VALUE" => array("FIELD" => "B.DISCOUNT_VALUE", "TYPE" => "string"),
205 "DISCOUNT_COUPON" => array("FIELD" => "B.DISCOUNT_COUPON", "TYPE" => "string"),
206 "VAT_RATE" => array("FIELD" => "B.VAT_RATE", "TYPE" => "double"),
207 "SUBSCRIBE" => array("FIELD" => "B.SUBSCRIBE", "TYPE" => "char"),
208 "BARCODE_MULTI" => array("FIELD" => "B.BARCODE_MULTI", "TYPE" => "char"),
209 "RESERVED" => array("FIELD" => "B.RESERVED", "TYPE" => "char"),
210 "DEDUCTED" => array("FIELD" => "B.DEDUCTED", "TYPE" => "char"),
211 "RESERVE_QUANTITY" => array("FIELD" => "B.RESERVE_QUANTITY", "TYPE" => "double"),
212 "CUSTOM_PRICE" => array("FIELD" => "B.CUSTOM_PRICE", "TYPE" => "char"),
213 "DIMENSIONS" => array("FIELD" => "B.DIMENSIONS", "TYPE" => "string"),
214 "TYPE" => array("FIELD" => "B.TYPE", "TYPE" => "int"),
215 "SET_PARENT_ID" => array("FIELD" => "B.SET_PARENT_ID", "TYPE" => "int"),
216 "MEASURE_CODE" => array("FIELD" => "B.MEASURE_CODE", "TYPE" => "int"),
217 "MEASURE_NAME" => array("FIELD" => "B.MEASURE_NAME", "TYPE" => "string"),
218 "RECOMMENDATION" => array("FIELD" => "B.RECOMMENDATION", "TYPE" => "string"),
219
220 "ORDER_ALLOW_DELIVERY" => array("FIELD" => "O.ALLOW_DELIVERY", "TYPE" => "string", "FROM" => "LEFT JOIN b_sale_order O ON (O.ID = B.ORDER_ID)"),
221 "ORDER_DATE_ALLOW_DELIVERY" => array("FIELD" => "O.DATE_ALLOW_DELIVERY", "TYPE" => "datetime", "FROM" => "LEFT JOIN b_sale_order O ON (O.ID = B.ORDER_ID)"),
222
223 "ORDER_STATUS" => array("FIELD" => "O.STATUS_ID", "TYPE" => "string", "FROM" => "LEFT JOIN b_sale_order O ON (O.ID = B.ORDER_ID)"),
224 "ORDER_CANCELED" => array("FIELD" => "O.CANCELED", "TYPE" => "string", "FROM" => "LEFT JOIN b_sale_order O ON (O.ID = B.ORDER_ID)"),
225 "ORDER_DATE" => array("FIELD" => "O.DATE_INSERT", "TYPE" => "datetime", "FROM" => "LEFT JOIN b_sale_order O ON (O.ID = B.ORDER_ID)"),
226 "ORDER_PAYED" => array("FIELD" => "O.PAYED", "TYPE" => "string", "FROM" => "LEFT JOIN b_sale_order O ON (O.ID = B.ORDER_ID)"),
227 "ORDER_DATE_PAYED" => array("FIELD" => "O.DATE_PAYED", "TYPE" => "datetime", "FROM" => "LEFT JOIN b_sale_order O ON (O.ID = B.ORDER_ID)"),
228 "ORDER_PRICE" => array("FIELD" => "O.PRICE", "TYPE" => "double", "FROM" => "LEFT JOIN b_sale_order O ON (O.ID = B.ORDER_ID)"),
229
230 "USER_ID" => array("FIELD" => "F.USER_ID", "TYPE" => "string", "FROM" => "LEFT JOIN b_sale_fuser F ON (F.ID = B.FUSER_ID)"),
231
232 "ALL_PRICE" => array("FIELD" => "(B.PRICE+B.DISCOUNT_PRICE)", "TYPE" => "double"),
233 "SUM_PRICE" => array("FIELD" => "(B.PRICE*B.QUANTITY)", "TYPE" => "double"),
234 );
235 // <-- FIELDS
236
237 $arSqls = CSaleOrder::PrepareSql($arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields);
238
239 $arSqls["SELECT"] = str_replace("%%_DISTINCT_%%", "DISTINCT", $arSqls["SELECT"]);
240
241 if (is_array($arGroupBy) && count($arGroupBy)==0)
242 {
243 $strSql =
244 "SELECT ".$arSqls["SELECT"]." ".
245 "FROM b_sale_basket B ".
246 " ".$arSqls["FROM"]." ";
247 if ($arSqls["WHERE"] <> '')
248 $strSql .= "WHERE ".$arSqls["WHERE"]." ";
249 if ($arSqls["GROUPBY"] <> '')
250 $strSql .= "GROUP BY ".$arSqls["GROUPBY"]." ";
251
252 //echo "!1!=".htmlspecialcharsbx($strSql)."<br>";
253
254 $dbRes = $DB->Query($strSql);
255 if ($arRes = $dbRes->Fetch())
256 return $arRes["CNT"];
257 else
258 return False;
259 }
260
261 $strSql =
262 "SELECT ".$arSqls["SELECT"]." ".
263 "FROM b_sale_basket B ".
264 " ".$arSqls["FROM"]." ";
265 if ($arSqls["WHERE"] <> '')
266 $strSql .= "WHERE ".$arSqls["WHERE"]." ";
267 if ($arSqls["GROUPBY"] <> '')
268 $strSql .= "GROUP BY ".$arSqls["GROUPBY"]." ";
269 if ($arSqls["ORDERBY"] <> '')
270 $strSql .= "ORDER BY ".$arSqls["ORDERBY"]." ";
271 // echo "!3!=".htmlspecialcharsbx($strSql)."<br>";
272
273 if (is_array($arNavStartParams) && intval($arNavStartParams["nTopCount"])<=0)
274 {
275 $strSql_tmp =
276 "SELECT COUNT('x') as CNT ".
277 "FROM b_sale_basket B ".
278 " ".$arSqls["FROM"]." ";
279 if ($arSqls["WHERE"] <> '')
280 $strSql_tmp .= "WHERE ".$arSqls["WHERE"]." ";
281 if ($arSqls["GROUPBY"] <> '')
282 $strSql_tmp .= "GROUP BY ".$arSqls["GROUPBY"]." ";
283
284 //echo "!2.1!=".htmlspecialcharsbx($strSql_tmp)."<br>";
285
286 $dbRes = $DB->Query($strSql_tmp);
287 $cnt = 0;
288 if ($arSqls["GROUPBY"] == '')
289 {
290 if ($arRes = $dbRes->Fetch())
291 $cnt = $arRes["CNT"];
292 }
293 else
294 {
295 $cnt = $dbRes->SelectedRowsCount();
296 }
297
298 $dbRes = new CDBResult();
299
300 //echo "!2.2!=".htmlspecialcharsbx($strSql)."<br>";
301
302 $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
303 }
304 else
305 {
306 if (is_array($arNavStartParams) && intval($arNavStartParams["nTopCount"])>0)
307 $strSql .= "LIMIT ".intval($arNavStartParams["nTopCount"]);
308
309 //echo "!3!=".htmlspecialcharsbx($strSql)."<br>";
310
311 $dbRes = $DB->Query($strSql);
312 }
313
314 return $dbRes;
315 }
316
317 public static function GetPropsList($arOrder = array(), $arFilter = array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array())
318 {
319 global $DB;
320
321 if (!is_array($arOrder) && !is_array($arFilter))
322 {
323 $arOrder = strval($arOrder);
324 $arFilter = strval($arFilter);
325 if ($arOrder <> '' && $arFilter <> '')
326 $arOrder = array($arOrder => $arFilter);
327 else
328 $arOrder = array();
329 if (is_array($arGroupBy))
330 $arFilter = $arGroupBy;
331 else
332 $arFilter = array();
333 $arGroupBy = false;
334 }
335
336 // FIELDS -->
338 "ID" => array("FIELD" => "BP.ID", "TYPE" => "int"),
339 "BASKET_ID" => array("FIELD" => "BP.BASKET_ID", "TYPE" => "int"),
340 "NAME" => array("FIELD" => "BP.NAME", "TYPE" => "string"),
341 "VALUE" => array("FIELD" => "BP.VALUE", "TYPE" => "string"),
342 "CODE" => array("FIELD" => "BP.CODE", "TYPE" => "string"),
343 "SORT" => array("FIELD" => "BP.SORT", "TYPE" => "int")
344 );
345 // <-- FIELDS
346
347 $arSqls = CSaleOrder::PrepareSql($arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields);
348
349 $arSqls["SELECT"] = str_replace("%%_DISTINCT_%%", "DISTINCT", $arSqls["SELECT"]);
350
351 if (is_array($arGroupBy) && count($arGroupBy)==0)
352 {
353 $strSql =
354 "SELECT ".$arSqls["SELECT"]." ".
355 "FROM b_sale_basket_props BP ".
356 " ".$arSqls["FROM"]." ";
357 if ($arSqls["WHERE"] <> '')
358 $strSql .= "WHERE ".$arSqls["WHERE"]." ";
359 if ($arSqls["GROUPBY"] <> '')
360 $strSql .= "GROUP BY ".$arSqls["GROUPBY"]." ";
361
362 //echo "!1!=".htmlspecialcharsbx($strSql)."<br>";
363
364 $dbRes = $DB->Query($strSql);
365 if ($arRes = $dbRes->Fetch())
366 return $arRes["CNT"];
367 else
368 return False;
369 }
370
371 $strSql =
372 "SELECT ".$arSqls["SELECT"]." ".
373 "FROM b_sale_basket_props BP ".
374 " ".$arSqls["FROM"]." ";
375 if ($arSqls["WHERE"] <> '')
376 $strSql .= "WHERE ".$arSqls["WHERE"]." ";
377 if ($arSqls["GROUPBY"] <> '')
378 $strSql .= "GROUP BY ".$arSqls["GROUPBY"]." ";
379 if ($arSqls["ORDERBY"] <> '')
380 $strSql .= "ORDER BY ".$arSqls["ORDERBY"]." ";
381
382 if (is_array($arNavStartParams) && intval($arNavStartParams["nTopCount"])<=0)
383 {
384 $strSql_tmp =
385 "SELECT COUNT('x') as CNT ".
386 "FROM b_sale_basket_props BP ".
387 " ".$arSqls["FROM"]." ";
388 if ($arSqls["WHERE"] <> '')
389 $strSql_tmp .= "WHERE ".$arSqls["WHERE"]." ";
390 if ($arSqls["GROUPBY"] <> '')
391 $strSql_tmp .= "GROUP BY ".$arSqls["GROUPBY"]." ";
392
393 //echo "!2.1!=".htmlspecialcharsbx($strSql_tmp)."<br>";
394
395 $dbRes = $DB->Query($strSql_tmp);
396 $cnt = 0;
397 if ($arSqls["GROUPBY"] == '')
398 {
399 if ($arRes = $dbRes->Fetch())
400 $cnt = $arRes["CNT"];
401 }
402 else
403 {
404 $cnt = $dbRes->SelectedRowsCount();
405 }
406
407 $dbRes = new CDBResult();
408
409 //echo "!2.2!=".htmlspecialcharsbx($strSql)."<br>";
410
411 $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
412 }
413 else
414 {
415 if (is_array($arNavStartParams) && intval($arNavStartParams["nTopCount"])>0)
416 $strSql .= "LIMIT ".intval($arNavStartParams["nTopCount"]);
417
418 //echo "!3!=".htmlspecialcharsbx($strSql)."<br>";
419
420 $dbRes = $DB->Query($strSql);
421 }
422
423 return $dbRes;
424 }
425
426 //************** ADD, UPDATE, DELETE ********************//
427
435 public static function Add($arFields)
436 {
437 global $DB, $APPLICATION;
438
439 if (isset($arFields["ID"]))
440 unset($arFields["ID"]);
441
442 if (
443 !isset($arFields['BASE_PRICE'])
444 &&
445 isset($arFields['PRICE'])
446 &&
447 (
448 !isset($arFields['CUSTOM_PRICE'])
449 ||
450 (
451 isset($arFields['CUSTOM_PRICE'])
452 && $arFields['CUSTOM_PRICE'] === 'N'
453 )
454 )
455 )
456 {
457 $arFields['BASE_PRICE'] = $arFields['PRICE'];
458 }
459
460 $isOrderConverted = \Bitrix\Main\Config\Option::get("main", "~sale_converted_15", 'Y');
461
463
464 if ($isOrderConverted == 'N')
465 {
466 foreach(GetModuleEvents("sale", "OnBeforeBasketAdd", true) as $arEvent)
467 if (ExecuteModuleEventEx($arEvent, Array(&$arFields))===false)
468 return false;
469 }
470
471 $bFound = false;
472 $bEqAr = false;
473
474 //TODO: is order converted?
475 if ($isOrderConverted != 'N')
476 {
478 $result = \Bitrix\Sale\Compatible\BasketCompatibility::add($arFields);
479 if (!$result->isSuccess())
480 {
481 foreach($result->getErrorMessages() as $error)
482 {
483 $APPLICATION->ThrowException($error);
484 }
485
486 return false;
487 }
488
489 $ID = $result->getId();
490
491 $basketItemData = $result->getData();
492 if (array_key_exists('QUANTITY', $basketItemData))
493 {
494 $arFields['QUANTITY'] = $basketItemData['QUANTITY'];
495 }
496 }
497 else
498 {
499 $boolProps = (!empty($arFields["PROPS"]) && is_array($arFields["PROPS"]));
500
501 // check if this item is already in the basket
502 $arDuplicateFilter = array(
503 "FUSER_ID" => $arFields["FUSER_ID"],
504 "PRODUCT_ID" => $arFields["PRODUCT_ID"],
505 "LID" => $arFields["LID"],
506 "ORDER_ID" => "NULL"
507 );
508
509 if (!(isset($arFields["TYPE"]) && $arFields["TYPE"] == CSaleBasket::TYPE_SET))
510 {
511 if (isset($arFields["SET_PARENT_ID"]))
512 $arDuplicateFilter["SET_PARENT_ID"] = $arFields["SET_PARENT_ID"];
513 else
514 $arDuplicateFilter["SET_PARENT_ID"] = "NULL";
515 }
516
518 array(),
519 $arDuplicateFilter,
520 false,
521 false,
522 array("ID", "QUANTITY")
523 );
524 while($res = $db_res->Fetch())
525 {
526 if(!$bEqAr)
527 {
528 $arPropsCur = array();
529 $arPropsOld = array();
530
531 if ($boolProps)
532 {
533 foreach($arFields["PROPS"] as &$arProp)
534 {
535 if (array_key_exists('VALUE', $arProp)&& '' != $arProp["VALUE"])
536 {
537 $propID = '';
538 if (array_key_exists('CODE', $arProp) && '' != $arProp["CODE"])
539 {
540 $propID = $arProp["CODE"];
541 }
542 elseif (array_key_exists('NAME', $arProp) && '' != $arProp["NAME"])
543 {
544 $propID = $arProp["NAME"];
545 }
546 if ('' == $propID)
547 continue;
548 $arPropsCur[$propID] = $arProp["VALUE"];
549 }
550 }
551 if (isset($arProp))
552 unset($arProp);
553 }
554
556 array(),
557 array("BASKET_ID" => $res["ID"]),
558 false,
559 false,
560 array('NAME', 'VALUE', 'CODE')
561 );
562 while ($arProp = $dbProp->Fetch())
563 {
564 if ('' != $arProp["VALUE"])
565 {
566 $propID = '';
567 if ('' != $arProp["CODE"])
568 {
569 $propID = $arProp["CODE"];
570 }
571 elseif ('' != $arProp["NAME"])
572 {
573 $propID = $arProp["NAME"];
574 }
575 if ('' == $propID)
576 continue;
577 $arPropsOld[$propID] = $arProp["VALUE"];
578 }
579 }
580
581 $bEqAr = false;
582 if (count($arPropsCur) == count($arPropsOld))
583 {
584 $bEqAr = true;
585 foreach($arPropsCur as $key => $val)
586 {
587 if (!array_key_exists($key, $arPropsOld) || $arPropsOld[$key] != $val)
588 {
589 $bEqAr = false;
590 break;
591 }
592 }
593 }
594
595 if ($bEqAr)
596 {
597 $ID = $res["ID"];
598 $arFields["QUANTITY"] += $res["QUANTITY"];
599 CSaleBasket::Update($ID, $arFields);
600 $bFound = true;
601 continue;
602 }
603 }
604 }
605 }
606
607 if (!$bFound)
608 {
609 //TODO: is order converted?
610 if ($isOrderConverted == 'N')
611 {
612 $arInsert = $DB->PrepareInsert("b_sale_basket", $arFields);
613
614 $strSql = "INSERT INTO b_sale_basket(".$arInsert[0].", DATE_INSERT, DATE_UPDATE) VALUES(".$arInsert[1].", ".$DB->GetNowFunction().", ".$DB->GetNowFunction().")";
615 $DB->Query($strSql);
616
617 $ID = intval($DB->LastID());
618
619 $boolOrder = false;
620 if (isset($arFields['ORDER_ID']))
621 {
622 $boolOrder = (0 < (int)$arFields['ORDER_ID']);
623 }
624
625 if ($boolProps)
626 {
627 foreach ($arFields["PROPS"] as &$prop)
628 {
629 if ('' != $prop["NAME"])
630 {
631 $arInsert = $DB->PrepareInsert("b_sale_basket_props", $prop);
632
633 $strSql = "INSERT INTO b_sale_basket_props(BASKET_ID, ".$arInsert[0].") VALUES(".$ID.", ".$arInsert[1].")";
634 $DB->Query($strSql);
635 }
636 }
637 if (isset($prop))
638 unset($prop);
639 }
640
641 // if item is set parent
642 if (isset($arFields["TYPE"]) && $arFields["TYPE"] == CSaleBasket::TYPE_SET)
643 {
644 CSaleBasket::Update($ID, array("SET_PARENT_ID" => $ID));
645
646 if (!isset($arFields["MANUAL_SET_ITEMS_INSERTION"])) // set items will be added separately (from admin form data)
647 {
649 if ($productProvider = CSaleBasket::GetProductProvider($arFields))
650 {
651 if (method_exists($productProvider, "GetSetItems"))
652 {
653 $arSets = $productProvider::GetSetItems($arFields["PRODUCT_ID"], CSaleBasket::TYPE_SET, array('BASKET_ID' => $ID));
654
655 if (is_array($arSets))
656 {
657 foreach ($arSets as $arSetData)
658 {
659 foreach ($arSetData["ITEMS"] as $setItem)
660 {
661 $setItem["SET_PARENT_ID"] = $ID;
662 $setItem["LID"] = $arFields["LID"];
663 $setItem["QUANTITY"] = $setItem["QUANTITY"] * $arFields["QUANTITY"];
664 $setItem['FUSER_ID'] = $arFields['FUSER_ID'];
665 CSaleBasket::Add($setItem);
666 }
667 }
668 }
669 }
670 }
671 }
672 }
673 }
674
675 if ($boolOrder)
676 {
678 $arFields["ORDER_ID"],
679 "BASKET_ADDED",
680 array(
681 "PRODUCT_ID" => $arFields["PRODUCT_ID"],
682 "NAME" => $arFields["NAME"],
683 "QUANTITY" => $arFields["QUANTITY"]
684 )
685 );
686 }
687 }
688
689 if ($isOrderConverted == 'N')
690 {
691 foreach(GetModuleEvents("sale", "OnBasketAdd", true) as $arEvent)
692 ExecuteModuleEventEx($arEvent, Array($ID, $arFields));
693 }
694
695 return $ID;
696 }
697
698 public static function Delete($ID)
699 {
700 global $DB, $APPLICATION;
701
702 $isOrderConverted = \Bitrix\Main\Config\Option::get("main", "~sale_converted_15", 'Y');
703
704 $ID = intval($ID);
705 if (0 >= $ID)
706 return false;
707
708 if ($isOrderConverted != 'N')
709 {
711 $r = \Bitrix\Sale\Compatible\BasketCompatibility::delete($ID);
712 if (!$r->isSuccess(true))
713 {
714 foreach($r->getErrorMessages() as $error)
715 {
716 $APPLICATION->ThrowException($error);
717 }
718
719 return false;
720 }
721
722 return true;
723 }
724
725 $rsBaskets = CSaleBasket::GetList(
726 array(),
727 array('ID' => $ID),
728 false,
729 false,
730 array(
731 'ID',
732 'ORDER_ID',
733 'PRODUCT_ID',
734 'NAME',
735 'SUBSCRIBE',
736 'FUSER_ID',
737 'TYPE',
738 'SET_PARENT_ID'
739 )
740 );
741 if (!($arBasket = $rsBaskets->Fetch()))
742 return false;
743
744 foreach(GetModuleEvents("sale", "OnBeforeBasketDelete", true) as $arEvent)
745 if (ExecuteModuleEventEx($arEvent, array($ID))===false)
746 return false;
747
748 if (CSaleBasketHelper::isSetParent($arBasket))
749 {
750 $rsSetItems = CSaleBasket::GetList(
751 array(),
752 array("SET_PARENT_ID" => $ID, "TYPE" => ""),
753 false,
754 false,
755 array(
756 'ID',
757 'ORDER_ID',
758 'PRODUCT_ID',
759 'NAME',
760 'SUBSCRIBE',
761 'FUSER_ID',
762 'TYPE',
763 'SET_PARENT_ID'
764 )
765 );
766 while ($arSetItem = $rsSetItems->GetNext())
767 {
768 CSaleBasket::Delete($arSetItem["ID"]);
769 }
770 }
771
772 if (0 < intval($arBasket["ORDER_ID"]))
773 CSaleOrderChange::AddRecord($arBasket["ORDER_ID"], "BASKET_REMOVED", array("PRODUCT_ID" => $arBasket["PRODUCT_ID"], "NAME" => $arBasket["NAME"]));
774
775 $DB->Query("DELETE FROM b_sale_basket_props WHERE BASKET_ID = ".$ID, true);
776
777 $DB->Query("DELETE FROM b_sale_store_barcode WHERE BASKET_ID = ".$ID, true);
778
779 $DB->Query("DELETE FROM b_sale_basket WHERE ID = ".$ID, true);
780
781 if ('Y' == $arBasket['SUBSCRIBE'] && array_key_exists('NOTIFY_PRODUCT', $_SESSION))
782 {
783 $intUserID = Sale\Fuser::getUserIdById($arBasket['FUSER_ID']);
784 if ($intUserID && array_key_exists($intUserID, $_SESSION['NOTIFY_PRODUCT']))
785 {
786 if (array_key_exists($arBasket['PRODUCT_ID'], $_SESSION['NOTIFY_PRODUCT'][$intUserID]))
787 {
788 unset($_SESSION['NOTIFY_PRODUCT'][$intUserID][$arBasket['PRODUCT_ID']]);
789 }
790 }
791 }
792
793 foreach(GetModuleEvents("sale", "OnBasketDelete", true) as $arEvent)
794 ExecuteModuleEventEx($arEvent, array($ID));
795
796 return true;
797 }
798
799 public static function DeleteAll($FUSER_ID = 0, $bIncOrdered = false)
800 {
801 global $DB, $APPLICATION;
802
803 $isOrderConverted = \Bitrix\Main\Config\Option::get("main", "~sale_converted_15", 'Y');
804
805 $bIncOrdered = ($bIncOrdered ? True : False);
806 $FUSER_ID = intval($FUSER_ID);
807 if ($FUSER_ID <= 0)
808 return false;
809
810 $arFilter = array("FUSER_ID" => $FUSER_ID, 'SET_PARENT_ID' => false);
811 if (!$bIncOrdered)
812 $arFilter["ORDER_ID"] = "NULL";
813
815 array(),
816 $arFilter,
817 false,
818 false,
819 array(
820 'ID',
821 'ORDER_ID',
822 'PRODUCT_ID',
823 'NAME',
824 )
825 );
826 while ($arBasket = $dbBasket->Fetch())
827 {
828 if ($isOrderConverted != 'N')
829 {
831 $r = \Bitrix\Sale\Compatible\BasketCompatibility::delete($arBasket["ID"]);
832 if (!$r->isSuccess(true))
833 {
834 foreach($r->getErrorMessages() as $error)
835 {
836 $APPLICATION->ThrowException($error);
837 }
838
839 return false;
840 }
841 }
842 else
843 {
844 if (0 < intval($arBasket["ORDER_ID"]))
845 CSaleOrderChange::AddRecord($arBasket["ORDER_ID"], "BASKET_REMOVED", array("PRODUCT_ID" => $arBasket["PRODUCT_ID"], "NAME" => $arBasket["NAME"]));
846
847 $DB->Query("DELETE FROM b_sale_basket_props WHERE BASKET_ID = ".$arBasket["ID"], true);
848 $DB->Query("DELETE FROM b_sale_store_barcode WHERE BASKET_ID = ".$arBasket["ID"], true);
849 $DB->Query("DELETE FROM b_sale_basket WHERE ID = ".$arBasket["ID"], true);
850 }
851 }
852
853 return true;
854 }
855
856 public static function GetLeave($arOrder = Array(), $arFilter = Array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = Array())
857 {
858 global $DB;
859
860 if (!is_array($arSelectFields))
861 {
862 $arSelectFields = [];
863 }
864
865 if (empty($arSelectFields) || in_array("*", $arSelectFields))
866 {
867 $arSelectFields = [
868 "ID",
869 "FUSER_ID",
870 "USER_ID",
871 "QUANTITY_ALL",
872 "PRICE_ALL",
873 "PR_COUNT",
874 "CURRENCY",
875 "DATE_INSERT_MIN",
876 "DATE_UPDATE_MAX",
877 "LID",
878 "USER_NAME",
879 "USER_LAST_NAME",
880 "USER_LOGIN",
881 "USER_EMAIL",
882 ];
883 }
884
886 "ID" => array("FIELD" => "B.ID", "TYPE" => "int"),
887 "FUSER_ID" => array("FIELD" => "B.FUSER_ID", "TYPE" => "int"),
888 "ORDER_ID" => array("FIELD" => "B.ORDER_ID", "TYPE" => "int"),
889 "PRODUCT_ID" => array("FIELD" => "B.PRODUCT_ID", "TYPE" => "int"),
890 "PRICE" => array("FIELD" => "B.PRICE", "TYPE" => "double"),
891 "CURRENCY" => array("FIELD" => "B.CURRENCY", "TYPE" => "string"),
892 "DATE_INSERT" => array("FIELD" => "B.DATE_INSERT", "TYPE" => "datetime"),
893 "DATE_UPDATE" => array("FIELD" => "B.DATE_UPDATE", "TYPE" => "datetime"),
894 "WEIGHT" => array("FIELD" => "B.WEIGHT", "TYPE" => "double"),
895 "QUANTITY" => array("FIELD" => "B.QUANTITY", "TYPE" => "double"),
896 "LID" => array("FIELD" => "B.LID", "TYPE" => "string"),
897 "DELAY" => array("FIELD" => "B.DELAY", "TYPE" => "char"),
898 "NAME" => array("FIELD" => "B.NAME", "TYPE" => "string"),
899 "CAN_BUY" => array("FIELD" => "B.CAN_BUY", "TYPE" => "char"),
900 "MODULE" => array("FIELD" => "B.MODULE", "TYPE" => "string"),
901 "CALLBACK_FUNC" => array("FIELD" => "B.CALLBACK_FUNC", "TYPE" => "string"),
902 "NOTES" => array("FIELD" => "B.NOTES", "TYPE" => "string"),
903 "ORDER_CALLBACK_FUNC" => array("FIELD" => "B.ORDER_CALLBACK_FUNC", "TYPE" => "string"),
904 "PAY_CALLBACK_FUNC" => array("FIELD" => "B.PAY_CALLBACK_FUNC", "TYPE" => "string"),
905 "CANCEL_CALLBACK_FUNC" => array("FIELD" => "B.CANCEL_CALLBACK_FUNC", "TYPE" => "string"),
906 "DETAIL_PAGE_URL" => array("FIELD" => "B.DETAIL_PAGE_URL", "TYPE" => "string"),
907 "DISCOUNT_PRICE" => array("FIELD" => "B.DISCOUNT_PRICE", "TYPE" => "double"),
908 "CATALOG_XML_ID" => array("FIELD" => "B.CATALOG_XML_ID", "TYPE" => "string"),
909 "PRODUCT_XML_ID" => array("FIELD" => "B.PRODUCT_XML_ID", "TYPE" => "string"),
910 "DISCOUNT_NAME" => array("FIELD" => "B.DISCOUNT_NAME", "TYPE" => "string"),
911 "DISCOUNT_VALUE" => array("FIELD" => "B.DISCOUNT_VALUE", "TYPE" => "string"),
912 "DISCOUNT_COUPON" => array("FIELD" => "B.DISCOUNT_COUPON", "TYPE" => "string"),
913 "VAT_RATE" => array("FIELD" => "B.VAT_RATE", "TYPE" => "double"),
914 "SUBSCRIBE" => array("FIELD" => "B.SUBSCRIBE", "TYPE" => "char"),
915 "DIMENSIONS" => array("FIELD" => "B.DIMENSIONS", "TYPE" => "string"),
916 "USER_ID" => array("FIELD" => "F.USER_ID", "TYPE" => "string", "FROM" => "LEFT JOIN b_sale_fuser F ON (F.ID = B.FUSER_ID)"),
917 "QUANTITY_ALL" => array("FIELD" => "SUM(B.QUANTITY)", "TYPE" => "double"),
918 "PRICE_ALL" => array("FIELD" => "SUM(B.QUANTITY*B.PRICE)", "TYPE" => "double"),
919 "PR_COUNT" => array("FIELD" => "COUNT(B.ID)", "TYPE" => "int"),
920 "DATE_INSERT_MIN" => array("FIELD" => "MIN(B.DATE_INSERT)", "TYPE" => "datetime"),
921 "DATE_UPDATE_MAX" => array("FIELD" => "MAX(B.DATE_UPDATE)", "TYPE" => "datetime"),
922 "NAME_SEARCH" => array("FIELD" => "U.NAME, U.LAST_NAME, U.SECOND_NAME, U.EMAIL, U.LOGIN, U.ID", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U ON (U.ID = F.USER_ID)"),
923 "USER_NAME" => array("FIELD" => "U.NAME", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U ON (U.ID = F.USER_ID)"),
924 "USER_LAST_NAME" => array("FIELD" => "U.LAST_NAME", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U ON (U.ID = F.USER_ID)"),
925 "USER_LOGIN" => array("FIELD" => "U.LOGIN", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U ON (U.ID = F.USER_ID)"),
926 "USER_EMAIL" => array("FIELD" => "U.EMAIL", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U ON (U.ID = F.USER_ID)"),
927 "USER_GROUP_ID" => array("FIELD" => "UG.GROUP_ID", "TYPE" => "int", "FROM" => "LEFT JOIN b_user_group UG ON (UG.USER_ID = F.USER_ID)"),
928 );
929
930 $arFilter["ORDER_ID"] = false;
931 if(!in_array("FUSER_ID", $arSelectFields))
932 $arSelectFields[] = "FUSER_ID";
933 if(!in_array("USER_ID", $arSelectFields))
934 $arSelectFields[] = "USER_ID";
935 if(!in_array("LID", $arSelectFields))
936 $arSelectFields[] = "LID";
937
938 $arFilterH = [];
939 $arSqlsH = [];
940 if(!empty($arFilter))
941 {
942 foreach($arFilter as $k => $v)
943 {
944 if(mb_strpos($k, "QUANTITY_ALL") !== false || mb_strpos($k, "PRICE_ALL") !== false || mb_strpos($k, "PR_COUNT") !== false)
945 {
946 $arFilterH[$k] = $v;
947 unset($arFilter[$k]);
948 }
949 }
950 }
951
952 if (!empty($arFilterH))
953 {
954 $arSqlsH = CSaleOrder::PrepareSql($arFields, $arOrder, $arFilterH, false, $arSelectFields);
955 }
956 $arSqls = CSaleOrder::PrepareSql($arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields);
957
958 $arSqls["SELECT"] = str_replace("%%_DISTINCT_%%", "", $arSqls["SELECT"]);
959
960 $strSql =
961 "SELECT ".$arSqls["SELECT"]." ".
962 "FROM b_sale_basket B ".
963 " ".$arSqls["FROM"]." ";
964 $strSql .= "WHERE ".$arSqls["WHERE"]." ";
965 $strSql .= "GROUP BY B.FUSER_ID, F.USER_ID, B.LID ";
966 if (isset($arSqlsH["WHERE"]) && $arSqlsH["WHERE"] !== '')
967 {
968 $strSql .= "HAVING " . $arSqlsH["WHERE"] . " ";
969 }
970 if ($arSqls["ORDERBY"] !== '')
971 {
972 $strSql .= "ORDER BY " . $arSqls["ORDERBY"] . " ";
973 }
974
975 $topCount = 0;
976 $useNavParams = is_array($arNavStartParams);
977 if ($useNavParams && isset($arNavStartParams['nTopCount']))
978 {
979 $topCount = (int)$arNavStartParams['nTopCount'];
980 }
981
982 if ($useNavParams && $topCount <= 0)
983 {
984 $strSql_tmp =
985 "SELECT COUNT('x') as CNT ".
986 "FROM b_sale_basket B ".
987 " ".$arSqls["FROM"]." ";
988 if ($arSqls["WHERE"] !== '')
989 {
990 $strSql_tmp .= "WHERE " . $arSqls["WHERE"] . " ";
991 }
992 $strSql_tmp .= "GROUP BY B.FUSER_ID, F.USER_ID, B.LID ";
993 if (isset($arSqlsH["WHERE"]) && $arSqlsH["WHERE"] !== '')
994 {
995 $strSql_tmp .= "HAVING " . $arSqlsH["WHERE"] . " ";
996 }
997
998 $dbRes = $DB->Query($strSql_tmp);
999 $cnt = $dbRes->SelectedRowsCount();
1000
1001 $dbRes = new CDBResult();
1002
1003 $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
1004 }
1005 else
1006 {
1007 if ($useNavParams && $topCount > 0)
1008 {
1009 $strSql .= "LIMIT " . $topCount;
1010 }
1011
1012 $dbRes = $DB->Query($strSql);
1013 }
1014
1015 return $dbRes;
1016 }
1017}
1018
1020{
1027 public static function Add()
1028 {
1029 $internalResult = Sale\Fuser::add();
1030
1031 return
1032 $internalResult->isSuccess()
1033 ? $internalResult->getId()
1034 : 0
1035 ;
1036 }
1037
1044 public static function _Add($arFields)
1045 {
1046 global $DB;
1047
1048 $arFields1 = array();
1049 foreach ($arFields as $key => $value)
1050 {
1051 if (mb_substr($key, 0, 1) == "=")
1052 {
1053 $arFields1[mb_substr($key, 1)] = $value;
1054 unset($arFields[$key]);
1055 }
1056 }
1057
1058 if (!CSaleUser::CheckFields("ADD", $arFields))
1059 return false;
1060
1061 $arInsert = $DB->PrepareInsert("b_sale_fuser", $arFields);
1062
1063 foreach ($arFields1 as $key => $value)
1064 {
1065 if ($arInsert[0] <> '') $arInsert[0] .= ", ";
1066 $arInsert[0] .= $key;
1067 if ($arInsert[1] <> '') $arInsert[1] .= ", ";
1068 $arInsert[1] .= $value;
1069 }
1070
1071 $strSql =
1072 "INSERT INTO b_sale_fuser(".$arInsert[0].") ".
1073 "VALUES(".$arInsert[1].")";
1074 $DB->Query($strSql);
1075
1076 return (int)$DB->LastID();
1077 }
1078
1079 public static function DeleteOld($nDays)
1080 {
1081 global $DB;
1082
1083 $nDays = intval($nDays);
1084 $strSql =
1085 "SELECT f.ID ".
1086 "FROM b_sale_fuser f ".
1087 "LEFT JOIN b_sale_order o ON (o.USER_ID = f.USER_ID) ".
1088 "WHERE ".
1089 " TO_DAYS(f.DATE_UPDATE)<(TO_DAYS(NOW())-".$nDays.") ".
1090 " AND o.ID is null ".
1091 " AND f.USER_ID is null ".
1092 "LIMIT 300";
1093
1094 $db_res = $DB->Query($strSql);
1095 while ($ar_res = $db_res->Fetch())
1096 {
1097 CSaleBasket::DeleteAll($ar_res["ID"], false);
1099 }
1100
1101 return true;
1102 }
1103
1104 public static function GetBuyersList($arOrder = Array(), $arFilter = Array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = Array())
1105 {
1106 global $DB;
1107 if(empty($arSelectFields) || in_array("*", $arSelectFields))
1108 $arSelectFields = Array("ID", "ACTIVE", "LID", "DATE_REGISTER", "LOGIN", "EMAIL", "NAME", "LAST_NAME", "SECOND_NAME", "PERSONAL_PHONE", "USER_ID", "LAST_LOGIN", "TIMESTAMP_X", "PERSONAL_BIRTHDAY", "ORDER_COUNT", "ORDER_SUM", "CURRENCY", "LAST_ORDER_DATE");
1109
1110 $arFields_m = array("ACTIVE", "LOGIN", "EMAIL", "NAME", "LAST_NAME", "SECOND_NAME", "PERSONAL_PHONE");
1111 $arFields_md = array("LAST_LOGIN", "DATE_REGISTER", "TIMESTAMP_X", "PERSONAL_BIRTHDAY");
1112
1113 $CURRENCY = "";
1114 if($arFilter["CURRENCY"] <> '')
1115 {
1116 $CURRENCY = $arFilter["CURRENCY"];
1117 unset($arFilter["CURRENCY"]);
1118 }
1119 else
1120 {
1121 CModule::IncludeModule("currency");
1123 }
1124
1125 $LID = "";
1126 if($arFilter["LID"] <> '')
1127 {
1128 $LID = $arFilter["LID"];
1129 unset($arFilter["LID"]);
1130 }
1131 else
1132 {
1133 $rsSites = CSite::GetList("id", "asc", array("ACTIVE" => "Y"));
1134 $arSite = $rsSites->Fetch();
1135 $LID = $arSite["ID"];
1136 }
1137
1138 $arFields = array(
1139 "ID" => array("FIELD" => "F.ID", "TYPE" => "int"),
1140 "LID" => array("FIELD" => "O1.LID", "TYPE" => "string"),
1141 "ORDER_COUNT" => array("FIELD" => "(SELECT COUNT(O3.PRICE) FROM b_sale_order O3 WHERE O3.USER_ID=F.USER_ID AND O3.CURRENCY = '".$DB->ForSQL($CURRENCY)."' AND O3.PAYED = 'Y' AND O3.LID = '".$DB->ForSQL($LID)."' )", "TYPE" => "double"),
1142 "ORDER_SUM" => array("FIELD" => "(SELECT SUM(O3.PRICE) FROM b_sale_order O3 WHERE O3.USER_ID=F.USER_ID AND O3.CURRENCY = '".$DB->ForSQL($CURRENCY)."' AND O3.PAYED = 'Y' AND O3.LID = '".$DB->ForSQL($LID)."' )", "TYPE" => "double"),
1143 "CURRENCY" => array("FIELD" => "O1.CURRENCY", "TYPE" => "string", "FROM" => "LEFT JOIN b_sale_order O1 ON (O1.USER_ID=U.ID AND O1.CURRENCY = '".$DB->ForSQL($CURRENCY)."' AND O1.LID = '".$DB->ForSQL($LID)."' AND O1.PAYED = 'Y')"),
1144 "LAST_ORDER_DATE" => array("FIELD" => "(SELECT MAX(O2.DATE_INSERT) FROM b_sale_order O2 WHERE (O2.USER_ID=F.USER_ID))", "TYPE" => "datetime"),
1145 "NAME_SEARCH" => array("FIELD" => "U.NAME, U.LAST_NAME, U.SECOND_NAME, U.EMAIL, U.LOGIN, U.ID", "TYPE" => "string", "FROM" => "INNER JOIN b_user U ON (U.ID = F.USER_ID)"),
1146 "USER_ID" => array("FIELD" => "F.USER_ID", "TYPE" => "int", "FROM" => "INNER JOIN b_user U ON (U.ID = F.USER_ID)"),
1147 "GROUPS_ID" => array("FIELD" => "UG.GROUP_ID", "TYPE" => "int", "FROM" => "LEFT JOIN b_user_group UG ON (UG.USER_ID = F.USER_ID)"),
1148 );
1149
1150 foreach($arFields_m as $val)
1151 {
1152 $arFields[$val] = array("FIELD" => "U.".$val, "TYPE" => "string", "FROM" => "INNER JOIN b_user U ON (U.ID = F.USER_ID)");
1153 }
1154 foreach($arFields_md as $val)
1155 {
1156 $arFields[$val] = array("FIELD" => "U.".$val, "TYPE" => "datetime", "FROM" => "INNER JOIN b_user U ON (U.ID = F.USER_ID)");
1157 }
1158
1159 if(!in_array("USER_ID", $arSelectFields))
1160 $arSelectFields[] = "USER_ID";
1161
1162 $arFilterH = Array();
1163 if(!empty($arFilter))
1164 {
1165 foreach($arFilter as $k => $v)
1166 {
1167 if(mb_strpos($k, "ORDER_SUM") !== false || mb_strpos($k, "ORDER_COUNT") !== false || mb_strpos($k, "LAST_ORDER_DATE") !== false)
1168 {
1169 $arFilterH[$k] = $v;
1170 unset($arFilter[$k]);
1171 }
1172 }
1173 }
1174
1175 if(!empty($arFilterH))
1176 $arSqlsH = CSaleOrder::PrepareSql($arFields, $arOrder, $arFilterH, false, $arSelectFields);
1177 $arSqls = CSaleOrder::PrepareSql($arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields);
1178
1179 $arSqls["SELECT"] = str_replace("%%_DISTINCT_%%", "", $arSqls["SELECT"]);
1180
1181 $strSql =
1182 "SELECT ".$arSqls["SELECT"]." ".
1183 "FROM b_sale_fuser F ".
1184 " ".$arSqls["FROM"]." ";
1185 if($arSqls["WHERE"] <> '')
1186 $strSql .= "WHERE ".$arSqls["WHERE"]." ";
1187 $strSql .= "GROUP BY F.USER_ID ";
1188 if ($arSqlsH["WHERE"] <> '')
1189 $strSql .= "HAVING ".$arSqlsH["WHERE"]." ";
1190 if ($arSqls["ORDERBY"] <> '')
1191 $strSql .= "ORDER BY ".$arSqls["ORDERBY"]." ";
1192 // echo "!3!=".htmlspecialcharsbx($strSql)."<br>";
1193
1194 if (is_array($arNavStartParams) && intval($arNavStartParams["nTopCount"])<=0)
1195 {
1196 $strSql_tmp =
1197 "SELECT COUNT('x') as CNT ".
1198 "FROM b_sale_fuser F ".
1199 " ".$arSqls["FROM"]." ";
1200 if ($arSqls["WHERE"] <> '')
1201 $strSql_tmp .= "WHERE ".$arSqls["WHERE"]." ";
1202 $strSql_tmp .= "GROUP BY F.USER_ID ";
1203 if ($arSqlsH["WHERE"] <> '')
1204 $strSql_tmp .= "HAVING ".$arSqlsH["WHERE"]." ";
1205
1206 // echo "!2.1!=".htmlspecialcharsbx($strSql_tmp)."<br>";
1207
1208 $dbRes = $DB->Query($strSql_tmp);
1209 $cnt = $dbRes->SelectedRowsCount();
1210
1211 $dbRes = new CDBResult();
1212
1213 // echo "!2.2!=".htmlspecialcharsbx($strSql)."<br>";
1214
1215 $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
1216 }
1217 else
1218 {
1219 if (is_array($arNavStartParams) && intval($arNavStartParams["nTopCount"])>0)
1220 $strSql .= "LIMIT ".intval($arNavStartParams["nTopCount"]);
1221
1222 // echo "!3!=".htmlspecialcharsbx($strSql)."<br>";
1223
1224 $dbRes = $DB->Query($strSql);
1225 }
1226
1227 return $dbRes;
1228 }
1229
1237 public static function GetUserID($intFUserID)
1238 {
1239 $result = Sale\Fuser::getUserIdById($intFUserID);
1240
1241 return $result > 0 ? $result : false;
1242 }
1243}
$db_res
Определения options_user_settings.php:8
$ar_res
Определения options_user_settings_set.php:16
global $APPLICATION
Определения include.php:80
static get($moduleId, $name, $default="", $siteId=false)
Определения option.php:30
static getList($sort=array(), $filter=array(), $group=null, $nav=array(), $select=array(), $callback=false)
Определения entitycompatibility.php:106
static getUserIdById($fuserId)
Определения fuser.php:177
static GetBaseCurrency()
Определения currency.php:489
Определения basket.php:12
const TYPE_SET
Определения basket.php:13
static Init($bVar=false, $bSkipFUserInit=false)
Определения basket.php:1779
static GetProductProvider($arBasketItem)
Определения basket.php:24
static AddRecord($orderId, $type, $data=array(), $entityName=null, $entityId=null)
Определения order_change.php:126
static PrepareSql(&$arFields, $arOrder, &$arFilter, $arGroupBy, $arSelectFields, $obUserFieldsSql=false, $callback=false, $arOptions=array())
Определения order.php:1070
Определения basket.php:3555
static Delete($ID)
Определения basket.php:3877
static CheckFields($ACTION, &$arFields, $ID=0)
Определения basket.php:3738
static isSetParent($arItem)
Определения basket_helper.php:49
Определения basket.php:8
static _ClearProductSubscribe($LID)
Определения basket.php:15
static GetList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
Определения basket.php:33
static GetLeave($arOrder=Array(), $arFilter=Array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=Array())
Определения basket.php:856
static GetPropsList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
Определения basket.php:317
Определения basket.php:1020
static DeleteOld($nDays)
Определения basket.php:1079
static _Add($arFields)
Определения basket.php:1044
static GetBuyersList($arOrder=Array(), $arFilter=Array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=Array())
Определения basket.php:1104
static Add()
Определения basket.php:1027
static GetUserID($intFUserID)
Определения basket.php:1237
$arFields
Определения dblapprove.php:5
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$rsSites
Определения options.php:477
$res
Определения filter_act.php:7
$result
Определения get_property_values.php:14
$bFound
Определения get_search.php:40
if($ajaxMode) $ID
Определения get_user.php:27
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
global $DB
Определения cron_frame.php:29
global $USER
Определения csv_new_run.php:40
ExecuteModuleEventEx($arEvent, $arParams=[])
Определения tools.php:5214
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
Определения tools.php:5177
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
if(empty($signedUserToken)) $key
Определения quickway.php:257
</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."%"
Определения waybill.php:936
if(CSalePaySystemAction::GetParamValue("DATE_PAY_BEFORE", false)) $dbBasket
Определения html.php:162
$val
Определения options.php:1793
$CURRENCY
Определения result.php:6
$arRes
Определения options.php:104
$error
Определения subscription_card_product.php:20
$k
Определения template_pdf.php:567
$arFilter
Определения user_search.php:106
$dbRes
Определения yandex_detail.php:168