- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/Service/Operation.php
- Класс: Bitrix\Crm\Service\Operation
- Вызов: Operation::checkRequiredFields
public function checkRequiredFields(array $requiredFields, Factory $factory): Result
{
/**
* we can`t pass required attribute into collection for 2 reasons:
* - we would have to clone fieldsCollection entirely, because it is entity-dependant, and not item-specific.
* - we would have to separate checking required fields from processAttributes() to another method,
* to call it after processLogic, because stage can be changed during processLogic()
**/
$result = new Result();
$dependantFieldNames = $factory->getDependantFieldsMap();
foreach ($requiredFields as $fieldName)
{
$field = $this->fieldsCollection->getField($fieldName);
if ($field && $field->isItemValueEmpty($this->item))
{
$result->addError($field::getRequiredEmptyError($fieldName, $field->getTitle()));
}
elseif (isset($dependantFieldNames[$fieldName]))
{
$emptyValuesCount = 0;
foreach ($dependantFieldNames[$fieldName] as $dependantFieldName)
{
$dependantField = $this->fieldsCollection->getField($dependantFieldName);
if (
$dependantField
&& $this->item->hasField($dependantFieldName)
&& $dependantField->isValueEmpty($this->item->get($dependantFieldName))
)
{
$emptyValuesCount++;
}
}
if ($emptyValuesCount >= count ($dependantFieldNames[$fieldName]))
{
$result->addError(Field::getRequiredEmptyError($fieldName, $factory->getFieldCaption($fieldName)));
}
}
elseif (
Multifield\TypeRepository::isTypeDefined($fieldName)
&& $this->item->hasField(Item::FIELD_NAME_FM)
&& count($this->item->getFm()->filterByType($fieldName)) <= 0
)
{
$result->addError(
Field::getRequiredEmptyError(
$fieldName,
Multifield\TypeRepository::getTypeCaption($fieldName),
)
);
}
}
return $result;
}