• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/manager/task.php
  • Класс: BitrixTasksManagerTask
  • Вызов: Task::prepareSearchIndex
static function prepareSearchIndex(array $task, array $fields = [])
{
	if (empty($task))
	{
		return '';
	}

	if (empty($fields))
	{
		$fields = [
			'ID',
			'TITLE',
			'DESCRIPTION',
			'CHECKLIST',
			'RESPONSIBLE',
			'ORIGINATOR',
			'AUDITORS',
			'ACCOMPLICES',
			'CRM',
			'TAGS',
			'GROUP'
		];
	}

	$index = [];

	foreach ($fields as $field)
	{
		switch ($field)
		{
			default:
				if (array_key_exists($field, $task) && !empty($task[$field]))
				{
					$index[] = $task[$field];
				}
				break;

			// custom fields
			case 'CHECKLIST':
				/** BitrixTasksItemTaskCollectionCheckList */
				$checkList = (
					is_object($task['SE_CHECKLIST'] ?? null)
						? $task['SE_CHECKLIST']->export()
						: (array)($task['CHECKLIST'] ?? [])
				);
				foreach ($checkList as $item)
				{
					$index[] = $item['TITLE'];
				}
				break;

			case 'RESPONSIBLE':
				$index[] = join(' ', User::getUserName([$task['RESPONSIBLE_ID']]));
				break;

			case 'ORIGINATOR':
				$index[] = join(' ', User::getUserName([$task['CREATED_BY']]));
				break;

			case 'AUDITORS':
				if (array_key_exists('AUDITORS', $task))
				{
					$auditors = (is_object($task['AUDITORS'])? $task['AUDITORS']->toArray() : $task['AUDITORS']);
					if ($auditors)
					{
						$index[] = join(' ', User::getUserName(array_unique($auditors)));
					}
				}
				break;

			case 'ACCOMPLICES':
				if (array_key_exists('ACCOMPLICES', $task))
				{
					$accomplices = (is_object($task['ACCOMPLICES'])? $task['ACCOMPLICES']->toArray() : $task['ACCOMPLICES']);
					if ($accomplices)
					{
						$index[] = join(' ', User::getUserName(array_unique($accomplices)));
					}
				}
				break;

			case 'CRM':
				if (BitrixMainModuleManager::isModuleInstalled('crm'))
				{
					$uf = (
						is_object($task['UF_CRM_TASK'] ?? null)
							? $task['UF_CRM_TASK']->toArray()
							: (array)($task['UF_CRM_TASK'] ?? [])
					);
					foreach ($uf as $item)
					{
						$crmElement = explode('_', $item);
						$type = $crmElement[0];
						$typeId = CCrmOwnerType::ResolveID(CCrmOwnerTypeAbbr::ResolveName($type));
						$title = CCrmOwnerType::GetCaption($typeId, $crmElement[1]);

						$index[] = $title;
					}
				}
				break;

			case 'TAGS':
				$tags = (
					is_object($task['TAGS'] ?? null)
						? $task['TAGS']->export()
						: (array)($task['TAGS'] ?? [])
				);
				$index[] = join(' ', $tags);
				break;

			case 'GROUP':
				$groupId = $task['GROUP_ID'];
				$groups = Group::getData([$groupId]);
				$groupName = ($groups[$groupId]['NAME'] ?? null);

				$index[] = $groupName;
				break;
		}
	}

	$strIndex = join(' ', $index);
	$strIndex = array_unique(explode(' ', $strIndex));
	$strIndex = join(' ', $strIndex);
	$strIndex = toUpper($strIndex);

	return $strIndex;
}