%PDF- %PDF-
Server IP : 37.220.80.31 / Your IP : 18.119.158.4 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/esol.allimportexport/lib/entity/ |
Upload File : |
<?php namespace Bitrix\Sale\Internals; use Bitrix\EsolAie\Entity, Bitrix\Main\Localization\Loc, Bitrix\Main\Loader; Loc::loadMessages(__FILE__); class EsolIEProductTable extends \Bitrix\Sale\Internals\ProductTable { static $propFields = null; static $propFieldTitles = null; static $priceFields = null; static $priceFieldTitles = null; public static function getMap() { $connection = \Bitrix\Main\Application::getConnection(); $helper = $connection->getSqlHelper(); $arMap = parent::getMap(); \Bitrix\EsolAie\Entity\Utils::PrepareMap($arMap); if(!isset($arMap['IBLOCK_ELEMENT'])) { $arMap['IBLOCK_ELEMENT'] = array( 'data_type' => '\Bitrix\Iblock\Element', 'reference' => array( '=this.ID' => 'ref.ID', ) ); } self::initPropertyFields(); if(is_array(self::$propFields)) { foreach(self::$propFields as $k=>$v) { $arMap[$k] = $v; } } self::initPriceFields(); if(is_array(self::$priceFields)) { foreach(self::$priceFields as $k=>$v) { $arMap[$k] = $v; } } return $arMap; } public static function getIEFields($type='export') { $arMap = self::getMap(); unset( $arMap['TRIAL_IBLOCK_ELEMENT'], $arMap['TRIAL_PRODUCT'] ); $arMap = array_diff_key($arMap, array_flip(preg_grep('/^(IE_SALEPRODUCTPROPERTY_|IE_SALEPRICE_)[^\.]*$/', array_keys($arMap)))); if($type=='import') { $arMap = array_diff_key($arMap, array_flip(preg_grep('/^(IE_SALEPRODUCTPROPERTY_|IE_SALEPRICE_)/', array_keys($arMap)))); } if(isset($arMap['IE_BASKET']) && is_array($arMap['IE_BASKET'])) { $arMap['IE_BASKET']['ALLOW_REFS'] = array('ORDER'); } if(isset($arMap['IE_STORE_DOCS_ELEMENT']) && is_array($arMap['IE_STORE_DOCS_ELEMENT'])) { $arMap['IE_STORE_DOCS_ELEMENT']['ALLOW_REFS'] = array('DOC_ID_DOC'); } return $arMap; } public static function getRelTitles() { self::initPropertyFields(); $arResult = self::$propFieldTitles; if(!is_array($arResult)) $arResult = array(); self::initPriceFields(); $arResult2 = self::$priceFieldTitles; if(!is_array($arResult2)) $arResult2 = array(); return array_merge($arResult, $arResult2); } public static function prepareDefaultFields(&$arFields) { $arFields = array_diff($arFields, preg_grep('/^(IE_SALEPRODUCTPROPERTY_|IE_SALEPRICE_)/', $arFields)); } public static function initPriceFields() { if(!isset(self::$priceFields)) { self::$priceFields = array(); self::$priceFieldTitles = array(); $arGroups = array(); $dbRes = \Bitrix\Catalog\GroupTable::getList(array('select'=>array('ID', 'NAME', 'BASE'))); while($arr = $dbRes->Fetch()) { if($arr['BASE']=='Y') array_unshift($arGroups, $arr); else array_push($arGroups, $arr); } foreach($arGroups as $arGroup) { self::$priceFields['IE_SALEPRICE_'.$arGroup['ID']] = new \Bitrix\Main\Entity\ReferenceField( 'IE_SALEPRICE_'.$arGroup['ID'], 'Bitrix\Catalog\PriceTable', array( '=ref.PRODUCT_ID' => 'this.ID', '=ref.CATALOG_GROUP_ID' => new \Bitrix\Main\DB\SqlExpression('?i', $arGroup['ID']), ) ); self::$priceFields['IE_SALEPRICE_'.$arGroup['ID'].'.PRICE'] = new \Bitrix\Main\Entity\StringField( 'IE_SALEPRICE_'.$arGroup['ID'].'.PRICE', array( 'title' => Loc::getMessage("ESOL_AIE_FL_PRODUCT_PRICE").' '.$arGroup['NAME'] ) ); self::$priceFields['IE_SALEPRICE_'.$arGroup['ID'].'.CURRENCY'] = new \Bitrix\Main\Entity\StringField( 'IE_SALEPRICE_'.$arGroup['ID'].'.CURRENCY', array( 'title' => Loc::getMessage("ESOL_AIE_FL_PRODUCT_PRICE_CURRENCY").' '.$arGroup['NAME'] ) ); } } } public static function initPropertyFields() { if(!isset(self::$propFields)) { self::$propFields = array(); self::$propFieldTitles = array(); $arProductIblocks = array(); $dbRes = \Bitrix\Catalog\CatalogIblockTable::getList(array('filter'=>array('>PRODUCT_IBLOCK_ID'=>'0', '>SKU_PROPERTY_ID'=>'0'), 'select'=>array('IBLOCK_ID', 'PRODUCT_IBLOCK_ID', 'SKU_PROPERTY_ID'))); while($arr = $dbRes->Fetch()) { $arProductIblocks[$arr['PRODUCT_IBLOCK_ID']] = $arr; } $dbRes = \Bitrix\Iblock\PropertyTable::getList(array('order'=>array('IBLOCK_ID'=>'ASC', 'SORT'=>'ASC', 'ID'=>'ASC'), 'filter'=>array(/*'VERSION'=>1,*/ '!CATALOG_IBLOCK.IBLOCK_ID'=>false), 'select'=>array(/*'ID', 'IBLOCK_ID', 'NAME', 'CODE', 'VERSION', 'MULTIPLE', 'PROPERTY_TYPE', 'USER_TYPE', 'USER_TYPE_SETTINGS_LIST'*/ '*', 'IBLOCK_NAME'=>'IBLOCK.NAME'), 'runtime'=>array( new \Bitrix\Main\Entity\ReferenceField( 'IBLOCK', 'Bitrix\Iblock\IblockTable', array( '=this.IBLOCK_ID' => 'ref.ID' ) ), new \Bitrix\Main\Entity\ReferenceField( 'CATALOG_IBLOCK', 'Bitrix\Catalog\CatalogIblockTable', array( '=this.IBLOCK_ID' => 'ref.IBLOCK_ID' ) ), ))); $arIblockProps = array(); while($arr = $dbRes->Fetch()) { if($arr['VERSION']==1) { /*self::$propFields['IE_SALEPRODUCTPROPERTY_'.$arr['ID']] = new \Bitrix\Main\Entity\ReferenceField( 'IE_SALEPRODUCTPROPERTY_'.$arr['ID'], 'Bitrix\Iblock\EsolIEElementPropertyTable', array( '=ref.IBLOCK_ELEMENT_ID' => 'this.ID', '=ref.IBLOCK_PROPERTY_ID' => new \Bitrix\Main\DB\SqlExpression('?i', $arr['ID']) ) ); self::$propFieldTitles['IE_SALEPRODUCTPROPERTY_'.$arr['ID']] = Loc::getMessage("ESOL_AIE_FL_PRODUCT_PROPERTY").' '.$arr['NAME'].' - '.$arr['IBLOCK_NAME'].' ['.$arr['ID'].']';*/ $addField = false; if($arr['PROPERTY_TYPE']=='L') { $className = 'EsolIESaleElementPropertyID'.$arr['ID'].'Table'; $fullClassName = '\Bitrix\Iblock\\'.$className; eval('namespace Bitrix\Iblock;'."\r\n". 'class '.$className.' extends EsolIEElementPropertyTable{'."\r\n". 'public static function getMap(){return parent::getMapForList("'.$arr['ID'].'");}'. '}'); self::$propFields['IE_SALEPRODUCTPROPERTY_'.$arr['ID']] = new \Bitrix\Main\Entity\ReferenceField( 'IE_SALEPRODUCTPROPERTY_'.$arr['ID'], $fullClassName, array( '=ref.IBLOCK_ELEMENT_ID' => 'this.ID', '=ref.IBLOCK_PROPERTY_ID' => new \Bitrix\Main\DB\SqlExpression('?i', $arr['ID']) ) ); self::$propFields['IE_SALEPRODUCTPROPERTY_'.$arr['ID'].'.VALUE_ENUM.VALUE'] = new \Bitrix\Main\Entity\StringField( 'IE_SALEPRODUCTPROPERTY_'.$arr['ID'].'.VALUE_ENUM.VALUE', array( 'title' => Loc::getMessage("ESOL_AIE_FL_PRODUCT_PROPERTY").' '.$arr['NAME'].' ['.$arr['CODE'].'] - '.$arr['IBLOCK_NAME'].' ['.$arr['IBLOCK_ID'].']' ) ); $addField = true; } elseif($arr['PROPERTY_TYPE']=='E') { $className = 'EsolIESaleElementPropertyID'.$arr['ID'].'Table'; $fullClassName = '\Bitrix\Iblock\\'.$className; eval('namespace Bitrix\Iblock;'."\r\n". 'class '.$className.' extends EsolIEElementPropertyTable{'."\r\n". 'public static function getMap(){return parent::getMapForIblockElement("'.$arr['ID'].'");}'. '}'); self::$propFields['IE_SALEPRODUCTPROPERTY_'.$arr['ID']] = new \Bitrix\Main\Entity\ReferenceField( 'IE_SALEPRODUCTPROPERTY_'.$arr['ID'], $fullClassName, array( '=ref.IBLOCK_ELEMENT_ID' => 'this.ID', '=ref.IBLOCK_PROPERTY_ID' => new \Bitrix\Main\DB\SqlExpression('?i', $arr['ID']) ) ); self::$propFields['IE_SALEPRODUCTPROPERTY_'.$arr['ID'].'.VALUE_ELEMENT.NAME'] = new \Bitrix\Main\Entity\StringField( 'IE_SALEPRODUCTPROPERTY_'.$arr['ID'].'.VALUE_ELEMENT.NAME', array( 'title' => Loc::getMessage("ESOL_AIE_FL_PRODUCT_PROPERTY").' '.$arr['NAME'].' ['.$arr['CODE'].'] - '.$arr['IBLOCK_NAME'].' ['.$arr['IBLOCK_ID'].']' ) ); $addField = true; } elseif($arr['PROPERTY_TYPE']=='S' && $arr['USER_TYPE']=='directory' && $arr['USER_TYPE_SETTINGS_LIST']['TABLE_NAME'] && Loader::includeModule('highloadblock')) { $hlblock = \Bitrix\Highloadblock\HighloadBlockTable::getList(array('filter'=>array('TABLE_NAME'=>$arr['USER_TYPE_SETTINGS_LIST']['TABLE_NAME'])))->fetch(); if($hlblock) { $dbRes2 = \CUserTypeEntity::GetList(array(), array('ENTITY_ID'=>'HLBLOCK_'.$hlblock['ID'])); $arHLFields = array(); while($arHLField = $dbRes2->Fetch()) $arHLFields[$arHLField['FIELD_NAME']] = $arHLField; if(isset($arHLFields['UF_XML_ID']) && isset($arHLFields['UF_NAME'])) { $entity = \Bitrix\Highloadblock\HighloadBlockTable::compileEntity($hlblock); $className = 'EsolIESaleElementPropertyID'.$arr['ID'].'Table'; $fullClassName = '\Bitrix\Iblock\\'.$className; eval('namespace Bitrix\Iblock;'."\r\n". 'class '.$className.' extends EsolIEElementPropertyTable{'."\r\n". 'public static function getMap(){return parent::getMapForDirectory("'.$entity->getDataClass().'");}'. '}'); self::$propFields['IE_SALEPRODUCTPROPERTY_'.$arr['ID']] = new \Bitrix\Main\Entity\ReferenceField( 'IE_SALEPRODUCTPROPERTY_'.$arr['ID'], $fullClassName, array( '=ref.IBLOCK_ELEMENT_ID' => 'this.ID', '=ref.IBLOCK_PROPERTY_ID' => new \Bitrix\Main\DB\SqlExpression('?i', $arr['ID']) ) ); self::$propFields['IE_SALEPRODUCTPROPERTY_'.$arr['ID'].'.VALUE_DIR.UF_NAME'] = new \Bitrix\Main\Entity\StringField( 'IE_SALEPRODUCTPROPERTY_'.$arr['ID'].'.VALUE_DIR.UF_NAME', array( 'title' => Loc::getMessage("ESOL_AIE_FL_PRODUCT_PROPERTY").' '.$arr['NAME'].' ['.$arr['CODE'].'] - '.$arr['IBLOCK_NAME'].' ['.$arr['IBLOCK_ID'].']' ) ); $addField = true; } } } if(!$addField) { if(false /*array_key_exists($arr['IBLOCK_ID'], $arProductIblocks) && $arProductIblocks[$arr['IBLOCK_ID']]['SKU_PROPERTY_ID'] > 0*/) { $productTable = self::getTableName(); if(strpos($productTable, 'b_')===0) $productTable = substr($productTable, 2); $skuPropId = $arProductIblocks[$arr['IBLOCK_ID']]['SKU_PROPERTY_ID']; self::$propFields['IE_SALEPRODUCTPROPERTY_'.$arr['ID'].'_SKU'] = new \Bitrix\Main\Entity\ReferenceField( 'IE_SALEPRODUCTPROPERTY_'.$arr['ID'].'_SKU', 'Bitrix\Iblock\EsolIEElementPropertyTable', array( '=ref.IBLOCK_ELEMENT_ID' => 'this.ID', '=ref.IBLOCK_PROPERTY_ID' => new \Bitrix\Main\DB\SqlExpression('?i', $skuPropId) ) ); self::$propFields['IE_SALEPRODUCTPROPERTY_'.$arr['ID']] = new \Bitrix\Main\Entity\ReferenceField( 'IE_SALEPRODUCTPROPERTY_'.$arr['ID'], 'Bitrix\Iblock\EsolIEElementPropertyTable', array( '=this.IBLOCK_ELEMENT.ID' => new \Bitrix\Main\DB\SqlExpression('?#.?#', $productTable, 'ID'), '=ref.IBLOCK_ELEMENT_ID' => new \Bitrix\Main\DB\SqlExpression('IF(?#.?#=?i, ?#.?#, ?#.?#)', $productTable.'_iblock_element', 'IBLOCK_ID', $arr['IBLOCK_ID'], $productTable, 'ID', $productTable.'_prop2', 'VALUE'), '=ref.IBLOCK_PROPERTY_ID' => new \Bitrix\Main\DB\SqlExpression('?i', $arr['ID']) ) ); } else { self::$propFields['IE_SALEPRODUCTPROPERTY_'.$arr['ID']] = new \Bitrix\Main\Entity\ReferenceField( 'IE_SALEPRODUCTPROPERTY_'.$arr['ID'], 'Bitrix\Iblock\EsolIEElementPropertyTable', array( '=ref.IBLOCK_ELEMENT_ID' => 'this.ID', '=ref.IBLOCK_PROPERTY_ID' => new \Bitrix\Main\DB\SqlExpression('?i', $arr['ID']) ) ); } self::$propFields['IE_SALEPRODUCTPROPERTY_'.$arr['ID'].'.VALUE'] = new \Bitrix\Main\Entity\StringField( 'IE_SALEPRODUCTPROPERTY_'.$arr['ID'].'.VALUE', array( 'title' => Loc::getMessage("ESOL_AIE_FL_PRODUCT_PROPERTY").' '.$arr['NAME'].' ['.$arr['CODE'].'] - '.$arr['IBLOCK_NAME'].' ['.$arr['IBLOCK_ID'].']' ) ); } } elseif($arr['VERSION']==2) { if($arr['MULTIPLE']!='Y') { $arIblockProps[$arr['IBLOCK_ID']]['IBLOCK_NAME'] = $arr['IBLOCK_NAME'].' ['.$arr['ID'].']'; $arIblockProps[$arr['IBLOCK_ID']]['PROP_IDS'] = $arr['ID']; } } } foreach($arIblockProps as $iblockId=>$arIblockPropsItem) { $className = 'EsolIESaleElementPropertyV2Ib'.$iblockId.'Table'; $fullClassName = '\Bitrix\EsolAie\Entity\\'.$className; eval('namespace Bitrix\EsolAie\Entity;'."\r\n". 'class '.$className.' extends EsolIEElementPropertyV2Table{'."\r\n". 'public static function getTableName(){return parent::getTableName()."'.$iblockId.'";}'. 'public static function getMap(){return parent::getMapByIblockId("'.$iblockId.'");}'. '}'); self::$propFields['IE_SALEPRODUCTPROPTABLE_'.$iblockId] = new \Bitrix\Main\Entity\ReferenceField( 'IE_SALEPRODUCTPROPTABLE_'.$iblockId, $fullClassName, array( '=ref.IBLOCK_ELEMENT_ID' => 'this.ID' ) ); self::$propFieldTitles['IE_SALEPRODUCTPROPTABLE_'.$iblockId] = Loc::getMessage("ESOL_AIE_FL_IBLOCK_PROPERTIES").' '.$arIblockPropsItem['IBLOCK_NAME']; } } } }