public static function emptyConditionLinkForFirstCondition($rule_id) { $conditionParams = array('is_active' => 1, 'rule_id' => $rule_id); $ruleConditions = CRM_Civirules_BAO_RuleCondition::getValues($conditionParams); if (count($ruleConditions)) { $ruleCondition = reset($ruleConditions); $ruleCondition['condition_link'] = 'null'; CRM_Civirules_BAO_RuleCondition::add($ruleCondition); } }
/** * Function to get the rule conditions for the rule * * @return array $ruleConditions * @access protected */ protected function getRuleConditions() { $conditionParams = array('is_active' => 1, 'rule_id' => $this->ruleId); $ruleConditions = CRM_Civirules_BAO_RuleCondition::getValues($conditionParams); foreach ($ruleConditions as $ruleConditionId => $ruleCondition) { $conditionClass = CRM_Civirules_BAO_Condition::getConditionObjectById($ruleCondition['condition_id']); $conditionClass->setRuleConditionData($ruleCondition); $ruleConditions[$ruleConditionId]['name'] = CRM_Civirules_BAO_Condition::getConditionLabelWithId($ruleCondition['condition_id']); $ruleConditions[$ruleConditionId]['actions'] = $this->setRuleConditionActions($ruleConditionId, $conditionClass); $ruleConditions[$ruleConditionId]['formattedConditionParams'] = $conditionClass->userFriendlyConditionParams(); } return $ruleConditions; }
/** * Method to check if all conditions are valid * * @param object CRM_Civirules_TriggerData_TriggerData $triggerData * @return bool * @access protected * @static */ protected static function areConditionsValid(CRM_Civirules_TriggerData_TriggerData $triggerData) { $isValid = true; $firstCondition = true; $conditionParams = array('rule_id' => $triggerData->getTrigger()->getRuleId()); $ruleConditions = CRM_Civirules_BAO_RuleCondition::getValues($conditionParams); foreach ($ruleConditions as $ruleConditionId => $ruleCondition) { $isConditionValid = self::checkCondition($ruleCondition, $triggerData); if ($firstCondition) { $isValid = $isConditionValid ? true : false; $firstCondition = false; } elseif ($ruleCondition['condition_link'] == 'AND') { if ($isConditionValid && $isValid) { $isValid = true; } else { $isValid = false; } } elseif ($ruleCondition['condition_link'] == 'OR') { if ($isConditionValid || $isValid) { $isValid = true; } else { $isValid = false; } } else { $isValid = false; //we should never reach this statement } } return $isValid; }