CCrmDocumentDeal::performTypeCast

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. CCrmDocumentDeal
  4. performTypeCast
  • Модуль: 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;
}

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