예제 #1
0
 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::getAllInvariantRulesNames() as $ruleName) {
             $rule = RuleEngine::getRule($ruleName);
             $violations = RuleEngine::checkRule($rule, $cacheConjuncts);
             foreach ((array) $violations as $violation) {
                 $invariantRulesHold = false;
                 Notifications::addInvariant($rule, $violation['src'], $violation['tgt']);
             }
         }
     }
     return $invariantRulesHold;
 }