• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/filter/itemdataprovider.php
  • Класс: Bitrix\Crm\Filter\ItemDataProvider
  • Вызов: ItemDataProvider::prepareFieldData
public function prepareFieldData($fieldID): ?array
{
	$result = null;

	if (
		in_array($fieldID, $this->getFieldNamesByType(static::TYPE_USER, static::DISPLAY_IN_FILTER))
		&& $fieldID !== Item::FIELD_NAME_PRODUCTS.'.PRODUCT_ID'
		&& $fieldID !== Item::FIELD_NAME_WEBFORM_ID
	)
	{
		$factory = \Bitrix\Crm\Service\Container::getInstance()->getFactory($this->getEntityTypeId());
		$referenceClass = ($factory ? $factory->getDataClass() : null);

		$params = [
			'fieldName' => $fieldID,
			'entityTypeId' => $this->getEntityTypeId(),
			'module' => 'crm',
			'referenceClass' => $fieldID !== Item::FIELD_NAME_OBSERVERS ? $referenceClass : null,
		];

		if ($factory->isCountersEnabled() && $fieldID === Item::FIELD_NAME_ASSIGNED)
		{
			$params['isEnableAllUsers'] = true;
			$params['isEnableOtherUsers'] = true;
		}

		if ($fieldID === 'ACTIVITY_RESPONSIBLE_IDS')
		{
			$params['referenceClass'] = null;
			$params['isEnableAllUsers'] = true;
			$params['isEnableOtherUsers'] = true;
		}

		return $this->getUserEntitySelectorParams(
			EntitySelector::CONTEXT,
			$params
		);
	}

	if (in_array($fieldID, $this->getFieldNamesByType(static::TYPE_CRM_ENTITY, static::DISPLAY_IN_FILTER)))
	{
		$result = [
			'params' => [
				'apiVersion' => 3,
				'context' => EntitySelector::CONTEXT,
				'multiple' => 'N',
				'contextCode' => 'CRM',
				'useClientDatabase' => 'N',
				'enableAll' => 'N',
				'enableUsers' => 'N',
				'enableSonetgroups' => 'N',
				'enableDepartments' => 'N',
				'allowEmailInvitation' => 'N',
				'allowSearchEmailUsers' => 'N',
				'departmentSelectDisable' => 'Y',
				'isNumeric' => 'Y',
				'enableCrm' => 'Y',
			]
		];

		if ($fieldID === Item::FIELD_NAME_CONTACT_ID)
		{
			$result['params']['enableCrmContacts'] = 'Y';
			$result['params']['prefix'] = UISelector\CrmContacts::PREFIX_FULL;
		}
		elseif ($fieldID === Item::FIELD_NAME_COMPANY_ID || $fieldID === Item::FIELD_NAME_MYCOMPANY_ID)
		{
			$result['params']['enableCrmCompanies'] = 'Y';
			$result['params']['prefix'] = UISelector\CrmCompanies::PREFIX_FULL;

			if ($fieldID === Item::FIELD_NAME_MYCOMPANY_ID)
			{
				$result['params']['onlyMyCompanies'] = 'Y';
			}
		}
		elseif ($fieldID === Item::FIELD_NAME_PRODUCTS.'.PRODUCT_ID')
		{
			$result['params']['enableCrmProducts'] = 'Y';
			$result['params']['prefix'] = UISelector\CrmProducts::PREFIX_FULL;
		}
	}
	elseif (in_array($fieldID, $this->getFieldNamesByType(static::TYPE_ENTITY_SELECTOR, static::DISPLAY_IN_FILTER)))
	{
		$result = [
			'params' => [
				'multiple' => 'N',
				'dialogOptions' => [
					'height' => 200,
					'context' => EntitySelector::CONTEXT,
					'entities' => [],
				],
			],
		];
		if (
			$fieldID === Item::FIELD_NAME_PRODUCTS.'.PRODUCT_ID'
			&& Loader::includeModule('iblock')
			&& Loader::includeModule('catalog')
		)
		{
			$result['params']['dialogOptions']['context'] = 'catalog-products';
			$result['params']['dialogOptions']['entities'] = [
				[
					'id' => 'product',
					'options' => [
						'iblockId' => \Bitrix\Crm\Product\Catalog::getDefaultId(),
						'basePriceId' => \Bitrix\Crm\Product\Price::getBaseId(),
					],
				]
			];
		}
		elseif ($fieldID === Item::FIELD_NAME_WEBFORM_ID)
		{
			$result['params'] = \Bitrix\Crm\WebForm\Helper::getEntitySelectorParams(
				$this->factory->getEntityTypeId(),
				Item::FIELD_NAME_WEBFORM_ID
			)['params'];
		}
	}
	elseif ($fieldID === Item::FIELD_NAME_CURRENCY_ID)
	{
		$result = [
			'params' => ['multiple' => 'Y'],
			'items' => Currency::getCurrencyList(),
		];
	}
	elseif ($fieldID === Item::FIELD_NAME_STAGE_ID || $fieldID === Item::FIELD_NAME_PREVIOUS_STAGE_ID)
	{
		$result = [
			'params' => ['multiple' => 'Y'],
			'items' => [],
		];
		foreach($this->factory->getStages($this->settings->getCategoryId()) as $stage)
		{
			$result['items'][$stage->getStatusId()] = $stage->getName();
		}
	}
	elseif ($fieldID === static::FIELD_STAGE_SEMANTIC)
	{
		$result = [
			'params' => ['multiple' => 'Y'],
			'items' => [
				PhaseSemantics::PROCESS => Loc::getMessage('CRM_FILTER_ITEMDATAPROVIDER_STAGE_SEMANTIC_IN_WORK'),
				PhaseSemantics::SUCCESS => Loc::getMessage('CRM_FILTER_ITEMDATAPROVIDER_STAGE_SEMANTIC_SUCCESS'),
				PhaseSemantics::FAILURE => Loc::getMessage('CRM_FILTER_ITEMDATAPROVIDER_STAGE_SEMANTIC_FAIL'),
			],
		];
	}
	elseif (\Bitrix\Crm\Tracking\UI\Filter::hasField($fieldID))
	{
		$result = \Bitrix\Crm\Tracking\UI\Filter::getFieldData($fieldID);
	}
	elseif ($fieldID === Item::FIELD_NAME_SOURCE_ID)
	{
		$result = [
			'params' => ['multiple' => 'Y'],
			'items' => StatusTable::getStatusesList(StatusTable::ENTITY_ID_SOURCE),
		];
	}
	elseif (ParentFieldManager::isParentFieldName($fieldID))
	{
		$result = Container::getInstance()->getParentFieldManager()->prepareParentFieldDataForFilterProvider(
			$this->factory->getEntityTypeId(),
			$fieldID
		);
	}
	elseif($fieldID === 'ACTIVITY_COUNTER')
	{
		return EntityCounterType::getListFilterInfo(
			['params' => ['multiple' => 'Y']],
			['ENTITY_TYPE_ID' => \CCrmOwnerType::SmartInvoice]
		);
	}

	return $result;
}