• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/filter/entityufdataprovider.php
  • Класс: BitrixMainFilterEntityUFDataProvider
  • Вызов: EntityUFDataProvider::prepareFieldData
public function prepareFieldData($fieldID)
{
	$userFields = $this->getUserFields();
	if(!isset($userFields[$fieldID]))
	{
		return null;
	}

	$userField = $userFields[$fieldID];
	$typeID = $userField['USER_TYPE']['USER_TYPE_ID'];
	$isMultiple = isset($userField['MULTIPLE']) && $userField['MULTIPLE'] === 'Y';
	$ID = $userField['ID'];
	if ($typeID === 'employee')
	{
		return [
			'params' => [
				'multiple' => $isMultiple ? 'Y' : 'N',
				'dialogOptions' => [
					'height' => 200,
					'context' => 'CRM_UF_FILTER_' . $fieldID,
					'entities' => [
						[
							'id' => 'user',
							'options' => [
								'inviteEmployeeLink' => false,
								'intranetUsersOnly' => true,
							]
						],
					],
					'showAvatars' => true,
					'dropdownMode' => false,
				],
			],
		];
	}
	elseif($typeID === 'enumeration')
	{
		$entity = new CUserFieldEnum();
		$dbResult = $entity->GetList(array('SORT' => 'ASC'), array('USER_FIELD_ID' => $ID));

		$items = array();
		if(is_object($dbResult))
		{
			while($ary = $dbResult->Fetch())
			{
				$items[$ary['ID']] = $ary['VALUE'];
			}
		}

		if ($userField['SETTINGS']['DISPLAY'] === EnumType::DISPLAY_DIALOG)
		{
			$dialogItems = [];
			foreach ($items as $itemId => $itemTitle)
			{
				$dialogItems[] = [
					'id' => $itemId,
					'entityId' =>  $userField['FIELD_NAME'],
					'title' => $itemTitle,
					'tabs' => $userField['FIELD_NAME'],
				];
			}
			return [
				'params' => [
					'multiple' => 'Y',
					'dialogOptions' => [
						'items' => $dialogItems,
						'height' => 200,
						'dropdownMode' => true,
						'compactView' => true,
						'tabs' => [
							[
								'id' => $userField['FIELD_NAME'],
								'title' => $userField['EDIT_FORM_LABEL'],
							],
						],
					],
				],
			];
		}

		return array(
			'params' => array('multiple' => 'Y'),
			'items' => $items
		);
	}
	elseif($typeID === 'iblock_element')
	{
		$entity = new CUserTypeIBlockElement();
		$dbResult = $entity->GetList($userField);

		$items = array();
		if(is_object($dbResult))
		{
			$count = 0;
			while($ary = $dbResult->Fetch())
			{
				$items[$ary['ID']] = $ary['NAME'];

				if(++$count > 500)
				{
					break;
				}
			}
		}

		return array(
			'params' => array('multiple' => 'Y'),
			'items' => $items
		);
	}
	elseif($typeID === 'iblock_section')
	{
		$entity = new CUserTypeIBlockSection();
		$dbResult = $entity->GetList($userField);

		$items = array();
		if(is_object($dbResult))
		{
			$count = 0;
			while($ary = $dbResult->Fetch())
			{
				$items[$ary['ID']] = isset($ary['DEPTH_LEVEL']) && $ary['DEPTH_LEVEL']  > 1
					? str_repeat('. ', ($ary['DEPTH_LEVEL'] - 1)).$ary['NAME'] : $ary['NAME'];

				if(++$count > 500)
				{
					break;
				}
			}
		}

		return array(
			'params' => array('multiple' => 'Y'),
			'items' => $items
		);
	}
	elseif($typeID === 'crm')
	{
		$settings = isset($userField['SETTINGS']) && is_array($userField['SETTINGS'])
			? $userField['SETTINGS'] : array();

		$entityTypeNames = array();
		$supportedEntityTypeNames = array(
			CCrmOwnerType::LeadName,
			CCrmOwnerType::DealName,
			CCrmOwnerType::ContactName,
			CCrmOwnerType::CompanyName
		);
		foreach($supportedEntityTypeNames as $entityTypeName)
		{
			if(isset($settings[$entityTypeName]) && $settings[$entityTypeName] === 'Y')
			{
				$entityTypeNames[] = $entityTypeName;
			}
		}

		$destSelectorParams = array(
			'apiVersion' => 3,
			'context' => 'CRM_UF_FILTER_ENTITY',
			'contextCode' => 'CRM',
			'useClientDatabase' => 'N',
			'enableAll' => 'N',
			'enableDepartments' => 'N',
			'enableUsers' => 'N',
			'enableSonetgroups' => 'N',
			'allowEmailInvitation' => 'N',
			'allowSearchEmailUsers' => 'N',
			'departmentSelectDisable' => 'Y',
			'enableCrm' => 'Y',
			'multiple' => ($isMultiple ? 'Y' : 'N'),
			'convertJson' => 'Y'
		);

		$entityTypeCounter = 0;
		foreach($entityTypeNames as $entityTypeName)
		{
			switch($entityTypeName)
			{
				case CCrmOwnerType::LeadName:
					$destSelectorParams['enableCrmLeads'] = 'Y';
					$destSelectorParams['addTabCrmLeads'] = 'Y';
					$entityTypeCounter++;
					break;
				case CCrmOwnerType::DealName:
					$destSelectorParams['enableCrmDeals'] = 'Y';
					$destSelectorParams['addTabCrmDeals'] = 'Y';
					$entityTypeCounter++;
					break;
				case CCrmOwnerType::ContactName:
					$destSelectorParams['enableCrmContacts'] = 'Y';
					$destSelectorParams['addTabCrmContacts'] = 'Y';
					$entityTypeCounter++;
					break;
				case CCrmOwnerType::CompanyName:
					$destSelectorParams['enableCrmCompanies'] = 'Y';
					$destSelectorParams['addTabCrmCompanies'] = 'Y';
					$entityTypeCounter++;
					break;
				default:
			}
		}
		if ($entityTypeCounter <= 1)
		{
			$destSelectorParams['addTabCrmLeads'] = 'N';
			$destSelectorParams['addTabCrmDeals'] = 'N';
			$destSelectorParams['addTabCrmContacts'] = 'N';
			$destSelectorParams['addTabCrmCompanies'] = 'N';
		}

		return array(
			'params' => $destSelectorParams
		);
	}
	elseif($typeID === 'crm_status')
	{
		$items = array();
		if(isset($userField['SETTINGS'])
			&& is_array($userField['SETTINGS'])
			&& isset($userField['SETTINGS']['ENTITY_TYPE'])
		)
		{
			$entityType = $userField['SETTINGS']['ENTITY_TYPE'];
			if($entityType !== '')
			{
				$items = CCrmStatus::GetStatusList($entityType);
			}
		}

		return array(
			'params' => array('multiple' => 'Y'),
			'items' => $items
		);
	}
	return null;
}