public static function checkInvariantRules($invariantConjuctsIds = null, $cacheConjuncts = true) { $invariantRulesHold = true; // default // check invariant rules Notifications::addLog('------------------------- CHECKING INVARIANT RULES -------------------------', 'RuleEngine'); // If $allInvariantConjuctsIds is provided (i.e. not null, which is something different than an empty array), check only those invariant conjuncts if (!is_null($invariantConjuctsIds)) { Notifications::addLog("Checking provided conjuncts: " . implode(', ', $invariantConjuctsIds), 'RuleEngine'); foreach ((array) $invariantConjuctsIds as $conjunctId) { $violations = RuleEngine::checkConjunct($conjunctId, $cacheConjuncts); foreach ((array) $violations as $violation) { $invariantRulesHold = false; $conjunct = RuleEngine::getConjunct($conjunctId); foreach ($conjunct['invariantRuleNames'] as $ruleName) { $rule = RuleEngine::getRule($ruleName); Notifications::addInvariant($rule, $violation['src'], $violation['tgt']); } } } // Otherwise check all invariantConjuncts } else { Notifications::addLog("Checking all invariant rules", 'RuleEngine'); foreach (RuleEngine::getAllInvariantRules() as $rule) { $violations = RuleEngine::checkRule($rule, $cacheConjuncts); foreach ((array) $violations as $violation) { $invariantRulesHold = false; Notifications::addInvariant($rule, $violation['src'], $violation['tgt']); } } } return $invariantRulesHold; }