%PDF- %PDF-
Server IP : 37.220.80.31 / Your IP : 18.220.55.43 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\Iblock; use Bitrix\Main\Localization\Loc, Bitrix\Main\Loader; Loc::loadMessages(__FILE__); class EsolIEPropertyTable extends \Bitrix\Iblock\PropertyTable { public static function getMap() { $arMap = parent::getMap(); if(isset($arMap['USER_TYPE_SETTINGS_LIST']) && isset($arMap['USER_TYPE_SETTINGS'])) { unset($arMap['USER_TYPE_SETTINGS']); } if(class_exists('\Bitrix\Iblock\SectionPropertyTable')) { $arMap['SECTION_PROP'] = new \Bitrix\Main\Entity\ReferenceField( 'SECTION_PROP', '\Bitrix\Iblock\SectionPropertyTable', array( '=ref.PROPERTY_ID' => 'this.ID', '=ref.SECTION_ID' => new \Bitrix\Main\DB\SqlExpression('?i', 0), ) ); $arMap['SECTION_PROP.SMART_FILTER'] = new \Bitrix\Main\Entity\StringField( 'SECTION_PROP.SMART_FILTER', array( 'title' => Loc::getMessage('ESOL_AIE_PROPERTY_SMART_FILTER') ) ); $arMap['SECTION_PROP.DISPLAY_EXPANDED'] = new \Bitrix\Main\Entity\StringField( 'SECTION_PROP.DISPLAY_EXPANDED', array( 'title' => Loc::getMessage('ESOL_AIE_PROPERTY_DISPLAY_EXPANDED') ) ); } $arFeatures = array(); if(is_callable(array('\Bitrix\Iblock\Model\PropertyFeature', 'isEnabledFeatures')) && \Bitrix\Iblock\Model\PropertyFeature::isEnabledFeatures()) { $arFeatures = \Bitrix\Iblock\Model\PropertyFeature::getPropertyFeatureList(array()); foreach($arFeatures as $arFeature) { $fieldName = 'IE_FEATURE_'.str_replace('.', '_', $arFeature['MODULE_ID']).'_'.$arFeature['FEATURE_ID']; $arMap[$fieldName] = new \Bitrix\Main\Entity\ReferenceField( $fieldName, 'Bitrix\Iblock\PropertyFeatureTable', array( '=ref.PROPERTY_ID' => 'this.ID', '=ref.MODULE_ID' => new \Bitrix\Main\DB\SqlExpression('?s', $arFeature['MODULE_ID']), '=ref.FEATURE_ID' => new \Bitrix\Main\DB\SqlExpression('?s', $arFeature['FEATURE_ID']) ) ); $arMap[$fieldName.'.IS_ENABLED'] = new \Bitrix\Main\Entity\StringField( $fieldName.'_'.$arFeature['FEATURE_ID'].'.IS_ENABLED', array( 'title' => $arFeature['FEATURE_NAME'] ) ); } } /*$arMap['ENUM_PROP'] = array( 'data_type' => '\Bitrix\Iblock\EsolIEPropertyEnumerationTable', 'reference' => array( '=this.ID' => 'ref.PROPERTY_ID', ) );*/ return $arMap; } public static function getIEFields($type='export') { $arMap = self::getMap(); $arMap = array_diff_key($arMap, array_flip(preg_grep('/^(IE_FEATURE_|SECTION_PROP)[^\.]*$/', array_keys($arMap)))); //$arMap = array_diff_key($arMap, array_flip(preg_grep('/^(IE_FEATURE_)[^\.]*$/', array_keys($arMap)))); return $arMap; } public static function GetFeatures(&$arFields) { $arFeatures = array(); if(is_callable(array('\Bitrix\Iblock\Model\PropertyFeature', 'isEnabledFeatures')) && \Bitrix\Iblock\Model\PropertyFeature::isEnabledFeatures()) { $arFeatures = \Bitrix\Iblock\Model\PropertyFeature::getPropertyFeatureList(array()); } $arFeaturesFields = array(); foreach($arFeatures as $arFeature) { $featureKey = $arFeature['MODULE_ID'].':'.$arFeature['FEATURE_ID']; $featureKey2 = 'IE_FEATURE_'.$arFeature['MODULE_ID'].'_'.$arFeature['FEATURE_ID']; if(isset($arFields[$featureKey2.'.IS_ENABLED'])) { $arFeaturesFields[$featureKey] = array( 'MODULE_ID' => $arFeature['MODULE_ID'], 'FEATURE_ID' => $arFeature['FEATURE_ID'], 'IS_ENABLED' => $arFields[$featureKey2.'.IS_ENABLED'] == 'Y' ? 'Y' : 'N' ); } } $arFields = array_diff_key($arFields, array_flip(preg_grep('/^IE_FEATURE_/', array_keys($arFields)))); return $arFeaturesFields; } public static function SaveFeatures($arFeatures, $propId) { if(empty($arFeatures) || !is_callable(array('\Bitrix\Iblock\Model\PropertyFeature', 'isEnabledFeatures')) || !\Bitrix\Iblock\Model\PropertyFeature::isEnabledFeatures()) return; foreach($arFeatures as $k=>$v) { $arFeatures[$k]['PROPERTY_ID'] = $propId; } \Bitrix\Iblock\Model\PropertyFeature::setFeatures($propId, $arFeatures); } public static function GetSmartFilter(&$arFields) { $arSmartFilter = array(); foreach($arFields as $k=>$v) { if(strpos($k, 'SECTION_PROP.')===0) { $arSmartFilter[substr($k, 13)] = (ToUpper(trim($v))=='Y' ? 'Y' : 'N'); unset($arFields[$k]); } } return $arSmartFilter; } public static function SaveSmartFilter($arSmartFilter, $ID) { if(!empty($arSmartFilter) > 0 && class_exists('\Bitrix\Iblock\SectionPropertyTable')) { $updateIndex = false; $cnt = 0; $arProp = self::getList(array('filter'=>array('ID'=>$ID), 'select'=>array('IBLOCK_ID')))->Fetch(); $dbRes = \Bitrix\Iblock\SectionPropertyTable::getList(array('filter'=>array('PROPERTY_ID'=>$ID), 'select'=>array('IBLOCK_ID', 'SECTION_ID', 'PROPERTY_ID', 'SMART_FILTER'))); while($arr = $dbRes->Fetch()) { \Bitrix\Iblock\SectionPropertyTable::update(array('IBLOCK_ID'=>$arr['IBLOCK_ID'], 'SECTION_ID'=>$arr['SECTION_ID'], 'PROPERTY_ID'=>$arr['PROPERTY_ID']), $arSmartFilter); if(isset($arSmartFilter['SMART_FILTER']) && $arSmartFilter['SMART_FILTER']=='Y' && $arr['SMART_FILTER']!='Y') $updateIndex = true; $cnt++; } if($cnt==0) { \Bitrix\Iblock\SectionPropertyTable::add(array_merge(array('IBLOCK_ID'=>$arProp['IBLOCK_ID'], 'SECTION_ID'=>0, 'PROPERTY_ID'=>$ID, 'SMART_FILTER'=>'N', 'DISPLAY_TYPE'=>'F', 'DISPLAY_EXPANDED'=>'N'), $arSmartFilter)); if(isset($arSmartFilter['SMART_FILTER']) && $arSmartFilter['SMART_FILTER']=='Y') $updateIndex = true; } if($updateIndex) \Bitrix\Iblock\PropertyIndex\Manager::markAsInvalid($arProp['IBLOCK_ID']); } } public static function CheckCntFilterFields($fieldName) { if(strpos($fieldName, 'IE_FEATURE_')!==false || strpos($fieldName, 'SECTION_PROP')!==false) return false; return true; } public static function Add(array $arFields) { $arFeatures = self::GetFeatures($arFields); $arSmartFilter = self::GetSmartFilter($arFields); $result = parent::Add($arFields); if($result->isSuccess()) { $ID = $result->getId(); if(!empty($arFeatures)) self::SaveFeatures($arFeatures, $ID); if(!empty($arSmartFilter) > 0) self::SaveSmartFilter($arSmartFilter, $ID); } return $result; } public static function Update($ID, array $arFields) { $arFeatures = self::GetFeatures($arFields); $arSmartFilter = self::GetSmartFilter($arFields); if(empty($arFields)) $arFields['ID'] = $ID; $result = parent::Update($ID, $arFields); if($result->isSuccess()) { if(!empty($arFeatures)) self::SaveFeatures($arFeatures, $ID); if(!empty($arSmartFilter) > 0) self::SaveSmartFilter($arSmartFilter, $ID); } return $result; } public static function Delete($ID) { $result = parent::Delete($ID, $arFields); return $result; } }