From f654cacfcec642a6a525bdbe0f66e4f506de33c1 Mon Sep 17 00:00:00 2001 From: Deepak Srivastava Date: Tue, 4 Mar 2014 13:45:05 +0530 Subject: [PATCH] soft credit multi-line export --- CRM/Contribute/BAO/Query.php | 43 +++++++++++++++++++++--------- CRM/Contribute/Selector/Search.php | 5 ++-- CRM/Export/BAO/Export.php | 5 +++- 3 files changed, 37 insertions(+), 16 deletions(-) diff --git a/CRM/Contribute/BAO/Query.php b/CRM/Contribute/BAO/Query.php index ca06a84f0f..84d9558e29 100644 --- a/CRM/Contribute/BAO/Query.php +++ b/CRM/Contribute/BAO/Query.php @@ -194,7 +194,7 @@ class CRM_Contribute_BAO_Query { static function where(&$query) { $grouping = NULL; - self::isIncludeSoftCredits($query->_params); + self::initializeAnySoftCreditClause($query); foreach (array_keys($query->_params) as $id) { if (empty($query->_params[$id][0])) { continue; @@ -767,13 +767,32 @@ class CRM_Contribute_BAO_Query { return $from; } - static function isIncludeSoftCredits($queryParams = array()) { - foreach (array_keys($queryParams) as $id) { - if (empty($queryParams[$id][0])) { - continue; + static function initializeAnySoftCreditClause(&$query) { + if (self::initializeAnySoftCreditsVars($query->_params)) { + if ($query->_mode & CRM_Contact_BAO_Query::MODE_CONTRIBUTE) { + unset($query->_distinctComponentClause, $query->_groupByComponentClause); + $query->_rowCountClause = " count(civicrm_contribution.id)"; } - if ($queryParams[$id][0] == 'contribution_or_softcredits' && - in_array($queryParams[$id][2], array("only_scredits", "both_related", "both"))) { + } + } + + static function initializeAnySoftCreditsVars($queryParams = array()) { + static $tempTableFilled = FALSE; + if (!empty($queryParams)) { + foreach (array_keys($queryParams) as $id) { + if (empty($queryParams[$id][0])) { + continue; + } + if ($queryParams[$id][0] == 'contribution_or_softcredits' && + in_array($queryParams[$id][2], array("only_scredits", "both_related", "both"))) { + self::$_contribOrSoftCredit = $queryParams[$id][2]; + } + } + } + if (in_array(self::$_contribOrSoftCredit, + array("only_scredits", "both_related", "both"))) { + CRM_Core_Error::backtrace( 'backtrace', TRUE ); + if (!$tempTableFilled) { $tempQuery = " CREATE TEMPORARY TABLE IF NOT EXISTS contribution_search_scredit_combined AS SELECT con.id as id, con.contact_id, cso.id as filter_id, NULL as scredit_id @@ -783,14 +802,14 @@ class CRM_Contribute_BAO_Query { SELECT scredit.contribution_id as id, scredit.contact_id, scredit.id as filter_id, scredit.id as scredit_id FROM civicrm_contribution_soft as scredit"; CRM_Core_DAO::executeQuery($tempQuery); - self::$_contribOrSoftCredit = $queryParams[$id][2]; - return TRUE; + $tempTableFilled = TRUE; } - } + return TRUE; + } return FALSE; } - static function defaultReturnProperties($mode, $includeCustomFields = TRUE, $includeSoftCredits = FALSE) { + static function defaultReturnProperties($mode, $includeCustomFields = TRUE) { $properties = NULL; if ($mode & CRM_Contact_BAO_Query::MODE_CONTRIBUTE) { $properties = array( @@ -831,7 +850,7 @@ class CRM_Contribute_BAO_Query { 'contribution_batch' => 1, 'contribution_campaign_id' => 1, ); - if ($includeSoftCredits) { + if (self::initializeAnySoftCreditsVars()) { $properties = array_merge( $properties, array( 'contribution_soft_credit_name' => 1, diff --git a/CRM/Contribute/Selector/Search.php b/CRM/Contribute/Selector/Search.php index 045c21d8db..7e0d3fbbaa 100644 --- a/CRM/Contribute/Selector/Search.php +++ b/CRM/Contribute/Selector/Search.php @@ -187,13 +187,12 @@ class CRM_Contribute_Selector_Search extends CRM_Core_Selector_Base implements C // type of selector $this->_action = $action; - $this->_includeSoftCredits = CRM_Contribute_BAO_Query::isIncludeSoftCredits($this->_queryParams); + $this->_includeSoftCredits = CRM_Contribute_BAO_Query::initializeAnySoftCreditsVars($this->_queryParams); $this->_query = new CRM_Contact_BAO_Query( $this->_queryParams, CRM_Contribute_BAO_Query::defaultReturnProperties( CRM_Contact_BAO_Query::MODE_CONTRIBUTE, - FALSE, - $this->_includeSoftCredits + FALSE ), NULL, FALSE, FALSE, CRM_Contact_BAO_Query::MODE_CONTRIBUTE diff --git a/CRM/Export/BAO/Export.php b/CRM/Export/BAO/Export.php index 246e090399..6a6120bbb6 100644 --- a/CRM/Export/BAO/Export.php +++ b/CRM/Export/BAO/Export.php @@ -562,7 +562,10 @@ INSERT INTO {$componentTable} SELECT distinct gc.contact_id FROM civicrm_group_c switch ($exportMode) { case CRM_Export_Form_Select::CONTRIBUTE_EXPORT: - $groupBy = 'GROUP BY civicrm_contribution.id'; + if (!CRM_Contribute_BAO_Query::initializeAnySoftCreditsVars()) { + // apply group-by only when no soft credit columns are included + $groupBy = 'GROUP BY civicrm_contribution.id'; + } break; case CRM_Export_Form_Select::EVENT_EXPORT: -- 2.25.1