Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/bitrix/php_interface/ |
Upload File : |
<?php include_once($_SERVER['DOCUMENT_ROOT'] . '/vendor/autoload.php'); include_once($_SERVER['DOCUMENT_ROOT'] . "/bitrix/php_interface/wbs24.lib/autoload.php"); include_once('lib/EmailFields.php'); // ВСЕ НОВЫЕ ОБРАБОТЧИКИ ДЛЯ БИБЛИОТЕК В wbs24.lib РАЗМЕЩАЕМ В ЭТОТ ФАИЛ include_once($_SERVER['DOCUMENT_ROOT'] . "/bitrix/php_interface/wbs24.lib/events/listeners.php"); use Bitrix\Main\Loader; use Bitrix\Highloadblock as HL; use Bitrix\Main\Entity; // обработчик с старого сайта AddEventHandler("sale", "OnOrderNewSendEmail", "OnOrderNewSendEmailHandler"); function OnOrderNewSendEmailHandler($orderID, &$eventName, &$arFields) { //toLogFile($orderID, 'orderID'); $arFields['DISCOUNT'] = 0; $arCoupons = []; $arOrder = \Bitrix\Sale\Order::getList(['filter' => ["ID" => $orderID/*, "LID" => SITE_ID*/], 'select' => ["*"]])->Fetch(); $orderPropsRes = CSaleOrderPropsValue::GetList([], ["ORDER_ID" => $orderID, 'LID' => $arOrder['LID']]); while ($arOrderPropsValues = $orderPropsRes->Fetch()) $arOrder['PROPERTIES'][$arOrderPropsValues['CODE']] = $arOrderPropsValues; // Платежная система, тип доставки и скидка $arFields['PAY_TYPE'] = CSalePaySystem::GetByID($arOrder['PAY_SYSTEM_ID'])['NAME']; //$arFields['DELIVERY_TYPE'] = \Bitrix\Sale\Delivery\Services\Manager::getById($arOrder['DELIVERY_ID'])['NAME']; // прежний вариант $deliveryObj = Bitrix\Sale\Delivery\Services\Manager::getObjectById($arOrder['DELIVERY_ID']); $arFields['DELIVERY_TYPE'] = $deliveryObj->isProfile() ? $deliveryObj->getNameWithParent() : $deliveryObj->getName(); // название службы доставки и профиля, например: Л-Пост (до ПВЗ) //$arFields['DELIVERY_TYPE'] = $deliveryObj->getName(); // если нужно только имя профиля без названия родительской службы доставки, например "до ПВЗ" // Собираю скидки из таблицы описания применившихся скидок к конкретному товару $discountRulesDBres = \Bitrix\Sale\Internals\OrderRulesDescrTable::getList([ 'select' => ["*"], 'filter' => ['=ORDER_ID' => $orderID] ]); while ($discountRulesData = $discountRulesDBres->Fetch()) { foreach ($discountRulesData['DESCR'] as $arDiscountRuleData) $arFields['DISCOUNT'] += $arDiscountRuleData["RESULT_VALUE"]; } // Купон $couponList = \Bitrix\Sale\Internals\OrderCouponsTable::getList(array( 'select' => array('COUPON'), 'filter' => array('=ORDER_ID' => $orderID) )); while ($couponData = $couponList->fetch()) $arCoupons[] = $couponData['COUPON']; $arFields['COUPON'] = (count($arCoupons) > 0 ? implode(', ', $arCoupons) : ''); $arFields['PHONE'] = $arOrder['PROPERTIES']['PHONE']['VALUE'] ? $arOrder['PROPERTIES']['PHONE']['VALUE'] : ''; // Адрес $location = ''; $address = $arOrder['PROPERTIES']['ADDRESS']['VALUE'] ? $arOrder['PROPERTIES']['ADDRESS']['VALUE'] : ''; if ($arOrder['PROPERTIES']['LOCATION']['VALUE']) { $arLoc = CSaleLocation::GetByID($arOrder['PROPERTIES']['LOCATION']['VALUE']); $location = $arLoc['COUNTRY_NAME'].', '.$arLoc['REGION_NAME'].', '.$arLoc['CITY_NAME'].', '; } $fullAddr = $location.$address; //$arFields['ADDRESS'] = $fullAddr ? $fullAddr : ''; $arFields['USER_DESCRIPTION'] = $arOrder["USER_DESCRIPTION"] ? $arOrder["USER_DESCRIPTION"] : ''; // Свойства заказа // wbs24 r.r@ if (!empty($arOrder['PROPERTIES'])) { foreach ($arOrder['PROPERTIES'] as $propCode => $propData) { $arFields['PROPERTIES_'.$propCode] = $propData['VALUE']; } } // Вариант доставки $variants = [ 'REGULAR_DELIVERY', 'FAST_DELIVERY', 'DELIVERY_ON_TIME_DELIVERY' ]; $currentDeliveryVariant = ''; foreach ($variants as $variant) { if ($arFields['PROPERTIES_'.$variant] == 'Да') { $currentDeliveryVariant = $variant; } } // время доставки $deliveryTime = ''; if ( $currentDeliveryVariant == 'REGULAR_DELIVERY' || $currentDeliveryVariant == '' && $arFields['PROPERTIES_TIME_INTERVAL'] ) { $timeIntervalProp = CSaleOrderPropsVariant::GetByValue($arOrder['PROPERTIES']['TIME_INTERVAL']['ORDER_PROPS_ID'], $arFields['PROPERTIES_TIME_INTERVAL']); $deliveryTime = $timeIntervalProp['NAME']; } else if ($currentDeliveryVariant == 'DELIVERY_ON_TIME_DELIVERY') { $deliveryTime = $arFields['PROPERTIES_EXACT_DELIVERY_TIME']; } $arFields['DELIVERY_VARIANT_TIME'] = ''; if ($deliveryTime) { $arFields['DELIVERY_VARIANT_TIME'] = $deliveryTime; } $arFields['DELIVERY_VARIANT_NAME'] = ''; if ($currentDeliveryVariant) { $arFields['DELIVERY_VARIANT_NAME'] = $arOrder['PROPERTIES'][$currentDeliveryVariant]['NAME']; } if ($arFields['PROPERTIES_DELIVERY_DATE']) { $arFields['PROPERTIES_DELIVERY_DATE'] = $arFields['PROPERTIES_DELIVERY_DATE']; } if ($arFields['PROPERTIES_LOCALITY']) { $addresStr = $arFields['PROPERTIES_LOCALITY']; if ($arFields['PROPERTIES_HOME_NUMBER']) { $addresStr .= ' квартира ' . $arFields['PROPERTIES_HOME_NUMBER']; } $arFields['ADDRESS'] = $addresStr; } // Корзина // wbs24 r.r@ if (class_exists('\\Wbs24\\EmailFields')) { $emailFields = new Wbs24\EmailFields(); $arFields['ORDER_TABLE_ITEMS'] = $emailFields->getHtmlOrderList($orderID); } //toLogFile(print_r($arFields, 1), 'arFields3'); } function toLogFile($content, $name = false, $filename = false, $mode="a"){ if(!$filename) $filename = $_SERVER['DOCUMENT_ROOT'].'/logfile.txt'; $file = fopen($filename, $mode); if($name) fwrite($file, "\n".date('d.m.Y H:i:s').' '.$name."\n"); fwrite($file, $content); fclose($file); } // Скрипт по начислению бонусов AddEventHandler("sale", "OnSaleStatusOrder", "OrderComplete"); function OrderComplete($orderID, &$arFields) { Loader::includeModule("sale"); Loader::includeModule("highloadblock"); if ($arFields == 'F') { $order = \Bitrix\Sale\Order::load($orderID); $siteId = $order->getSiteId(); if ($siteId == 's2') { $platformId = getPlatform($order); if (!$platformId) { $orderUser = $order->getUserId(); $orderSumm = $order->getPrice(); $orderDeliveryPrice = $order->getDeliveryPrice(); $wholesaleBuyerId = 9; // Id группы оптовиков $arrUser = \CUser::GetUserGroup($orderUser); if (!in_array($wholesaleBuyerId, $arrUser)) { $orderPayments = \Bitrix\Sale\PaymentCollection::getList([ 'select' => ['SUM'], 'filter' => [ '=ORDER_ID' => $orderID, '=PAY_SYSTEM_ID' => 7, '=PAID' => 'Y'] ]); while ($orderPayment = $orderPayments->fetch()) { $orderPayid = $orderPayment['SUM']; } if (empty($orderPayid)) { $orderPriceBonus = $orderSumm - $orderDeliveryPrice; } else { $orderPriceBonus = $orderSumm - $orderDeliveryPrice - $orderPayid; } $hlblockDatas = HL\HighloadBlockTable::getById(8)->fetch(); $entityHlBonus = HL\HighloadBlockTable::compileEntity($hlblockDatas); $entityDataClassBonus = $entityHlBonus->getDataClass(); $bonusData = $entityDataClassBonus::getList(array( 'select' => array('UF_BONUS_FROM', 'UF_BONUS_TO', 'UF_BONUS_PRICE'), )); while ($arBonusData = $bonusData->Fetch()) { $priceFrom = intval($arBonusData['UF_BONUS_FROM']); $priceTo = intval($arBonusData['UF_BONUS_TO']); if (($orderPriceBonus > $priceFrom) && ($orderPriceBonus < $priceTo)) { $priceBonus = intval($arBonusData['UF_BONUS_PRICE']); $summToAddBonus = $orderPriceBonus * $priceBonus / 100; if ($orderUser) { CSaleUserAccount::UpdateAccount( $orderUser, $summToAddBonus, "RUB", false, $orderID, false ); } } } } } } } } function getPlatform($order) { $tradeBindingCollection = $order->getTradeBindingCollection(); foreach ($tradeBindingCollection as $item) { $platformId = $item->getField('TRADING_PLATFORM_ID'); } return $platformId ? $platformId : false ; } // wbs24 - wholesale \Bitrix\Main\EventManager::getInstance()->addEventHandler( 'sale', 'OnBeforeBasketAdd', [ '\\Wbs24\\Lib\\Stocks\\Handlers', 'OnBeforeBasketAddHandler', ] ); /* // wbs24 - wholesale \Bitrix\Main\EventManager::getInstance()->addEventHandler( 'main', 'OnBeforeResizeImage', [ '\\Wbs24\\Lib\\Watermark\\WatermarkHandlers', 'OnBeforeResizeImageHandler', ] ); */ // wbs24 - subscribe \Bitrix\Main\EventManager::getInstance()->addEventHandler( 'catalog', '\Bitrix\Catalog\Subscribe::onAdd', [ '\\Wbs24\\Lib\\Subscribe\\Handlers', 'onAddHandler', ] ); // wbs24 - seopagen \Bitrix\Main\EventManager::getInstance()->addEventHandler( 'main', 'OnEpilog', [ '\\Wbs24\\Lib\\Seopagen\\Handlers', 'OnEpilogHandler', ] ); // wbs24 - stopSPAM \Bitrix\Main\EventManager::getInstance()->addEventHandler( "form", "onBeforeResultAdd", function ($id, &$arFields, &$arFieldsMail) { global $APPLICATION; $checkList = [ 'info@hifinance.ru' ]; if(in_array($arFieldsMail['form_email_14'], $checkList)) { $APPLICATION->ThrowException(''); } } ); // wbs24 - letterlink \Bitrix\Main\EventManager::getInstance()->addEventHandler( 'main', 'OnBeforeEventAdd', [ '\\Wbs24\\Lib\\LetterLink\\Handlers', 'OnBeforeEventAddHandler', ] ); /* \Bitrix\Main\EventManager::getInstance()->addEventHandler( 'sale', 'OnSaleComponentOrderJsData', [ '\\Wbs24\\Lib\\Order\\ProccessOrder', 'OnSaleComponentOrderJsDataHandler', ] ); */ // wbs24 - PropertyConverter \Bitrix\Main\EventManager::getInstance()->addEventHandler( 'iblock', 'OnAfterIBlockElementUpdate', [ '\\Wbs24\\Lib\\UserProperties\\PropertyConverter', 'convertCaliberToDiameter', ] ); \Bitrix\Main\EventManager::getInstance()->addEventHandler( 'iblock', 'OnAfterIBlockElementAdd', [ '\\Wbs24\\Lib\\UserProperties\\PropertyConverter', 'convertCaliberToDiameter', ] ); \Bitrix\Main\EventManager::getInstance()->addEventHandler( 'main', 'OnPageStart', 'OnPageStartHandler' ); function OnPageStartHandler() { if ($_SERVER['REQUEST_URI'] === '/?') { header("Location: https://ilovecveti.ru", true, 301); } } \Bitrix\Main\EventManager::getInstance()->addEventHandler( 'main', 'OnEpilog', 'OnBeforeIBlockElementUpdateHandler' ); function OnBeforeIBlockElementUpdateHandler() { global $USER; if (!$USER->IsAdmin()) { return; } if (defined("ADMIN_SECTION") && strpos($_SERVER['REQUEST_URI'], 'esol') === false && strpos($_SERVER['REQUEST_URI'], 'form_edit') === false) { $script = ' <script> if (!window.myFunctionExecuted) { let firstRowTdContent = document.querySelector("#tr_PROPERTY_1922 td.adm-detail-content-cell-r"); let secondRowTdValignTop = document.querySelector("#tr_PROPERTY_1922 td.adm-detail-valign-top"); let tableToMove = document.querySelector("#tr_PROPERTY_301 td.adm-detail-content-cell-r table"); let rowToMove = document.querySelectorAll("#tr_PROPERTY_301 td.adm-detail-content-cell-r"); if (firstRowTdContent && secondRowTdValignTop && tableToMove && rowToMove.length > 0) { let newRow = document.createElement("tr"); newRow.appendChild(tableToMove.cloneNode(true)); newRow.appendChild(secondRowTdValignTop.cloneNode(true)); // Переносим содержимое внутри firstRowTdContent в новосозданную строку while (firstRowTdContent.childNodes.length > 0) { newRow.appendChild(firstRowTdContent.childNodes[0]); } rowToMove[0].after(newRow); document.querySelector("#tr_PROPERTY_301 td.adm-detail-content-cell-r").appendChild(newRow); newRow.querySelector("td.adm-detail-valign-top.adm-detail-content-cell-l").setAttribute("width", "30%"); newRow.querySelector("td.adm-detail-valign-top.adm-detail-content-cell-l").style.paddingTop = "5px"; // Скрываем первую строку внутри ячейки #tr_PROPERTY_301 let firstRowInCell = document.querySelector("#tr_PROPERTY_301 td.adm-detail-content-cell-r table:nth-child(1)"); if (firstRowInCell) { firstRowInCell.style.display = "none"; } startFirstRow = document.querySelector("#tr_PROPERTY_1922"); if (startFirstRow) startFirstRow.style.display = "none"; window.myFunctionExecuted = true; } else { console.error("One or more elements not found."); } firstRowTdContent = document.querySelector("#tr_PROPERTY_1924 td.adm-detail-content-cell-r"); secondRowTdValignTop = document.querySelector("#tr_PROPERTY_1924 td.adm-detail-valign-top"); tableToMove = document.querySelector("#tr_PROPERTY_1890 td.adm-detail-content-cell-r table"); rowToMove = document.querySelectorAll("#tr_PROPERTY_1890 td.adm-detail-content-cell-r"); if (firstRowTdContent && secondRowTdValignTop && tableToMove && rowToMove.length > 0) { let newRow = document.createElement("tr"); newRow.appendChild(tableToMove.cloneNode(true)); newRow.appendChild(secondRowTdValignTop.cloneNode(true)); // Переносим содержимое внутри firstRowTdContent в новосозданную строку while (firstRowTdContent.childNodes.length > 0) { newRow.appendChild(firstRowTdContent.childNodes[0]); } rowToMove[0].after(newRow); document.querySelector("#tr_PROPERTY_1890 td.adm-detail-content-cell-r").appendChild(newRow); newRow.querySelector("td.adm-detail-valign-top.adm-detail-content-cell-l").setAttribute("width", "30%"); newRow.querySelector("td.adm-detail-valign-top.adm-detail-content-cell-l").style.paddingTop = "5px"; // Скрываем первую строку внутри ячейки #tr_PROPERTY_1890 let firstRowInCell = document.querySelector("#tr_PROPERTY_1890 td.adm-detail-content-cell-r table:nth-child(1)"); if (firstRowInCell) { firstRowInCell.style.display = "none"; } startFirstRow = document.querySelector("#tr_PROPERTY_1924"); if (startFirstRow) startFirstRow.style.display = "none"; window.myFunctionExecuted = true; } else { console.error("One or more elements not found."); } } </script> '; echo $script; } } AddEventHandler('main', 'OnBeforeEventAdd', Array("RegionInfo", "addRegionInfo")); class RegionInfo { public static function addRegionInfo($event, $lid, &$arFields) { if ( $event == "NEW_ONE_CLICK_BUY" || $event == "SALE_NEW_ORDER" ) { \Bitrix\Main\Loader::includeModule('aspro.next'); $region = new \CNextRegionality(); $regionInfo = $region->getCurrentRegion(); $sitePhone = $regionInfo['PHONES'][0]; $replacements = array("+", "(", ")", "-", " "); $sitePhoneFormated = str_replace($replacements, "", $sitePhone); $arFields['SITE_PHONE'] = $sitePhone; $arFields['SITE_PHONE_FORMATED'] = $sitePhoneFormated; $arFields['SITE_EMAIL'] = $regionInfo['PROPERTY_EMAIL_VALUE'][0]; } if ($event == "NEW_ONE_CLICK_BUY") { // Подключаем модули интернет-магазина и инфоблоков if (!CModule::IncludeModule("sale") || !CModule::IncludeModule("iblock")) { die("Не удалось подключить модули"); } $orderId = $arFields['RS_ORDER_ID']; $order = CSaleOrder::GetByID($orderId); if (!$order) { return "Заказ не найден"; } // Получаем элементы заказа (товары) $basketItems = CSaleBasket::GetList( array(), array("ORDER_ID" => $orderId), false, false, array("PRODUCT_ID") ); $productImages = array(); if ($item = $basketItems->Fetch()) { $productId = $item['PRODUCT_ID']; // Получаем данные товара $product = CIBlockElement::GetByID($productId)->GetNext(); if ($product && $product['PREVIEW_PICTURE']) { $image = CFile::GetPath($product['PREVIEW_PICTURE']); $productImages = array( "PRODUCT_ID" => $productId, "PREVIEW_PICTURE" => $image ); } } $arFields['PREVIEW_PICTURE'] = $productImages['PREVIEW_PICTURE']; } } } AddEventHandler("main", "OnEndBufferContent", "ModifyGoogleFontsLinkTags"); function ModifyGoogleFontsLinkTags(&$content) { $request = \Bitrix\Main\Context::getCurrent()->getRequest(); if(!$request->isAdminSection()) { // Регулярное выражение для поиска <link> тегов с href, содержащими 'fonts.googleapis.com' $pattern = '/<link\b[^>]*?\bhref=["\']([^"\']*fonts\.googleapis\.com[^"\']*)["\'][^>]*>/i'; // Callback-функция для добавления атрибутов media и onload $callback = function ($matches) { $linkTag = $matches[0]; // Проверяем, содержит ли тег уже атрибут media или onload $hasMedia = strpos($linkTag, 'media=') !== false; $hasOnload = strpos($linkTag, 'onload=') !== false; // Добавляем атрибуты media и onload, если их нет if (!$hasMedia) { $linkTag = preg_replace('/>$/', ' media="print">', $linkTag); } if (!$hasOnload) { $linkTag = preg_replace('/>$/', ' onload="this.media=\'all\'">', $linkTag); } // Обновляем закрытие тега на /> $linkTag = preg_replace('/>$/', ' />', $linkTag); return $linkTag; }; // Заменяем в контенте страницы теги <link> с добавлением атрибутов media и onload $content = preg_replace_callback($pattern, $callback, $content); } } AddEventHandler("main", "OnEndBufferContent", "ModifyLinkTags_template_css"); function ModifyLinkTags_template_css(&$content) { $request = \Bitrix\Main\Context::getCurrent()->getRequest(); if(!$request->isAdminSection()) { $request = \Bitrix\Main\Context::getCurrent()->getRequest(); if(!$request->isAdminSection()) { $arPatternsToReplace = Array( '/<link\b([^>]*)\bhref=([\'"])(\/bitrix\/cache\/css\/s2\/aspro_next_rospiro\/template_[^\'"\s]*)\2([^>]*)>/i', ); $content = preg_replace( $arPatternsToReplace, '<link rel="preload" href="$3" as="style"><link rel="stylesheet" href="$3">', $content ); } } } //AddEventHandler("main", "OnEndBufferContent", "addContentToHead"); function addContentToHead(&$content) { // Ищем div с классом wbs24-to-head $pattern = '/<div class="wbs24-to-head">(.*?)<\/div>/is'; if (preg_match($pattern, $content, $matches)) { // Получаем содержимое div $divContent = $matches[1]; // Ищем начало тега <head> и вставляем сразу после него содержимое div $content = preg_replace('/<head>/i', '<head>' . $divContent, $content); // Удаляем div с классом wbs24-to-head из DOM $content = preg_replace($pattern, '', $content); } } AddEventHandler("main", "OnEndBufferContent", "MoveCssLinksToEnd"); function MoveCssLinksToEnd(&$content) { $request = \Bitrix\Main\Context::getCurrent()->getRequest(); if (!$request->isAdminSection()) { // Список путей, которые мы ищем в атрибутах href $paths = [ "/bitrix/js/ui/fonts/opensans/ui.font.opensans.min.css", "/bitrix/cache/css/s2/aspro_next_rospiro/page_", "/bitrix/cache/css/s2/aspro_next_rospiro/default_", "/bitrix/js/ui/design-tokens/dist/ui.design-tokens.min.css", "/bitrix/js/main/popup/dist/main.popup.bundle.min.css", "/bitrix/js/main/phonenumber/css/phonenumber.min.css", "/bitrix/css/skyweb24.popuppro/animation.min.css", "/bitrix/js/main/core/css/core_popup.min.css", "/bitrix/css/main/font-awesome.min.css", "/bitrix/panel/main/popup.min.css", ]; // Регулярное выражение для поиска <link> тегов с href, содержащими нужные пути $pattern = '/<link\s+[^>]*href=["\']([^"\']+)["\'][^>]*>/i'; preg_match_all($pattern, $content, $matches); $linksToMove = []; foreach ($matches[1] as $key => $href) { // Проверяем, содержит ли href один из наших путей foreach ($paths as $path) { if (strpos($href, $path) !== false) { // Добавляем атрибут async к найденному тегу <link> $linkWithAsync = str_replace('<link', '<link async', $matches[0][$key]); // Сохраняем измененный тег <link> с async $linksToMove[] = $linkWithAsync; // Удаляем исходный тег из контента $content = str_replace($matches[0][$key], '', $content); break; } } } // Если найдены теги для перемещения, добавляем их перед закрытием </body> if (!empty($linksToMove)) { $content = str_replace('</body>', implode("\n", $linksToMove) . "\n</body>", $content); } } }