Jarves\ConditionOperator::checkRule PHP Method

checkRule() public method

public checkRule ( array $objectItem, array $conditionRule, string $objectKey = null ) : boolean
$objectItem array
$conditionRule array
$objectKey string
return boolean
    public function checkRule($objectItem, $conditionRule, $objectKey = null)
    {
        $field = $conditionRule[0];
        $operator = $conditionRule[1];
        $value = $conditionRule[2];
        if (is_numeric($field)) {
            $ovalue = $field;
        } else {
            $ovalue = @$objectItem[$field];
            if (null === $ovalue && $objectKey && ($definition = $this->objects->getDefinition($objectKey))) {
                $tableName = substr($field, 0, strpos($field, '.'));
                $fieldName = substr($field, strpos($field, '.') + 1);
                if ($tableName === $definition->getTable()) {
                    $ovalue = $objectItem[$fieldName];
                }
            }
        }
        if ($value instanceof ConditionSubSelect) {
            $value = $value->getValue($objectKey);
        }
        //'<', '>', '<=', '>=', '=', 'LIKE', 'IN', 'REGEXP'
        switch (strtoupper($operator)) {
            case '!=':
            case 'NOT EQUAL':
                return $ovalue != $value;
            case 'LIKE':
                $value = preg_quote($value, '/');
                $value = str_replace('%', '.*', $value);
                $value = str_replace('_', '.', $value);
                return !!preg_match('/^' . $value . '$/', $ovalue);
            case 'REGEXP':
                return !!preg_match('/' . preg_quote($value, '/') . '/', $ovalue);
            case 'NOT IN':
                return strpos(',' . $value . ',', ',' . $ovalue . ',') === false;
            case 'IN':
                return strpos(',' . $value . ',', ',' . $ovalue . ',') !== false;
            case '<':
            case 'LESS':
                return $ovalue < $value;
            case '>':
            case 'GREATER':
                return $ovalue > $value;
            case '<=':
            case '=<':
            case 'LESSEQUAL':
                return $ovalue <= $value;
            case '>=':
            case '=>':
            case 'GREATEREQUAL':
                return $ovalue >= $value;
            case '= CURRENT_USER':
            case 'EQUAL CURRENT_USER':
                return $this->pageStack->isLoggedIn() && $ovalue == $this->pageStack->getUser()->getId();
            case '!= CURRENT_USER':
            case 'NOT EQUAL CURRENT_USER':
                return $this->pageStack->isLoggedIn() && $ovalue != $this->pageStack->getUser()->getId();
            case '=':
            case 'EQUAL':
            default:
                return $ovalue == $value;
        }
    }