| GNU Affero General Public License or the licensing of CiviCRM, |
| see the CiviCRM license FAQ at http://civicrm.org/licensing |
+--------------------------------------------------------------------+
-*/
+ */
/**
*
* @package CRM
* @copyright CiviCRM LLC (c) 2004-2014
* $Id$
- *
*/
class CRM_Contribute_BAO_Query {
/**
- * Static field for all the export/import contribution fields
+ * Static field for all the export/import contribution fields.
*
* @var array
- * @static
*/
static $_contributionFields = NULL;
*
* @return array
* self::$_contributionFields associative array of contribution fields
- * @static
*/
public static function &getFields() {
if (!self::$_contributionFields) {
}
/**
- * If contributions are involved, add the specific contribute fields
+ * If contributions are involved, add the specific contribute fields.
*
* @param $query
*
$query->_tables['contribution_batch'] = 1;
}
+ if (!empty($query->_returnProperties['contribution_source'])) {
+ $query->_select['contribution_source'] = "civicrm_contribution.source as contribution_source";
+ $query->_element['contribution_source'] = 1;
+ $query->_tables['civicrm_contribution'] = 1;
+ }
+
// get contribution_status
if (!empty($query->_returnProperties['contribution_status_id'])) {
$query->_select['contribution_status_id'] = "contribution_status.value as contribution_status_id";
$query->_tables['contribution_status'] = 1;
}
- // get payment instruments
+ // get payment instrument
if (!empty($query->_returnProperties['payment_instrument'])) {
- $query->_select['contribution_payment_instrument'] = "payment_instrument.name as contribution_payment_instrument";
- $query->_element['contribution_payment_instrument'] = 1;
+ $query->_select['payment_instrument'] = "contribution_payment_instrument.label as payment_instrument";
+ $query->_element['payment_instrument'] = 1;
+ $query->_tables['civicrm_contribution'] = 1;
+ $query->_tables['contribution_payment_instrument'] = 1;
+ }
+
+ // get payment instrument id
+ if (!empty($query->_returnProperties['payment_instrument_id'])) {
+ $query->_select['instrument_id'] = "contribution_payment_instrument.value as instrument_id";
+ $query->_select['payment_instrument_id'] = "contribution_payment_instrument.value as payment_instrument_id";
+ $query->_element['instrument_id'] = $query->_element['payment_instrument_id'] = 1;
$query->_tables['civicrm_contribution'] = 1;
$query->_tables['contribution_payment_instrument'] = 1;
}
*/
public static function where(&$query) {
$grouping = NULL;
-
self::initializeAnySoftCreditClause($query);
foreach (array_keys($query->_params) as $id) {
if (empty($query->_params[$id][0])) {
continue;
}
- if (substr($query->_params[$id][0], 0, 13) == 'contribution_' || substr($query->_params[$id][0], 0, 10) == 'financial_') {
+ if (substr($query->_params[$id][0], 0, 13) == 'contribution_' || substr($query->_params[$id][0], 0, 10) == 'financial_' || substr($query->_params[$id][0], 0, 8) == 'payment_') {
if ($query->_mode == CRM_Contact_BAO_QUERY::MODE_CONTACTS) {
$query->_useDistinct = TRUE;
}
list($name, $op, $value, $grouping, $wildcard) = $values;
$quoteValue = NULL;
- $fields = self::getFields();
+ $fields = array_merge(CRM_Contribute_BAO_Contribution::fields(), self::getFields());
if (!empty($value) && !is_array($value)) {
$quoteValue = "\"$value\"";
return;
case 'financial_type_id':
- case 'financial_type':
case 'contribution_page_id':
- case 'contribution_status':
case 'contribution_status_id':
case 'contribution_id':
case 'contribution_currency_type':
case 'contribution_currency':
case 'contribution_source':
- case 'contribution_payment_instrument_id':
- case 'contribution_payment_instrument':
case 'contribution_trxn_id':
+ case 'contribution_check_number':
case (strpos($name, '_amount') !== FALSE):
case (strpos($name, '_date') !== FALSE):
- if (!$value) {
- break;
- }
$qillName = $name;
$pseudoExtraParam = NULL;
- if (in_array($name, array('financial_type', 'contribution_status', 'contribution_payment_instrument'))) {
- $name = $name . "_id";
- }
- if (in_array($name, array('financial_type_id', 'contribution_payment_instrument_id'))) {
- $qillName = str_replace('_id', '', $name);
- }
if ((strpos($name, '_amount') !== FALSE) || (strpos($name, '_date') !== FALSE) || in_array($name,
array(
'contribution_id',
'contribution_currency',
- 'contribution_payment_instrument_id',
- 'contribution_payment_instrument',
'contribution_source',
'contribution_trxn_id',
- 'contribution_check_number'
+ 'contribution_check_number',
)
)
) {
$name = str_replace('contribution_', '', $name);
- if ($name != 'source') {
+ if (!in_array($name, array('source', 'id'))) {
$qillName = str_replace('contribution_', '', $qillName);
}
}
$query->_tables['civicrm_contribution'] = $query->_whereTables['civicrm_contribution'] = 1;
return;
+ case 'financial_type':
+ $query->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause($fields[$name]['where'], $op, $value, 'String');
+ list($op, $value) = CRM_Contact_BAO_Query::buildQillForFieldValue('CRM_Contribute_DAO_Contribution', $name, $value, $op);
+ $query->_qill[$grouping][] = ts('%1 %2 %3', array(1 => $fields[$name]['title'], 2 => $op, 3 => $value));
+ $query->_tables['civicrm_contribution'] = $query->_whereTables['civicrm_contribution'] = 1;
+ $query->_tables['civicrm_financial_type'] = $query->_whereTables['civicrm_financial_type'] = 1;
+ return;
+
case 'contribution_page':
$query->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause($fields[$name]['where'], $op, $value, 'String');
list($op, $value) = CRM_Contact_BAO_Query::buildQillForFieldValue('CRM_Contribute_DAO_Contribution', $name, $value, $op);
$query->_tables['civicrm_contribution'] = $query->_whereTables['civicrm_contribution'] = 1;
return;
+ case 'contribution_payment_instrument':
+ case 'contribution_payment_instrument_id':
+ $name = str_replace('contribution_', '', $name);
+ case 'payment_instrument':
+ case 'payment_instrument_id':
+ if ($name == 'payment_instrument') {
+ $query->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause("contribution_payment_instrument.label", $op, $value);
+ }
+ else {
+ $query->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause("contribution_payment_instrument.value", $op, $value, 'Int');
+ }
+ list($op, $value) = CRM_Contact_BAO_Query::buildQillForFieldValue('CRM_Contribute_DAO_Contribution', 'payment_instrument_id', $value, $op);
+ $query->_qill[$grouping][] = ts('%1 %2 %3', array(1 => $fields['payment_instrument']['title'], 2 => $op, 3 => $value));
+ $query->_tables['civicrm_contribution'] = $query->_whereTables['civicrm_contribution'] = 1;
+ $query->_tables['contribution_payment_instrument'] = $query->_whereTables['contribution_payment_instrument'] = 1;
+ return;
+
+ case 'contribution_status':
+ $query->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause("$name.label", $op, $value, 'String');
+ list($op, $value) = CRM_Contact_BAO_Query::buildQillForFieldValue('CRM_Contribute_DAO_Contribution', $name, $value, $op);
+ $query->_qill[$grouping][] = ts('%1 %2 %3', array(1 => $fields[$name]['title'], 2 => $op, 3 => $value));
+ $query->_tables['civicrm_contribution'] = $query->_whereTables['civicrm_contribution'] = 1;
+ $query->_tables[$name] = $query->_whereTables[$name] = 1;
+ break;
+
case 'contribution_pcp_made_through_id':
case 'contribution_soft_credit_type_id':
- if (!$value) {
- break;
- }
$qillName = $name;
if ($name == 'contribution_pcp_made_through_id') {
$qillName = $name = 'pcp_id';
return;
case 'contribution_is_test':
+ // By default is Contribution Search form we choose is_test = 0 in otherwords always show active contribution
+ // so in case if any one choose any Yes/No avoid the default clause otherwise it will be conflict in whereClause
+ $key = array_search('civicrm_contribution.is_test = 0', $query->_where[$grouping]);
+ if (!empty($key)) {
+ unset($query->_where[$grouping][$key]);
+ }
case 'contribution_test':
// We dont want to include all tests for sql OR CRM-7827
if (!$value || $query->getOperator() != 'OR') {
case 'contribution_payment_instrument':
$from = " $side JOIN civicrm_option_group option_group_payment_instrument ON ( option_group_payment_instrument.name = 'payment_instrument')";
- $from .= " $side JOIN civicrm_option_value payment_instrument ON (civicrm_contribution.payment_instrument_id = payment_instrument.value
- AND option_group_payment_instrument.id = payment_instrument.option_group_id ) ";
+ $from .= " $side JOIN civicrm_option_value contribution_payment_instrument ON (civicrm_contribution.payment_instrument_id = contribution_payment_instrument.value
+ AND option_group_payment_instrument.id = contribution_payment_instrument.option_group_id ) ";
break;
case 'contribution_status':
'total_amount' => 1,
'accounting_code' => 1,
'payment_instrument' => 1,
+ 'payment_instrument_id' => 1,
'check_number' => 1,
'non_deductible_amount' => 1,
'fee_amount' => 1,
}
/**
- * Add all the elements shared between contribute search and advnaced search
+ * Add all the elements shared between contribute search and advnaced search.
*
*
* @param CRM_Core_Form $form
*
* @return void
- * @static
*/
public static function buildSearchForm(&$form) {
$form->add('select', 'contribution_currency_type',
ts('Currency Type'),
array(
- '' => ts('- any -')
+ '' => ts('- any -'),
) +
CRM_Core_PseudoConstant::get('CRM_Contribute_DAO_Contribution', 'currency', array('labelColumn' => 'name')),
FALSE, array('class' => 'crm-select2')
$form->add('select', 'contribution_page_id',
ts('Contribution Page'),
array(
- '' => ts('- any -')
+ '' => ts('- any -'),
) +
CRM_Contribute_PseudoConstant::contributionPage(),
FALSE, array('class' => 'crm-select2')
);
-
- $form->add('select', 'contribution_payment_instrument_id',
- ts('Payment Instrument'),
- array(
- '' => ts('- any -')
- ) +
- CRM_Contribute_PseudoConstant::paymentInstrument(),
- FALSE, array('class' => 'crm-select2')
+ $form->addSelect('payment_instrument_id',
+ array('entity' => 'contribution', 'label' => ts('Payment Method'), 'option_url' => NULL, 'placeholder' => ts('- any -'))
);
$form->add('select', 'contribution_pcp_made_through_id',
ts('Personal Campaign Page'),
array(
- '' => ts('- any -')
+ '' => ts('- any -'),
) +
CRM_Contribute_PseudoConstant::pcPage(),
FALSE, array('class' => 'crm-select2')
// Remove status values that are only used for recurring contributions or pledges (In Progress, Overdue).
unset($statusValues['5'], $statusValues['6']);
- $form->addSelect('contribution_status',
- array('entity' => 'contribution', 'multiple' => 'multiple', 'option_url' => NULL, 'placeholder' => ts('- any -'))
+ $form->addSelect('contribution_status_id',
+ array('entity' => 'contribution', 'multiple' => 'multiple', 'label' => ts('Contribution Status(s)'), 'option_url' => NULL, 'placeholder' => ts('- any -'))
);
// Add fields for thank you and receipt
}
/**
- * Add the where for dates
+ * Add the where for dates.
*
* @param array $values
* Array of query values.
public static function buildDateWhere(&$values, $query, $name, $field, $title) {
$fieldPart = strpos($name, $field);
if ($fieldPart === FALSE) {
- return;
+ return NULL;
}
// we only have recurring dates using this ATM so lets' short cut to find the table name
$table = 'contribution_recur';
'contribution_recur_failure_retry_date' => ts('Failed Recurring Contribution Retry Date'),
);
}
+
}