%PDF- %PDF-
Server IP : 37.220.80.31 / Your IP : 18.116.69.107 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/webdebug.antirutin/plugins/element/product_set/ |
Upload File : |
<? namespace WD\Antirutin\Plugins\Element; use \WD\Antirutin\Helper, \WD\Antirutin\IBlock, \WD\Antirutin\PluginElement; class ProductSet extends PluginElement { /** * Execute! */ public function processElement($intElementId){ $bResult = false; if(\Bitrix\Main\Loader::IncludeModule('catalog') && class_exists('CCatalogProductSet')) { # Prepare $arProducts = $this->getSavedProducts(); $intType = intVal($this->get('type')); $intProductType = $intType == 1 ? \CCatalogProductSet::TYPE_SET : \CCatalogProductSet::TYPE_GROUP; $obProductSet = new \CCatalogProductSet; # Prepare set items $arSetItems = []; foreach($arProducts as $arProduct){ $arSetItem = [ 'ACTIVE' => 'Y', 'ITEM_ID' => $arProduct['id'], 'QUANTITY' => $arProduct['amount'], 'SORT' => $arProduct['sort'], ]; if($intProductType === \CCatalogProductSet::TYPE_SET) { $arSetItem['DISCOUNT_PERCENT'] = $arProduct['percent']; } $arSetItems[] = $arSetItem; } # Get current set $arCurrentProductSets = \CCatalogProductSet::getAllSetsByProduct($intElementId, $intProductType); # Update exist set if(is_array($arCurrentProductSets) && !empty($arCurrentProductSets)) { $arCurrentProductSet = array_shift($arCurrentProductSets); # because result is [123 => [data]] $arSetFields = [ 'ITEMS' => $arSetItems, ]; if($obProductSet->update($arCurrentProductSet['SET_ID'], $arSetFields)) { $obProductSet->recalculateSetsByProduct($intElementId); $bResult = true; } else { $this->setError(static::getMessage('ERROR_UPD_SET_'.$intType, [ '#ERROR#' => $this->errorsToString($obProductSet->getErrors()), ])); } } # Add new set else { $arSetFields = [ 'ACTIVE' => 'Y', 'TYPE' => $intProductType, 'ITEM_ID' => $intElementId, 'ITEMS' => $arSetItems, ]; if($obProductSet->add($arSetFields)) { $obProductSet->recalculateSetsByProduct($intElementId); $bResult = true; } else { $this->setError(static::getMessage('ERROR_ADD_SET_'.$intType, [ '#ERROR#' => $this->errorsToString($obProductSet->getErrors()), ])); } } unset($obProductSet); } return $bResult; } public function getSavedProducts(){ $arResult = []; $arData = $this->get('products'); if(!is_array($arData)){ $arData = [ 'id' => [], 'quantity' => [], 'sort' => [], 'percent' => [], ]; } foreach ($arData as $key => $subarr) { foreach ($subarr as $subkey => $subvalue) { $arResult[$subkey][$key] = $subvalue; } } foreach($arResult as $key => $arItem){ if(!strlen($arItem['id'])){ unset($arResult[$key]); } } foreach($arResult as $key => $arItem){ $arItem['id'] = intVal($arItem['id']); $arItem['amount'] = floatVal($arItem['amount']); $arItem['sort'] = intVal($arItem['sort']); $arItem['percent'] = floatVal($arItem['percent']); $arResult[$key] = $arItem; } uasort($arResult, function($a, $b){ return $a['sort'] - $b['sort']; }); return $arResult; } public function errorsToString($arErrors){ if(!is_array($arErrors) || empty($arErrors)){ return '-'; } return implode(', ', array_column($arErrors, 'text')); } }