CCrmRestProxyBase::tryInternalizeProductPropertyField

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. CCrmRestProxyBase
  4. tryInternalizeProductPropertyField
  • Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/classes/general/restservice.php
  • Класс: \CCrmRestProxyBase
  • Вызов: CCrmRestProxyBase::tryInternalizeProductPropertyField
protected function tryInternalizeProductPropertyField(&$fields, &$fieldsInfo, $fieldName)
{
	static $sanitizer = null;

	if(!is_array($fields) || !isset($fields[$fieldName]))
	{
		return;
	}

	$info = $fieldsInfo[$fieldName] ?? null;
	$rawValue = $fields[$fieldName] ?? null;

	if(!$info)
	{
		unset($fields[$fieldName]);
		return;
	}

	$attrs = $info['ATTRIBUTES'] ?? array();

	$fieldType = $info['TYPE'] ?? '';
	$propertyType = $info['PROPERTY_TYPE'] ?? '';
	$userType = $info['USER_TYPE'] ?? '';

	if ($fieldType === 'product_property')
	{
		$value = array();
		$newIndex = 0;
		$valueId = 'n'.$newIndex;
		if (!self::isIndexedArray($rawValue))
			$rawValue = array($rawValue);
		foreach ($rawValue as &$valueElement)
		{
			if (is_array($valueElement) && isset($valueElement['value']))
			{
				$valueId = (isset($valueElement['valueId']) && intval($valueElement['valueId']) > 0) ?
					intval($valueElement['valueId']) : 'n'.$newIndex++;
				$value[$valueId] = &$valueElement['value'];
			}
			else
			{
				$valueId = 'n'.$newIndex++;
				$value[$valueId] = &$valueElement;
			}
		}
		unset($newIndex, $valueElement);
		foreach ($value as $valueId => $v)
		{
			if($propertyType === 'S' && $userType === 'Date')
			{
				$date = CRestUtil::unConvertDate($v);
				if(is_string($date))
					$value[$valueId] = $date;
				else
					unset($value[$valueId]);
			}
			elseif($propertyType === 'S' && $userType === 'DateTime')
			{
				$datetime = CRestUtil::unConvertDateTime($v, true);
				if(is_string($datetime))
					$value[$valueId] = $datetime;
				else
					unset($value[$valueId]);
			}
			elseif($propertyType === 'F' && empty($userType))
			{
				$this->tryInternalizeProductFileField($value, $valueId);
			}
			elseif($propertyType === 'S' && $userType === 'HTML')
			{
				if (is_array($v) && isset($v['TYPE']) && isset($v['TEXT'])
					&& mb_strtolower($v['TYPE']) === 'html' && !empty($v['TEXT']))
				{
					if ($sanitizer === null)
					{
						$sanitizer = new CBXSanitizer();
						$sanitizer->ApplyDoubleEncode(false);
						$sanitizer->SetLevel(CBXSanitizer::SECURE_LEVEL_LOW);
					}
					$value[$valueId]['TEXT'] = $sanitizer->SanitizeHtml($v['TEXT']);
				}
			}
		}
		$fields[$fieldName] = $value;
	}
	else
	{
		unset($fields[$fieldName]);
	}
}

Добавить комментарий