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/modules/wbs24.saleemailcvetdvor/lib/ |
Upload File : |
<?php namespace Wbs24\Saleemailcvetdvor; use Bitrix\Sale\Order; use Bitrix\Main\Loader; use Bitrix\Main\Event; use Bitrix\Main\EventResult; use Bitrix\Main\SystemException; class Main { use Exception; use Helper; protected $moduleId; protected $wrappers; protected $region; protected $Admin; protected $destanationIblockId; protected $siteId; protected $regionPropertyCode = 'CITY'; protected $regionFlagPropertyCode = 'CITY_IS_SET'; public function __construct($objects = []) { try { if (!Loader::includeModule('aspro.next')) throw new SystemException("Module aspro.next don`t installed"); $this->moduleId = basename(dirname(__DIR__, 1)); $this->wrappers = new Wrappers($objects); $this->region = $objects['CNextRegionality'] ?? new \CNextRegionality(); $this->Admin = $objects['Admin'] ?? new Admin(array_merge(['Main' => $this], $objects)); $this->destanationIblockId = intval($this->wrappers->Option->get($this->moduleId, 'destanation_iblock_id')); $this->siteId = $this->wrappers->Option->get($this->moduleId, 'site_id'); } catch (SystemException $exception) { $this->exceptionHandler($exception); } } public function getModuleId() { return $this->moduleId; } public function getSiteId() { return $this->siteId; } public function getDestanationIblockId() { return $this->destanationIblockId; } public static function OnSaleOrderBeforeSavedHandler(Event $event) { $order = $event->getParameter("ENTITY"); $obj = new Main(); $currentSiteId = $order->getSiteId(); if ($currentSiteId == $obj->getSiteId() && !$obj->isRegionSet($order)) { $region = $obj->getRegionFromDelivery($order); $regionFromContext = $obj->getRegion(); if ($regionFromContext != $region) { $region = $regionFromContext; } if ($region) { $obj->setOrderRegion($order, $region); } } } public function isRegionSet(&$order) { $property = $this->getOrderField($order, $this->regionFlagPropertyCode); return ($property && $property->getValue() == 'Y'); } public static function OnBeforeEventSendHandler(&$arFields, &$arFieldsMail) { $obj = new Main(); if (!$obj->moduleIsOn($arFieldsMail['LID'])) return; $email = ''; $productName = ''; $log = date("Y.m.d H:i:s")."\r\n 1: ".print_r([$arFields, $arFieldsMail], true)."\r\n\r\n"; if ($log) { $handle = @fopen($_SERVER['DOCUMENT_ROOT']."/upload/Saleemailcvetdvor_OnBeforeEventSendHandler.txt", "a"); fwrite($handle, $log); fclose($handle); } // события заказов if ( ( $arFieldsMail['EVENT_NAME'] == 'SALE_NEW_ORDER' || $arFieldsMail['EVENT_NAME'] == 'SALE_ORDER_PAID' || $arFieldsMail['EVENT_NAME'] == 'NEW_ONE_CLICK_BUY' || $arFieldsMail['EVENT_NAME'] == 'SALE_ORDER_CANCEL' ) && (isset($arFields['ORDER_ID']) || isset($arFields['RS_ORDER_ID'])) && \CModule::IncludeModule('sale') ) { // fix if ( $arFields['REGION_EMAIL'] && strpos($arFields['SALE_EMAIL'], $arFields['REGION_MAIN_DOMAIN']) !== false ) { $arFields['SALE_EMAIL'] = $arFields['REGION_EMAIL']; } $orderId = $arFields['ORDER_ID'] ?? $arFields['RS_ORDER_ID']; $order = Order::load($orderId); $city = $obj->getCityFromOrder($order); $email = $obj->getEmail($city); } // события не связанные с заказами if ($arFieldsMail['EVENT_NAME'] == 'FORM_FILLING_BUYSIMILAR') { $city = $arFields['REGION_NAME']; $email = $obj->getEmail($city); $productName = $obj->getProductName($arFields['PRODUCT_NAME']); } if ($email) { $arFieldsMail['EMAIL_TO'] = $obj->addEmails($arFieldsMail['EMAIL_TO'], $email); $obj->createReport('log.txt', 'Event: '.$arFieldsMail['EVENT_NAME'].'; Order ID: '.$orderId.'; City: '.$city.'; E-mails: '.$arFieldsMail['EMAIL_TO']); } if ($productName) { $arFields['PRODUCT_NAME'] = $productName; } $log = date("Y.m.d H:i:s")."\r\n 2:".print_r([$arFields, $arFieldsMail], true)."\r\n\r\n"; if ($log) { $handle = @fopen($_SERVER['DOCUMENT_ROOT']."/upload/Saleemailcvetdvor_OnBeforeEventSendHandler.txt", "a"); fwrite($handle, $log); fclose($handle); } } public static function onSaleDeliveryHandlersClassNamesBuildListHandler() { return new EventResult( EventResult::SUCCESS, [ '\Wbs24\Saleemailcvetdvor\Delivery' => '/bitrix/modules/wbs24.saleemailcvetdvor/lib/Delivery.php', //'\Wbs24\Saleemailcvetdvor\DeliveryPickup' => '/bitrix/modules/wbs24.saleemailcvetdvor/lib/DeliveryPickup.php', ] ); } public function getProductName($currentProductName) { $newProductName = ''; if (is_numeric($currentProductName)) { $productId = $currentProductName; $select = ["NAME", "DETAIL_PAGE_URL"]; $filter = ["ID" => $productId]; $result = $this->wrappers->CIBlockElement->GetList(["SORT" => "ASC"], $filter, false, false, $select); if ($fields = $result->GetNext()) { $newProductName = "<a href='https://ilovecveti.ru".$fields["DETAIL_PAGE_URL"]."'>".$fields["NAME"]."</a>"; } } return $newProductName; } public function getRegionFromDelivery(&$order) { $region = ''; $found = false; $deliveryIds = $order->getDeliverySystemId(); $deliveries = $this->wrappers->DeliveryServices->getList([ 'select' => ['ID', 'NAME'], 'filter' => ['ID' => $deliveryIds], ])->fetchAll(); $cityList = $this->Admin->getSenderCityList(); foreach ($deliveries as $deliveryInfo) { $deliveryName = $deliveryInfo['NAME']; foreach ($cityList as $city) { if (strpos($deliveryName, $city) !== false) { $region = $city; $found = true; break; } } if ($found) break; } return $region; } protected function getShopNames() { # code... } public function getRegion() { $regionInfo = $this->getRegionInfo(); return $regionInfo['NAME']; } protected function moduleIsOn($currentLid) { $moduleIsOn = false; $allowedLid = ($this->getSiteId() == $currentLid); if ($allowedLid) $moduleIsOn = ($this->wrappers->Option->get($this->moduleId, 'on') == 'Y'); return $moduleIsOn; } protected function getRegionId() { $regionInfo = $this->getRegionInfo(); return $regionInfo['ID']; } protected function getRegionInfo() { return $this->region->getCurrentRegion(); } public function setOrderRegion(&$order, $region) { $regionProperty = $this->getOrderField($order, $this->regionPropertyCode); if ($regionProperty) $regionProperty->setValue($region); $flagProperty = $this->getOrderField($order, $this->regionFlagPropertyCode); if ($flagProperty) $flagProperty->setValue('Y'); } protected function getOrderField(&$order, $code) { $propertyCollection = $order->getPropertyCollection(); $property = $propertyCollection->getItemByOrderPropertyCode($code); return $property; } public function getDeliveryPrice(&$order) { $basePrice = $this->getBaseDeliveryPrice(); $ratio = $this->getDeliveryPriceRatio(); $price = $basePrice * $ratio; return $price; } public function getCityFromOrder(&$order) { $regionProperty = $this->getOrderField($order, $this->regionPropertyCode); $city = $regionProperty ? $regionProperty->getValue() : ''; return $city; } protected function getBaseDeliveryPrice() { return intval($this->wrappers->Option->get($this->moduleId, 'base_price')); } protected function getDeliveryPriceRatio() { $regionId = $this->getRegionId(); $ratio = $this->wrappers->Option->get($this->moduleId, 'destanation_ratio_'.$regionId); return $ratio; } public function getEmail($orderCity) { $managerEmail = $this->getEmailFromCities($orderCity); if (!$managerEmail) { $senderCity = $this->getSenderCityFromDestanations($orderCity); if ($senderCity) { $managerEmail = $this->getEmailFromCities($senderCity); } } return $managerEmail; } protected function getEmailFromCities($orderCity) { $managerEmail = ''; $quantity = $this->maxLines; for ($i = 1; $i <= $quantity; $i++) { $city = $this->wrappers->Option->get($this->moduleId, 'city_'.$i); $email = $this->wrappers->Option->get($this->moduleId, 'email_'.$i); if ($city == $orderCity && $email) { $managerEmail = $email; break; } if ($this->needBreakList($city, $counter)) break; } return $managerEmail; } protected function getSenderCityFromDestanations($orderCity) { $foundSenderCity = ''; $destanations = $this->getDestanations(); foreach ($destanations as $i => $destanation) { $senderCity = $this->wrappers->Option->get($this->moduleId, 'sender_city_'.$i); if ($destanation == $orderCity && $senderCity) { $foundSenderCity = $senderCity; break; } } return $foundSenderCity; } public function getDestanations() { $destanations = []; $select = ["ID", "IBLOCK_ID", "NAME"]; $filter = ["IBLOCK_ID" => $this->destanationIblockId]; $res = $this->wrappers->CIBlockElement->GetList(["SORT" => "ASC"], $filter, false, false, $select); while($fields = $res->Fetch()) { $id = $fields['ID']; $name = $fields['NAME']; $destanations[$id] = $name; } return $destanations; } protected function addEmails($currentEmailsString, $addEmail) { if (strpos($currentEmailsString, '#SALE_EMAIL#') !== false) { $currentEmailsString = str_replace('#SALE_EMAIL#', $addEmail, $currentEmailsString); } elseif (strpos($currentEmailsString, '#DEFAULT_EMAIL_FROM#') !== false) { $currentEmailsString = str_replace('#DEFAULT_EMAIL_FROM#', $addEmail, $currentEmailsString); } return $currentEmailsString; } }