...Человеческий поиск в разработке...
- Модуль: 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; } }