/**
     * 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;
        $contact_id = $eventData->getContactId();
        /*
         * retrieve count of contributions for donor grouped by extracted YMD from receive_date
         */
        $query = 'SELECT COUNT(DISTINCT CONCAT(EXTRACT(YEAR FROM receive_date),
EXTRACT(MONTH FROM receive_date), EXTRACT(DAY FROM receive_date))) AS distinctDates
FROM civicrm_contribution WHERE contact_id = %1 AND civicrm_contribution.contribution_status_id = %2';
        $params = array(1 => array($contact_id, 'Positive'), 2 => array(CRM_Civirules_Utils::getContributionStatusIdWithName('Completed'), 'Positive'));
        $periodStartDate = CRM_CivirulesConditions_Utils_Period::convertPeriodToStartDate($this->conditionParams);
        $periodEndDate = CRM_CivirulesConditions_Utils_Period::convertPeriodToEndDate($this->conditionParams);
        if ($periodStartDate) {
            $query .= " AND DATE(`receive_date`) >= '" . $periodStartDate->format('Y-m-d') . "'";
        }
        if ($periodEndDate) {
            $query .= " AND DATE(`receive_date`) <= '" . $periodEndDate->format('Y-m-d') . "'";
        }
        $dao = CRM_Core_DAO::executeQuery($query, $params);
        if ($dao->fetch()) {
            switch ($this->conditionParams['operator']) {
                case 1:
                    if ($dao->distinctDates != $this->conditionParams['no_of_days']) {
                        $isConditionValid = TRUE;
                    }
                    break;
                case 2:
                    if ($dao->distinctDates > $this->conditionParams['no_of_days']) {
                        $isConditionValid = TRUE;
                    }
                    break;
                case 3:
                    if ($dao->distinctDates >= $this->conditionParams['no_of_days']) {
                        $isConditionValid = TRUE;
                    }
                    break;
                case 4:
                    if ($dao->distinctDates < $this->conditionParams['no_of_days']) {
                        $isConditionValid = TRUE;
                    }
                    break;
                case 5:
                    if ($dao->distinctDates <= $this->conditionParams['no_of_days']) {
                        $isConditionValid = TRUE;
                    }
                    break;
                default:
                    if ($dao->distinctDates == $this->conditionParams['no_of_days']) {
                        $isConditionValid = TRUE;
                    }
                    break;
            }
        }
        return $isConditionValid;
    }
    /**
     * Method to determine if the condition is valid
     *
     * @param CRM_Civirules_TriggerData_TriggerData $triggerData
     * @return bool
     */
    public function isConditionValid(CRM_Civirules_TriggerData_TriggerData $triggerData)
    {
        $isConditionValid = FALSE;
        $contribution = $triggerData->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 build the where Clauses and related Params
  *
  * @param array $contribution
  * @access protected
  */
 protected function buildWhereClauses($contribution)
 {
     $this->whereClauses[] = 'contribution_status_id = %1';
     $this->whereParams[1] = array(CRM_Civirules_Utils::getContributionStatusIdWithName('Completed'), 'Integer');
     $this->whereClauses[] = 'is_test = %2';
     $this->whereParams[2] = array(0, 'Integer');
     $this->whereClauses[] = 'contact_id = %3';
     $this->whereParams[3] = array($contribution['contact_id'], 'Integer');
     $index = 3;
     if (!empty($this->conditionParams['amount'])) {
         $index++;
         $this->whereClauses[] = 'total_amount ' . $this->setOperator($this->conditionParams['amount_operator']) . ' %' . $index;
         $this->whereParams[$index] = array($this->conditionParams['amount'], 'Money');
     }
     if (!empty($this->conditionParams['financial_type'])) {
         $index++;
         $this->whereClauses[] = 'financial_type_id = %' . $index;
         $this->whereParams[$index] = array($this->conditionParams['financial_type'], 'Integer');
     }
 }