%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/sale/lib/exchange/onec/ |
Current File : //home/bitrix/www/bitrix/modules/sale/lib/exchange/onec/converter.php |
<?php namespace Bitrix\Sale\Exchange\OneC; use Bitrix\Main\ArgumentOutOfRangeException; use Bitrix\Main\Type\DateTime; use Bitrix\Sale\Exchange\EntityType; use Bitrix\Sale\Exchange\IConverter; use Bitrix\Sale\Exchange\ISettings; /** * Class Converter * @package Bitrix\Sale\Exchange\OneC * @deprecated */ abstract class Converter implements IConverter { const MEASURE_CODE_DEFAULT = 796; const KOEF_DEFAULT = 1; const CURRENCY_RATE_DEFAULT = 1; /** @var ISettings */ protected $settings = null; protected $entityTypeId; protected $documentTypeId; /** @var Converter[]|null */ private static $instances = null; /** * @param int $typeId Type ID. * @return Converter * @deprecated */ public static function getInstance($typeId) { if(!is_int($typeId)) { $typeId = (int)$typeId; } if(!DocumentType::IsDefined($typeId)) { throw new ArgumentOutOfRangeException('Is not defined', DocumentType::FIRST, DocumentType::LAST); } if(self::$instances === null || !isset(self::$instances[$typeId])) { if(self::$instances === null) { self::$instances = array(); } if(!isset(self::$instances[$typeId])) { self::$instances[$typeId] = ConverterFactory::create($typeId); } } return self::$instances[$typeId]; } /** * @return array */ abstract protected function getFieldsInfo(); /** * @return ISettings */ public function getSettings() { return $this->settings; } public function getEntityTypeId() { return $this->entityTypeId; } public function getDocmentTypeId() { return $this->documentTypeId; } public function init(ISettings $settings, $entityTypeId = EntityType::UNDEFINED, $documentTypeId = DocumentType::UNDEFINED) { $this->settings = $settings; $this->entityTypeId = EntityType::isDefined($entityTypeId) ? $entityTypeId:EntityType::UNDEFINED; $this->documentTypeId = DocumentType::isDefined($documentTypeId) ? $documentTypeId:DocumentType::UNDEFINED; } /** * @param $value * @param mixed */ protected function externalizeField(&$value, $fieldInfo=null) { if($value<>'') { switch($fieldInfo['TYPE']) { case 'text': $value = self::toText($value); break; case 'time': if($value instanceof DateTime) $value = \CAllDatabase::FormatDate($value->toString(), \CAllSite::GetDateFormat("FULL", LANG), "HH:MI:SS"); break; case 'date': if($value instanceof DateTime) $value = \CAllDatabase::FormatDate($value->toString(), \CAllSite::GetDateFormat("FULL", LANG), "YYYY-MM-DD"); break; case 'datetime': if($value instanceof DateTime) $value = \CAllDatabase::FormatDate($value->toString(), \CAllSite::GetDateFormat("FULL", LANG), "YYYY-MM-DD HH:MI:SS"); break; case 'bool': $value = $value == 'Y'? 'true':'false'; break; case 'int': $value = intval($value); break; } } } /** * @param $value * @return string */ protected static function toText($value) { $value = preg_replace('/<style[^>]*>.*?<\/style>/is', '', $value); $value = preg_replace('/<blockquote[^>]*>.*?<\/blockquote>/is', '', $value); $value = preg_replace('/<script[^>]*>.*?<\/script>/is', '', $value); return html_entity_decode( strip_tags( preg_replace('/(<br[^>]*>)+/is'.BX_UTF_PCRE_MODIFIER, "\n", $value) ) ); } /** * @param string $code * @return string */ public static function normalizeExternalCode($code) { $xml_id = $code; list($productXmlId, $offerXmlId) = explode("#", $xml_id, 2); if ($productXmlId === $offerXmlId) $xml_id = $productXmlId; return $xml_id; } /** * @param $rekv * @param array $info * @return array */ protected function externalizeRekv(array $rekv, array $info) { $result = array(); $rowId=0; foreach($rekv as $kRekv=>$vRekv) { foreach($info['FIELDS'] as $name=>$fieldInfo) { $value=''; switch($name) { case 'NAME': $value = $kRekv; break; case 'VALUE': $value = $vRekv; if($value instanceof DateTime) $fieldInfo['TYPE'] = 'datetime'; break; } $this->externalizeField($value, $fieldInfo); $result[$rowId][$name] = $value; } $rowId++; } return $result; } /** * @param $rekv * @param array $info * @return array */ protected function externalizeRekvValue($kRekv, $vRekv, array $info) { $result = array(); foreach($info['FIELDS'] as $name=>$fieldInfo) { $value=''; switch($name) { case 'NAME': $value = DocumentBase::getLangByCodeField($kRekv); break; case 'VALUE': $value = $vRekv; break; } $this->externalizeField($value, $fieldInfo); $result[$name] = $value; } return $result; } /** * @param array $fields * @return array */ protected function modifyTrim(array $fields) { $result = array(); foreach ($fields as $key=>$value) { if(is_array($value)) { if(count($value)>0) { if($key === 'REK_VALUES' || $key === 'ADDRESS_FIELD' || $key === 'CONTACT' || $key === 'REPRESENTATIVE') { $groupFieldValues = array(); foreach ($value as $k=>$v) { if($v['VALUE']=='') { unset($fields[$key][$k]); } $groupFieldValues = $fields[$key]; } if(count($groupFieldValues)>0) $result[$key] = $groupFieldValues; else unset($fields[$key]); } else { $value = $this->modifyTrim($value); if(count($value)>0) $result[$key]=$value; } } } else { if($value<>'') $result[$key]=$value; } } return $result; } /** * @param $lid * @return string */ static protected function getSiteNameByLid($lid) { static $sites; if($sites === null) { $res = \CSite::getList($by="sort", $order="desc"); while ($site = $res->fetch()) { $sites[$site['LID']]=$site['NAME']; } if(!is_array($sites)) { $sites = array(); } } return isset($sites[$lid]) ? $sites[$lid]:''; } }