Skip to content

Commit

Permalink
Start passing around processor instead of query object
Browse files Browse the repository at this point in the history
  • Loading branch information
eileenmcnaughton committed Jul 16, 2018
1 parent 07cdb0a commit 130d6a0
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 30 deletions.
50 changes: 21 additions & 29 deletions CRM/Export/BAO/Export.php
Original file line number Diff line number Diff line change
Expand Up @@ -556,15 +556,7 @@ public static function exportComponents(
CRM_Contact_BAO_ProximityQuery::fixInputParams($params);
}

$query = new CRM_Contact_BAO_Query($params, $returnProperties, NULL,
FALSE, FALSE, $queryMode,
FALSE, TRUE, TRUE, NULL, $queryOperator
);

//sort by state
//CRM-15301
$query->_sort = $order;
list($select, $from, $where, $having) = $query->query();
list($query, $select, $from, $where, $having) = $processor->runQuery($params, $order, $queryOperator, $returnProperties);

if ($mergeSameHousehold == 1) {
if (empty($returnProperties['id'])) {
Expand Down Expand Up @@ -687,7 +679,7 @@ public static function exportComponents(
// for CRM-3157 purposes
$i18n = CRM_Core_I18n::singleton();

list($outputColumns, $headerRows, $sqlColumns, $metadata) = self::getExportStructureArrays($returnProperties, $query, $relationQuery, $selectedPaymentFields);
list($outputColumns, $headerRows, $sqlColumns, $metadata) = self::getExportStructureArrays($returnProperties, $processor, $relationQuery, $selectedPaymentFields);

$limitReached = FALSE;
while (!$limitReached) {
Expand Down Expand Up @@ -837,7 +829,7 @@ public static function exportComponents(
// where other header definitions take place.
$headerRows = array_merge($headerRows, $paymentHeaders);
foreach (array_keys($paymentHeaders) as $paymentHdr) {
self::sqlColumnDefn($query, $sqlColumns, $paymentHdr);
self::sqlColumnDefn($processor, $sqlColumns, $paymentHdr);
}
}

Expand Down Expand Up @@ -1065,15 +1057,15 @@ public static function exportCustom($customSearchClass, $formValues, $order) {
}

/**
* @param $query
* @param \CRM_Export_BAO_ExportProcessor $processor
* @param $sqlColumns
* @param $field
*/
public static function sqlColumnDefn($query, &$sqlColumns, $field) {
public static function sqlColumnDefn($processor, &$sqlColumns, $field) {
if (substr($field, -4) == '_a_b' || substr($field, -4) == '_b_a') {
return;
}
$queryFields = $query->_fields;
$queryFields = $processor->getQueryFields();

$fieldName = CRM_Utils_String::munge(strtolower($field), '_', 64);
if ($fieldName == 'id') {
Expand Down Expand Up @@ -1801,17 +1793,17 @@ public static function componentPaymentFields() {
* @param array $headerRows
* @param array $sqlColumns
* Columns to go in the temp table.
* @param CRM_Contact_BAO_Query $query
* @param \CRM_Export_BAO_ExportProcessor $processor
* @param array|string $value
* @param array $phoneTypes
* @param array $imProviders
* @param string $relationQuery
* @param array $selectedPaymentFields
* @return array
*/
public static function setHeaderRows($field, $headerRows, $sqlColumns, $query, $value, $phoneTypes, $imProviders, $relationQuery, $selectedPaymentFields) {
public static function setHeaderRows($field, $headerRows, $sqlColumns, $processor, $value, $phoneTypes, $imProviders, $relationQuery, $selectedPaymentFields) {

$queryFields = $query->_fields;
$queryFields = $processor->getQueryFields();
// Split campaign into 2 fields for id and title
if (substr($field, -14) == 'campaign_title') {
$headerRows[] = ts('Campaign Title');
Expand Down Expand Up @@ -1849,22 +1841,22 @@ public static function setHeaderRows($field, $headerRows, $sqlColumns, $query, $

$headerRows[] = $headerName;

self::sqlColumnDefn($query, $sqlColumns, $headerName);
self::sqlColumnDefn($processor, $sqlColumns, $headerName);
}
elseif ($relationField == 'phone_type_id') {
$headerName = $field . '-' . 'Phone Type';
$headerRows[] = $headerName;
self::sqlColumnDefn($query, $sqlColumns, $headerName);
self::sqlColumnDefn($processor, $sqlColumns, $headerName);
}
elseif ($relationField == 'provider_id') {
$headerName = $field . '-' . 'Im Service Provider';
$headerRows[] = $headerName;
self::sqlColumnDefn($query, $sqlColumns, $headerName);
self::sqlColumnDefn($processor, $sqlColumns, $headerName);
}
elseif ($relationField == 'state_province_id') {
$headerName = $field . '-' . 'state_province_id';
$headerRows[] = $headerName;
self::sqlColumnDefn($query, $sqlColumns, $headerName);
self::sqlColumnDefn($processor, $sqlColumns, $headerName);
}
elseif (is_array($relationValue) && $relationField == 'location') {
// fix header for location type case
Expand All @@ -1884,7 +1876,7 @@ public static function setHeaderRows($field, $headerRows, $sqlColumns, $query, $
}
$headerName = $field . '-' . $hdr;
$headerRows[] = $headerName;
self::sqlColumnDefn($query, $sqlColumns, $headerName);
self::sqlColumnDefn($processor, $sqlColumns, $headerName);
}
}
}
Expand All @@ -1898,7 +1890,7 @@ public static function setHeaderRows($field, $headerRows, $sqlColumns, $query, $
$headerRows[] = $field;
}

self::sqlColumnDefn($query, $sqlColumns, $field);
self::sqlColumnDefn($processor, $sqlColumns, $field);

return array($headerRows, $sqlColumns);
}
Expand All @@ -1913,7 +1905,7 @@ public static function setHeaderRows($field, $headerRows, $sqlColumns, $query, $
* as a step on the refactoring path rather than how it should be.
*
* @param array $returnProperties
* @param CRM_Contact_BAO_Contact $query
* @param \CRM_Export_BAO_ExportProcessor $processor
* @param string $relationQuery
* @param array $selectedPaymentFields
* @return array
Expand All @@ -1932,16 +1924,16 @@ public static function setHeaderRows($field, $headerRows, $sqlColumns, $query, $
* - b) this code is old & outdated. Submit your answers to circular bin or better
* yet find a way to comment them for posterity.
*/
public static function getExportStructureArrays($returnProperties, $query, $relationQuery, $selectedPaymentFields) {
public static function getExportStructureArrays($returnProperties, $processor, $relationQuery, $selectedPaymentFields) {
$metadata = $headerRows = $outputColumns = $sqlColumns = array();
$phoneTypes = CRM_Core_PseudoConstant::get('CRM_Core_DAO_Phone', 'phone_type_id');
$imProviders = CRM_Core_PseudoConstant::get('CRM_Core_DAO_IM', 'provider_id');

$queryFields = $query->_fields;
$queryFields = $processor->getQueryFields();
foreach ($returnProperties as $key => $value) {
if ($key != 'location' || !is_array($value)) {
$outputColumns[$key] = $value;
list($headerRows, $sqlColumns) = self::setHeaderRows($key, $headerRows, $sqlColumns, $query, $value, $phoneTypes, $imProviders, $relationQuery, $selectedPaymentFields);
list($headerRows, $sqlColumns) = self::setHeaderRows($key, $headerRows, $sqlColumns, $processor, $value, $phoneTypes, $imProviders, $relationQuery, $selectedPaymentFields);
}
else {
foreach ($value as $locationType => $locationFields) {
Expand All @@ -1965,8 +1957,8 @@ public static function getExportStructureArrays($returnProperties, $query, $rela
// Warning: shame inducing hack.
$metadata[$daoFieldName]['pseudoconstant']['var'] = 'imProviders';
}
self::sqlColumnDefn($query, $sqlColumns, $outputFieldName);
list($headerRows, $sqlColumns) = self::setHeaderRows($outputFieldName, $headerRows, $sqlColumns, $query, $value, $phoneTypes, $imProviders, $relationQuery, $selectedPaymentFields);
self::sqlColumnDefn($processor, $sqlColumns, $outputFieldName);
list($headerRows, $sqlColumns) = self::setHeaderRows($outputFieldName, $headerRows, $sqlColumns, $processor, $value, $phoneTypes, $imProviders, $relationQuery, $selectedPaymentFields);
if ($actualDBFieldName == 'country' || $actualDBFieldName == 'world_region') {
$metadata[$daoFieldName] = array('context' => 'country');
}
Expand Down
42 changes: 42 additions & 0 deletions CRM/Export/BAO/ExportProcessor.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,27 @@ class CRM_Export_BAO_ExportProcessor {
*/
protected $exportMode;

/**
* Array of fields in the main query.
*
* @var array
*/
protected $queryFields = [];

/**
* @return array
*/
public function getQueryFields() {
return $this->queryFields;
}

/**
* @param array $queryFields
*/
public function setQueryFields($queryFields) {
$this->queryFields = $queryFields;
}

/**
* CRM_Export_BAO_ExportProcessor constructor.
*
Expand Down Expand Up @@ -118,4 +139,25 @@ public function setExportMode($exportMode) {
$this->exportMode = $exportMode;
}

/**
* @param $params
* @param $order
* @param $queryOperator
* @param $returnProperties
* @return array
*/
public function runQuery($params, $order, $queryOperator, $returnProperties) {
$query = new CRM_Contact_BAO_Query($params, $returnProperties, NULL,
FALSE, FALSE, $this->getQueryMode(),
FALSE, TRUE, TRUE, NULL, $queryOperator
);

//sort by state
//CRM-15301
$query->_sort = $order;
list($select, $from, $where, $having) = $query->query();
$this->setQueryFields($query->_fields);
return array($query, $select, $from, $where, $having);
}

}
4 changes: 3 additions & 1 deletion tests/phpunit/CRM/Export/BAO/ExportTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -192,8 +192,10 @@ public function testGetExportStructureArrays() {
$pattern = '/as `?([^`,]*)/';
$queryFieldAliases = array();
preg_match_all($pattern, $select, $queryFieldAliases, PREG_PATTERN_ORDER);
$processor = new CRM_Export_BAO_ExportProcessor(CRM_Contact_BAO_Query::MODE_CONTRIBUTE);
$processor->setQueryFields($query->_fields);

list($outputFields) = CRM_Export_BAO_Export::getExportStructureArrays($returnProperties, $query, $contactRelationshipTypes, '', array());
list($outputFields) = CRM_Export_BAO_Export::getExportStructureArrays($returnProperties, $processor, $contactRelationshipTypes, '', array());
foreach (array_keys($outputFields) as $fieldAlias) {
if ($fieldAlias == 'Home-country') {
$this->assertTrue(in_array($fieldAlias . '_id', $queryFieldAliases[1]), 'Country is subject to some funky translate so we make sure country id is present');
Expand Down

0 comments on commit 130d6a0

Please sign in to comment.