...Человеческий поиск в разработке...
- Модуль: 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; }