...Человеческий поиск в разработке...
- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_company.php
- Класс: \CAllCrmCompany
- Вызов: CAllCrmCompany::CheckFields
public function CheckFields(&$arFields, $ID = false, $options = array()) { global $APPLICATION, $USER_FIELD_MANAGER; $this->LAST_ERROR = ''; $this->checkExceptions = []; if (($ID == false || isset($arFields['TITLE'])) && empty($arFields['TITLE'])) { $this->LAST_ERROR .= GetMessage( 'CRM_ERROR_FIELD_IS_MISSING', ['%FIELD_NAME%' => GetMessage('CRM_COMPANY_FIELD_TITLE')] ) . "
" ; } if (isset($arFields['FM']) && is_array($arFields['FM'])) { $CCrmFieldMulti = new CCrmFieldMulti(); if (!$CCrmFieldMulti->CheckComplexFields($arFields['FM'])) { $this->LAST_ERROR .= $CCrmFieldMulti->LAST_ERROR; } } if (isset($arFields['LOGO']) && is_array($arFields['LOGO'])) { if (($strError = CFile::CheckFile($arFields['LOGO'], 0, false, CFile::GetImageExtensions())) != '') $this->LAST_ERROR .= $strError."
"; } if (!is_array($options)) { $options = []; } $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); } $factory = Container::getInstance()->getFactory(CCrmOwnerType::Company); if (isset($arFields['CATEGORY_ID'])) { if (!$factory->isCategoryAvailable($arFields['CATEGORY_ID'])) { if ($isRestoration) { $arFields['CATEGORY_ID'] = $factory->getDefaultCategory()->getId(); } else { $this->LAST_ERROR .= GetMessage('CRM_ERROR_FIELD_INCORRECT', ['%FIELD_NAME%' => self::GetFieldCaption('CATEGORY_ID')]) . "
"; } } } if (isset($arFields['IS_MY_COMPANY']) && $arFields['IS_MY_COMPANY'] == 'Y') { $categoryId = $arFields['CATEGORY_ID'] ?? $options['CURRENT_FIELDS']['CATEGORY_ID']; if ($categoryId > 0) { $this->LAST_ERROR .= GetMessage('CRM_ERROR_FIELD_MY_COMPANY_IN_CUSTOM_CATEGORY') . "
"; } } if ($enableUserFieldCheck) { // We have to prepare field data before check (issue #22966) CCrmEntityHelper::NormalizeUserFields( $arFields, self::$sUFEntityID, $USER_FIELD_MANAGER, ['IS_NEW' => ($ID == false)] ); $enableRequiredUserFieldCheck = !(isset($options['DISABLE_REQUIRED_USER_FIELD_CHECK']) && $options['DISABLE_REQUIRED_USER_FIELD_CHECK'] === true); $isUpdate = ($ID > 0); $fieldsToCheck = $arFields; if ($enableRequiredUserFieldCheck) { $requiredFields = Crm\Attribute\FieldAttributeManager::getRequiredFields( CCrmOwnerType::Company, $ID, $fieldsToCheck, Crm\Attribute\FieldOrigin::UNDEFINED, isset($options['FIELD_CHECK_OPTIONS']) && is_array($options['FIELD_CHECK_OPTIONS']) ? $options['FIELD_CHECK_OPTIONS'] : [] ); $requiredSystemFields = $requiredFields[Crm\Attribute\FieldOrigin::SYSTEM] ?? []; if (!empty($requiredSystemFields)) { $validator = new Crm\Entity\CompanyValidator($ID, $fieldsToCheck); $validationErrors = []; foreach($requiredSystemFields as $fieldName) { if ( !$isUpdate || array_key_exists($fieldName, $fieldsToCheck) || ( isset($fieldsToCheck['FM']) && is_array($fieldsToCheck['FM']) && array_key_exists($fieldName, $fieldsToCheck['FM']) ) ) { $validator->checkFieldPresence($fieldName, $validationErrors); } } if (!empty($validationErrors)) { $e = new CAdminException($validationErrors); $this->checkExceptions[] = $e; $this->LAST_ERROR .= $e->GetString(); } } } if (isset($arFields['CATEGORY_ID'])) { // category specified user fields $filteredUserFields = (new CCrmUserType($USER_FIELD_MANAGER, self::$sUFEntityID)) ->setOption(['categoryId' => $arFields['CATEGORY_ID']]) ->GetEntityFields($ID) ; } if ( !$USER_FIELD_MANAGER->CheckFields( self::$sUFEntityID, $ID, $fieldsToCheck, false, $enableRequiredUserFieldCheck, $requiredFields[Crm\Attribute\FieldOrigin::CUSTOM] ?? null, isset($filteredUserFields) ? array_keys($filteredUserFields) : null ) ) { $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 companies: $allowSetSystemFields = $options['ALLOW_SET_SYSTEM_FIELDS'] ?? false; if ($allowSetSystemFields) { $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 === ''; }