• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/volume/base.php
  • Класс: Bitrix\Crm\Volume\Base
  • Вызов: Base::prepareEntityFilter
public function prepareEntityFilter(ORM\Query\Query $query, ORM\Entity $entity, $entityAlias = '')
{
	$isAllValueApplied = true;

	// Samples naming:
	// EVENT.DATE_CREATE
	// DealCategory.CREATED_DATE
	// InvoiceStatusHistory.CREATED_TIME
	// ActivityTable.CREATED
	$dateCreatedAlias = array('DATE_CREATE', 'CREATED_TIME', 'CREATED_DATE', 'CREATED');

	// Samples naming:
	// DEAL.STAGE_SEMANTIC_ID
	// LEAD.STATUS_SEMANTIC_ID
	$stageSemanticAlias = array('STAGE_SEMANTIC_ID', 'STATUS_SEMANTIC_ID');

	$filter = $this->getFilter();

	foreach ($filter as $key => $value)
	{
		if (empty($value))
		{
			continue;
		}
		$key0 = trim($key, '<>!=@');
		if (mb_strlen($key) > mb_strlen($key0))
		{
			$operator = mb_substr($key, 0, mb_strlen($key) - mb_strlen($key0));
		}
		else
		{
			$operator = '=';
			if (is_array($value))
			{
				$operator = 'in';
			}
		}
		switch ($key0)
		{
			case 'STAGE_SEMANTIC_ID':
				$isApplied = false;
				foreach ($stageSemanticAlias as $aliasStageSemantic)
				{
					if ($entity->hasField($aliasStageSemantic))
					{
						$isApplied = true;
						if ($entityAlias !== '')
						{
							$aliasStageSemantic = "{$entityAlias}.{$aliasStageSemantic}";
						}
						$query->where($aliasStageSemantic, $operator, $value);
						break;
					}
				}
				if (!$isApplied)
				{
					$isAllValueApplied = false;
				}
				break;

			case 'DATE_CREATE':
				$isApplied = false;
				foreach ($dateCreatedAlias as $aliasDateCreated)
				{
					if ($entity->hasField($aliasDateCreated))
					{
						if ($entity->getField($aliasDateCreated) instanceof ORM\Fields\DatetimeField)
						{
							$isApplied = true;
							if ($entityAlias !== '')
							{
								$aliasDateCreated = "{$entityAlias}.{$aliasDateCreated}";
							}
							$query->where($aliasDateCreated, $operator, $value);
							break;
						}
					}
				}
				if (!$isApplied)
				{
					$isAllValueApplied = false;
				}
				break;


			default:
				$isApplied = $this->addFilterEntityField($query, $entity, $key, $value);
				if (!$isApplied)
				{
					$isAllValueApplied = false;
				}

		}
	}

	return $isAllValueApplied;
}