Skip to main content

Rule Engine

The Rule Engine evaluates points and badge conditions using JSON structures.

Condition Format

{
"condition": "AND",
"rules": [
{"field": "posts", "operator": "greater_or_equal", "value": 10},
{"field": "comments", "operator": "greater", "value": 5}
]
}

Supported Operators

equal, not_equal, less, less_or_equal, greater, greater_or_equal, between, not_between, in, not_in, contains, not_contains, starts_with, ends_with, is_empty, is_not_empty, regex.

Nested Conditions

{
"condition": "AND",
"rules": [
{"field": "posts", "operator": "gte", "value": 10},
{
"condition": "OR",
"rules": [
{"field": "likes_received", "operator": "gte", "value": 100},
{"field": "comments_received", "operator": "gte", "value": 50}
]
}
]
}

Evaluate Conditions

$conditions = [
'condition' => 'AND',
'rules' => [
['field' => 'posts', 'operator' => 'gte', 'value' => 10],
['field' => 'followers', 'operator' => 'gte', 'value' => 100],
],
];

$userValues = ['posts' => 25, 'followers' => 150];

if ($sociable->ruleEngine()->evaluate($conditions, $userValues)) {
// Conditions are met
}

Get Rules

$pointRule = $sociable->ruleEngine()->getPointsRule('com_myextension.post.create');
$pointRules = $sociable->ruleEngine()->getPointsRules();
$badgeRules = $sociable->ruleEngine()->getBadgeRules('com_myextension.milestone');
$allBadgeRules = $sociable->ruleEngine()->getAllBadgeRules();