4 +--------------------------------------------------------------------+
5 | CiviCRM version 4.4 |
6 +--------------------------------------------------------------------+
7 | Copyright CiviCRM LLC (c) 2004-2013 |
8 +--------------------------------------------------------------------+
9 | This file is a part of CiviCRM. |
11 | CiviCRM is free software; you can copy, modify, and distribute it |
12 | under the terms of the GNU Affero General Public License |
13 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
15 | CiviCRM is distributed in the hope that it will be useful, but |
16 | WITHOUT ANY WARRANTY; without even the implied warranty of |
17 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
18 | See the GNU Affero General Public License for more details. |
20 | You should have received a copy of the GNU Affero General Public |
21 | License and the CiviCRM Licensing Exception along |
22 | with this program; if not, contact CiviCRM LLC |
23 | at info[AT]civicrm[DOT]org. If you have questions about the |
24 | GNU Affero General Public License or the licensing of CiviCRM, |
25 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
26 +--------------------------------------------------------------------+
32 * @copyright CiviCRM LLC (c) 2004-2013
36 class CRM_Report_Form_Member_ContributionDetail
extends CRM_Report_Form
{
37 protected $_addressField = FALSE;
39 protected $_emailField = FALSE;
40 protected $_emailFieldHonor = FALSE;
42 protected $_nameFieldHonor = FALSE;
44 protected $_summary = NULL;
45 protected $_allBatches = NULL;
47 protected $_customGroupExtends = array(
48 'Contribution', 'Membership');
50 function __construct() {
51 $config = CRM_Core_Config
::singleton();
52 $campaignEnabled = in_array('CiviCampaign', $config->enableComponents
);
53 if ($campaignEnabled) {
54 $getCampaigns = CRM_Campaign_BAO_Campaign
::getPermissionedCampaigns(NULL, NULL, TRUE, FALSE, TRUE);
55 $this->activeCampaigns
= $getCampaigns['campaigns'];
56 asort($this->activeCampaigns
);
58 $this->_columns
= array(
61 'dao' => 'CRM_Contact_DAO_Contact',
65 array('title' => ts('Donor Name'),
70 array('title' => ts('First Name'),
74 array('title' => ts('Last Name'),
78 array('title' => ts('Contact Type'),
83 'title' => ts('Contact SubType'),
87 array('title' => ts('Do Not Email'),
91 array('title' => ts('No Bulk Email(Is Opt Out)'),
98 'csv_display' => TRUE,
99 'title' => ts('Contact ID'),
105 array('title' => ts('Donor Name'),
106 'operator' => 'like',
109 array('title' => ts('Contact ID'),
110 'no_display' => TRUE,
113 'grouping' => 'contact-fields',
117 'dao' => 'CRM_Core_DAO_Email',
121 array('title' => ts('Donor Email'),
126 'grouping' => 'contact-fields',
130 'dao' => 'CRM_Core_DAO_Phone',
134 array('title' => ts('Donor Phone'),
139 'grouping' => 'contact-fields',
141 'civicrm_contact_honor' =>
143 'dao' => 'CRM_Contact_DAO_Contact',
147 array('title' => ts('Honoree Name'),
148 'name' => 'sort_name',
149 'alias' => 'contacthonor',
155 'no_display' => TRUE,
156 'title' => ts('Honoree ID'),
158 'alias' => 'contacthonor',
163 'civicrm_email_honor' =>
165 'dao' => 'CRM_Core_DAO_Email',
169 array('title' => ts('Honoree Email'),
171 'alias' => 'emailhonor',
176 'grouping' => 'contact-fields',
178 'first_donation' => array(
179 'dao' => 'CRM_Contribute_DAO_Contribution',
182 'first_donation_date' => array(
183 'title' => ts('First Contribution Date'),
184 'base_field' => 'receive_date',
187 'first_donation_amount' => array(
188 'title' => ts('First Contribution Amount'),
189 'base_field' => 'total_amount',
194 'civicrm_contribution' =>
196 'dao' => 'CRM_Contribute_DAO_Contribution',
199 'contribution_id' => array(
201 'no_display' => TRUE,
203 'csv_display' => TRUE,
204 'title' => ts('Contribution ID'),
206 'financial_type_id' => array('title' => ts('Financial Type'),
209 'contribution_recur_id' => array('title' => ts('Recurring Contribution Id'),
210 'name' => 'contribution_recur_id',
212 'no_display' => TRUE,
213 'csv_display' => TRUE,
215 'contribution_status_id' => array('title' => ts('Contribution Status'),
217 'payment_instrument_id' => array('title' => ts('Payment Type'),
219 'contribution_source' => array(
221 'title' => ts('Contribution Source'),
225 'no_display' => TRUE,
228 'receive_date' => array('default' => TRUE),
229 'receipt_date' => NULL,
230 'honor_type_id' => array('title' => ts('Honor Type'),
233 'fee_amount' => NULL,
234 'net_amount' => NULL,
235 'total_amount' => array('title' => ts('Amount'),
242 array('operatorType' => CRM_Report_Form
::OP_DATE
),
243 'financial_type_id' =>
244 array('title' => ts('Financial Type'),
245 'operatorType' => CRM_Report_Form
::OP_MULTISELECT
,
246 'options' => CRM_Contribute_PseudoConstant
::financialType(),
249 array('title' => 'Currency',
250 'operatorType' => CRM_Report_Form
::OP_MULTISELECT
,
251 'options' => CRM_Core_OptionGroup
::values('currencies_enabled'),
253 'type' => CRM_Utils_Type
::T_STRING
,
255 'payment_instrument_id' =>
256 array('title' => ts('Payment Type'),
257 'operatorType' => CRM_Report_Form
::OP_MULTISELECT
,
258 'options' => CRM_Contribute_PseudoConstant
::paymentInstrument(),
260 'contribution_status_id' =>
261 array('title' => ts('Contribution Status'),
262 'operatorType' => CRM_Report_Form
::OP_MULTISELECT
,
263 'options' => CRM_Contribute_PseudoConstant
::contributionStatus(),
264 'default' => array(1),
267 array('title' => ts('Contribution Amount')),
269 'grouping' => 'contri-fields',
273 'dao' => 'CRM_Contribute_DAO_Product',
276 'product_name' => array(
278 'title' => ts('Premium'),
282 'civicrm_contribution_product' =>
284 'dao' => 'CRM_Contribute_DAO_ContributionProduct',
287 'product_id' => array(
288 'no_display' => TRUE,
290 'product_option' => array(
291 'title' => ts('Premium Option'),
293 'contribution_id' => array(
294 'no_display' => TRUE,
300 'dao' => 'CRM_Contact_DAO_GroupContact',
306 'name' => 'group_id',
307 'title' => ts('Group'),
308 'operatorType' => CRM_Report_Form
::OP_MULTISELECT
,
310 'options' => CRM_Core_PseudoConstant
::group(),
314 'civicrm_contribution_ordinality' =>
316 'dao' => 'CRM_Contribute_DAO_Contribution',
317 'alias' => 'cordinality',
321 array('title' => ts('Contribution Ordinality'),
322 'operatorType' => CRM_Report_Form
::OP_MULTISELECT
,
324 0 => 'First by Contributor',
325 1 => 'Second or Later by Contributor',
330 'civicrm_membership' =>
332 'dao' => 'CRM_Member_DAO_Membership',
335 'membership_type_id' => array('title' => ts('Membership Type'),
339 'membership_start_date' => array('title' => ts('Start Date'),
342 'membership_end_date' => array('title' => ts('End Date'),
345 'join_date' => array('title' => ts('Join Date'),
348 'source' => array('title' => ts('Membership Source')),
352 array('operatorType' => CRM_Report_Form
::OP_DATE
),
353 'membership_start_date' =>
354 array('operatorType' => CRM_Report_Form
::OP_DATE
),
355 'membership_end_date' =>
356 array('operatorType' => CRM_Report_Form
::OP_DATE
),
357 'owner_membership_id' =>
358 array('title' => ts('Membership Owner ID'),
359 'operatorType' => CRM_Report_Form
::OP_INT
,
363 'name' => 'membership_type_id',
364 'title' => ts('Membership Types'),
365 'type' => CRM_Utils_Type
::T_INT
,
366 'operatorType' => CRM_Report_Form
::OP_MULTISELECT
,
367 'options' => CRM_Member_PseudoConstant
::membershipType(),
370 'grouping' => 'member-fields',
372 'civicrm_membership_status' =>
374 'dao' => 'CRM_Member_DAO_MembershipStatus',
375 'alias' => 'mem_status',
378 'membership_status_name' =>
381 'title' => ts('Membership Status'),
389 'title' => ts('Membership Status'),
390 'type' => CRM_Utils_Type
::T_INT
,
391 'operatorType' => CRM_Report_Form
::OP_MULTISELECT
,
392 'options' => CRM_Member_PseudoConstant
::membershipStatus(NULL, NULL, 'label'),
395 'grouping' => 'member-fields',
399 'dao' => 'CRM_Core_DAO_Note',
402 'contribution_note' =>
405 'title' => ts('Contribution Note'),
413 'title' => ts('Contribution Note'),
414 'operator' => 'like',
415 'type' => CRM_Utils_Type
::T_STRING
,
419 ) +
$this->addAddressFields(FALSE);
421 $this->_tagFilter
= TRUE;
423 // Don't show Batch display column and filter unless batches are being used
424 $this->_allBatches
= CRM_Batch_BAO_Batch
::getBatches();
425 if (!empty($this->_allBatches
)) {
426 $this->_columns
['civicrm_batch']['dao'] = 'CRM_Batch_DAO_Batch';
427 $this->_columns
['civicrm_batch']['fields']['batch_id'] = array(
429 'title' => ts('Batch Name'),
431 $this->_columns
['civicrm_batch']['filters']['bid'] = array(
433 'title' => ts('Batch Name'),
434 'type' => CRM_Utils_Type
::T_INT
,
435 'operatorType' => CRM_Report_Form
::OP_MULTISELECT
,
436 'options' => $this->_allBatches
,
438 $this->_columns
['civicrm_entity_batch']['dao'] = 'CRM_Batch_DAO_EntityBatch';
439 $this->_columns
['civicrm_entity_batch']['fields']['entity_batch_id'] = array(
440 'name' => 'batch_id',
442 'no_display' => TRUE,
446 if ($campaignEnabled && !empty($this->activeCampaigns
)) {
447 $this->_columns
['civicrm_contribution']['fields']['campaign_id'] = array(
448 'title' => ts('Campaign'),
449 'default' => 'false',
451 $this->_columns
['civicrm_contribution']['filters']['campaign_id'] = array('title' => ts('Campaign'),
452 'operatorType' => CRM_Report_Form
::OP_MULTISELECT
,
453 'options' => $this->activeCampaigns
,
455 $this->_columns
['civicrm_contribution']['order_bys']['campaign_id'] = array('title' => ts('Campaign'));
458 $this->_currencyColumn
= 'civicrm_contribution_currency';
459 parent
::__construct();
462 function preProcess() {
463 parent
::preProcess();
469 $this->_columnHeaders
= array();
470 foreach ($this->_columns
as $tableName => $table) {
471 if (array_key_exists('fields', $table)) {
472 foreach ($table['fields'] as $fieldName => $field) {
473 if (CRM_Utils_Array
::value('required', $field) ||
474 CRM_Utils_Array
::value($fieldName, $this->_params
['fields'])
476 if ($tableName == 'civicrm_address') {
477 $this->_addressField
= TRUE;
479 if ($tableName == 'civicrm_email') {
480 $this->_emailField
= TRUE;
482 elseif ($tableName == 'civicrm_email_honor') {
483 $this->_emailFieldHonor
= TRUE;
486 if ($tableName == 'civicrm_contact_honor') {
487 $this->_nameFieldHonor
= TRUE;
490 // only include statistics columns if set
491 if (CRM_Utils_Array
::value('statistics', $field)) {
492 foreach ($field['statistics'] as $stat => $label) {
493 switch (strtolower($stat)) {
495 $select[] = "SUM({$field['dbAlias']}) as {$tableName}_{$fieldName}_{$stat}";
496 $this->_columnHeaders
["{$tableName}_{$fieldName}_{$stat}"]['title'] = $label;
497 $this->_columnHeaders
["{$tableName}_{$fieldName}_{$stat}"]['type'] = $field['type'];
498 $this->_statFields
[] = "{$tableName}_{$fieldName}_{$stat}";
502 $select[] = "COUNT({$field['dbAlias']}) as {$tableName}_{$fieldName}_{$stat}";
503 $this->_columnHeaders
["{$tableName}_{$fieldName}_{$stat}"]['title'] = $label;
504 $this->_statFields
[] = "{$tableName}_{$fieldName}_{$stat}";
508 $select[] = "ROUND(AVG({$field['dbAlias']}),2) as {$tableName}_{$fieldName}_{$stat}";
509 $this->_columnHeaders
["{$tableName}_{$fieldName}_{$stat}"]['type'] = $field['type'];
510 $this->_columnHeaders
["{$tableName}_{$fieldName}_{$stat}"]['title'] = $label;
511 $this->_statFields
[] = "{$tableName}_{$fieldName}_{$stat}";
516 elseif ($fieldName == 'first_donation_date' ||
$fieldName == 'first_donation_amount') {
517 $baseField = CRM_Utils_Array
::value('base_field', $field);
518 $select[] = "{$this->_aliases['civicrm_contribution']}.{$baseField} as {$tableName}_{$fieldName}";
519 $this->_columnHeaders
["{$tableName}_{$fieldName}"]['title'] = CRM_Utils_Array
::value('title', $field);
520 $this->_columnHeaders
["{$tableName}_{$fieldName}"]['type'] = CRM_Utils_Array
::value('type', $field);
523 $select[] = "{$field['dbAlias']} as {$tableName}_{$fieldName}";
524 $this->_columnHeaders
["{$tableName}_{$fieldName}"]['title'] = CRM_Utils_Array
::value('title', $field);
525 $this->_columnHeaders
["{$tableName}_{$fieldName}"]['type'] = CRM_Utils_Array
::value('type', $field);
532 $this->_select
= 'SELECT ' . implode(', ', $select) . ' ';
537 FROM civireport_membership_contribution_detail
538 INNER JOIN civicrm_contribution {$this->_aliases['civicrm_contribution']}
539 ON (civireport_membership_contribution_detail.contribution_id = {$this->_aliases['civicrm_contribution']}.id)
540 LEFT JOIN civicrm_membership {$this->_aliases['civicrm_membership']}
541 ON (civireport_membership_contribution_detail.membership_id = {$this->_aliases['civicrm_membership']}.id)
542 INNER JOIN civicrm_contact {$this->_aliases['civicrm_contact']}
543 ON (civireport_membership_contribution_detail.contact_id = {$this->_aliases['civicrm_contact']}.id)
544 LEFT JOIN civicrm_membership_status {$this->_aliases['civicrm_membership_status']}
545 ON {$this->_aliases['civicrm_membership_status']}.id =
546 {$this->_aliases['civicrm_membership']}.status_id
550 if (CRM_Utils_Array
::value('product_name', $this->_params
['fields']) || CRM_Utils_Array
::value('product_option', $this->_params
['fields'])) {
552 LEFT JOIN civicrm_contribution_product {$this->_aliases['civicrm_contribution_product']}
553 ON ({$this->_aliases['civicrm_contribution_product']}.contribution_id = {$this->_aliases['civicrm_contribution']}.id)
554 LEFT JOIN civicrm_product {$this->_aliases['civicrm_product']} ON ({$this->_aliases['civicrm_product']}.id = {$this->_aliases['civicrm_contribution_product']}.product_id)";
557 if (!empty($this->_params
['ordinality_value'])) {
559 INNER JOIN (SELECT c.id, IF(COUNT(oc.id) = 0, 0, 1) AS ordinality FROM civicrm_contribution c LEFT JOIN civicrm_contribution oc ON c.contact_id = oc.contact_id AND oc.receive_date < c.receive_date GROUP BY c.id) {$this->_aliases['civicrm_contribution_ordinality']}
560 ON {$this->_aliases['civicrm_contribution_ordinality']}.id = {$this->_aliases['civicrm_contribution']}.id";
563 // include contribution note
564 if (CRM_Utils_Array
::value('contribution_note', $this->_params
['fields']) ||
!empty($this->_params
['note_value'])) {
566 LEFT JOIN civicrm_note {$this->_aliases['civicrm_note']}
567 ON ( {$this->_aliases['civicrm_note']}.entity_table = 'civicrm_contribution' AND
568 {$this->_aliases['civicrm_contribution']}.id = {$this->_aliases['civicrm_note']}.entity_id )";
572 if (CRM_Utils_Array
::value('phone', $this->_params
['fields'])) {
574 LEFT JOIN civicrm_phone {$this->_aliases['civicrm_phone']}
575 ON ({$this->_aliases['civicrm_contact']}.id = {$this->_aliases['civicrm_phone']}.contact_id AND
576 {$this->_aliases['civicrm_phone']}.is_primary = 1)";
578 //for contribution batches
579 if ($this->_allBatches
&&
580 (CRM_Utils_Array
::value('batch_id', $this->_params
['fields']) ||
!empty($this->_params
['bid_value']))) {
582 LEFT JOIN civicrm_entity_financial_trxn tx ON (tx.entity_id = {$this->_aliases['civicrm_contribution']}.id AND
583 tx.entity_table = 'civicrm_contribution')
584 LEFT JOIN civicrm_entity_batch {$this->_aliases['civicrm_entity_batch']}
585 ON ({$this->_aliases['civicrm_entity_batch']}.entity_id = tx.financial_trxn_id AND
586 {$this->_aliases['civicrm_entity_batch']}.entity_table = 'civicrm_financial_trxn')
587 LEFT JOIN civicrm_batch {$this->_aliases['civicrm_batch']}
588 ON {$this->_aliases['civicrm_batch']}.id = {$this->_aliases['civicrm_entity_batch']}.batch_id";
591 if ($this->_addressField
OR (!empty($this->_params
['state_province_id_value']) OR !empty($this->_params
['country_id_value']))) {
593 LEFT JOIN civicrm_address {$this->_aliases['civicrm_address']}
594 ON {$this->_aliases['civicrm_contact']}.id = {$this->_aliases['civicrm_address']}.contact_id AND
595 {$this->_aliases['civicrm_address']}.is_primary = 1\n";
598 if ($this->_emailField
) {
600 LEFT JOIN civicrm_email {$this->_aliases['civicrm_email']}
601 ON {$this->_aliases['civicrm_contact']}.id = {$this->_aliases['civicrm_email']}.contact_id AND
602 {$this->_aliases['civicrm_email']}.is_primary = 1\n";
605 // include Honor name field
606 if ($this->_nameFieldHonor
) {
608 LEFT JOIN civicrm_contact contacthonor
609 ON contacthonor.id = {$this->_aliases['civicrm_contribution']}.honor_contact_id";
612 // include Honor email field
613 if ($this->_emailFieldHonor
) {
615 LEFT JOIN civicrm_email emailhonor
616 ON emailhonor.contact_id = {$this->_aliases['civicrm_contribution']}.honor_contact_id
617 AND emailhonor.is_primary = 1\n";
621 function tempTable($applyLimit = TRUE) {
622 // create temp table with contact ids,contribtuion id,membership id
623 $dropTempTable = 'DROP TABLE IF EXISTS civireport_membership_contribution_detail';
624 CRM_Core_DAO
::executeQuery($dropTempTable);
626 $sql = 'CREATE TEMPORARY TABLE civireport_membership_contribution_detail
627 (contribution_id int, contact_id int, membership_id int, payment_id int) ENGINE=HEAP';
628 CRM_Core_DAO
::executeQuery($sql);
631 INSERT INTO civireport_membership_contribution_detail (contribution_id, contact_id, membership_id)
632 SELECT contribution.id, contact.id, m.id
633 FROM civicrm_contribution contribution
634 INNER JOIN civicrm_contact contact {$this->_aclFrom}
635 ON contact.id = contribution.contact_id AND contribution.is_test = 0
636 LEFT JOIN civicrm_membership_payment mp
637 ON contribution.id = mp.contribution_id
638 LEFT JOIN civicrm_membership m
639 ON mp.membership_id = m.id AND m.is_test = 0 ";
641 CRM_Core_DAO
::executeQuery($fillTemp);
644 function buildQuery($applyLimit = TRUE) {
646 //create temp table to be used as base table
649 $this->customDataFrom();
654 // order_by columns not selected for display need to be included in SELECT
655 $unselectedSectionColumns = $this->unselectedSectionColumns();
656 foreach ($unselectedSectionColumns as $alias => $section) {
657 $this->_select
.= ", {$section['dbAlias']} as {$alias}";
660 if ($applyLimit && !CRM_Utils_Array
::value('charts', $this->_params
)) {
664 $sql = "{$this->_select} {$this->_from} {$this->_where} {$this->_groupBy} {$this->_having} {$this->_orderBy} {$this->_limit}";
669 $this->_groupBy
= " GROUP BY {$this->_aliases['civicrm_contact']}.id, {$this->_aliases['civicrm_contribution']}.id ";
673 $this->_orderBy
= " ORDER BY {$this->_aliases['civicrm_contact']}.sort_name, {$this->_aliases['civicrm_contact']}.id ";
674 if (CRM_Utils_Array
::value('first_donation_date', $this->_params
['fields'])
675 || CRM_Utils_Array
::value('first_donation_amount', $this->_params
['fields'])) {
676 $this->_orderBy
.= ", {$this->_aliases['civicrm_contribution']}.receive_date";
680 function statistics(&$rows) {
681 $statistics = parent
::statistics($rows);
683 $select = " SELECT COUNT({$this->_aliases['civicrm_contribution']}.total_amount ) as count, SUM( {$this->_aliases['civicrm_contribution']}.total_amount ) as amount, ROUND(AVG({$this->_aliases['civicrm_contribution']}.total_amount), 2) as avg, {$this->_aliases['civicrm_contribution']}.currency as currency ";
685 $group = "\nGROUP BY {$this->_aliases['civicrm_contribution']}.currency";
686 $sql = "{$select} {$this->_from} {$this->_where} {$group}";
688 $dao = CRM_Core_DAO
::executeQuery($sql);
689 $totalAmount = $average = array();
690 while ($dao->fetch()) {
691 $totalAmount[] = CRM_Utils_Money
::format($dao->amount
, $dao->currency
)."(".$dao->count
.")";
692 $average[] = CRM_Utils_Money
::format($dao->avg
, $dao->currency
);
694 $statistics['counts']['amount'] = array(
695 'title' => ts('Total Amount'),
696 'value' => implode(', ', $totalAmount),
697 'type' => CRM_Utils_Type
::T_STRING
,
700 $statistics['counts']['avg'] = array(
701 'title' => ts('Average'),
702 'value' => implode(', ', $average),
703 'type' => CRM_Utils_Type
::T_STRING
,
709 function postProcess() {
710 // get the acl clauses built before we assemble the query
711 $this->buildACLClause($this->_aliases
['civicrm_contact']);
712 parent
::postProcess();
715 function alterDisplay(&$rows) {
716 // custom code to alter rows
717 $checkList = array();
720 $contributionTypes = CRM_Contribute_PseudoConstant
::financialType();
721 $contributionStatus = CRM_Contribute_PseudoConstant
::contributionStatus();
722 $paymentInstruments = CRM_Contribute_PseudoConstant
::paymentInstrument();
723 $honorTypes = CRM_Core_OptionGroup
::values('honor_type', FALSE, FALSE, FALSE, NULL, 'label');
725 //altering the csv display adding additional fields
726 if ($this->_outputMode
== 'csv') {
727 foreach ($this->_columns
as $tableName => $table) {
728 if (array_key_exists('fields', $table)) {
729 foreach ($table['fields'] as $fieldName => $field) {
730 if (CRM_Utils_Array
::value('csv_display', $field) && CRM_Utils_Array
::value('no_display', $field)) {
731 $this->_columnHeaders
["{$tableName}_{$fieldName}"]['title'] = CRM_Utils_Array
::value('title', $field);
732 $this->_columnHeaders
["{$tableName}_{$fieldName}"]['type'] = CRM_Utils_Array
::value('type', $field);
739 // allow repeat for first donation amount and date in csv
742 foreach ($rows as $rowNum => $row) {
743 if ($this->_outputMode
== 'csv') {
744 if (array_key_exists('civicrm_contact_id', $row)) {
745 if ($contactId = $row['civicrm_contact_id']) {
748 $fAmt = $row['first_donation_first_donation_amount'];
749 $fDate = $row['first_donation_first_donation_date'];
752 if ($pcid == $contactId) {
753 $rows[$rowNum]['first_donation_first_donation_amount'] = $fAmt;
754 $rows[$rowNum]['first_donation_first_donation_date'] = $fDate;
758 $fAmt = $row['first_donation_first_donation_amount'];
759 $fDate = $row['first_donation_first_donation_date'];
767 if (!empty($this->_noRepeats
) && $this->_outputMode
!= 'csv') {
768 $repeatFound = FALSE;
771 $display_flag = NULL;
772 if (array_key_exists('civicrm_contact_id', $row)) {
773 if ($cid = $row['civicrm_contact_id']) {
778 if ($prev_cid == $cid) {
789 foreach ($row as $colName => $colVal) {
790 if (in_array($colName, $this->_noRepeats
)) {
791 unset($rows[$rowNum][$colName]);
801 if (array_key_exists('civicrm_membership_membership_type_id', $row)) {
802 if ($value = $row['civicrm_membership_membership_type_id']) {
803 $rows[$rowNum]['civicrm_membership_membership_type_id'] = CRM_Member_PseudoConstant
::membershipType($value, FALSE);
808 if (array_key_exists('civicrm_batch_batch_id', $row)) {
809 if ($value = $row['civicrm_batch_batch_id']) {
810 $rows[$rowNum]['civicrm_batch_batch_id'] = CRM_Core_DAO
::getFieldValue('CRM_Batch_DAO_Batch', $value, 'title');
815 if (array_key_exists('civicrm_address_state_province_id', $row)) {
816 if ($value = $row['civicrm_address_state_province_id']) {
817 $rows[$rowNum]['civicrm_address_state_province_id'] = CRM_Core_PseudoConstant
::stateProvince($value, FALSE);
822 if (array_key_exists('civicrm_address_country_id', $row)) {
823 if ($value = $row['civicrm_address_country_id']) {
824 $rows[$rowNum]['civicrm_address_country_id'] = CRM_Core_PseudoConstant
::country($value, FALSE);
829 // convert donor sort name to link
830 if (array_key_exists('civicrm_contact_sort_name', $row) &&
831 CRM_Utils_Array
::value('civicrm_contact_sort_name', $rows[$rowNum]) &&
832 array_key_exists('civicrm_contact_id', $row)
834 $url = CRM_Utils_System
::url('civicrm/contact/view',
835 'reset=1&cid=' . $row['civicrm_contact_id'],
839 $rows[$rowNum]['civicrm_contact_sort_name_link'] = $url;
840 $rows[$rowNum]['civicrm_contact_sort_name_hover'] = ts('View Contact Summary for this Contact.');
843 // convert honoree sort name to link
844 if (array_key_exists('civicrm_contact_honor_sort_name_honor', $row) &&
845 CRM_Utils_Array
::value('civicrm_contact_honor_sort_name_honor', $rows[$rowNum]) &&
846 array_key_exists('civicrm_contact_honor_id_honor', $row)
849 $url = CRM_Utils_System
::url('civicrm/contact/view',
850 'reset=1&cid=' . $row['civicrm_contact_honor_id_honor'],
853 $rows[$rowNum]['civicrm_contact_honor_sort_name_honor_link'] = $url;
854 $rows[$rowNum]['civicrm_contact_honor_sort_name_honor_hover'] = ts('View Contact Summary for Honoree.');
857 if ($value = CRM_Utils_Array
::value('civicrm_contribution_financial_type_id', $row)) {
858 $rows[$rowNum]['civicrm_contribution_financial_type_id'] = $contributionTypes[$value];
861 if ($value = CRM_Utils_Array
::value('civicrm_contribution_contribution_status_id', $row)) {
862 $rows[$rowNum]['civicrm_contribution_contribution_status_id'] = $contributionStatus[$value];
865 if ($value = CRM_Utils_Array
::value('civicrm_contribution_payment_instrument_id', $row)) {
866 $rows[$rowNum]['civicrm_contribution_payment_instrument_id'] = $paymentInstruments[$value];
869 if ($value = CRM_Utils_Array
::value('civicrm_contribution_honor_type_id', $row)) {
870 $rows[$rowNum]['civicrm_contribution_honor_type_id'] = $honorTypes[$value];
873 if (($value = CRM_Utils_Array
::value('civicrm_contribution_total_amount_sum', $row)) &&
874 CRM_Core_Permission
::check('access CiviContribute')
876 $url = CRM_Utils_System
::url('civicrm/contact/view/contribution',
877 'reset=1&id=' . $row['civicrm_contribution_contribution_id'] . '&cid=' . $row['civicrm_contact_id'] . '&action=view&context=contribution&selectedChild=contribute',
880 $rows[$rowNum]['civicrm_contribution_total_amount_sum_link'] = $url;
881 $rows[$rowNum]['civicrm_contribution_total_amount_sum_hover'] = ts('View Details of this Contribution.');
885 // convert campaign_id to campaign title
886 if (array_key_exists('civicrm_contribution_campaign_id', $row)) {
887 if ($value = $row['civicrm_contribution_campaign_id']) {
888 $rows[$rowNum]['civicrm_contribution_campaign_id'] = $this->activeCampaigns
[$value];
893 $entryFound = $this->alterDisplayAddressFields($row, $rows, $rowNum, 'member/contributionDetail', 'List all contribution(s) for this ') ?
TRUE : $entryFound;
895 // skip looking further in rows, if first row itself doesn't
896 // have the column we need