Skip to content

Commit

Permalink
Merge pull request #15440 from eileenmcnaughton/ex_zero
Browse files Browse the repository at this point in the history
dev/core#1293 Still output csv file on export, even if no rows are in it
  • Loading branch information
seamuslee001 committed Oct 8, 2019
2 parents 41c0e58 + e2ea63f commit f1ee483
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 8 deletions.
39 changes: 31 additions & 8 deletions CRM/Export/BAO/ExportProcessor.php
Expand Up @@ -2376,6 +2376,7 @@ public function writeCSVFromTable() {

$query = "SELECT * FROM $exportTempTable";

$this->instantiateTempTable($headerRows);
while (1) {
$limitQuery = $query . "
LIMIT $offset, $limit
Expand All @@ -2395,16 +2396,38 @@ public function writeCSVFromTable() {
}
$componentDetails[] = $row;
}
CRM_Core_Report_Excel::writeCSVFile($this->getExportFileName(),
$headerRows,
$componentDetails,
NULL,
$writeHeader
);

$writeHeader = FALSE;
$this->writeRows($headerRows, $componentDetails);

$offset += $limit;
}
}

/**
* Set up the temp table.
*
* @param array $headerRows
*/
protected function instantiateTempTable(array $headerRows) {
CRM_Utils_System::download(CRM_Utils_String::munge($this->getExportFileName()),
'text/x-csv',
CRM_Core_DAO::$_nullObject,
'csv',
FALSE
);
CRM_Core_Report_Excel::makeCSVTable($headerRows, [], NULL, TRUE, TRUE);
}

/**
* @param array $headerRows
* @param array $componentDetails
*/
protected function writeRows(array $headerRows, array $componentDetails) {
CRM_Core_Report_Excel::writeCSVFile($this->getExportFileName(),
$headerRows,
$componentDetails,
NULL,
FALSE
);
}

}
25 changes: 25 additions & 0 deletions tests/phpunit/CRM/Export/BAO/ExportTest.php
Expand Up @@ -1178,6 +1178,31 @@ public function testMergeSameAddressGreetingOptions() {
$this->assertCount(2, $this->csv);
}

/**
* Test exporting when no rows are retrieved.
*
* @throws \CRM_Core_Exception
* @throws \League\Csv\Exception
*/
public function testExportNoRows() {
$contactA = $this->callAPISuccess('contact', 'create', [
'first_name' => 'John',
'last_name' => 'Doe',
'contact_type' => 'Individual',
]);
$this->doExportTest([
'selectAll' => TRUE,
'ids' => [$contactA['id']],
'exportParams' => [
'postal_mailing_export' => [
'postal_mailing_export' => TRUE,
],
'mergeSameAddress' => TRUE,
],
]);
$this->assertEquals('Contact ID', $this->csv->getHeader()[0]);
}

/**
* Test that deceased and do not mail contacts are removed from contacts before
*
Expand Down

0 comments on commit f1ee483

Please sign in to comment.