• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/userutils.php
  • Класс: BitrixMainUserUtils
  • Вызов: UserUtils::getUserSearchFilter
static function getUserSearchFilter(array $fields)
{
	$result = array();

	if (UserIndexTable::getEntity()->fullTextIndexEnabled('SEARCH_USER_CONTENT'))
	{
		$find = '';
		$findDepartmentOnly = false;

		if (array_key_exists('FIND', $fields))
		{
			$find = trim($fields['FIND']);

			if (SearchContent::isIntegerToken($find))
			{
				$find = SearchContent::prepareIntegerToken($find);
			}
			else
			{
				$find = SearchContent::prepareStringToken($find);
			}
		}
		else
		{
			$validFields = Array('ID' => 1, 'NAME' => 1, 'LAST_NAME' => 1, 'SECOND_NAME' => 1, 'WORK_POSITION' => 1);
			foreach ($fields as $key => $value)
			{
				if (isset($validFields[$key]) && $validFields[$key])
				{
					if (SearchContent::isIntegerToken($value))
					{
						$find .= ' '.SearchContent::prepareIntegerToken($value);
					}
					else
					{
						$find .= ' '.SearchContent::prepareStringToken($value);
					}
					$find = trim($find);
				}
			}

			if (array_key_exists('UF_DEPARTMENT_NAME', $fields))
			{
				if (!$find)
				{
					$findDepartmentOnly = true;
				}
				if (SearchContent::isIntegerToken($fields['UF_DEPARTMENT_NAME']))
				{
					$find .= ' '.SearchContent::prepareIntegerToken($fields['UF_DEPARTMENT_NAME']);
				}
				else
				{
					$find .= ' '.SearchContent::prepareStringToken($fields['UF_DEPARTMENT_NAME']);
				}
				$find = trim($find);
			}
		}

		if (SearchContent::canUseFulltextSearch($find, SearchContent::TYPE_MIXED))
		{
			$fiendField = $findDepartmentOnly? '*INDEX.SEARCH_DEPARTMENT_CONTENT': '*INDEX.SEARCH_USER_CONTENT';
			$result[$fiendField] = $find;
		}
	}
	else
	{
		$helper = Application::getConnection()->getSqlHelper();
		if (array_key_exists('FIND', $fields))
		{
			$find = trim($fields['FIND']);
			$find = explode(' ', $find);
			foreach ($find as $findWord)
			{
				if (!$findWord)
				{
					continue;
				}

				$intResult = Array('LOGIC' => 'OR');
				$validFields = Array('ID', 'NAME', 'LAST_NAME', 'SECOND_NAME', 'WORK_POSITION', 'UF_DEPARTMENT_NAME');
				foreach ($validFields as $key)
				{
					if ($key == 'ID')
					{
						$intResult['=ID'] = intval($findWord);
					}
					else
					{
						$intResult['%=INDEX.'.$key] = $helper->forSql($findWord).'%';
					}
				}
				$result[] = $intResult;
			}
			if (!empty($result))
			{
				$result['LOGIC'] = 'AND';
				$result = Array($result);
			}
		}
		else
		{
			$validFields = Array('ID' => 1, 'NAME' => 1, 'LAST_NAME' => 1, 'SECOND_NAME' => 1, 'WORK_POSITION' => 1, 'UF_DEPARTMENT_NAME' => 1);
			foreach ($fields as $key => $value)
			{
				if (!$value)
				{
					continue;
				}
				if (isset($validFields[$key]))
				{
					if ($key == 'ID')
					{
						$result['=ID'] = intval($value);
					}
					else
					{
						$result['%=INDEX.'.$key] = $helper->forSql($value).'%';
					}
				}
			}
		}
	}

	return $result;
}