1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
include.php
См. документацию.
1<?php
2
4define("SALE_DEBUG", false); // Debug
5
7
8$GLOBALS["SALE_FIELD_TYPES"] = array(
9 "TEXT" => GetMessage("SALE_TYPE_TEXT"),
10 "CHECKBOX" => GetMessage("SALE_TYPE_CHECKBOX"),
11 "SELECT" => GetMessage("SALE_TYPE_SELECT"),
12 "MULTISELECT" => GetMessage("SALE_TYPE_MULTISELECT"),
13 "TEXTAREA" => GetMessage("SALE_TYPE_TEXTAREA"),
14 "LOCATION" => GetMessage("SALE_TYPE_LOCATION"),
15 "RADIO" => GetMessage("SALE_TYPE_RADIO"),
16 "FILE" => GetMessage("SALE_TYPE_FILE")
17);
18
19if (!Loader::includeModule('currency'))
20 return false;
21
22// Number of processed recurring records at one time
23define("SALE_PROC_REC_NUM", 3);
24// Number of recurring payment attempts
25define("SALE_PROC_REC_ATTEMPTS", 3);
26// Time between recurring payment attempts (in seconds)
27define("SALE_PROC_REC_TIME", 43200);
28
29define("SALE_PROC_REC_FREQUENCY", 7200);
30// Owner ID base name used by CSale<etnity_name>ReportHelper clases for managing the reports.
31define("SALE_REPORT_OWNER_ID", 'sale');
32//cache orders flag for real-time exhange with 1C
33define("CACHED_b_sale_order", 3600*24);
34
37 "H" => GetMessage("I_PERIOD_HOUR"),
38 "D" => GetMessage("I_PERIOD_DAY"),
39 "W" => GetMessage("I_PERIOD_WEEK"),
40 "M" => GetMessage("I_PERIOD_MONTH"),
41 "Q" => GetMessage("I_PERIOD_QUART"),
42 "S" => GetMessage("I_PERIOD_SEMIYEAR"),
43 "Y" => GetMessage("I_PERIOD_YEAR")
44);
45
46define("SALE_VALUE_PRECISION", 4);
47define("SALE_WEIGHT_PRECISION", 3);
48
49define('BX_SALE_MENU_CATALOG_CLEAR', 'Y');
50
51$GLOBALS["AVAILABLE_ORDER_FIELDS"] = array(
52 "ID" => array("COLUMN_NAME" => "ID", "NAME" => GetMessage("SI_ORDER_ID"), "SELECT" => "ID,DATE_INSERT", "CUSTOM" => "Y", "SORT" => "ID"),
53 "LID" => array("COLUMN_NAME" => GetMessage("SI_SITE"), "NAME" => GetMessage("SI_SITE"), "SELECT" => "LID", "CUSTOM" => "N", "SORT" => "LID"),
54 "PERSON_TYPE" => array("COLUMN_NAME" => GetMessage("SI_PAYER_TYPE"), "NAME" => GetMessage("SI_PAYER_TYPE"), "SELECT" => "PERSON_TYPE_ID", "CUSTOM" => "Y", "SORT" => "PERSON_TYPE_ID"),
55 "PAYED" => array("COLUMN_NAME" => GetMessage("SI_PAID"), "NAME" => GetMessage("SI_PAID_ORDER"), "SELECT" => "PAYED,DATE_PAYED,EMP_PAYED_ID", "CUSTOM" => "Y", "SORT" => "PAYED"),
56 "PAY_VOUCHER_NUM" => array("COLUMN_NAME" => GetMessage("SI_NO_PP"), "NAME" => GetMessage("SI_NO_PP_DOC"), "SELECT" => "PAY_VOUCHER_NUM", "CUSTOM" => "N", "SORT" => "PAY_VOUCHER_NUM"),
57 "PAY_VOUCHER_DATE" => array("COLUMN_NAME" => GetMessage("SI_DATE_PP"), "NAME" => GetMessage("SI_DATE_PP_DOC"), "SELECT" => "PAY_VOUCHER_DATE", "CUSTOM" => "N", "SORT" => "PAY_VOUCHER_DATE"),
58 "DELIVERY_DOC_NUM" => array("COLUMN_NAME" => GetMessage("SI_DATE_PP_DELIVERY_DOC_NUM"), "NAME" => GetMessage("SI_DATE_PP_DOC_DELIVERY_DOC_NUM"), "SELECT" => "DELIVERY_DOC_NUM", "CUSTOM" => "N", "SORT" => "DELIVERY_DOC_NUM"),
59 "DELIVERY_DOC_DATE" => array("COLUMN_NAME" => GetMessage("SI_DATE_PP_DELIVERY_DOC_DATE"), "NAME" => GetMessage("SI_DATE_PP_DOC_DELIVERY_DOC_DATE"), "SELECT" => "DELIVERY_DOC_DATE", "CUSTOM" => "N", "SORT" => "DELIVERY_DOC_DATE"),
60 "CANCELED" => array("COLUMN_NAME" => GetMessage("SI_CANCELED"), "NAME" => GetMessage("SI_CANCELED_ORD"), "SELECT" => "CANCELED,DATE_CANCELED,EMP_CANCELED_ID", "CUSTOM" => "Y", "SORT" => "CANCELED"),
61 "STATUS" => array("COLUMN_NAME" => GetMessage("SI_STATUS"), "NAME" => GetMessage("SI_STATUS_ORD"), "SELECT" => "STATUS_ID,DATE_STATUS,EMP_STATUS_ID", "CUSTOM" => "Y", "SORT" => "STATUS_ID"),
62 "PRICE_DELIVERY" => array("COLUMN_NAME" => GetMessage("SI_DELIVERY"), "NAME" => GetMessage("SI_DELIVERY"), "SELECT" => "PRICE_DELIVERY,CURRENCY", "CUSTOM" => "Y", "SORT" => "PRICE_DELIVERY"),
63 "ALLOW_DELIVERY" => array("COLUMN_NAME" => GetMessage("SI_ALLOW_DELIVERY"), "NAME" => GetMessage("SI_ALLOW_DELIVERY1"), "SELECT" => "ALLOW_DELIVERY,DATE_ALLOW_DELIVERY,EMP_ALLOW_DELIVERY_ID", "CUSTOM" => "Y", "SORT" => "ALLOW_DELIVERY"),
64 "PRICE" => array("COLUMN_NAME" => GetMessage("SI_SUM"), "NAME" => GetMessage("SI_SUM_ORD"), "SELECT" => "PRICE,CURRENCY", "CUSTOM" => "Y", "SORT" => "PRICE"),
65 "SUM_PAID" => array("COLUMN_NAME" => GetMessage("SI_SUM_PAID"), "NAME" => GetMessage("SI_SUM_PAID1"), "SELECT" => "SUM_PAID,CURRENCY", "CUSTOM" => "Y", "SORT" => "SUM_PAID"),
66 "USER" => array("COLUMN_NAME" => GetMessage("SI_BUYER"), "NAME" => GetMessage("SI_BUYER"), "SELECT" => "USER_ID", "CUSTOM" => "Y", "SORT" => "USER_ID"),
67 "PAY_SYSTEM" => array("COLUMN_NAME" => GetMessage("SI_PAY_SYS"), "NAME" => GetMessage("SI_PAY_SYS"), "SELECT" => "PAY_SYSTEM_ID", "CUSTOM" => "Y", "SORT" => "PAY_SYSTEM_ID"),
68 "DELIVERY" => array("COLUMN_NAME" => GetMessage("SI_DELIVERY_SYS"), "NAME" => GetMessage("SI_DELIVERY_SYS"), "SELECT" => "DELIVERY_ID", "CUSTOM" => "Y", "SORT" => "DELIVERY_ID"),
69 "DATE_UPDATE" => array("COLUMN_NAME" => GetMessage("SI_DATE_UPDATE"), "NAME" => GetMessage("SI_DATE_UPDATE"), "SELECT" => "DATE_UPDATE", "CUSTOM" => "N", "SORT" => "DATE_UPDATE"),
70 "PS_STATUS" => array("COLUMN_NAME" => GetMessage("SI_PAYMENT_PS"), "NAME" => GetMessage("SI_PS_STATUS"), "SELECT" => "PS_STATUS,PS_RESPONSE_DATE", "CUSTOM" => "N", "SORT" => "PS_STATUS"),
71 "PS_SUM" => array("COLUMN_NAME" => GetMessage("SI_PS_SUM"), "NAME" => GetMessage("SI_PS_SUM1"), "SELECT" => "PS_SUM,PS_CURRENCY", "CUSTOM" => "Y", "SORT" => "PS_SUM"),
72 "TAX_VALUE" => array("COLUMN_NAME" => GetMessage("SI_TAX"), "NAME" => GetMessage("SI_TAX_SUM"), "SELECT" => "TAX_VALUE,CURRENCY", "CUSTOM" => "Y", "SORT" => "TAX_VALUE"),
73 "BASKET" => array("COLUMN_NAME" => GetMessage("SI_ITEMS"), "NAME" => GetMessage("SI_ITEMS_ORD"), "SELECT" => "", "CUSTOM" => "Y", "SORT" => "")
74);
75
76require_once __DIR__.'/autoload.php';
77
78$psConverted = \Bitrix\Main\Config\Option::get('main', '~sale_paysystem_converted');
79if ($psConverted == '')
80{
82 array(
83 "MESSAGE" => GetMessage("SALE_PAYSYSTEM_CONVERT_ERROR", array('#LANG#' => LANGUAGE_ID)),
84 "TAG" => "SALE_PAYSYSTEM_CONVERT_ERROR",
85 "MODULE_ID" => "sale",
86 "ENABLE_CLOSE" => "Y",
87 "PUBLIC_SECTION" => "N"
88 )
89 );
90}
91
92function GetBasketListSimple($bSkipFUserInit = true)
93{
94 $fUserID = (int)CSaleBasket::GetBasketUserID($bSkipFUserInit);
95 if ($fUserID > 0)
97 array("NAME" => "ASC"),
98 array("FUSER_ID" => $fUserID, "LID" => SITE_ID, "ORDER_ID" => "NULL")
99 );
100 else
101 return False;
102}
103
104function GetBasketList($bSkipFUserInit = true)
105{
106 $fUserID = (int)CSaleBasket::GetBasketUserID($bSkipFUserInit);
107 $arRes = array();
108 if ($fUserID > 0)
109 {
110 $basketID = array();
112 array(),
113 array("FUSER_ID" => $fUserID, "LID" => SITE_ID, "ORDER_ID" => false),
114 false,
115 false,
116 array('ID', 'CALLBACK_FUNC', 'PRODUCT_PROVIDER_CLASS', 'MODULE', 'PRODUCT_ID', 'QUANTITY', 'NOTES')
117 );
118 while ($res = $db_res->Fetch())
119 {
120 $res['CALLBACK_FUNC'] = (string)$res['CALLBACK_FUNC'];
121 $res['PRODUCT_PROVIDER_CLASS'] = (string)$res['PRODUCT_PROVIDER_CLASS'];
122 if ($res['CALLBACK_FUNC'] != '' || $res['PRODUCT_PROVIDER_CLASS'] != '')
123 CSaleBasket::UpdatePrice($res["ID"], $res["CALLBACK_FUNC"], $res["MODULE"], $res["PRODUCT_ID"], $res["QUANTITY"], 'N', $res["PRODUCT_PROVIDER_CLASS"], $res['NOTES']);
124 $basketID[] = $res['ID'];
125 }
126 unset($res, $db_res);
127 if (!empty($basketID))
128 {
129 $basketIterator = CSaleBasket::GetList(
130 array('NAME' => 'ASC'),
131 array('ID' => $basketID)
132 );
133 while ($basket = $basketIterator->GetNext())
134 $arRes[] = $basket;
135 unset($basket, $basketIterator);
136 }
137 unset($basketID);
138 }
139 return $arRes;
140}
141
142function SaleFormatCurrency($fSum, $strCurrency, $OnlyValue = false, $withoutFormat = false)
143{
144 if ($withoutFormat === true)
145 {
146 if ($fSum === '')
147 return '';
148
149 $currencyFormat = CCurrencyLang::GetFormatDescription($strCurrency);
150 if ($currencyFormat === false)
151 {
152 $currencyFormat = CCurrencyLang::GetDefaultValues();
153 }
154
155 $fSum = (float)$fSum;
156
157 $intDecimals = $currencyFormat['DECIMALS'];
158 if (round($fSum, $currencyFormat["DECIMALS"]) == round($fSum, 0))
159 $intDecimals = 0;
160
161 return number_format($fSum, $intDecimals, '.','');
162 }
163
164 return CCurrencyLang::CurrencyFormat($fSum, $strCurrency, !($OnlyValue === true));
165}
166
168{
169 $ORDER_ID = (int)$ORDER_ID;
170 if ($ORDER_ID <= 0)
171 return false;
172
173 $arOrder = CSaleOrder::GetByID($ORDER_ID);
174 if (!$arOrder)
175 return false;
176 if ($arOrder["PS_STATUS"] != "Y")
177 return false;
178 if ($arOrder["PAYED"] != "N")
179 return false;
180
181 if ($arOrder["CURRENCY"] == $arOrder["PS_CURRENCY"]
182 && DoubleVal($arOrder["PRICE"]) == DoubleVal($arOrder["PS_SUM"]))
183 {
184 if (CSaleOrder::PayOrder($arOrder["ID"], "Y", true, false))
185 return true;
186 }
187
188 return false;
189}
190
192{
193 $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SALE_INCLUDE_CURRENCY"), "SALE_DEPENDES_CURRENCY");
194 return false;
195}
196
197if (file_exists($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/sale/ru/include.php"))
198 include($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/sale/ru/include.php");
199
200function PayUserAccountDeliveryOrderCallback($productID, $userID, $bPaid, $orderID, $quantity = 1)
201{
202 global $DB;
203
204 $productID = intval($productID);
205 $userID = intval($userID);
206 $bPaid = ($bPaid ? True : False);
207 $orderID = intval($orderID);
208
209 if ($userID <= 0)
210 return False;
211
212 if ($orderID <= 0)
213 return False;
214
215 if (!($arOrder = CSaleOrder::GetByID($orderID)))
216 return False;
217
218 $baseLangCurrency = CSaleLang::GetLangCurrency($arOrder["LID"]);
219 $arAmount = unserialize(
220 COption::GetOptionString(
221 "sale",
222 "pay_amount",
223 'a:4:{i:1;a:2:{s:6:"AMOUNT";s:2:"10";s:8:"CURRENCY";s:3:"EUR";}i:2;a:2:{s:6:"AMOUNT";s:2:"20";s:8:"CURRENCY";s:3:"EUR";}i:3;a:2:{s:6:"AMOUNT";s:2:"30";s:8:"CURRENCY";s:3:"EUR";}i:4;a:2:{s:6:"AMOUNT";s:2:"40";s:8:"CURRENCY";s:3:"EUR";}}'
224 ),
225 ['allowed_classes' => false]
226 );
227 if (!array_key_exists($productID, $arAmount))
228 return False;
229
230 $currentPrice = $arAmount[$productID]["AMOUNT"] * $quantity;
231 $currentCurrency = $arAmount[$productID]["CURRENCY"];
232 if ($arAmount[$productID]["CURRENCY"] != $baseLangCurrency)
233 {
234 $currentPrice = CCurrencyRates::ConvertCurrency($arAmount[$productID]["AMOUNT"], $arAmount[$productID]["CURRENCY"], $baseLangCurrency) * $quantity;
235 $currentCurrency = $baseLangCurrency;
236 }
237
238 if (!CSaleUserAccount::UpdateAccount($userID, ($bPaid ? $currentPrice : -$currentPrice), $currentCurrency, "MANUAL", $orderID, "Payment to user account"))
239 return False;
240
241 return True;
242}
243
244/*
245* Formats user name. Used everywhere in 'sale' module
246*
247*/
248function GetFormatedUserName($userId, $bEnableId = true, $createEditLink = true)
249{
250 static $formattedUsersName = array();
251 static $siteNameFormat = '';
252
253 $result = (!is_array($userId)) ? '' : array();
254 $newUsers = array();
255
256 if (is_array($userId))
257 {
258 foreach ($userId as $id)
259 {
260 if (!isset($formattedUsersName[$id]))
261 $newUsers[] = $id;
262 }
263 }
264 else if(!isset($formattedUsersName[$userId]))
265 {
266 $newUsers[] = $userId;
267 }
268
269 if (count($newUsers) > 0)
270 {
272 array(
273 'select' => array('ID', 'NAME', 'LAST_NAME', 'SECOND_NAME', 'LOGIN', 'EMAIL'),
274 'filter' => array('ID' => $newUsers)
275 )
276 );
277 while ($arUser = $resUsers->Fetch())
278 {
279 if ($siteNameFormat == '')
280 $siteNameFormat = CSite::GetNameFormat(false);
281 $formattedUsersName[$arUser['ID']] = CUser::FormatName($siteNameFormat, $arUser, true, true);
282 }
283 }
284
285 $publicMode = (defined("PUBLIC_MODE") && PUBLIC_MODE == 1);
286 $selfFolderUrl = (defined("SELF_FOLDER_URL") ? SELF_FOLDER_URL : "/bitrix/admin/");
287 if ($publicMode)
288 {
289 $bEnableId = false;
291 if (!is_object($adminSidePanelHelper))
292 {
293 require_once($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/interface/admin_lib.php");
295 }
296 }
297 if (is_array($userId))
298 {
299 foreach ($userId as $uId)
300 {
301 if (CBXFeatures::IsFeatureEnabled('SaleAccounts') && !$createEditLink)
302 {
303 $userUrl = $selfFolderUrl."sale_buyers_profile.php?USER_ID=".$uId."&lang=".LANGUAGE_ID;
304 }
305 else
306 {
307 $userUrl = $selfFolderUrl."user_edit.php?ID=".$uId."&lang=".LANGUAGE_ID;
308 }
309 if ($publicMode)
310 {
311 $userUrl = $adminSidePanelHelper->editUrlToPublicPage($userUrl);
312 }
313 $formatted = '';
314 if ($bEnableId)
315 $formatted = '[<a href="/bitrix/admin/user_edit.php?ID='.$uId.'&lang='.LANGUAGE_ID.'">'.$uId.'</a>] ';
316
317 $formatted .= '<a href="'.$userUrl.'">';
318 $formatted .= $formattedUsersName[$uId];
319
320 $formatted .= '</a>';
321
322 $result[$uId] = $formatted;
323 }
324 }
325 else
326 {
327 if ($bEnableId)
328 $result .= '[<a href="/bitrix/admin/user_edit.php?ID='.$userId.'&lang='.LANGUAGE_ID.'">'.$userId.'</a>] ';
329
330 if (CBXFeatures::IsFeatureEnabled('SaleAccounts') && !$createEditLink)
331 {
332 $userUrl = $selfFolderUrl."sale_buyers_profile.php?USER_ID=".$userId."&lang=".LANGUAGE_ID;
333 }
334 else
335 {
336 $userUrl = $selfFolderUrl."user_edit.php?ID=".$userId."&lang=".LANGUAGE_ID;
337 }
338 if ($publicMode)
339 {
340 $userUrl = $adminSidePanelHelper->editUrlToPublicPage($userUrl);
341 }
342
343 $result .= '<a href="'.$userUrl.'">';
344
345 $result .= $formattedUsersName[$userId];
346
347 $result .= '</a>';
348 }
349
350 return $result;
351}
352
353/*
354 * Updates basket item arrays with information about measures from catalog
355 * Basically adds MEASURE_TEXT field with the measure name to each basket item array
356 *
357 * @param array $arBasketItems - array of basket items' arrays
358 * @return array|bool
359 */
361{
362 static $measures = array();
363 $newMeasure = array();
364 if (Loader::includeModule('catalog'))
365 {
366 $arDefaultMeasure = CCatalogMeasure::getDefaultMeasure(true, true);
367 $arElementId = array();
368 $basketLinks = array();
369 foreach ($arBasketItems as $keyBasket => $arItem)
370 {
371 if (isset($arItem['MEASURE_NAME']) && $arItem['MEASURE_NAME'] <> '')
372 {
373 $measureText = $arItem['MEASURE_NAME'];
374 $measureCode = intval($arItem['MEASURE_CODE']);
375 }
376 else
377 {
378 $productID = (int)$arItem["PRODUCT_ID"];
379 if (!isset($basketLinks[$productID]))
380 $basketLinks[$productID] = array();
381 $basketLinks[$productID][] = $keyBasket;
382 $arElementId[] = $productID;
383
384 $measureText = $arDefaultMeasure['~SYMBOL_RUS'];
385 $measureCode = 0;
386 }
387
388 $arBasketItems[$keyBasket]['MEASURE_TEXT'] = $measureText;
389 $arBasketItems[$keyBasket]['MEASURE'] = $measureCode;
390 }
391 unset($productID, $keyBasket, $arItem);
392
393 if (!empty($arElementId))
394 {
395 $arBasket2Measure = array();
397 array(),
398 array("ID" => $arElementId),
399 false,
400 false,
401 array("ID", "MEASURE")
402 );
403 while ($arRes = $dbres->Fetch())
404 {
405 $arRes['ID'] = (int)$arRes['ID'];
406 $arRes['MEASURE'] = (int)$arRes['MEASURE'];
407 if ($arRes['MEASURE'] <= 0)
408 continue;
409 if (!isset($arBasket2Measure[$arRes['MEASURE']]))
410 $arBasket2Measure[$arRes['MEASURE']] = array();
411 $arBasket2Measure[$arRes['MEASURE']][] = $arRes['ID'];
412
413 if (!isset($measures[$arRes['MEASURE']]) && !in_array($arRes['MEASURE'], $newMeasure))
414 $newMeasure[] = $arRes['MEASURE'];
415 }
416 unset($arRes, $dbres);
417
418 if (!empty($newMeasure))
419 {
420 $dbMeasure = CCatalogMeasure::GetList(
421 array(),
422 array("ID" => array_values($newMeasure)),
423 false,
424 false,
425 array('ID', 'SYMBOL_RUS', 'CODE')
426 );
427 while ($arMeasure = $dbMeasure->Fetch())
428 $measures[$arMeasure['ID']] = $arMeasure;
429 }
430
431 foreach ($arBasket2Measure as $measureId => $productIds)
432 {
433 if (!isset($measures[$measureId]))
434 continue;
435 foreach ($productIds as $productId)
436 {
437 if (isset($basketLinks[$productId]) && !empty($basketLinks[$productId]))
438 {
439 foreach ($basketLinks[$productId] as $keyBasket)
440 {
441 $arBasketItems[$keyBasket]['MEASURE_TEXT'] = $measures[$measureId]['SYMBOL_RUS'];
442 $arBasketItems[$keyBasket]['MEASURE'] = $measures[$measureId]['ID'];
443 }
444 }
445 }
446 }
447 }
448 }
449 return $arBasketItems;
450}
451
452/*
453 * Updates basket items' arrays with information about ratio from catalog
454 * Basically adds MEASURE_RATIO field with the ratio coefficient to each basket item array
455 *
456 * @param array $arBasketItems - array of basket items' arrays
457 * @return mixed
458 */
460{
461 if (Loader::includeModule('catalog'))
462 {
463 static $cacheRatio = array();
464
466 if (is_array($helperCacheRatio) && !empty($helperCacheRatio))
467 {
468 $cacheRatio = array_merge($cacheRatio, $helperCacheRatio);
469 }
470
471 $map = array();
472 $arElementId = array();
473 foreach ($arBasketItems as $key => $arItem)
474 {
475 if (
476 (isset($arBasketItems[$key]['MEASURE_RATIO_VALUE']) && (float)$arBasketItems[$key]['MEASURE_RATIO_VALUE'] > 0)
477 && (isset($arBasketItems[$key]['MEASURE_RATIO_ID']) && (int)$arBasketItems[$key]['MEASURE_RATIO_ID'] > 0)
478 )
479 continue;
480
481 $hash = md5((!empty($arItem['PRODUCT_PROVIDER_CLASS']) ? $arItem['PRODUCT_PROVIDER_CLASS']: "")."|".(!empty($arItem['MODULE']) ? $arItem['MODULE']: "")."|".$arItem["PRODUCT_ID"]);
482
483 if (isset($cacheRatio[$hash]))
484 {
485 if (isset($cacheRatio[$hash]['RATIO']))
486 {
487 $arBasketItems[$key]["MEASURE_RATIO"] = $cacheRatio[$hash]['RATIO']; // old key
488 $arBasketItems[$key]["MEASURE_RATIO_VALUE"] = $cacheRatio[$hash]["RATIO"];
489 }
490
491 if (isset($cacheRatio[$hash]['ID']))
492 {
493 $arBasketItems[$key]["MEASURE_RATIO_ID"] = $cacheRatio[$hash]["ID"];
494 }
495
496 }
497 else
498 {
499 $arElementId[$arItem["PRODUCT_ID"]] = $arItem["PRODUCT_ID"];
500 }
501
502 if (!isset($map[$arItem["PRODUCT_ID"]]))
503 {
504 $map[$arItem["PRODUCT_ID"]] = array();
505 }
506
507 $map[$arItem["PRODUCT_ID"]][] = $key;
508 }
509
510 if (!empty($arElementId))
511 {
512 $dbRatio = \Bitrix\Catalog\MeasureRatioTable::getList(array(
513 'select' => array('*'),
514 'filter' => array('@PRODUCT_ID' => $arElementId, '=IS_DEFAULT' => 'Y')
515 ));
516 while ($arRatio = $dbRatio->fetch())
517 {
518 if (empty($map[$arRatio["PRODUCT_ID"]]))
519 continue;
520
521 foreach ($map[$arRatio["PRODUCT_ID"]] as $key)
522 {
523 $arBasketItems[$key]["MEASURE_RATIO"] = $arRatio["RATIO"]; // old key
524 $arBasketItems[$key]["MEASURE_RATIO_ID"] = $arRatio["ID"];
525 $arBasketItems[$key]["MEASURE_RATIO_VALUE"] = $arRatio["RATIO"];
526
527 $itemData = $arBasketItems[$key];
528
529 $hash = md5((!empty($itemData['PRODUCT_PROVIDER_CLASS']) ? $itemData['PRODUCT_PROVIDER_CLASS']: "")."|".(!empty($itemData['MODULE']) ? $itemData['MODULE']: "")."|".$itemData["PRODUCT_ID"]);
530
531 $cacheRatio[$hash] = $arRatio;
532 }
533 unset($key);
534 }
535 unset($arRatio, $dbRatio);
536 }
537 unset($arElementId, $map);
538 }
539 return $arBasketItems;
540}
541
542/*
543 * Creates an array of iblock properties for the elements with certain IDs
544 *
545 * @param array $arElementId - array of element id
546 * @param array $arSelect - properties to select
547 * @return array - array of properties' values in the form of array("ELEMENT_ID" => array of props)
548 */
549function getProductProps($arElementId, $arSelect)
550{
551 if (!Loader::includeModule("iblock"))
552 return array();
553
554 if (empty($arElementId))
555 return array();
556
557 $arSelect = array_filter($arSelect, 'checkProductPropCode');
558 foreach (array_keys($arSelect) as $index)
559 {
560 if (mb_substr($arSelect[$index], 0, 9) === 'PROPERTY_')
561 {
562 if (mb_substr($arSelect[$index], -6) === '_VALUE')
563 $arSelect[$index] = mb_substr($arSelect[$index], 0, -6);
564 }
565 }
566 unset($index);
567
568 $arProductData = array();
569 $arElementData = array();
570 $res = CIBlockElement::GetList(
571 array(),
572 array("=ID" => array_unique($arElementId)),
573 false,
574 false,
575 array("ID", "IBLOCK_ID")
576 );
577 while ($arElement = $res->Fetch())
578 $arElementData[$arElement["IBLOCK_ID"]][] = $arElement["ID"]; // two getlists are used to support 1 and 2 type of iblock properties
579
580 foreach ($arElementData as $iblockId => $arElemId) // todo: possible performance bottleneck
581 {
582 $res = CIBlockElement::GetList(
583 array(),
584 array("IBLOCK_ID" => $iblockId, "=ID" => $arElemId),
585 false,
586 false,
587 $arSelect
588 );
589 while ($arElement = $res->GetNext())
590 {
591 $id = $arElement["ID"];
592 foreach ($arElement as $key => $value)
593 {
594 if (!isset($arProductData[$id]))
595 $arProductData[$id] = array();
596
597 if (isset($arProductData[$id][$key])
598 && !is_array($arProductData[$id][$key])
599 && $value !== $arProductData[$id][$key]
600 && !in_array($value, explode(", ", $arProductData[$id][$key]))
601 ) // if we have multiple property value
602 {
603 $arProductData[$id][$key] .= ", ".$value;
604 }
605 elseif (empty($arProductData[$id][$key]))
606 {
607 $arProductData[$id][$key] = $value;
608 }
609 }
610 }
611 }
612
613 return $arProductData;
614}
615
616function checkProductPropCode($selectItem)
617{
618 return ($selectItem !== null && $selectItem !== '' && $selectItem !== 'PROPERTY_');
619}
620
621function updateBasketOffersProps($oldProps, $newProps)
622{
623 if (!is_array($oldProps) || !is_array($newProps))
624 return false;
625
626 $result = array();
627 if (empty($newProps))
628 return $oldProps;
629 if (empty($oldProps))
630 return $newProps;
631 foreach ($oldProps as &$oldValue)
632 {
633 $found = false;
634 $key = false;
635 $propId = (isset($oldValue['CODE']) ? (string)$oldValue['CODE'] : '').':'.$oldValue['NAME'];
636 foreach ($newProps as $newKey => $newValue)
637 {
638 $newId = (isset($newValue['CODE']) ? (string)$newValue['CODE'] : '').':'.$newValue['NAME'];
639 if ($newId == $propId)
640 {
641 $key = $newKey;
642 $found = true;
643 break;
644 }
645 }
646 if ($found)
647 {
648 $oldValue['VALUE'] = $newProps[$key]['VALUE'];
649 unset($newProps[$key]);
650 }
651 $result[] = $oldValue;
652 }
653 unset($oldValue);
654 if (!empty($newProps))
655 {
656 foreach ($newProps as &$newValue)
657 {
658 $result[] = $newValue;
659 }
660 unset($newValue);
661 }
662 return $result;
663}
$hash
Определения ajax_redirector.php:8
$db_res
Определения options_user_settings.php:8
const BX_ROOT
Определения bx_root.php:3
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
Определения check_mail.php:18
static get($moduleId, $name, $default="", $siteId=false)
Определения option.php:30
Определения loader.php:13
static getList(array $parameters=array())
Определения datamanager.php:431
static Add($arFields)
Определения admin_notify.php:22
static ConvertCurrency($valSum, $curFrom, $curTo, $valDate="")
Определения currency_rate.php:393
static UpdatePrice($ID, $callbackFunc='', $module='', $productID=0, $quantity=0, $renewal='N', $productProvider='', $notes='')
Определения basket.php:1893
static GetBasketUserID($bSkipFUserInit=false)
Определения basket.php:1796
static UpdateAccount($userID, $sum, $currency, $description="", $orderID=0, $notes="", $paymentId=null)
Определения user.php:589
static IsFeatureEnabled($_1488512778)
Определения include.php:116
static GetList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
Определения product.php:23
static GetList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
Определения basket.php:33
static GetLangCurrency($siteId)
Определения settings.php:52
$selfFolderUrl
Определения discount_coupon_list.php:18
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$res
Определения filter_act.php:7
$result
Определения get_property_values.php:14
$iblockId
Определения iblock_catalog_edit.php:30
global $adminSidePanelHelper
Определения init_admin.php:7
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
global $DB
Определения cron_frame.php:29
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
Определения tools.php:3778
GetMessage($name, $aReplace=null)
Определения tools.php:3397
$map
Определения config.php:5
$publicMode
Определения product_settings.php:144
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
$ORDER_ID
Определения html.php:2
if($params["BILLBY_ORDER_SUBJECT"]) if( $params["PAYMENT_DATE_PAY_BEFORE"]) if($params['BILLBY_PAYER_SHOW']=='Y') $currencyFormat
Определения template.php:393
SaleFormatCurrency($fSum, $strCurrency, $OnlyValue=false, $withoutFormat=false)
Определения include.php:142
if( $psConverted=='') GetBasketListSimple($bSkipFUserInit=true)
Определения include.php:92
CurrencyModuleUnInstallSale()
Определения include.php:191
$psConverted
Определения include.php:78
GetFormatedUserName($userId, $bEnableId=true, $createEditLink=true)
Определения include.php:248
updateBasketOffersProps($oldProps, $newProps)
Определения include.php:621
AutoPayOrder($ORDER_ID)
Определения include.php:167
getProductProps($arElementId, $arSelect)
Определения include.php:549
GetBasketList($bSkipFUserInit=true)
Определения include.php:104
global $SALE_TIME_PERIOD_TYPES
Определения include.php:35
getMeasures($arBasketItems)
Определения include.php:360
getRatio($arBasketItems)
Определения include.php:459
checkProductPropCode($selectItem)
Определения include.php:616
PayUserAccountDeliveryOrderCallback($productID, $userID, $bPaid, $orderID, $quantity=1)
Определения include.php:200
$orderID
Определения result.php:9
if(CSalePaySystemAction::GetParamValue("ORDER_SUBJECT", false)) if(CSalePaySystemAction::GetParamValue("DATE_PAY_BEFORE", false)) if(CSalePaySystemAction::GetParamValue("BUYER_NAME", false)) $arBasketItems
Определения html.php:241
$arRes
Определения options.php:104
const SITE_ID
Определения sonet_set_content_view.php:12
$GLOBALS['_____370096793']
Определения update_client.php:1