- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/integration/documentgenerator/productloader.php
- Класс: Bitrix\Crm\Integration\DocumentGenerator\ProductLoader
- Вызов: ProductLoader::getPreparedPropertyValue
protected function getPreparedPropertyValue(array $property, int $elementId)
{
$propertyId = (int)$property['ID'];
if (
isset($this->preparedPropertyValues[$propertyId])
&& array_key_exists($elementId, $this->preparedPropertyValues[$propertyId])
)
{
return $this->preparedPropertyValues[$propertyId][$elementId];
}
$propertyValue = $this->getRawPropertyValue($property, $elementId);
if (empty($propertyValue))
{
return null;
}
$isMultiple = (isset($property['MULTIPLE'])
&& $property['MULTIPLE'] === 'Y'
&& is_array($propertyValue)
);
if ($property['PROPERTY_TYPE'] === 'F')
{
if (is_array($propertyValue))
{
$propertyValue = reset($propertyValue);
}
$propertyValue = (int)$propertyValue;
if ($propertyValue > 0)
{
$this->preparedPropertyValues[$propertyId][$elementId] = \CFile::GetPath($propertyValue);
return $this->preparedPropertyValues[$propertyId][$elementId];
}
}
if ($property['PROPERTY_TYPE'] === 'S')
{
if ($property['USER_TYPE'] === 'HTML')
{
$getTextFromValue = static function($propertyValue): ?string {
if (!empty($propertyValue) && is_string($propertyValue))
{
$propertyValue = unserialize($propertyValue, ['allowed_classes' => false]);
}
if (is_array($propertyValue) && (isset($propertyValue['HTML']) || isset($propertyValue['TEXT'])))
{
return $propertyValue['HTML'] ?? $propertyValue['TEXT'];
}
return null;
};
if ($isMultiple)
{
$propertyValue = array_map($getTextFromValue, $propertyValue);
$this->preparedPropertyValues[$propertyId][$elementId] = new Value\Multiple($propertyValue);
}
else
{
$this->preparedPropertyValues[$propertyId][$elementId] = $getTextFromValue($propertyValue);
}
return $this->preparedPropertyValues[$propertyId][$elementId];
}
if ($property['USER_TYPE'] === 'Date')
{
if ($isMultiple)
{
$this->preparedPropertyValues[$propertyId][$elementId] = new Value\Multiple(
array_map(
static function($value) {
return new Value\DateTime($value);
},
$propertyValue
)
);
}
else
{
$this->preparedPropertyValues[$propertyId][$elementId] = new Value\DateTime($propertyValue);
}
return $this->preparedPropertyValues[$propertyId][$elementId];
}
if ($property['USER_TYPE'] === 'DateTime')
{
if ($isMultiple)
{
$this->preparedPropertyValues[$propertyId][$elementId] = new Value\Multiple(
array_map(
static function($value) {
return new Value\DateTime(
$value,
[
'format' => DateTime::getFormat(DataProviderManager::getInstance()->getCulture()),
]
);
},
$propertyValue
)
);
}
else
{
$this->preparedPropertyValues[$propertyId][$elementId] = new Value\DateTime(
$propertyValue,
[
'format' => DateTime::getFormat(DataProviderManager::getInstance()->getCulture()),
]
);
}
return $this->preparedPropertyValues[$propertyId][$elementId];
}
if ($property['USER_TYPE'] === 'Money')
{
if ($isMultiple)
{
$this->preparedPropertyValues[$propertyId][$elementId] = new Value\Multiple(
array_map(
static function ($value) {
if (!is_string($value))
{
return null;
}
[$value, $currency] = explode('|', $value);
return new Money($value, [
'CURRENCY_ID' => $currency,
]);
},
$propertyValue
)
);
}
elseif(is_string($propertyValue))
{
[$value, $currency] = explode('|', $propertyValue);
$this->preparedPropertyValues[$propertyId][$elementId] = new Money($value, [
'CURRENCY_ID' => $currency,
]);
}
else
{
$this->preparedPropertyValues[$propertyId][$elementId] = null;
}
return $this->preparedPropertyValues[$propertyId][$elementId];
}
if ($property['USER_TYPE'] === 'directory')
{
if ($isMultiple)
{
$this->preparedPropertyValues[$propertyId][$elementId] = new Value\Multiple(
$this->getPropertyDirectoryValueMultiple($property, $propertyValue)
);
}
else
{
$value = $this->getPropertyDirectoryValue($property, $propertyValue);
$this->preparedPropertyValues[$propertyId][$elementId] = $value['VALUE'] ?? null;
}
return $this->preparedPropertyValues[$propertyId][$elementId];
}
if ($property['USER_TYPE'] === 'employee' || $property['USER_TYPE'] === 'ECrm')
{
if ($isMultiple)
{
$propertyValue = reset($propertyValue);
$isMultiple = false;
}
}
}
elseif ($property['PROPERTY_TYPE'] === 'L')
{
if ($isMultiple)
{
$this->preparedPropertyValues[$propertyId][$elementId] = new Value\Multiple(
$this->getPropertyEnumValueMultiple($propertyId, $propertyValue)
);
}
else
{
$this->preparedPropertyValues[$propertyId][$elementId] = $this->getPropertyEnumValue($propertyId, $propertyValue);
}
return $this->preparedPropertyValues[$propertyId][$elementId];
}
elseif ($property['PROPERTY_TYPE'] === 'E')
{
if ($isMultiple)
{
$this->preparedPropertyValues[$propertyId][$elementId] = new Value\Multiple(
$this->getPropertyElementValueMultiple($propertyValue)
);
}
else
{
$this->preparedPropertyValues[$propertyId][$elementId] = $this->getPropertyElementValue((int)$propertyValue);
}
return $this->preparedPropertyValues[$propertyId][$elementId];
}
elseif ($property['PROPERTY_TYPE'] === 'N')
{
if ($isMultiple)
{
$propertyValue = array_map('floatval', $propertyValue);
}
else
{
$propertyValue = (float)$propertyValue;
}
}
if ($isMultiple)
{
$propertyValue = new Value\Multiple($propertyValue);
}
$this->preparedPropertyValues[$propertyId][$elementId] = $propertyValue;
return $this->preparedPropertyValues[$propertyId][$elementId];
}