- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/automation/engine/condition.php
- Класс: Bitrix\Crm\Automation\Engine\Condition
- Вызов: Condition::check
public function check($needle, $fieldType, BaseTarget $target)
{
$result = false;
$operator = $this->getOperator();
$value = $this->getValue();
$documentId = \CCrmBizProcHelper::ResolveDocumentId($target->getEntityTypeId(), $target->getEntityId());
if ($fieldType === 'user')
{
$needle = \CBPHelper::ExtractUsers($needle, $documentId);
$value = \CBPHelper::ExtractUsers($value, $documentId);
}
elseif ($fieldType === 'select')
{
if (is_array($needle) && \CBPHelper::IsAssociativeArray($needle))
{
$needle = array_keys($needle);
}
}
if (!is_array($needle))
{
$needle = array($needle);
}
if ($operator === 'in')
{
foreach ($needle as $f)
{
if (is_array($value))
{
$result = in_array($f, $value);
}
else
{
$result = (mb_strpos($value, $f) !== false);
}
if (!$result)
{
break;
}
}
return $result;
}
if ($operator === 'contain')
{
if (!is_array($value))
{
$value = array($value);
}
foreach ($value as $v)
{
foreach ($needle as $f)
{
if (is_array($f))
{
$result = in_array($v, $f);
}
else
{
$result = (mb_strpos($f, $v) !== false);
}
if ($result)
{
break;
}
}
if (!$result)
{
break;
}
}
return $result;
}
if (!is_array($value))
{
$value = array($value);
}
if (\CBPHelper::IsAssociativeArray($needle))
{
$needle = array_keys($needle);
}
if (\CBPHelper::IsAssociativeArray($value))
{
$value = array_keys($value);
}
if (count($needle) === 0)
{
$needle = array(null);
}
if (count($value) === 0)
{
$value = array(null);
}
$i = 0;
$fieldCount = count($needle);
$valueCount = count($value);
$iMax = max($fieldCount, $valueCount);
while ($i < $iMax)
{
$f1 = ($fieldCount > $i) ? $needle[$i] : $needle[$fieldCount - 1];
$v1 = ($valueCount > $i) ? $value[$i] : $value[$valueCount - 1];
if ($fieldType === 'datetime' || $fieldType === 'date')
{
if (($f1Tmp = \MakeTimeStamp($f1, \FORMAT_DATETIME)) === false)
{
if (($f1Tmp = \MakeTimeStamp($f1, \FORMAT_DATE)) === false)
{
if (($f1Tmp = \MakeTimeStamp($f1, "YYYY-MM-DD HH:MI:SS")) === false)
{
if (($f1Tmp = \MakeTimeStamp($f1, "YYYY-MM-DD")) === false)
$f1Tmp = 0;
}
}
}
$f1 = $f1Tmp;
if (($v1Tmp = \MakeTimeStamp($v1, \FORMAT_DATETIME)) === false)
{
if (($v1Tmp = \MakeTimeStamp($v1, \FORMAT_DATE)) === false)
{
if (($v1Tmp = \MakeTimeStamp($v1, "YYYY-MM-DD HH:MI:SS")) === false)
{
if (($v1Tmp = \MakeTimeStamp($v1, "YYYY-MM-DD")) === false)
$v1Tmp = 0;
}
}
}
$v1 = $v1Tmp;
}
if ($fieldType === 'bool')
{
$f1 = \CBPHelper::getBool($f1);
$v1 = \CBPHelper::getBool($v1);
}
//normalize "0" == "" comparing
if ($v1 === '' && $f1 === '0' || $f1 === '' && $v1 === '0')
{
$f1 = $v1 = null;
}
switch ($operator)
{
case '>':
$result = ($f1 > $v1);
break;
case '>=':
$result = ($f1 >= $v1);
break;
case '<':
$result = ($f1 < $v1);
break;
case '<=':
$result = ($f1 <= $v1);
break;
case '!=':
$result = ($f1 != $v1);
break;
default:
$result = ($f1 == $v1);
}
if (!$result)
{
break;
}
$i++;
}
return $result;
}