public function setTriggerId($triggerId)
 {
     parent::setTriggerId($triggerId);
     $trigger = new CRM_Civirules_BAO_Trigger();
     $trigger->id = $this->triggerId;
     if (!$trigger->find(true)) {
         throw new Exception('Civirules: could not find trigger with ID: ' . $this->triggerId);
     }
     $this->objectName = $trigger->object_name;
     $this->op = $trigger->op;
 }
/**
 * Function to validate parameters
 *
 * @param array $params
 * @return string $errorMessage
 */
function _validateParams($params)
{
    $errorMessage = '';
    if (!isset($params['id']) && empty($params['label'])) {
        return ts('Label can not be empty when adding a new CiviRule Trigger');
    }
    if (_checkClassNameObjectNameOperation($params) == FALSE) {
        return ts('Either class_name or a combination of object_name and op is mandatory');
    }
    if (isset($params['cron']) && $params['cron'] == 1) {
        $params['object_name'] = null;
        $params['op'] = null;
        if (!isset($params['class_name']) || empty($params['class_name'])) {
            return ts('For a cron type trigger the class_name is mandatory');
        }
    }
    if (isset($params['object_name']) && !empty($params['object_name'])) {
        $extensionConfig = CRM_Civirules_Config::singleton();
        if (!in_array($params['object_name'], $extensionConfig->getValidTriggerObjectNames())) {
            return ts('ObjectName passed in parameters (' . $params['object_name'] . ')is not a valid object for a CiviRule Trigger');
        }
    }
    if (isset($params['op']) && !empty($params['op'])) {
        $extensionConfig = CRM_Civirules_Config::singleton();
        if (!in_array($params['op'], $extensionConfig->getValidTriggerOperations())) {
            return ts('Operation passed in parameters (' . $params['op'] . ')is not a valid operation for a CiviRule Trigger');
        }
    }
    if (CRM_Civirules_BAO_Trigger::triggerExists($params) == TRUE) {
        return ts('There is already a trigger for this class_name or combination of object_name and op');
    }
    return $errorMessage;
}
 /**
  * Overridden parent method to perform processing before form is build
  *
  * @access public
  */
 public function preProcess()
 {
     $this->ruleActionId = CRM_Utils_Request::retrieve('rule_action_id', 'Integer');
     $this->ruleAction = new CRM_Civirules_BAO_RuleAction();
     $this->ruleAction->id = $this->ruleActionId;
     $this->action = new CRM_Civirules_BAO_Action();
     $this->rule = new CRM_Civirules_BAO_Rule();
     $this->trigger = new CRM_Civirules_BAO_Trigger();
     if (!$this->ruleAction->find(true)) {
         throw new Exception('Civirules could not find ruleAction');
     }
     $this->action->id = $this->ruleAction->action_id;
     if (!$this->action->find(true)) {
         throw new Exception('Civirules could not find action');
     }
     $this->rule->id = $this->ruleAction->rule_id;
     if (!$this->rule->find(true)) {
         throw new Exception('Civirules could not find rule');
     }
     $this->trigger->id = $this->rule->trigger_id;
     if (!$this->trigger->find(true)) {
         throw new Exception('Civirules could not find trigger');
     }
     $this->triggerClass = CRM_Civirules_BAO_Trigger::getPostTriggerObjectByClassName($this->trigger->class_name, true);
     $this->triggerClass->setTriggerId($this->trigger->id);
     //set user context
     $session = CRM_Core_Session::singleton();
     $editUrl = CRM_Utils_System::url('civicrm/civirule/form/rule', 'action=update&id=' . $this->rule->id, TRUE);
     $session->pushUserContext($editUrl);
     parent::preProcess();
     $this->setFormTitle();
 }
 /**
  * Function to build the trigger list
  *
  * @return array $triggerList
  * @access public
  * @static
  */
 public static function buildTriggerList()
 {
     $triggerList = array();
     $triggers = CRM_Civirules_BAO_Trigger::getValues(array());
     foreach ($triggers as $triggerId => $trigger) {
         $triggerList[$triggerId] = $trigger['label'];
     }
     return $triggerList;
 }
 /**
  * Overridden parent method to perform processing before form is build
  *
  * @access public
  */
 public function preProcess()
 {
     $this->ruleConditionId = CRM_Utils_Request::retrieve('rule_condition_id', 'Integer');
     $this->ruleCondition = new CRM_Civirules_BAO_RuleCondition();
     $this->ruleCondition->id = $this->ruleConditionId;
     $ruleConditionData = array();
     CRM_Core_DAO::storeValues($this->ruleCondition, $ruleConditionData);
     $this->condition = new CRM_Civirules_BAO_Condition();
     $this->rule = new CRM_Civirules_BAO_Rule();
     $this->trigger = new CRM_Civirules_BAO_Trigger();
     if (!$this->ruleCondition->find(true)) {
         throw new Exception('Civirules could not find ruleCondition');
     }
     $this->condition->id = $this->ruleCondition->condition_id;
     if (!$this->condition->find(true)) {
         throw new Exception('Civirules could not find condition');
     }
     $this->rule->id = $this->ruleCondition->rule_id;
     if (!$this->rule->find(true)) {
         throw new Exception('Civirules could not find rule');
     }
     $this->trigger->id = $this->rule->trigger_id;
     if (!$this->trigger->find(true)) {
         throw new Exception('Civirules could not find trigger');
     }
     $this->conditionClass = CRM_Civirules_BAO_Condition::getConditionObjectById($this->condition->id, false);
     if ($this->conditionClass) {
         $this->conditionClass->setRuleConditionData($ruleConditionData);
     }
     $this->triggerClass = CRM_Civirules_BAO_Trigger::getTriggerObjectByTriggerId($this->trigger->id, true);
     $this->triggerClass->setTriggerId($this->trigger->id);
     $this->triggerClass->setTriggerParams($this->rule->trigger_params);
     parent::preProcess();
     $this->setFormTitle();
     //set user context
     $session = CRM_Core_Session::singleton();
     $editUrl = CRM_Utils_System::url('civicrm/civirule/form/rule', 'action=update&id=' . $this->rule->id, TRUE);
     $session->pushUserContext($editUrl);
 }
 /**
  * Returns the url for redirect
  *
  * @param $triggerId
  * @return bool|string url
  */
 protected function getTriggerRedirect($triggerId)
 {
     $trigger = CRM_Civirules_BAO_Trigger::getTriggerObjectByTriggerId($triggerId, true);
     $redirectUrl = $trigger->getExtraDataInputUrl($this->ruleId);
     if (!empty($redirectUrl)) {
         return $redirectUrl;
     }
     return false;
 }
