Condition :: check: Bitrix method

      
<?php 
//  Bitrix\Bizproc\Automation\Engine\Condition :: check()
//  /dist/bitrix/modules/bizproc/lib/automation/engine/condition.php:93

    
public function check($needle$fieldTypeBaseTarget $targetFieldType $fieldTypeObject null)
    {
        
$operator $this->getOperator();

        if (
$operator === 'empty')
        {
            return \
CBPHelper::isEmptyValue($needle);
        }
        elseif (
$operator === '!empty')
        {
            return !\
CBPHelper::isEmptyValue($needle);
        }

        
$result false;
        
$value $this->getValue();

        
$documentId $target->getDocumentType();
        
$documentId[2] = $target->getDocumentId();

        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 = (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 = (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')
            {
                
$f1 = \CBPHelper::makeTimestamp($f1);
                
$v1 = \CBPHelper::makeTimestamp($v1);
            }

            if (
$fieldType === 'bool')
            {
                
$f1 = \CBPHelper::getBool($f1);
                
$v1 = \CBPHelper::getBool($v1);
            }

            
//normalize "0" == "" comparing
            
if ($v1 === '' && $f1 === '0' || $f1 === '' && $v1 === '0')
            {
                
$f1 $v1 null;
            }

            
/** @var \Bitrix\Bizproc\BaseType\Base $classType */
            
$classType = \Bitrix\Bizproc\BaseType\Base::class;
            if (
$fieldTypeObject)
            {
                
$classType $fieldTypeObject->getTypeClass();
            }
            
$compareResult $classType::compareValues($f1$v1);

            switch (
$operator)
            {
                case 
'>':
                    
$result = ($compareResult === 1);
                    break;
                case 
'>=':
                    
$result = ($compareResult >= 0);
                    break;
                case 
'<':
                    
$result = ($compareResult === -1);
                    break;
                case 
'<=':
                    
$result = ($compareResult <= 0);
                    break;
                case 
'!=':
                    
$result = ($compareResult !== 0);
                    break;
                default:
                    
$result = ($compareResult === 0);
            }

            if (!
$result)
            {
                break;
            }

            
$i++;
        }

        return 
$result;
    }