public function createFilter($condition, $value)
{
list($chain, $operator, $sourceEntity) = ConditionParserHelper::parseCondition($condition);
$sourceEntityMeta = $this->metadataStorage->get($sourceEntity ?: $this->mapper->getRepository()->getEntityClassNames()[0]);
if ($value instanceof IEntity) {
$value = $value->getValue('id');
}
if ($operator === ConditionParserHelper::OPERATOR_EQUAL) {
if (is_array($value)) {
$predicate = function ($property, $value) {
return in_array($property, $value, true);
};
} else {
$predicate = function ($property, $value) {
return $property === $value;
};
}
} elseif ($operator === ConditionParserHelper::OPERATOR_NOT_EQUAL) {
if (is_array($value)) {
$predicate = function ($property, $value) {
return !in_array($property, $value, true);
};
} else {
$predicate = function ($property, $value) {
return $property !== $value;
};
}
} elseif ($operator === ConditionParserHelper::OPERATOR_GREATER) {
$predicate = function ($property, $value) {
return $property > $value;
};
} elseif ($operator === ConditionParserHelper::OPERATOR_EQUAL_OR_GREATER) {
$predicate = function ($property, $value) {
return $property >= $value;
};
} elseif ($operator === ConditionParserHelper::OPERATOR_SMALLER) {
$predicate = function ($property, $value) {
return $property < $value;
};
} elseif ($operator === ConditionParserHelper::OPERATOR_EQUAL_OR_SMALLER) {
$predicate = function ($property, $value) {
return $property <= $value;
};
} else {
throw new InvalidArgumentException();
}
return $this->createFilterEvaluator($chain, $predicate, $sourceEntityMeta, $value);
}