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;
}
}