public function isConditionValid(CRM_Civirules_EventData_EventData $eventData)
 {
     $contactId = $eventData->getContactId();
     $entityData = $eventData->getEntityData('ContributionSoft');
     $contacts = array();
     $query = $this->conditionParams['smart_group_query'];
     if (!empty($query)) {
         $subQueries = explode(';', $query);
         // To run only first and select statement in query string
         if (!empty($subQueries) && !preg_match('/^(insert|update|delete|create|drop|replace)/i', $subQueries[0])) {
             CRM_Core_Error::debug_var('CiviRules::Custom Query Contact Condition Query', $subQueries[0]);
             CRM_Core_Error::debug_var('CiviRules::Custom Query Contact Condition Param Contribution', $entityData['contribution_id']);
             $dao = CRM_Core_DAO::executeQuery('SELECT ' . $subQueries[0], array(1 => array($entityData['contribution_id'], 'Int')));
             while ($dao->fetch()) {
                 $contacts[] = $dao->contact_id;
             }
         }
     }
     CRM_Core_Error::debug_var('CiviRules::Custom Query Contact Condition Contacts', $contacts);
     if (!empty($contacts)) {
         $eventData->setConditionOutputData('ContributionSoft', $contacts);
         return TRUE;
     } else {
         return FALSE;
     }
 }
 /**
  * Method to check if the condition is valid, will check if the contact
  * has an activity of the selected type
  *
  * @param object CRM_Civirules_EventData_EventData $eventData
  * @return bool
  * @access public
  */
 public function isConditionValid(CRM_Civirules_EventData_EventData $eventData)
 {
     $ActivityContact = $eventData->getEntityData('ActivityContact');
     if ($ActivityContact['record_type_id'] == $this->conditionParams['record_type_id']) {
         return true;
     }
     return false;
 }
 /**
  * Method to check if the condition is valid, will check if the contact
  * has an activity of the selected type
  *
  * @param object CRM_Civirules_EventData_EventData $eventData
  * @return bool
  * @access public
  */
 public function isConditionValid(CRM_Civirules_EventData_EventData $eventData)
 {
     $activity = $eventData->getEntityData('Activity');
     if ($activity['activity_type_id'] == $this->conditionParams['activity_type_id']) {
         return true;
     }
     return false;
 }
 public function isConditionValid(CRM_Civirules_EventData_EventData $eventData)
 {
     $groupContact = $eventData->getEntityData('GroupContact');
     if ($groupContact['group_id'] == $this->conditionParams['group_id']) {
         return true;
     }
     return false;
 }
 public function isConditionValid(CRM_Civirules_EventData_EventData $eventData)
 {
     $contribution = $eventData->getEntityData('Contribution');
     if ($contribution['contribution_status_id'] == $this->conditionParams['contribution_status_id']) {
         return true;
     }
     return false;
 }
 /**
  * Returns value of the field
  *
  * @param object CRM_Civirules_EventData_EventData $eventData
  * @return mixed
  * @access protected
  */
 protected function getFieldValue(CRM_Civirules_EventData_EventData $eventData)
 {
     $contribution = $eventData->getEntityData('Contribution');
     if (isset($contribution['total_amount'])) {
         return (double) $contribution['total_amount'];
     }
     return (double) 0.0;
     //undefined birth date
 }
 /**
  * Returns the value of the field for the condition
  * For example: I want to check if age > 50, this function would return the 50
  *
  * @param object CRM_Civirules_EventData_EventData $eventData
  * @return
  * @access protected
  * @abstract
  */
 protected function getFieldValue(CRM_Civirules_EventData_EventData $eventData)
 {
     $entity = $this->conditionParams['entity'];
     $field = $this->conditionParams['field'];
     $data = $eventData->getEntityData($entity);
     if (isset($data[$field])) {
         return $this->normalizeValue($data[$field]);
     }
     return null;
 }
 /**
  * Returns an array with parameters used for processing an action
  *
  * @param array $params
  * @param object CRM_Civirules_EventData_EventData $eventData
  * @return array $params
  * @access protected
  */
 protected function alterApiParameters($params, CRM_Civirules_EventData_EventData $eventData)
 {
     //this function could be overridden in subclasses to alter parameters to meet certain criteraia
     $params['contact_id'] = $eventData->getContactId();
     $entityData = $eventData->getEntityData('ContributionSoft');
     // Alter Params if contribution soft event is happening
     if (!empty($entityData)) {
         $params['contact_id'] = $eventData->getConditionOutputData('ContributionSoft');
     }
     return $params;
 }
 /**
  * Method to determine if the condition is valid
  *
  * @param CRM_Civirules_EventData_EventData $eventData
  * @return bool
  */
 public function isConditionValid(CRM_Civirules_EventData_EventData $eventData)
 {
     $isConditionValid = FALSE;
     $recurring = $eventData->getEntityData('ContributionRecur');
     if ($this->conditionParams['end_date'] == 0 && empty($recurring['end_date'])) {
         $isConditionValid = TRUE;
     }
     if ($this->conditionParams['end_date'] == 1 && !empty($recurring['end_date'])) {
         $isConditionValid = TRUE;
     }
     return $isConditionValid;
 }
    /**
     * Method to determine if the condition is valid
     *
     * @param CRM_Civirules_EventData_EventData $eventData
     * @return bool
     */
    public function isConditionValid(CRM_Civirules_EventData_EventData $eventData)
    {
        $isConditionValid = FALSE;
        $contribution = $eventData->getEntityData('Contribution');
        /*
         * retrieve count of completed contributions for donor where recurring_contribution_id is not empty
         */
        $query = 'SELECT COUNT(*) AS recurringContributions FROM civicrm_contribution
WHERE contact_id = %1 AND civicrm_contribution.contribution_recur_id > %2 AND contribution_status_id = %3';
        $params = array(1 => array($contribution['contact_id'], 'Positive'), 2 => array(0, 'Positive'), 3 => array(CRM_Civirules_Utils::getContributionStatusIdWithName('Completed'), 'String'));
        $dao = CRM_Core_DAO::executeQuery($query, $params);
        if ($dao->fetch()) {
            switch ($this->conditionParams['operator']) {
                case 1:
                    if ($dao->recurringContributions != $this->conditionParams['no_of_recurring']) {
                        $isConditionValid = TRUE;
                    }
                    break;
                case 2:
                    if ($dao->recurringContributions > $this->conditionParams['no_of_recurring']) {
                        $isConditionValid = TRUE;
                    }
                    break;
                case 3:
                    if ($dao->recurringContributions >= $this->conditionParams['no_of_recurring']) {
                        $isConditionValid = TRUE;
                    }
                    break;
                case 4:
                    if ($dao->recurringContributions < $this->conditionParams['no_of_recurring']) {
                        $isConditionValid = TRUE;
                    }
                    break;
                case 5:
                    if ($dao->recurringContributions <= $this->conditionParams['no_of_recurring']) {
                        $isConditionValid = TRUE;
                    }
                    break;
                default:
                    if ($dao->recurringContributions == $this->conditionParams['no_of_recurring']) {
                        $isConditionValid = TRUE;
                    }
                    break;
            }
        }
        return $isConditionValid;
    }
 /**
  * Method to determine if the condition is valid
  *
  * @param CRM_Civirules_EventData_EventData $eventData
  * @return bool
  */
 public function isConditionValid(CRM_Civirules_EventData_EventData $eventData)
 {
     $isConditionValid = FALSE;
     $contribution = $eventData->getEntityData('Contribution');
     switch ($this->conditionParams['operator']) {
         case 0:
             if ($contribution['financial_type_id'] == $this->conditionParams['financial_type_id']) {
                 $isConditionValid = TRUE;
             }
             break;
         case 1:
             if ($contribution['financial_type_id'] != $this->conditionParams['financial_type_id']) {
                 $isConditionValid = TRUE;
             }
             break;
     }
     return $isConditionValid;
 }
 /**
  * Method to determine if the condition is valid
  *
  * @param CRM_Civirules_EventData_EventData $eventData
  * @return bool
  */
 public function isConditionValid(CRM_Civirules_EventData_EventData $eventData)
 {
     $isConditionValid = FALSE;
     $this->buildWhereClauses($eventData->getEntityData('Contribution'));
     if (!empty($this->whereClauses)) {
         $query = 'SELECT COUNT(*) as countContributions FROM civicrm_contribution WHERE ' . implode(' AND ', $this->whereClauses);
         $dao = CRM_Core_DAO::executeQuery($query, $this->whereParams);
         if ($dao->fetch()) {
             switch ($this->conditionParams['count_operator']) {
                 case 1:
                     if ($dao->countContributions != $this->conditionParams['no_of_contributions']) {
                         $isConditionValid = TRUE;
                     }
                     break;
                 case 2:
                     if ($dao->countContributions > $this->conditionParams['no_of_contributions']) {
                         $isConditionValid = TRUE;
                     }
                     break;
                 case 3:
                     if ($dao->countContributions >= $this->conditionParams['no_of_contributions']) {
                         $isConditionValid = TRUE;
                     }
                     break;
                 case 4:
                     if ($dao->countContributions < $this->conditionParams['no_of_contributions']) {
                         $isConditionValid = TRUE;
                     }
                     break;
                 case 5:
                     if ($dao->countContributions <= $this->conditionParams['no_of_contributions']) {
                         $isConditionValid = TRUE;
                     }
                     break;
                 default:
                     if ($dao->countContributions == $this->conditionParams['no_of_contribution']) {
                         $isConditionValid = TRUE;
                     }
                     break;
             }
         }
     }
     return $isConditionValid;
 }
 /**
  * Method is mandatory and checks if the condition is met
  *
  * @param CRM_Civirules_EventData_EventData $eventData
  * @return bool
  * @access public
  */
 public function isConditionValid(CRM_Civirules_EventData_EventData $eventData)
 {
     $contactId = $eventData->getContactId();
     $contributionParams = array('contact_id' => $contactId);
     $countContributions = civicrm_api3('Contribution', 'getcount', $contributionParams);
     switch ($countContributions) {
         case 0:
             return TRUE;
             break;
         case 1:
             $existingContribution = civicrm_api3('Contribution', 'Getsingle', array('contact_id' => $contactId));
             $eventContribution = $eventData->getEntityData('Contribution');
             if ($eventContribution['contribution_id'] == $existingContribution['contribution_id']) {
                 return TRUE;
             }
             break;
         default:
             return FALSE;
             break;
     }
 }
 /**
  * Method processAction to execute the action
  *
  * @param CRM_Civirules_EventData_EventData $eventData
  * @access public
  *
  */
 public function processAction(CRM_Civirules_EventData_EventData $eventData)
 {
     $contribution = $eventData->getEntityData('Contribution');
     $actionParams = $this->getActionParameters();
     switch ($actionParams['thank_you_radio']) {
         case 1:
             if (!empty($actionParams['number_of_days'])) {
                 $thankYouDate = new DateTime();
                 $thankYouDate->modify('+' . $actionParams['number_of_days'] . ' day');
             }
             break;
         case 2:
             $thankYouDate = new DateTime($actionParams['thank_you_date']);
             break;
         default:
             $thankYouDate = new DateTime();
             break;
     }
     $params = array('id' => $contribution['id'], 'thankyou_date' => $thankYouDate->format('Ymd'));
     try {
         civicrm_api3('Contribution', 'Create', $params);
     } catch (CiviCRM_API3_Exception $ex) {
     }
 }
 /**
  * Method to get the field data
  *
  * @param object CRM_Civirules_EventData_EventData $eventData
  * @return mixed|null
  * @access protected
  */
 protected function getFieldData(CRM_Civirules_EventData_EventData $eventData)
 {
     $entity = $this->getEntity();
     $data = $eventData->getEntityData($entity);
     $field = $this->getField();
     if (isset($data[$field])) {
         return $this->transformFieldData($data[$field]);
     }
     return null;
 }