$query = "SELECT * FROM $exportTempTable";
+ $this->instantiateTempTable($headerRows);
while (1) {
$limitQuery = $query . "
LIMIT $offset, $limit
}
$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
+ );
+ }
+
}
$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
*