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/sale/lib/tradingplatform/landing/ |
Upload File : |
<?php namespace Bitrix\Sale\TradingPlatform\Landing; use Bitrix\Main\Localization\Loc; use Bitrix\Main; use Bitrix\Sale; Loc::loadMessages(__FILE__); /** * Class Landing * @package Bitrix\Sale\TradingPlatform\Landing */ class Landing extends Sale\TradingPlatform\Platform implements Sale\TradingPlatform\IRestriction { public const TRADING_PLATFORM_CODE = 'landing'; public const CODE_DELIMITER = '_'; public const LANDING_STORE_CLOTHES = 'clothes'; public const LANDING_STORE_INSTAGRAM = 'instagram'; public const LANDING_STORE_CHATS = 'chats'; public const LANDING_STORE_MINI_ONE_ELEMENT = 'mini-one-element'; public const LANDING_STORE_MINI_CATALOG = 'mini-catalog'; public const LANDING_STORE_STORE_V3 = 'store_v3'; protected static $stores = [ self::LANDING_STORE_CLOTHES, self::LANDING_STORE_INSTAGRAM, self::LANDING_STORE_CHATS, self::LANDING_STORE_MINI_ONE_ELEMENT, self::LANDING_STORE_MINI_CATALOG, self::LANDING_STORE_STORE_V3, ]; protected $site = []; /** * @return bool|int */ public function install() { $data = $this->getInfo(); $result = Sale\TradingPlatformTable::add([ "CODE" => $this->getCode(), "ACTIVE" => "Y", "NAME" => Loc::getMessage('SALE_LANDING_NAME', ['#NAME#' => $data['TITLE']]), "DESCRIPTION" => '', "CLASS" => '\\'.static::class, "XML_ID" => static::generateXmlId(), ]); if ($result->isSuccess()) { $this->isInstalled = true; $this->id = $result->getId(); } return $result->isSuccess(); } /** * @return string */ protected static function generateXmlId() { return uniqid('bx_'); } /** * @return int */ protected function getSiteId() { return (int)mb_substr($this->getCode(), mb_strrpos($this->getCode(), '_') + 1); } /** * @return void */ public static function setShipmentTableOnAfterUpdateEvent() { return; } /** * @return void */ protected static function unSetShipmentTableOnAfterUpdateEvent() { return; } /** * @return void */ protected function setCatalogSectionsTabEvent() { return; } /** * @return void */ protected function unSetCatalogSectionsTabEvent() { return; } /** * @param Main\Event $event */ public static function onLandingSiteAdd(Main\Event $event) { $fields = $event->getParameter('fields'); if ($fields['TYPE'] !== 'STORE') { return; } $primary = $event->getParameter('primary'); $landing = Landing::getInstanceByCode(static::getCodeBySiteId($primary['ID'])); if (!$landing->isInstalled()) { $landing->install(); } } public static function onLandingSiteUpdate(Main\Event $event) { $fields = $event->getParameter('fields'); if (empty($fields['TYPE']) || $fields['TYPE'] !== 'STORE') { return; } $primary = $event->getParameter('primary'); $landing = Landing::getInstanceByCode(static::getCodeBySiteId($primary['ID'])); if ($landing->isInstalled()) { Sale\TradingPlatformTable::update( $landing->getId(), [ 'NAME' => Loc::getMessage('SALE_LANDING_NAME', ['#NAME#' => $fields['TITLE']]), ] ); } } /** * @param Main\Event $event */ public static function onLandingSiteDelete(Main\Event $event) { $primary = $event->getParameter('primary'); $landing = Landing::getInstanceByCode(static::getCodeBySiteId($primary['ID'])); if ($landing->isInstalled()) { $registry = Sale\Registry::getInstance(Sale\Registry::REGISTRY_TYPE_ORDER); /** @var Sale\TradeBindingCollection $tradeBindingCollection */ $tradeBindingCollection = $registry->get(Sale\Registry::ENTITY_TRADE_BINDING_COLLECTION); $dbRes = $tradeBindingCollection::getList([ 'select' => ['ID'], 'filter' => [ '=TRADING_PLATFORM_ID' => $landing->getId() ] ]); if ($dbRes->fetch()) { $landing->unsetActive(); } else { $landing->uninstall(); } } } /** * @param Main\Event $event */ public static function onLandingBeforeSiteRecycle(Main\Event $event) { $id = $event->getParameter('id'); $delete = $event->getParameter('delete'); $res = \Bitrix\Landing\Site::getList([ 'select' => [ 'ID' ], 'filter' => [ '=ID' => $id, 'CHECK_PERMISSIONS' => 'N', '=TYPE' => 'STORE' ] ]); if (!$res->fetch()) { return; } $landing = Landing::getInstanceByCode(static::getCodeBySiteId($id)); if (!$landing || !$landing->isInstalled()) { return; } if ($delete) { $landing->unsetActive(); } else { $landing->setActive(); } } /** * @param $id * @return string */ public static function getCodeBySiteId($id) { return static::TRADING_PLATFORM_CODE.static::CODE_DELIMITER.$id; } /** * @return array */ public function getInfo() { if (!Main\Loader::includeModule('landing')) { return []; } if ($this->site) { return $this->site; } /** @var Main\DB\Result $dbRes */ $dbRes = \Bitrix\Landing\Site::getList([ 'filter' => [ '=ID' => $this->getSiteId(), 'CHECK_PERMISSIONS' => 'N', '=DELETED' => ['Y', 'N'], ] ]); if ($data = $dbRes->fetch()) { $this->site = $data; $this->site['PUBLIC_URL'] = \Bitrix\Landing\Site::getPublicUrl($this->getSiteId()); } return $this->site; } public function getAnalyticCode() { $data = $this->getInfo(); if (!isset($data['XML_ID']) || !$data['XML_ID']) { return parent::getAnalyticCode(); } foreach (static::$stores as $store) { if (mb_strpos($data['XML_ID'], $store) !== false) { return $store; } } return $data['XML_ID']; } /** * @param $type * @param Sale\Order $order * @return string * @throws Main\ArgumentException */ public function getExternalLink($type, Sale\Order $order) { if ($type === static::LINK_TYPE_PUBLIC_DETAIL_ORDER) { return $this->getLandingSysPageUrl( 'personal', [ 'SECTION' => 'orders', 'ID' => $order->getId() ] ); } if ($type === static::LINK_TYPE_PUBLIC_FEEDBACK) { return $this->getLandingSysPageUrl('feedback'); } throw new Main\ArgumentException("Unsupported link type: {$type}"); } /** * @param string $type * @param array $additional * @return string */ private function getLandingSysPageUrl(string $type, array $additional = []): string { if (!Main\Loader::includeModule('landing')) { return ''; } return \Bitrix\Landing\Syspage::getSpecialPage($this->getSiteId(), $type, $additional); } /** * @return string */ public function getRealName() { return (string)($this->getInfo()['TITLE'] ?? ''); } /** * @param string $type * @return bool */ public function isOfType(string $type): bool { $info = $this->getInfo(); if (!isset($info['XML_ID'])) { return false; } return mb_strpos($info['XML_ID'], $type) !== false; } }