/**
 * CiviRuleTrigger.Get API
 *
 * @param array $params
 * @return array API result descriptor
 * @see civicrm_api3_create_success
 * @see civicrm_api3_create_error
 * @throws API_Exception
 */
function civicrm_api3_civi_rule_trigger_get($params)
{
    $returnValues = CRM_Civirules_BAO_Trigger::getValues($params);
    return civicrm_api3_create_success($returnValues, $params, 'CiviRuleTrigger', 'Get');
}
 /**
  * Returns an array with cron triggers which should be triggered in the cron
  *
  * @return array
  */
 public static function findRulesForCron()
 {
     $cronTriggers = array();
     $sql = "SELECT r.id AS rule_id, t.id AS trigger_id, t.class_name, r.trigger_params\n            FROM `civirule_rule` r\n            INNER JOIN `civirule_trigger` t ON r.trigger_id = t.id AND t.is_active = 1\n            WHERE r.`is_active` = 1 AND t.cron = 1";
     $dao = CRM_Core_DAO::executeQuery($sql);
     while ($dao->fetch()) {
         $cronTriggerObject = CRM_Civirules_BAO_Trigger::getTriggerObjectByClassName($dao->class_name, false);
         if ($cronTriggerObject !== false) {
             $cronTriggerObject->setTriggerId($dao->trigger_id);
             $cronTriggerObject->setRuleId($dao->rule_id);
             $cronTriggerObject->setTriggerParams($dao->trigger_params);
             $cronTriggers[] = $cronTriggerObject;
         }
     }
     return $cronTriggers;
 }
 /**
  * @param $fields
  */
 static function validateConditionEntities($fields)
 {
     $conditionClass = CRM_Civirules_BAO_Condition::getConditionObjectById($fields['rule_condition_select'], false);
     if (!$conditionClass) {
         $errors['rule_condition_select'] = ts('Not a valid condition, condition class is missing');
         return $errors;
     }
     $requiredEntities = $conditionClass->requiredEntities();
     $rule = new CRM_Civirules_BAO_Rule();
     $rule->id = $fields['rule_id'];
     $rule->find(true);
     $trigger = new CRM_Civirules_BAO_Trigger();
     $trigger->id = $rule->trigger_id;
     $trigger->find(true);
     $triggerObject = CRM_Civirules_BAO_Trigger::getPostTriggerObjectByClassName($trigger->class_name, true);
     $triggerObject->setTriggerId($trigger->id);
     $availableEntities = array();
     foreach ($triggerObject->getProvidedEntities() as $entityDef) {
         $availableEntities[] = strtolower($entityDef->entity);
     }
     foreach ($requiredEntities as $entity) {
         if (!in_array(strtolower($entity), $availableEntities)) {
             $errors['rule_condition_select'] = ts('This condition is not available with trigger %1', array(1 => $trigger->label));
             return $errors;
         }
     }
     return true;
 }
 /**
  * Function to retrieve the label of an eva triggerent with triggerId
  * 
  * @param int $triggerId
  * @return string $trigger->label
  * @access public
  * @static
  */
 public static function getTriggerLabelWithId($triggerId)
 {
     if (empty($triggerId)) {
         return '';
     }
     $trigger = new CRM_Civirules_BAO_Trigger();
     $trigger->id = $triggerId;
     $trigger->find(true);
     return $trigger->label;
 }