getField("USER_DESCRIPTION"); $arFields["COMMENT"] = $customer_comment != '' ? '
Комментарий: '.$customer_comment : '
'; } AddEventHandler( "iblock", "OnAfterIBlockElementAdd", array( "aspro_import", "FillTheBrands" ) ); AddEventHandler( "iblock", "OnAfterIBlockElementUpdate", array( "aspro_import", "FillTheBrands" ) ); class aspro_import { public static function FillTheBrands( $arFields ){ $arCatalogID=array(15); if( in_array($arFields['IBLOCK_ID'], $arCatalogID) ){ $arItem = CIBlockElement::GetList( false, array( 'IBLOCK_ID' => $arFields['IBLOCK_ID'], 'ID' => $arFields['ID'] ), false, false, array( 'ID', 'PROPERTY_BREND' ) )->fetch(); if( $arItem['PROPERTY_BREND_VALUE'] ){ $arBrand = CIBlockElement::GetList( false, array( 'IBLOCK_ID' => 10, 'NAME' => $arItem['PROPERTY_BREND_VALUE'] ) )->fetch(); if( $arBrand ){ CIBlockElement::SetPropertyValuesEx( $arFields['ID'], false, array( 'BRAND' => $arBrand['ID'] ) ); }else{ $el = new CIBlockElement; $arParams = array( "replace_space" => "-", "replace_other" => "-" ); $id = $el->Add( array( 'ACTIVE' => 'Y', 'NAME' => $arItem['PROPERTY_BREND_VALUE'], 'IBLOCK_ID' => 10, 'CODE' => Cutil::translit( $arItem['PROPERTY_BREND_VALUE'], "ru", $arParams ) ) ); if( $id ){ CIBlockElement::SetPropertyValuesEx( $arFields['ID'], false, array( 'BRAND' => $id ) ); }else{ //echo $el->LAST_ERROR; } } } } } } AddEventHandler("iblock", "OnBeforeIBlockElementAdd", Array("ExchangeCustom", "CheckCodeElement")); class ExchangeCustom { public static function CheckCodeElement(&$arFields){ if(strlen($arFields["CODE"])<=0) { AddMessage2Log($arFields, "CheckCodeElement"); } } } AddEventHandler('form', 'onBeforeResultAdd', 'onBeforeResultAdd_handler'); function onBeforeResultAdd_handler($WEB_FORM_ID, &$arFields, &$arVALUES){ //$arLog = [ // 'WEB_FORM_ID' => $WEB_FORM_ID, // 'arFields' => $arFields, // 'arrVALUES' => $arVALUES, //]; //AddMessage2Log($arLog, "onBeforeResultAdd_handler"); switch($WEB_FORM_ID){ case '2': if(!empty($arVALUES['form_text_7'])){ if(!preg_match("/[а-яё]/iu", $arVALUES['form_text_7'])){ $GLOBALS['APPLICATION']->ThrowException('Подозрение на спам-бота.'); return false; } } break; case '3': if(!empty($arVALUES['form_text_12'])){ if(!preg_match("/[а-яё]/iu", $arVALUES['form_text_12'])){ $GLOBALS['APPLICATION']->ThrowException('Подозрение на спам-бота.'); return false; } } break; } } $eventManager = \Bitrix\Main\EventManager::getInstance(); $eventManager->addEventHandler("catalog", "OnGetOptimalPrice", ["amountForPrice", "onGetPriceEvent"]); global $basketPrice; $basketPrice = []; class amountForPrice { /** * [BASE ID: 2] при сумме заказа до 4.000 рублей * [SALE_SMAL ID: 1] Опт от 4.000 руб. */ protected static $catalogIBlockID = 15; // Проставляем ID типов цен protected static $baseGroup = 2; protected static $smallGroup = 1; public static function onGetPriceEvent($productID, $quantity = 1, $arUserGroups = [], $renewal = "N", $arPrices = array(), $siteID = false, $arDiscountCoupons = false) { // Через global, чтоб не вызывалось по несколько раз // OnGetOptimalPrice вызывается для каждого товара global $basketPrice; if (empty($basketPrice)) { $basketPrice = self::getBasketUser(); } // Получаем доступные цены для товара $resOptPrices = \Bitrix\Catalog\PriceTable::getList([ 'filter' => ['=PRODUCT_ID' => $productID], 'select' => ['CATALOG_GROUP_ID', 'PRICE', 'CURRENCY'], ]); while($optPrice = $resOptPrices->fetch()){ $arOptPrices[$optPrice['CATALOG_GROUP_ID']] = $optPrice; } if(empty($arOptPrices)){ return false; } // Узнаем есть ли скидки и акции на товар $arDiscount = CCatalogDiscount::GetDiscount($productID, self::$catalogIBlockID); if(!empty($arDiscount)){ // если есть, то считаем сразу по оптовой цене $result = [ 'PRICE' => [ "ID" => $productID, 'CATALOG_GROUP_ID' => $arOptPrices[self::$smallGroup]['CATALOG_GROUP_ID'], 'PRICE' => $arOptPrices[self::$smallGroup]['PRICE'], 'CURRENCY' => $arOptPrices[self::$smallGroup]['CURRENCY'], 'ELEMENT_IBLOCK_ID' => $productID, 'VAT_INCLUDED' => "Y", ], 'DISCOUNT' => ['VALUE' => $discount, 'CURRENCY' => $arOptPrices[self::$smallGroup]['CURRENCY']], ]; }else{ $arPrice = self::getPrice($basketPrice, $arOptPrices); $result = [ 'PRICE' => [ "ID" => $productID, 'CATALOG_GROUP_ID' => $arPrice['group'], 'PRICE' => $arPrice['price'], 'CURRENCY' => $arPrice['currency'], 'ELEMENT_IBLOCK_ID' => $productID, 'VAT_INCLUDED' => "Y", ], 'DISCOUNT' => ['VALUE' => $discount, 'CURRENCY' => $arPrice['currency']], ]; } return $result; } /** * Функция смотрит цену корзины и выбирает подходящую цену * Функции цен уже сам перебразывают цену в зависимости от доступности */ public static function getPrice($sum = [], $arPrices = []) { if ($sum[self::$baseGroup] >= 4000) { $result = self::priceSmall($arPrices); } else { $result = self::priceBase($arPrices); } return $result; } public static function priceSmall(array $arPrices) { if (empty($arPrices[self::$smallGroup])) { $result = self::priceBase($arPrices); } else { $result = [ 'group' => self::$smallGroup, 'price' => $arPrices[self::$smallGroup]['PRICE'], 'currency' => $arPrices[self::$smallGroup]['CURRENCY'] ]; } return $result; } public static function priceBase(array $arPrices) { $result = [ 'group' => self::$baseGroup, 'price' => $arPrices[self::$baseGroup]['PRICE'], 'currency' => $arPrices[self::$baseGroup]['CURRENCY'] ]; return $result; } /** * Получение суммы корзины текущего пользователя * Получаем суммы всех типов цен */ public static function getBasketUser() { $resultPrice = []; $resultPrice[self::$baseGroup] = 0; $resultPrice[self::$smallGroup] = 0; $obBasket = \Bitrix\Sale\Basket::getList([ 'filter' => [ 'FUSER_ID' => \Bitrix\Sale\Fuser::getId(), 'LID' => SITE_ID, 'ORDER_ID' => NULL // Т.к корзина связана с заказами, то нам нужна корзина у которой нет заказа ], 'select' => ['QUANTITY', 'PRODUCT_ID', 'CAN_BUY', 'DELAY'] ]); while($arItem = $obBasket->Fetch()){ // Нам нужны только доступные товары остальные не считаем if ($arItem['DELAY'] == 'N' && $arItem['CAN_BUY'] == 'Y') { $resPrices = \Bitrix\Catalog\PriceTable::getList([ 'filter' => ['=PRODUCT_ID' => $arItem['PRODUCT_ID']], 'select' => ['CATALOG_GROUP_ID', 'PRICE'], ]); while ($price = $resPrices->fetch()) { $arItem['PRICES'][$price['CATALOG_GROUP_ID']] = $price['PRICE']; } // Если вдруг нет у товара цены, то берем следующую т.к нам нужна именно сумма $resultPrice[self::$smallGroup] += (($arItem['PRICES'][self::$smallGroup] ?? $arItem['PRICES'][self::$baseGroup]) * $arItem['QUANTITY']); $resultPrice[self::$baseGroup] += ($arItem['PRICES'][self::$baseGroup] * $arItem['QUANTITY']); } } return $resultPrice; } } $eventManager->addEventHandler("main", "OnBeforeUserAdd", ["UserHandlers", "OnBeforeUserAdd_handler"]); class UserHandlers { public static function OnBeforeUserAdd_handler(&$arFields){ $chkName = strpos($arFields['NAME'], 'http'); $chkLastName = strpos($arFields['LAST_NAME'], 'http'); if($chkName !== false || $chkLastName !== false){ global $APPLICATION; $APPLICATION->throwException("Подозрение на спам-бота, повторите попытку позднее"); return false; } } } //- агент для очистки устаревшего кеша function clean_expire_cache($path = "") { if (!class_exists("CFileCacheCleaner")) { require_once ($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/classes/general/cache_files_cleaner.php"); } $curentTime = time(); if (defined("BX_CRONTAB") && BX_CRONTAB === true) $endTime = time() + 5; //Если на кроне, то работает 5 секунд else $endTime = time() + 1; //Если на хитах, то не более 1 секунды //Работаем со всем кэшем $obCacheCleaner = new CFileCacheCleaner("expired"); if (!$obCacheCleaner->InitPath($path)) { //Произошла ошибка return "clean_expire_cache();"; } $obCacheCleaner->Start(); while ($file = $obCacheCleaner->GetNextFile()) { if (is_string($file)) { $date_expire = $obCacheCleaner->GetFileExpiration($file); if ($date_expire) { if ($date_expire < $curentTime) { unlink($file); } } if (time() >= $endTime) break; } } if (is_string($file)) { return "clean_expire_cache(\"" . $file . "\");"; } else { return "clean_expire_cache();"; } } function pr($arRes){ if(is_array($arRes) || is_object($arRes)){ echo '';
print_r($arRes);
echo '[RuntimeException] Could not start session because headers have already been sent. "/home/bitrix/www/bitrix/php_interface/init.php":1. (0) /home/bitrix/www/bitrix/modules/main/lib/session/session.php:143 #0: Bitrix\Main\Session\Session->start /home/bitrix/www/bitrix/modules/main/lib/session/kernelsessionproxy.php:47 #1: Bitrix\Main\Session\KernelSessionProxy->start /home/bitrix/www/bitrix/modules/main/include.php:182 #2: require_once(string) /home/bitrix/www/bitrix/modules/main/include/prolog_before.php:19 #3: require_once(string) /home/bitrix/www/bitrix/modules/main/include/prolog.php:10 #4: require_once(string) /home/bitrix/www/bitrix/header.php:1 #5: require(string) /home/bitrix/www/index.php:2 ----------