/**
  * Function to add or update rule
  * 
  * @param array $params 
  * @return array $result
  * @access public
  * @throws Exception when params is empty
  * @static
  */
 public static function add($params)
 {
     $result = array();
     if (empty($params)) {
         throw new Exception('Params can not be empty when adding or updating a civirule rule');
     }
     if (!empty($params['id'])) {
         CRM_Utils_Hook::pre('edit', 'CiviRuleRule', $params['id'], $params);
     } else {
         CRM_Utils_Hook::pre('create', 'CiviRuleRule', NULL, $params);
     }
     $rule = new CRM_Civirules_BAO_Rule();
     $fields = self::fields();
     foreach ($params as $key => $value) {
         if (isset($fields[$key])) {
             $rule->{$key} = $value;
         }
     }
     if (!isset($rule->name) || empty($rule->name)) {
         if (isset($rule->label)) {
             $rule->name = CRM_Civirules_Utils::buildNameFromLabel($rule->label);
         }
     }
     $rule->save();
     self::storeValues($rule, $result);
     if (!empty($params['id'])) {
         CRM_Utils_Hook::post('edit', 'CiviRuleRule', $rule->id, $rule);
     } else {
         CRM_Utils_Hook::post('create', 'CiviRuleRule', $rule->id, $rule);
     }
     return $result;
 }
 /**
  * Function to add or update condition
  * 
  * @param array $params 
  * @return array $result
  * @access public
  * @throws Exception when params is empty
  * @static
  */
 public static function add($params)
 {
     $result = array();
     if (empty($params)) {
         throw new Exception('Params can not be empty when adding or updating a civirule condition');
     }
     $condition = new CRM_Civirules_BAO_Condition();
     $fields = self::fields();
     foreach ($params as $key => $value) {
         if (isset($fields[$key])) {
             $condition->{$key} = $value;
         }
     }
     if (!isset($condition->name) || empty($condition->name)) {
         $condition->name = CRM_Civirules_Utils::buildNameFromLabel($condition->label);
     }
     $condition->save();
     self::storeValues($condition, $result);
     return $result;
 }
 /**
  * Function to save rule
  *
  * @param array $formValues
  * @param int $userId
  * @access protected
  */
 protected function saveRule($formValues, $userId)
 {
     if ($this->_action == CRM_Core_Action::ADD) {
         $ruleParams = array('created_date' => date('Ymd'), 'created_user_id' => $userId);
     } else {
         $ruleParams = array('modified_date' => date('Ymd'), 'modified_user_id' => $userId, 'id' => $formValues['id']);
     }
     $ruleParams['label'] = $formValues['rule_label'];
     $ruleParams['name'] = CRM_Civirules_Utils::buildNameFromLabel($formValues['rule_label']);
     $ruleParams['is_active'] = $formValues['rule_is_active'] ? 1 : 0;
     $savedRule = CRM_Civirules_BAO_Rule::add($ruleParams);
     $this->ruleId = $savedRule['id'];
 }