1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
basketcomponenthelper.php
См. документацию.
1<?php
2namespace Bitrix\Sale;
3
4use Bitrix\Catalog;
5use Bitrix\Main;
6use Bitrix\Main\Application;
7use Bitrix\Main\Data\LocalStorage\SessionLocalStorage;
8use Bitrix\Sale;
9
11{
12 private const STORAGE_NAME = 'SALE_USER_BASKET';
13 private const SECTION_QUANTITY = 'SALE_USER_BASKET_QUANTITY';
14 private const SECTION_PRICE = 'SALE_USER_BASKET_PRICE';
15
16 private static array $currentState;
17
18 static array $cacheRatio = [];
20
28 public static function existsFUserBasketQuantity(?int $fuserId, ?string $siteId = null): bool
29 {
30 $siteId = self::prepareSiteId($siteId);
31 $fuserId = self::prepareFuserId($fuserId);
32
33 return self::getCurrentBasketQuantity($fuserId, $siteId) !== null;
34 }
35
43 public static function existsFUserBasketPrice(?int $fuserId, ?string $siteId = null): bool
44 {
45 $siteId = self::prepareSiteId($siteId);
46 $fuserId = self::prepareFuserId($fuserId);
47
48 return self::getCurrentBasketPrice($fuserId, $siteId) !== null;
49 }
50
57 public static function getFUserBasketQuantity($fuserId, $siteId = null)
58 {
59 $siteId = self::prepareSiteId($siteId);
60 $fuserId = self::prepareFuserId($fuserId);
61
62 $quantity = self::getCurrentBasketQuantity($fuserId, $siteId);
63 if ($quantity === null)
64 {
65 static::updateFUserBasketQuantity($fuserId, $siteId);
66 $quantity = self::getCurrentBasketQuantity($fuserId, $siteId);
67 }
68
69 return $quantity;
70 }
71
78 public static function getFUserBasketPrice($fuserId, $siteId = null)
79 {
80 $siteId = self::prepareSiteId($siteId);
81 $fuserId = self::prepareFuserId($fuserId);
82
83 $price = self::getCurrentBasketPrice($fuserId, $siteId);
84 if ($price === null)
85 {
86 static::updateFUserBasketPrice($fuserId, $siteId);
87 $price = self::getCurrentBasketPrice($fuserId, $siteId);
88 }
89
90 return $price;
91 }
92
99 public static function setFUserBasketQuantity($fuserId, $quantity, $siteId = null)
100 {
101 $siteId = self::prepareSiteId($siteId);
102 $fuserId = self::prepareFuserId($fuserId);
103 $quantity = self::prepareValue($quantity);
104
105 self::setCurrentBasketQuantity($fuserId, $siteId, $quantity);
106 }
107
112 public static function clearFUserBasketQuantity($fuserId, $siteId = null)
113 {
114 $siteId = self::prepareSiteId($siteId);
115 $fuserId = self::prepareFuserId($fuserId);
116
117 self::clearCurrentBasketQuantity($fuserId, $siteId);
118 }
119
126 public static function setFUserBasketPrice($fuserId, $price, $siteId = null)
127 {
128 $siteId = self::prepareSiteId($siteId);
129 $fuserId = self::prepareFuserId($fuserId);
130 $price = self::prepareValue($price);
131
132 self::setCurrentBasketPrice($fuserId, $siteId, $price);
133 }
134
139 public static function clearFUserBasketPrice($fuserId, $siteId = null)
140 {
141 $siteId = self::prepareSiteId($siteId);
142 $fuserId = self::prepareFuserId($fuserId);
143
144 self::clearCurrentBasketPrice($fuserId, $siteId);
145 }
146
154 public static function updateFUserBasketPrice($fuserId, $siteId = null, $basketList = null)
155 {
156 $siteId = self::prepareSiteId($siteId);
157 $fuserId = self::prepareFuserId($fuserId);
158
159 $price = 0;
160
161 if ($basketList === null)
162 {
163 $basketList = static::getFUserBasketList($fuserId, $siteId);
164 }
165
166 if (!empty($basketList) && is_array($basketList))
167 {
168 $orderData = static::calculatePrice($fuserId, $basketList);
169 $price = $orderData['ORDER_PRICE'];
170 }
171
172 static::setFUserBasketPrice($fuserId, $price, $siteId);
173 }
174
182 public static function updateFUserBasketQuantity($fuserId, $siteId = null, $basketList = null)
183 {
184 $siteId = self::prepareSiteId($siteId);
185 $fuserId = self::prepareFuserId($fuserId);
186
187 $quantity = 0;
188
189 if ($basketList === null)
190 {
191 $basketList = static::getFUserBasketList($fuserId, $siteId);
192 }
193
194 if (!empty($basketList) && is_array($basketList))
195 {
196 $quantity = count($basketList);
197 }
198
199 static::setFUserBasketQuantity($fuserId, $quantity, $siteId);
200 }
201
208 public static function updateFUserBasket($fuserId, $siteId = null)
209 {
210 $siteId = self::prepareSiteId($siteId);
211 $fuserId = self::prepareFuserId($fuserId);
212
213 $basketList = static::getFUserBasketList($fuserId, $siteId);
214
215 static::updateFUserBasketPrice($fuserId, $siteId, $basketList);
216 static::updateFUserBasketQuantity($fuserId, $siteId, $basketList);
217 }
218
225 protected static function getFUserBasketList($fuserId, $siteId = null)
226 {
227 $siteId = self::prepareSiteId($siteId);
228 $fuserId = self::prepareFuserId($fuserId);
229
232 $basketClassName = $registry->getBasketClassName();
233
234 $basketList = [];
235 $res = $basketClassName::getList([
236 'filter' => [
237 '=FUSER_ID' => $fuserId,
238 '=ORDER_ID' => null,
239 '=LID' => $siteId,
240 '=CAN_BUY' => 'Y',
241 '=DELAY' => 'N',
242 ],
243 ]);
244 while ($data = $res->fetch())
245 {
247 continue;
248
249 if (!isset($data['BASE_PRICE']) || (float)$data['BASE_PRICE'] <= 0)
250 {
251 $data['BASE_PRICE'] = $data['PRICE'] + $data['DISCOUNT_PRICE'];
252 }
253
254 $basketList[] = $data;
255 }
256
257 return $basketList;
258 }
259
266 protected static function calculatePrice($fuserId, array $basketList)
267 {
268 $totalPrice = 0;
269 $totalWeight = 0;
270
271 foreach ($basketList as $basketData)
272 {
273 $totalPrice += $basketData["PRICE"] * $basketData["QUANTITY"];
274 $totalWeight += $basketData["WEIGHT"] * $basketData["QUANTITY"];
275 }
276
277 $orderData = array(
278 'SITE_ID' => SITE_ID,
279 'ORDER_PRICE' => $totalPrice,
280 'ORDER_WEIGHT' => $totalWeight,
281 'BASKET_ITEMS' => $basketList
282 );
283
285
286 $basketClassName = $registry->getBasketClassName();
287
289 $basket = $basketClassName::create(SITE_ID);
290 $basket->setFUserId($fuserId);
291 foreach ($basketList as $oldItem)
292 {
293 $item = $basket->createItem($oldItem['MODULE'], $oldItem['PRODUCT_ID']);
294 unset($oldItem['MODULE'], $oldItem['PRODUCT_ID']);
295 $item->initFields($oldItem);
296 }
297 $orderData['ORDER_PRICE'] = self::calculateBasketCost($basket);
298 unset($basket);
299
300 return $orderData;
301 }
302
303
309 public static function onSaleBasketItemEntitySaved(Main\Event $event): Main\EventResult
310 {
311 $fuserId = Fuser::getId(true);
312 $basketItem = $event->getParameter('ENTITY');
313
314 if (!($basketItem instanceof BasketItem))
315 {
316 return new Main\EventResult( Main\EventResult::SUCCESS, null, 'sale');
317 }
318 if ($basketItem->isBundleChild())
319 {
320 return new Main\EventResult( Main\EventResult::SUCCESS, null, 'sale');
321 }
322
324 if (!($basket = $basketItem->getCollection())
325 || ($basketItem->getFUserId() != $fuserId)
326 )
327 {
328 return new Main\EventResult( Main\EventResult::SUCCESS, null, 'sale');
329 }
330
331 if ($basketItem->isChanged())
332 {
333 $originalValues = $event->getParameter('VALUES');
334
335 $updateSessionData = false;
336
337 if (!$basket->getOrder())
338 {
339 if (!$updateSessionData && array_key_exists('QUANTITY', $originalValues))
340 {
341 $updateSessionData = true;
342 }
343
344 if (!$updateSessionData && (array_key_exists('PRICE', $originalValues) && PriceMaths::roundPrecision($originalValues['PRICE']) !== PriceMaths::roundPrecision($basketItem->getPrice())))
345 {
346 $updateSessionData = true;
347 }
348
349 if (!$updateSessionData && (array_key_exists('DISCOUNT_PRICE', $originalValues) && PriceMaths::roundPrecision($originalValues['DISCOUNT_PRICE']) !== PriceMaths::roundPrecision($basketItem->getDiscountPrice())))
350 {
351 $updateSessionData = true;
352 }
353 }
354
355 if (!$updateSessionData && (array_key_exists('ORDER_ID', $originalValues) && (intval($originalValues['ORDER_ID'])) == 0 && intval($basketItem->getField('ORDER_ID') > 0)))
356 {
357 $updateSessionData = true;
358 }
359
360 if (!$updateSessionData
361 && (array_key_exists('CAN_BUY', $originalValues) && ($originalValues['CAN_BUY'] !== $basketItem->getField('CAN_BUY'))))
362 {
363 $updateSessionData = true;
364 }
365
366 if (!$updateSessionData
367 && (array_key_exists('DELAY', $originalValues) && ($originalValues['DELAY'] !== $basketItem->getField('DELAY'))))
368 {
369 $updateSessionData = true;
370 }
371
372 if ($updateSessionData)
373 {
374 $siteId = $basket->getSiteId();
375 static::clearFUserBasketPrice($fuserId, $siteId);
376 static::clearFUserBasketQuantity($fuserId, $siteId);
377 }
378 }
379
380 return new Main\EventResult( Main\EventResult::SUCCESS, null, 'sale');
381 }
382
389 {
390 $fuserId = Fuser::getId(true);
391 $originalValues = $event->getParameter('VALUES');
392 if ($originalValues['FUSER_ID'] != $fuserId)
393 {
394 return new Main\EventResult( Main\EventResult::SUCCESS, null, 'sale');
395 }
396
397 static::clearFUserBasketPrice($fuserId, SITE_ID);
398 static::clearFUserBasketQuantity($fuserId, SITE_ID);
399
400 return new Main\EventResult( Main\EventResult::SUCCESS, null, 'sale');
401 }
402
410 public static function checkQuantityRatio(Basket $basket, BasketItem $item = null)
411 {
412 $result = new Result();
413
414 $basketItemRatioList = array();
415 $ratioList = array();
416 $ratioResult = static::getRatio($basket, $item);
417
418 if ($ratioResult->isSuccess())
419 {
420 $ratioData = $ratioResult->getData();
421
422 if (!empty($ratioData['RATIO_LIST']) && is_array($ratioData['RATIO_LIST']))
423 {
424 $ratioList = $ratioData['RATIO_LIST'];
425 }
426 }
427
429 foreach ($basket as $basketItem)
430 {
431 $basketItemCode = $basketItem->getBasketCode();
432
433 if ($item === null || $item->getBasketCode() === $basketItemCode)
434 {
435 $basketItemRatioList[$basketItemCode] = false;
436
437 if (isset($ratioList[$basketItemCode]))
438 {
439 $basketItemQuantity = $basketItem->getQuantity();
440 $basketItemRatio = (float)$ratioList[$basketItemCode];
441
442 $mod = roundEx(($basketItemQuantity / $basketItemRatio - round($basketItemQuantity / $basketItemRatio)), 6);
443
444 if ($mod == 0)
445 {
446 $basketItemRatioList[$basketItemCode] = true;
447 }
448 }
449 }
450 }
451
452 if (!empty($basketItemRatioList))
453 {
454 $result->addData(array('CHECK_RATIO_LIST' => $basketItemRatioList));
455 }
456
457 return $result;
458 }
459
469 public static function correctQuantityRatio(Basket $basket, BasketItem $item = null)
470 {
471 $result = new Result();
472 $changedItems = array();
473
474 $checkRatioList = array();
475 $checkRatioResult = static::checkQuantityRatio($basket, $item);
476
477 if ($checkRatioResult->isSuccess())
478 {
479 $checkRatioData = $checkRatioResult->getData();
480
481 if (!empty($checkRatioData['CHECK_RATIO_LIST']) && is_array($checkRatioData['CHECK_RATIO_LIST']))
482 {
483 $checkRatioList = $checkRatioData['CHECK_RATIO_LIST'];
484 }
485 }
486
487 $basketItemRatioList = array();
488 $ratioList = null;
489
491 foreach ($basket as $basketItem)
492 {
493 $basketItemCode = $basketItem->getBasketCode();
494
495 if ($item === null || $item->getBasketCode() === $basketItemCode)
496 {
497 $basketItemRatioList[$basketItemCode] = false;
498
499 if (isset($checkRatioList[$basketItemCode]) && $checkRatioList[$basketItemCode] === false)
500 {
501 if ($ratioList === null)
502 {
503 $ratioList = array();
504 $ratioResult = static::getRatio($basket, $item);
505
506 if ($ratioResult->isSuccess())
507 {
508 $ratioData = $ratioResult->getData();
509
510 if (!empty($ratioData['RATIO_LIST']) && is_array($ratioData['RATIO_LIST']))
511 {
512 $ratioList = $ratioData['RATIO_LIST'];
513 }
514 }
515 }
516
517 if (!isset($ratioList[$basketItemCode]))
518 {
519 $result->addError(new ResultError(Main\Localization\Loc::getMessage('SALE_BASKET_COMPONENT_HELPER_PRODUCT_RATIO_NOT_FOUND', array(
520 '#PRODUCT_NAME#' => $basketItem->getField('NAME')
521 )), 'SALE_BASKET_COMPONENT_HELPER_PRODUCT_RATIO_NOT_FOUND'));
522 continue;
523 }
524
525 $basketItemQuantity = $basketItem->getQuantity();
526 $basketItemRatio = (float)$ratioList[$basketItemCode];
527
528 $mod = roundEx(($basketItemQuantity / $basketItemRatio - round($basketItemQuantity / $basketItemRatio)), 6);
529
530 if ($mod != 0)
531 {
532 $changedItems[] = $basketItemCode;
533
534 $closestQuantity = round($basketItemQuantity / $basketItemRatio) * $basketItemRatio;
535 if ($closestQuantity < $basketItemRatio)
536 {
537 $closestQuantity = $basketItemRatio;
538 }
539
540 $r = $basketItem->setField('QUANTITY', $closestQuantity);
541 if (!$r->isSuccess())
542 {
543 $floorQuantity = floor(ceil($basketItemQuantity) / $basketItemRatio) * $basketItemRatio;
544 if ($floorQuantity < $basketItemRatio)
545 {
546 $floorQuantity = $basketItemRatio;
547 }
548
549 if ($floorQuantity != $closestQuantity)
550 {
551 $r = $basketItem->setField('QUANTITY', $floorQuantity);
552 }
553 }
554
555 if (!$r->isSuccess())
556 {
557 $result->addErrors($r->getErrors());
558
559 $r = $basketItem->setField('CAN_BUY', 'N');
560 if (!$r->isSuccess())
561 {
562 $result->addErrors($r->getErrors());
563 }
564 }
565 }
566 }
567 }
568 }
569
570 $result->addData(array('CHANGED_BASKET_ITEMS' => $changedItems));
571
572 return $result;
573 }
574
582 public static function getRatio(Basket $basket, BasketItem $item = null)
583 {
584 $result = new Result();
585 $ratioList = array();
586 if (Main\Loader::includeModule('catalog'))
587 {
588 $map = array();
589 $elementList = array();
590
592 foreach ($basket as $basketItem)
593 {
594 $code = $basketItem->getBasketCode();
595 if ($item !== null && $item->getBasketCode() != $code)
596 {
597 continue;
598 }
599
600 $hash = md5((strval($basketItem->getField("PRODUCT_PROVIDER_CLASS")) != '' ? $basketItem->getField("PRODUCT_PROVIDER_CLASS"): "")."|".(strval($basketItem->getField("MODULE")) != '' ? $basketItem->getField("MODULE"): "")."|".$basketItem->getField("PRODUCT_ID"));
601
602 if (array_key_exists($hash, static::$cacheRatio))
603 {
604 $ratioList[$code] = static::$cacheRatio[$hash];
605 }
606 else
607 {
608 $elementList[$basketItem->getField("PRODUCT_ID")] = $basketItem->getField("PRODUCT_ID");
609 }
610
611 if (!isset($map[$basketItem->getField("PRODUCT_ID")]))
612 {
613 $map[$basketItem->getField("PRODUCT_ID")] = array();
614 }
615
616 $map[$basketItem->getField("PRODUCT_ID")][] = $code;
617 }
618
619 if (!empty($elementList))
620 {
621 $res = Catalog\MeasureRatioTable::getList(array(
622 'select' => array('*'),
623 'filter' => array('@PRODUCT_ID' => $elementList, '=IS_DEFAULT' => 'Y')
624 ));
625 while ($ratioData = $res->fetch())
626 {
627 if (empty($map[$ratioData["PRODUCT_ID"]]))
628 continue;
629
630 foreach ($map[$ratioData["PRODUCT_ID"]] as $key)
631 {
632 $ratioList[$key] = $ratioData["RATIO"];
633
634 if (!$basketItem = $basket->getItemByBasketCode($key))
635 continue;
636
637 $hash = md5((strval($basketItem->getField("PRODUCT_PROVIDER_CLASS")) != '' ? $basketItem->getField("PRODUCT_PROVIDER_CLASS"): "")."|".(strval($basketItem->getField("MODULE")) != '' ? $basketItem->getField("MODULE"): "")."|".$basketItem->getField("PRODUCT_ID"));
638
639 static::$cacheRatio[$hash] = $ratioData["RATIO"];
640 static::$cacheRatioData[$hash] = $ratioData;
641 }
642 unset($key);
643 }
644 unset($ratioData, $dbRatio);
645 }
646 unset($elementList, $map);
647 }
648
649 if (!empty($ratioList))
650 $result->addData(array('RATIO_LIST' => $ratioList));
651
652 return $result;
653 }
654
660 protected static function calculateBasketCost(Basket $basket)
661 {
662 if ($basket->count() == 0)
663 return 0;
664
665 $oldApiStatus = Compatible\DiscountCompatibility::isUsed(); // TODO: remove this code after refactoring DiscountCompatibility
666 if ($oldApiStatus)
667 Compatible\DiscountCompatibility::stopUsageCompatible();
669 $basket->refreshData(array('PRICE', 'COUPONS'));
670 $discounts = Discount::buildFromBasket($basket, new Discount\Context\Fuser($basket->getFUserId(true)));
671 $discounts->calculate();
672 $discountResult = $discounts->getApplyResult();
674 if ($oldApiStatus)
675 Compatible\DiscountCompatibility::revertUsageCompatible();
676
677 if (empty($discountResult['PRICES']['BASKET']))
678 return 0;
679
680 $result = 0;
681 $discountResult = $discountResult['PRICES']['BASKET'];
683 foreach ($basket as $basketItem)
684 {
685 if (!$basketItem->canBuy())
686 continue;
687 $code = $basketItem->getBasketCode();
688 if (!empty($discountResult[$code]))
689 $result += $discountResult[$code]['PRICE'] * $basketItem->getQuantity();
690 unset($code);
691 }
692 unset($basketItem);
693 unset($discountResult);
694
695 return $result;
696 }
697
702 public static function getRatioCache()
703 {
704 return static::$cacheRatio;
705 }
706
711 public static function getRatioDataCache()
712 {
713 return static::$cacheRatioData;
714 }
715
716 private static function getLocalStorage(): SessionLocalStorage
717 {
718 return Application::getInstance()->getLocalSession(self::STORAGE_NAME);
719 }
720
721 private static function loadStateFromStorage(): void
722 {
723 if (isset(self::$currentState))
724 {
725 return;
726 }
727 $storage = self::getLocalStorage();
728 self::$currentState = self::verifyState($storage->getData());
729 }
730
731 private static function saveStateToStorage(): void
732 {
733 if (!isset(self::$currentState))
734 {
735 return;
736 }
737 $storage = self::getLocalStorage();
738 $storage->setData(self::$currentState);
739 }
740
741 private static function getEmptyState(): array
742 {
743 return [
744 self::SECTION_PRICE => [],
745 self::SECTION_QUANTITY => [],
746 ];
747 }
748
749 private static function verifyState(array $state): array
750 {
751 $emptyState = self::getEmptyState();
752 $state = array_intersect_key($state, $emptyState);
753
754 $result = [];
755 foreach ($state as $sectionId => $sites)
756 {
757 if (!is_array($sites))
758 {
759 continue;
760 }
761 $result[$sectionId] = self::verifySection($sites);
762 }
763
764 return array_merge($emptyState, $result);
765 }
766
767 private static function verifySection(array $section): array
768 {
769 $result = [];
770 foreach ($section as $siteId => $users)
771 {
772 if (!is_string($siteId) || !is_array($users))
773 {
774 continue;
775 }
776 $newUsers = [];
777 foreach ($users as $userId => $value)
778 {
779 if (!is_int($userId))
780 {
781 continue;
782 }
783 $newUsers[$userId] = (float)$value;
784 }
785 $result[$siteId] = $newUsers;
786 unset($newUsers);
787 }
788
789 return $result;
790 }
791
792 private static function getCurrentValue(string $sectionId, ?int $fuserId, string $siteId): null|int|float
793 {
794 if ($fuserId === null)
795 {
796 return 0;
797 }
798 self::loadStateFromStorage();
799
800 return (self::$currentState[$sectionId][$siteId][$fuserId] ?? null);
801 }
802
803 private static function setCurrentValue(string $sectionId, ?int $fuserId, string $siteId, int|float $value): void
804 {
805 if ($fuserId === null)
806 {
807 return;
808 }
809 if (!isset(self::$currentState[$sectionId]))
810 {
811 return;
812 }
813 self::$currentState[$sectionId][$siteId] ??= [];
814 self::$currentState[$sectionId][$siteId][$fuserId] = $value;
815 self::saveStateToStorage();
816 }
817
818 private static function clearCurrentValue(string $sectionId, ?int $fuserId, string $siteId): void
819 {
820 if ($fuserId === null)
821 {
822 return;
823 }
824 self::loadStateFromStorage();
825 if (!isset(self::$currentState[$sectionId]))
826 {
827 return;
828 }
829 unset(self::$currentState[$sectionId][$siteId][$fuserId]);
830 self::saveStateToStorage();
831 }
832
833 private static function getCurrentBasketPrice(?int $fuserId, string $siteId): null|int|float
834 {
835 return self::getCurrentValue(self::SECTION_PRICE, $fuserId, $siteId);
836 }
837
838 private static function setCurrentBasketPrice(?int $fuserId, string $siteId, int|float $price): void
839 {
840 self::setCurrentValue(self::SECTION_PRICE, $fuserId, $siteId, $price);
841 }
842
843 private static function clearCurrentBasketPrice(?int $fuserId, string $siteId): void
844 {
845 self::clearCurrentValue(self::SECTION_PRICE, $fuserId, $siteId);
846 }
847
848 private static function getCurrentBasketQuantity(?int $fuserId, string $siteId): null|int|float
849 {
850 return self::getCurrentValue(self::SECTION_QUANTITY, $fuserId, $siteId);
851 }
852
853 private static function setCurrentBasketQuantity(?int $fuserId, string $siteId, int|float $quantity): void
854 {
855 self::setCurrentValue(self::SECTION_QUANTITY, $fuserId, $siteId, $quantity);
856 }
857
858 private static function clearCurrentBasketQuantity(?int $fuserId, string $siteId): void
859 {
860 self::clearCurrentValue(self::SECTION_QUANTITY, $fuserId, $siteId);
861 }
862
863 private static function prepareSiteId(mixed $siteId): string
864 {
865 if ($siteId !== null)
866 {
867 $siteId = trim((string)$siteId);
868 if ($siteId === '')
869 {
870 $siteId = null;
871 }
872 }
873 if ($siteId === null)
874 {
876 }
877
878 return $siteId;
879 }
880
881 private static function prepareFuserId(mixed $fuserId): ?int
882 {
883 if ($fuserId !== null)
884 {
885 $fuserId = (int)$fuserId;
886 if ($fuserId <= 0)
887 {
888 $fuserId = null;
889 }
890 }
891
892 return $fuserId;
893 }
894
895 private static function prepareValue(mixed $value): int|float
896 {
897 if (is_int($value) || is_float($value))
898 {
899 return $value;
900 }
901
902 return (float)$value;
903 }
904}
$hash
Определения ajax_redirector.php:8
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
Определения check_mail.php:18
static setFUserBasketPrice($fuserId, $price, $siteId=null)
Определения basketcomponenthelper.php:126
static updateFUserBasketPrice($fuserId, $siteId=null, $basketList=null)
Определения basketcomponenthelper.php:154
static clearFUserBasketPrice($fuserId, $siteId=null)
Определения basketcomponenthelper.php:139
static getFUserBasketQuantity($fuserId, $siteId=null)
Определения basketcomponenthelper.php:57
static existsFUserBasketPrice(?int $fuserId, ?string $siteId=null)
Определения basketcomponenthelper.php:43
static getFUserBasketPrice($fuserId, $siteId=null)
Определения basketcomponenthelper.php:78
static setFUserBasketQuantity($fuserId, $quantity, $siteId=null)
Определения basketcomponenthelper.php:99
static updateFUserBasket($fuserId, $siteId=null)
Определения basketcomponenthelper.php:208
static clearFUserBasketQuantity($fuserId, $siteId=null)
Определения basketcomponenthelper.php:112
static existsFUserBasketQuantity(?int $fuserId, ?string $siteId=null)
Определения basketcomponenthelper.php:28
static updateFUserBasketQuantity($fuserId, $siteId=null, $basketList=null)
Определения basketcomponenthelper.php:182
static onSaleBasketItemDeleted(Main\Event $event)
Определения basketcomponenthelper.php:388
static getId($skipCreate=false)
Определения fuser.php:33
static roundPrecision($value)
Определения pricemaths.php:16
static getInstance($type)
Определения registry.php:183
const REGISTRY_TYPE_ORDER
Определения registry.php:16
static isSetItem($arItem)
Определения basket_helper.php:26
$sites
Определения clear_component_cache.php:15
if($childrenCount<=0) $mod
Определения sync.php:11
$data['IS_AVAILABLE']
Определения .description.php:13
</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
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
Определения options.php:195
$siteId
Определения ajax.php:8
roundEx($value, $prec=0)
Определения tools.php:4635
$map
Определения config.php:5
$value
Определения Param.php:39
string $sectionId
Определения columnfields.php:71
Определения buffer.php:3
$event
Определения prolog_after.php:141
if(empty($signedUserToken)) $key
Определения quickway.php:257
if(empty($decryptedData)) $storage
Определения quickway.php:270
</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
getRatio($arBasketItems)
Определения include.php:459
const SITE_ID
Определения sonet_set_content_view.php:12