CAllCrmLead::CheckFields

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. CAllCrmLead
  4. CheckFields
  • Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_lead.php
  • Класс: \CAllCrmLead
  • Вызов: CAllCrmLead::CheckFields
public function CheckFields(&$arFields, $ID = false, $options = array())
{
	global $APPLICATION, $USER_FIELD_MANAGER;
	$this->LAST_ERROR = '';
	$this->checkExceptions = array();

	if (isset($arFields['BIRTHDATE']) && $arFields['BIRTHDATE'] !== '' && !CheckDateTime($arFields['BIRTHDATE']))
	{
		$this->LAST_ERROR .= GetMessage(
				'CRM_ERROR_FIELD_INCORRECT',
				['%FIELD_NAME%' => CAllCrmLead::GetFieldCaption('BIRTHDATE')]
			) . "
" ; } if (($ID == false || isset($arFields['TITLE'])) && empty($arFields['TITLE'])) $this->LAST_ERROR .= GetMessage('CRM_ERROR_FIELD_IS_MISSING', array('%FIELD_NAME%' => GetMessage('CRM_LEAD_FIELD_TITLE')))."
"; if(isset($arFields['OPPORTUNITY']) && is_string($arFields['OPPORTUNITY']) && $arFields['OPPORTUNITY'] !== '') { $arFields['OPPORTUNITY'] = str_replace(array(',', ' '), array('.', ''), $arFields['OPPORTUNITY']); //HACK: MSSQL returns '.00' for zero value if(mb_strpos($arFields['OPPORTUNITY'], '.') === 0) { $arFields['OPPORTUNITY'] = '0'.$arFields['OPPORTUNITY']; } if (!preg_match('/^-?\d{1,}(\.\d{1,})?$/', $arFields['OPPORTUNITY'])) { $this->LAST_ERROR .= GetMessage('CRM_LEAD_FIELD_OPPORTUNITY_INVALID')."
"; } } if (isset($arFields['FM']) && is_array($arFields['FM'])) { $CCrmFieldMulti = new CCrmFieldMulti(); if (!$CCrmFieldMulti->CheckComplexFields($arFields['FM'])) { $this->LAST_ERROR .= $CCrmFieldMulti->LAST_ERROR; } } if(!is_array($options)) { $options = array(); } $isRestoration = isset($options['IS_RESTORATION']) && $options['IS_RESTORATION']; if($isRestoration) { $enableUserFieldCheck = false; } else { $enableUserFieldCheck = !(isset($options['DISABLE_USER_FIELD_CHECK']) && $options['DISABLE_USER_FIELD_CHECK'] === true); } if($enableUserFieldCheck) { // We have to prepare field data before check (issue #22966) CCrmEntityHelper::NormalizeUserFields( $arFields, self::$sUFEntityID, $USER_FIELD_MANAGER, array('IS_NEW' => ($ID == false)) ); $enableRequiredUserFieldCheck = !(isset($options['DISABLE_REQUIRED_USER_FIELD_CHECK']) && $options['DISABLE_REQUIRED_USER_FIELD_CHECK'] === true); $fieldsToCheck = $arFields; $requiredFields = null; if($enableRequiredUserFieldCheck) { $currentFields = null; if($ID > 0) { if(isset($options['CURRENT_FIELDS']) && is_array($options['CURRENT_FIELDS'])) { $currentFields = $options['CURRENT_FIELDS']; } else { $dbResult = self::GetListEx( array(), array('ID' => $ID, 'CHECK_PERMISSIONS' => 'N'), false, false, array('*', 'UF_*') ); $currentFields = $dbResult->Fetch(); if(is_array($currentFields)) { $currentFields['FM'] = Crm\Entity\Lead::getInstance()->getEntityMultifields($ID, array('skipEmpty' => true)); } } if(!array_key_exists('OBSERVER_IDS', $currentFields)) { $currentFields['OBSERVER_IDS'] = Crm\Observer\ObserverManager::getEntityObserverIDs( \CCrmOwnerType::Lead, $ID ); } } //If Status ID is changed we must perform check of all fields. if(is_array($currentFields)) { CCrmEntityHelper::NormalizeUserFields( $currentFields, self::$sUFEntityID, $USER_FIELD_MANAGER, array('IS_NEW' => ($ID == false)) ); if(isset($arFields['STATUS_ID']) && $arFields['STATUS_ID'] !== $currentFields['STATUS_ID']) { $fieldsToCheck = array_merge($currentFields, $arFields); if(self::GetSemanticID($arFields['STATUS_ID']) === Bitrix\Crm\PhaseSemantics::FAILURE) { //Disable required fields check for failure status due to backward compatibility. $enableRequiredUserFieldCheck = false; } } elseif(!isset($arFields['STATUS_ID']) && isset($currentFields['STATUS_ID'])) { $fieldsToCheck = array_merge($arFields, array('STATUS_ID' => $currentFields['STATUS_ID'])); } if(isset($currentFields['FM']) && isset($arFields['FM'])) { $fieldsToCheck['FM'] = array_merge($currentFields['FM'], $arFields['FM']); } } $requiredFields = Crm\Attribute\FieldAttributeManager::getRequiredFields( CCrmOwnerType::Lead, $ID, $fieldsToCheck, Crm\Attribute\FieldOrigin::UNDEFINED, is_array($options['FIELD_CHECK_OPTIONS'] ?? null) ? $options['FIELD_CHECK_OPTIONS'] : [] ); $requiredSystemFields = isset($requiredFields[Crm\Attribute\FieldOrigin::SYSTEM]) ? $requiredFields[Crm\Attribute\FieldOrigin::SYSTEM] : array(); if(!empty($requiredSystemFields)) { $validator = new Crm\Entity\LeadValidator($ID, $fieldsToCheck); $validationErrors = array(); foreach($requiredSystemFields as $fieldName) { $validator->checkFieldPresence($fieldName, $validationErrors); } if(!empty($validationErrors)) { $e = new CAdminException($validationErrors); $this->checkExceptions[] = $e; $this->LAST_ERROR .= $e->GetString(); } } } CCrmEntityHelper::NormalizeUserFields($fieldsToCheck, self::$sUFEntityID, $USER_FIELD_MANAGER, array('IS_NEW' => ($ID == false))); $requiredUserFields = $this->getRequiredUserFields($requiredFields); if (!$USER_FIELD_MANAGER->CheckFields( self::$sUFEntityID, $ID, $fieldsToCheck, false, $enableRequiredUserFieldCheck, $requiredUserFields ) ) { $e = $APPLICATION->GetException(); $this->checkExceptions[] = $e; $this->LAST_ERROR .= $e->GetString(); } } // Temporary crutch. // This check will be removed when operations will be completely supported for contacts: $allowSetSystemFields = $options['ALLOW_SET_SYSTEM_FIELDS'] ?? false; if ($allowSetSystemFields) { $factory = \Bitrix\Crm\Service\Container::getInstance()->getFactory(CCrmOwnerType::Lead); $currentUserId = isset($options['CURRENT_USER']) ? (int)$options['CURRENT_USER'] : CCrmSecurityHelper::GetCurrentUserID() ; $checkSystemFieldsResult = (new \Bitrix\Crm\Service\Operation\Import( $factory->createItem(), new \Bitrix\Crm\Service\Operation\Settings(Container::getInstance()->getContext()), $factory->getFieldsCollection() ))->checkSystemFieldsValues([ \Bitrix\Crm\Item::FIELD_NAME_CREATED_TIME => isset($arFields['DATE_CREATE']) ? Main\Type\DateTime::createFromUserTime($arFields['DATE_CREATE']) : null , \Bitrix\Crm\Item::FIELD_NAME_UPDATED_TIME => isset($arFields['DATE_MODIFY']) ? Main\Type\DateTime::createFromUserTime($arFields['DATE_MODIFY']) : null , \Bitrix\Crm\Item::FIELD_NAME_CREATED_BY => (isset($arFields['CREATED_BY_ID']) && $arFields['CREATED_BY_ID'] != $currentUserId) ? (int)$arFields['CREATED_BY_ID'] : null , \Bitrix\Crm\Item::FIELD_NAME_UPDATED_BY => (isset($arFields['MODIFY_BY_ID']) && $arFields['MODIFY_BY_ID'] != $currentUserId) ? (int)$arFields['MODIFY_BY_ID'] : null , ]); if (!$checkSystemFieldsResult->isSuccess()) { $this->LAST_ERROR .= implode(', ', $checkSystemFieldsResult->getErrorMessages()); } } return ($this->LAST_ERROR === ''); }

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