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.ozonapinew/lib/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/wbs24.ozonapinew/lib/EventHandlers.php
<?php
namespace Wbs24\Ozonapinew;

use Bitrix\Main\{
    Event,
    EventResult
};

class EventHandlers
{
    use Accounts;
    use OrdersHelper;

    const XML_ID_PREFIX = 'OZON';

    protected $main;
    protected $moduleId;
    protected $wrappers;
    protected $OrdersStack;

    public function __construct($accountIndex = 1, $objects = [])
    {
        $this->main = $objects['Main'] ?? new Main();
        $this->moduleId = $this->main->getModuleId();
        $this->wrappers = new Wrappers($objects);
        $this->setAccount($accountIndex);
        $this->OrdersStack = $objects['OrdersStack'] ?? new OrdersStack($accountIndex);
        $this->MainController = $objects['MainController'] ?? new Controller\Main();

        // сборка заказа на OZON
        $this->autoShipOrder = $this->wrappers->Option->get(
            $this->moduleId,
            'autoShipOrder'
        );
    }

    public static function onBeforeCreateOrderHandler(Event $event)
    {
        $param = $event->getParameters();
        $resultOrder =& $param[0];

        $accountIndex = $resultOrder['account_index'];

        $handlers = new EventHandlers($accountIndex);
        $eventParam = $handlers->deliveryProcessing($resultOrder);
        $handlers->ordersStackProcessing($resultOrder, $eventParam);

        return new EventResult(EventResult::SUCCESS, $eventParam);
    }

    public function deliveryProcessing(&$resultOrder)
    {
        $deliveryServiceId = $this->getDeliveryServiceId($resultOrder);
        $eventParam = [];
        if (is_numeric($deliveryServiceId)) {
            $resultOrder['deliveryServiceId'] = $deliveryServiceId;
        }
        if ($deliveryServiceId == 'disallow') {
            $eventParam['disallow'] = true;
        }

        return $eventParam;
    }

    protected function getDeliveryServiceId($resultOrder)
    {
        $deliveryServiceIdOnMarketplace = $resultOrder['delivery_method']['id'];
        $deliveryServiceIdOnBitrix = $this->wrappers->Option->get($this->moduleId, 'delivery_'.$deliveryServiceIdOnMarketplace);
        if ($deliveryServiceIdOnBitrix == 'nothing') {
            $deliveryServiceIdOnBitrix = false;
        }

        return $deliveryServiceIdOnBitrix;
    }

    public function ordersStackProcessing($resultOrder, $eventParam)
    {
        if ($eventParam['disallow']) {
            $externalId = $resultOrder['posting_number'];
            $this->OrdersStack->cleanStack([$externalId]);
        }
    }

    public static function changeOrderStatus(Event $event) {
        $order = $event->getParameter("ENTITY");
        $currentStatus = $event->getParameter("VALUE");
        if (!$order) return;

        self::postProcess($order, $currentStatus);

        return new \Bitrix\Main\EventResult(
            \Bitrix\Main\EventResult::SUCCESS
        );
    }

    public static function cancelOrder(Event $event)
    {
        $order = $event->getParameter("ENTITY");
        if (!$order) return;

        if ($order->isCanceled()) {
            self::postProcess($order, 'cancel_flag');
        }
    }

    public static function paidOrder(Event $event)
    {
        $order = $event->getParameter("ENTITY");
        if (!$order) return;

        if ($order->isPaid()) {
            self::postProcess($order, 'payment_flag');
        }
    }

    public static function allowDelivery(Event $event)
    {
        $shipment = $event->getParameter("ENTITY");
        $orderId = $shipment->getField('ORDER_ID');
        $order = \Bitrix\Sale\Order::load($orderId);
        if (!$order) return;

        if ($order->isAllowDelivery()) {
            self::postProcess($order, 'delivery_flag');
        }
    }

    public static function changeShipment(Event $event)
    {
        $shipment = $event->getParameter("ENTITY");
        $orderId = $shipment->getField('ORDER_ID');
        $order = \Bitrix\Sale\Order::load($orderId);
        if (!$order) return;

        if ($order->isShipped()) {
            self::postProcess($order, 'shipping_flag');
        }
    }

    public static function postProcess($order, $changedValue, $dontCheckRequest = false)
    {
        $orderId = $order->getId();
        $xmlId = $order->getField('XML_ID');
        preg_match('/'.self::XML_ID_PREFIX.'(\d*)_(.+)/', $xmlId, $matches);
        $accountIndex = $matches[1] ?: 1;

        $EventHandlers = new EventHandlers($accountIndex);

        $isOrderFromModule = $EventHandlers->checkIsOrderFromTraidingPlatform($orderId);
        $isAdminRequest = $EventHandlers->isAdminRequest();
        if ($dontCheckRequest) $isAdminRequest = true;

        if (
            $isOrderFromModule
            && $isAdminRequest
        ) {
            $EventHandlers->checkNeedMakeApiRequest(
                $changedValue,
                $orderId,
                $xmlId
            );
        }
    }

    protected function isAdminRequest()
    {
        $isAdminRequest = false;

		$request = \Bitrix\Main\Context::getCurrent()->getRequest();
		$requestedPage = $request->getRequestedPage();

        if (strpos($requestedPage, 'admin/sale_order') !== false) {
            $isAdminRequest = true;
        }

        return $isAdminRequest;
    }

    protected function checkNeedMakeApiRequest(
        $currentStatusOrFlagValue,
        $orderId,
        $xmlId
    ) {
        $accountIndex = $this->wrappers->Option->getAccountIndex();
        $externalId = $this->getExternalId($orderId);
        if (!$externalId) return;

        if (
            $currentStatusOrFlagValue == $this->autoShipOrder
        ) {
            $this->MainController->process(
                [
                    'action' => 'shipOrder',
                    'externalId' => $externalId,
                    'orderId' => $orderId,
                    'accountIndex' => $accountIndex,
                ]
            );
        }
    }

    public static function loadPage() {
        $accountIndex = 1; // устаналиваем номер аккаунта - 1, так как нам не важен аккаунт в данной функции
        $EventHandlers = new EventHandlers($accountIndex);

        $EventHandlers->MainController->process(
            [
                'action' => 'checkUpAgents',
                'accountIndex' => $accountIndex,
            ]
        );
    }
}

Youez - 2016 - github.com/yon3zu
LinuXploit