• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/classes/general/tasktemplates.php
  • Класс: CTaskTemplates
  • Вызов: CTaskTemplates::GetFilter
function GetFilter($arFilter, $arParams)
{
	if (!is_array($arFilter))
		$arFilter = Array();

	$arSqlSearch = Array();

	foreach ($arFilter as $key => $val)
	{
		$res = CTasks::MkOperationFilter($key);
		$key = $res["FIELD"];
		$cOperationType = $res["OPERATION"];

		$key = mb_strtoupper($key);

		switch ($key)
		{
			case "CREATED_BY":
			case "TASK_ID":
			case "GROUP_ID":
			case "TPARAM_TYPE":
			case "ID":
				$arSqlSearch[] = CTasks::FilterCreate("TT.".$key, $val, "number", $bFullJoin, $cOperationType);
				break;

			case "RESPONSIBLE":
				$arSqlSearch[] = CTasks::FilterCreate("TT.RESPONSIBLE_ID", $val, "number", $bFullJoin, $cOperationType);
				break;

			case "TAGS":
				$val = '%i:%;s:%:"'.$val.'";%';
				$arSqlSearch[] = CTasks::FilterCreate("TT.".$key, $val, "string", $bFullJoin, $cOperationType);
				break;

			case "TITLE":
			case "ZOMBIE":
			case "XML_ID":
				$arSqlSearch[] = CTasks::FilterCreate("TT.".$key, $val, "string", $bFullJoin, $cOperationType);
				break;

			case "REPLICATE":
			case "PRIORITY":
				$arSqlSearch[] = CTasks::FilterCreate("TT.".$key, $val, "string_equal", $bFullJoin, $cOperationType);
				break;

			case 'SEARCH_INDEX':
				$fieldsToLike = array(
					"TT.TITLE",
					"TT.DESCRIPTION",
					"CONCAT_WS(' ', CU.NAME, CU.LAST_NAME, CU.SECOND_NAME, CU.LOGIN, RU.NAME, RU.LAST_NAME, RU.SECOND_NAME, RU.LOGIN)"
				);

				$filter = '(';
				$filter .= CTasks::FilterCreate("TT.ID", (int)$val, "number", $bFullJoin, $cOperationType);

				foreach ($fieldsToLike as $field)
				{
					$filter .= " OR ".CTasks::FilterCreate($field, $val, "string", $bFullJoin, "S");
				}
				$filter .= ')';

				$arSqlSearch[] = $filter;

				break;

			/*
			case "TEMPLATE_CHILDREN_COUNT":
				$arSqlSearch[] = CTasks::FilterCreate($key, $val, "number", $bFullJoin, $cOperationType);
				break;
			*/

			case "BASE_TEMPLATE_ID":

				$parentColumnName = 	TemplateDependencyTable::getPARENTIDColumnName();
				$columnName = 			TemplateDependencyTable::getIDColumnName();
				$cOperationType = 		'I'; // force to "identical" for this field, in any case

				$val = (string) $val;
				if($val === '' || $val === '0')
					$val = false;

				//$includeSubtree = 		$arParams['INCLUDE_TEMPLATE_SUBTREE'] === true || $arParams['INCLUDE_TEMPLATE_SUBTREE'] === 'Y';
				$excludeSubtree = 	$arParams['EXCLUDE_TEMPLATE_SUBTREE'] === true || $arParams['EXCLUDE_TEMPLATE_SUBTREE'] === 'Y';

				if($excludeSubtree)
				{
					$arSqlSearch[] = "TT.ID NOT IN (SELECT ".$columnName." FROM ".TemplateDependencyTable::getTableName()." WHERE ".$parentColumnName." = '".intval($val)."')";
				}
				else
				{
					$arSqlSearch[] = '('.($val ? "TD.".$parentColumnName." = '".intval($val)."'" : "TD.".$parentColumnName." = '0' OR TD.".$parentColumnName." IS NULL").')';
					//$arSqlSearch[] = CTasks::FilterCreate("TD.".TemplateDependencyTable::getPARENTIDColumnName(), $val, "number", $bFullJoin, $cOperationType);
				}

				break;
		}
	}

	return $arSqlSearch;
}