- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_document_deal.php
- Класс: \CCrmDocumentDeal
- Вызов: CCrmDocumentDeal::performTypeCast
static function performTypeCast(array $documentInfo, array $fields, bool $isUpdate = false): array
{
$documentId = $documentInfo['TYPE'] . '_' . ($isUpdate ? $documentInfo['ID'] : '0');
$complexDocumentId = [$documentInfo['DOCUMENT_TYPE'][0], $documentInfo['DOCUMENT_TYPE'][1], $documentId];
$documentFields = self::GetDocumentFields($documentInfo['TYPE']);
$keys = array_keys($fields);
foreach ($keys as $key)
{
if (!array_key_exists($key, $documentFields))
{
//Fix for issue #40374
unset($fields[$key]);
continue;
}
$fields[$key] = (is_array($fields[$key]) && !CBPHelper::IsAssociativeArray($fields[$key]))
? $fields[$key]
: [$fields[$key]]
;
if ($documentFields[$key]['Type'] == 'user')
{
$fields[$key] = \CBPHelper::extractUsers($fields[$key], $complexDocumentId);;
}
elseif ($documentFields[$key]['Type'] == 'select' && mb_substr($key, 0, 3) == 'UF_')
{
self::InternalizeEnumerationField('CRM_DEAL', $fields, $key);
}
elseif ($documentFields[$key]['Type'] == 'file')
{
$arFileOptions = ['ENABLE_ID' => true];
foreach ($fields[$key] as &$value)
{
//Issue #40380. Secure URLs and file IDs are allowed.
$file = false;
$resultResolveFile = CCrmFileProxy::TryResolveFile($value, $file, $arFileOptions);
if ($isUpdate && $resultResolveFile)
{
global $USER_FIELD_MANAGER;
if ($USER_FIELD_MANAGER instanceof \CUserTypeManager)
{
$prevValue = $USER_FIELD_MANAGER->GetUserFieldValue(
\CCrmOwnerType::ResolveUserFieldEntityID(\CCrmOwnerType::Deal),
$key,
$documentInfo['ID']
);
if ($prevValue)
{
$file['old_id'] = $prevValue;
}
}
}
$value = $file;
}
unset($value);
if ($isUpdate)
{
unset($prevValue);
}
}
elseif ($documentFields[$key]['Type'] == 'S:HTML')
{
foreach ($fields[$key] as &$value)
{
$value = ['VALUE' => $value];
}
unset($value);
}
elseif ($documentFields[$key]['Type'] === 'string' && is_array($fields[$key]))
{
$fields[$key] = \CBPHelper::makeArrayFlat($fields[$key]);
}
if (!$documentFields[$key]['Multiple'] && is_array($fields[$key]))
{
if (count($fields[$key]) > 0)
{
$a = array_values($fields[$key]);
$fields[$key] = $a[0];
}
else
{
$fields[$key] = null;
}
}
}
if(isset($fields['COMMENTS']))
{
$fields['COMMENTS'] = static::sanitizeCommentsValue($fields['COMMENTS']);
}
if(isset($fields['BEGINDATE']))
{
if ($fields['BEGINDATE'] instanceof Main\Type\Date)
{
$fields['BEGINDATE'] = (string)$fields['BEGINDATE'];
}
elseif(
is_object($fields['BEGINDATE'])
&& method_exists($fields['BEGINDATE'], '__toString')
&& Main\Type\Date::isCorrect((string)$fields['BEGINDATE'])
)
{
$fields['BEGINDATE'] = (string)$fields['BEGINDATE'];
}
}
if(isset($fields['CLOSEDATE']))
{
if ($fields['CLOSEDATE'] instanceof Main\Type\Date)
{
$fields['CLOSEDATE'] = (string)$fields['CLOSEDATE'];
}
elseif(
is_object($fields['CLOSEDATE'])
&& method_exists($fields['CLOSEDATE'], '__toString')
&& Main\Type\Date::isCorrect((string)$fields['CLOSEDATE'])
)
{
$fields['CLOSEDATE'] = (string)$fields['CLOSEDATE'];
}
}
return $fields;
}