CCrmUserType::PrepareListFilterFields

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. CCrmUserType
  4. PrepareListFilterFields
  • Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_usertype.php
  • Класс: \CCrmUserType
  • Вызов: CCrmUserType::PrepareListFilterFields
public function PrepareListFilterFields(&$arFilterFields, &$arFilterLogic, $fieldsParams = [])
{
	$arUserFields = $this->GetAbstractFields($fieldsParams);
	foreach($arUserFields as $FIELD_NAME => $arUserField)
	{
		if ($arUserField['SHOW_FILTER'] === 'N' || $arUserField['USER_TYPE']['BASE_TYPE'] === 'file')
		{
			continue;
		}

		$ID = $arUserField['ID'];
		$typeID = $arUserField['USER_TYPE']['USER_TYPE_ID'];
		$isMultiple = isset($arUserField['MULTIPLE']) && $arUserField['MULTIPLE'] === 'Y';

		$fieldLabel = isset($arUserField['LIST_FILTER_LABEL']) ? $arUserField['LIST_FILTER_LABEL'] : '';
		if($fieldLabel === '')
		{
			if(isset($userField['LIST_COLUMN_LABEL']))
			{
				$fieldLabel = $arUserField['LIST_COLUMN_LABEL'];
			}
			elseif(isset($userField['EDIT_FORM_LABEL']))
			{
				$fieldLabel = $arUserField['EDIT_FORM_LABEL'];
			}
		}

		if($typeID === 'employee')
		{
			$arFilterFields[] = array(
				'id' => $FIELD_NAME,
				'name' => $fieldLabel,
				'type' => 'dest_selector',
				'params' => array(
					'context' => 'CRM_UF_FILTER_'.$FIELD_NAME,
					'multiple' => 'N',
					'contextCode' => 'U',
					'enableAll' => 'N',
					'enableSonetgroups' => 'N',
					'allowEmailInvitation' => 'N',
					'allowSearchEmailUsers' => 'N',
					'departmentSelectDisable' => 'Y',
					'isNumeric' => 'Y',
					'prefix' => 'U',
				)

			);
			continue;
		}
		elseif($typeID === 'string' || $typeID === 'url' || $typeID === 'address' || $typeID === 'money')
		{
			$arFilterFields[] = array(
				'id' => $FIELD_NAME,
				'name' => $fieldLabel,
				'type' => 'text'
			);
			continue;
		}
		elseif($typeID === 'integer' || $typeID === 'double')
		{
			$arFilterFields[] = array(
				'id' => $FIELD_NAME,
				'name' => $fieldLabel,
				'type' => 'number'
			);
			continue;
		}
		elseif($typeID === 'boolean')
		{
			$arFilterFields[] = array(
				'id' => $FIELD_NAME,
				'name' => $fieldLabel,
				'type' => 'checkbox',
				'valueType' => 'numeric'
			);
			continue;
		}
		elseif($typeID === 'datetime' || $typeID === 'date')
		{
			$arFilterFields[] = array(
				'id' => $FIELD_NAME,
				'name' => $fieldLabel,
				'type' => 'date',
				'time' => $typeID === 'datetime'
			);
			continue;
		}
		elseif($typeID === 'enumeration')
		{
			$enumEntity = new \CUserFieldEnum();
			$dbResultEnum = $enumEntity->GetList(
				array('SORT' => 'ASC'),
				array('USER_FIELD_ID' => $ID)
			);

			$listItems = array();
			while($enum = $dbResultEnum->Fetch())
			{
				$listItems[$enum['ID']] = $enum['VALUE'];
			}

			$arFilterFields[] = array(
				'id' => $FIELD_NAME,
				'name' => $fieldLabel,
				'type' => 'list',
				'params' => array('multiple' => 'Y'),
				'items' => $listItems
			);
			continue;
		}
		elseif($typeID === 'iblock_element')
		{
			$listItems = array();
			$enity = new CUserTypeIBlockElement();
			$dbResult = $enity->GetList($arUserField);
			if(is_object($dbResult))
			{
				$qty = 0;
				$limit = 200;

				while($ary = $dbResult->Fetch())
				{
					$listItems[$ary['ID']] = $ary['NAME'];
					$qty++;
					if($qty === $limit)
					{
						break;
					}
				}
			}

			$arFilterFields[] = array(
				'id' => $FIELD_NAME,
				'name' => $fieldLabel,
				'type' => 'list',
				'params' => array('multiple' => 'Y'),
				'items' => $listItems
			);
			continue;
		}
		elseif($typeID === 'iblock_section')
		{
			$listItems = array();
			$enity = new CUserTypeIBlockSection();
			$dbResult = $enity->GetList($arUserField);

			if(is_object($dbResult))
			{
				$qty = 0;
				$limit = 200;

				while($ary = $dbResult->Fetch())
				{
					$listItems[$ary['ID']] = isset($ary['DEPTH_LEVEL']) && $ary['DEPTH_LEVEL']  > 1
						? str_repeat('. ', ($ary['DEPTH_LEVEL'] - 1)).$ary['NAME'] : $ary['NAME'];
					$qty++;
					if($qty === $limit)
					{
						break;
					}
				}
			}

			$arFilterFields[] = array(
				'id' => $FIELD_NAME,
				'name' => $fieldLabel,
				'type' => 'list',
				'params' => array('multiple' => 'Y'),
				'items' => $listItems
			);
			continue;
		}
		elseif($typeID === 'crm')
		{
			$settings = isset($arUserField['SETTINGS']) && is_array($arUserField['SETTINGS'])
				? $arUserField['SETTINGS'] : array();

			$entityTypeNames = array();
			$supportedEntityTypeNames = array(
				CCrmOwnerType::LeadName,
				CCrmOwnerType::DealName,
				CCrmOwnerType::ContactName,
				CCrmOwnerType::CompanyName,
				CCrmOwnerType::OrderName
			);
			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;
					case \CCrmOwnerType::OrderName:
						$destSelectorParams['enableCrmOrders'] = 'Y';
						$destSelectorParams['addTabCrmOrders'] = 'Y';
						$entityTypeCounter++;
						break;
					default:
				}
			}
			if ($entityTypeCounter <= 1)
			{
				$destSelectorParams['addTabCrmLeads'] = 'N';
				$destSelectorParams['addTabCrmDeals'] = 'N';
				$destSelectorParams['addTabCrmContacts'] = 'N';
				$destSelectorParams['addTabCrmCompanies'] = 'N';
				$destSelectorParams['addTabCrmOrders'] = 'N';
			}

			$arFilterFields[] = array(
				'id' => $FIELD_NAME,
				'name' => $fieldLabel,
				'type' => 'dest_selector',
				'params' => $destSelectorParams
			);
			continue;
		}
		elseif($typeID === 'crm_status')
		{
			$listItems = array();
			if(isset($arUserField['SETTINGS'])
				&& is_array($arUserField['SETTINGS'])
				&& isset($arUserField['SETTINGS']['ENTITY_TYPE'])
			)
			{
				$entityType = $arUserField['SETTINGS']['ENTITY_TYPE'];
				if($entityType !== '')
				{
					$listItems = CCrmStatus::GetStatusList($entityType);
				}
			}

			$arFilterFields[] = array(
				'id' => $FIELD_NAME,
				'name' => $fieldLabel,
				'type' => 'list',
				'params' => array('multiple' => 'Y'),
				'items' => $listItems
			);
			continue;
		}

		$arFilterFields[] = array(
			'id' => $FIELD_NAME,
			'name' => htmlspecialcharsex($fieldLabel),
			'type' => 'custom',
			'value' => ''
		);

		// Fix issue #49771 - do not treat 'crm' type values as strings. To suppress filtration by LIKE.
		// Fix issue #56844 - do not treat 'crm_status' type values as strings. To suppress filtration by LIKE.
		if ($arUserField['USER_TYPE']['BASE_TYPE'] == 'string' && $arUserField['USER_TYPE']['USER_TYPE_ID'] !== 'crm' && $arUserField['USER_TYPE']['USER_TYPE_ID'] !== 'crm_status')
			$arFilterLogic[] = $FIELD_NAME;
	}
}

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