diff --git a/classes/DataWarehouse/Export/FileManager.php b/classes/DataWarehouse/Export/FileManager.php index 25d6189b9f..adee61ced0 100644 --- a/classes/DataWarehouse/Export/FileManager.php +++ b/classes/DataWarehouse/Export/FileManager.php @@ -4,6 +4,7 @@ use CCR\Loggable; use DataWarehouse\Data\BatchDataset; +use DataWarehouse\Data\RawStatisticsConfiguration; use DataWarehouse\Export\FileWriter\FileWriterFactory; use Exception; use Log; @@ -34,6 +35,12 @@ class FileManager extends Loggable */ private $fileWriterFactory; + /** + * Raw statistics configuration. + * @var \DataWarehouse\Data\RawStatisticsConfiguration; + */ + private $rawStatsConfig; + /** * Construct a new file manager. * @@ -46,6 +53,8 @@ public function __construct(Log $logger = null) $this->fileWriterFactory = new FileWriterFactory($logger); parent::__construct($logger); + $this->rawStatsConfig = RawStatisticsConfiguration::factory(); + try { $this->exportDir = xd_utilities\getConfiguration( 'data_warehouse_export', @@ -243,6 +252,15 @@ public function createZipFile($dataFile, array $request) )); } + $readmeText = $this->getReadmeText($request['realm']); + if (!$zip->addFromString('README.txt', $readmeText)) { + throw new Exception(sprintf( + 'Failed to add "README.txt" to zip file "%s"', + $dataFile, + $zipFile + )); + } + if (!$zip->close()) { throw new Exception(sprintf( 'Failed to close zip file "%s"', @@ -309,4 +327,27 @@ public function removeDeletedRequests(array $deletedRequestIds) } } } + + /** + * Get the contents for README.txt for a realm. + * + * @param string $realm The name of a realm. + * @return string + */ + private function getReadmeText($realm) + { + $fields = $this->rawStatsConfig->getBatchExportFieldDefinitions($realm); + + $text = "{$realm} Realm Fields\n\n"; + + foreach ($fields as $field) { + $text .= sprintf( + "%s: %s\n", + $field['name'], + $field['documentation'] + ); + } + + return $text; + } } diff --git a/tests/artifacts/xdmod/component/export/file_manager/input/export-requests.json b/tests/artifacts/xdmod/component/export/file_manager/input/export-requests.json index a4df1e1dd2..38791bbd30 100644 --- a/tests/artifacts/xdmod/component/export/file_manager/input/export-requests.json +++ b/tests/artifacts/xdmod/component/export/file_manager/input/export-requests.json @@ -3,7 +3,7 @@ { "id": 1, "user_id": 1, - "realm": "jobs", + "realm": "Jobs", "start_date": "2018-01-01", "end_date": "2018-02-28", "export_file_format": "CSV", @@ -20,7 +20,7 @@ { "id": 2, "user_id": 1, - "realm": "jobs", + "realm": "Jobs", "start_date": "2001-01-01", "end_date": "2001-01-02", "export_file_format": "JSON", diff --git a/tests/component/lib/Export/FileManagerTest.php b/tests/component/lib/Export/FileManagerTest.php index 8c9af20117..c8de57f28f 100644 --- a/tests/component/lib/Export/FileManagerTest.php +++ b/tests/component/lib/Export/FileManagerTest.php @@ -191,9 +191,10 @@ public function testCreateZipFile(array $request) $zip = new ZipArchive(); $openCode = $zip->open($zipFile, ZipArchive::CHECKCONS); $this->assertTrue($openCode, 'Open zip file'); - $this->assertEquals(1, $zip->numFiles, 'File count in zip file'); + $this->assertEquals(2, $zip->numFiles, 'File count in zip file'); $dataFileName = self::$fileManager->getDataFileName($request); $this->assertEquals($dataFileName, $zip->getNameIndex(0), 'Data file name'); + $this->assertEquals('README.txt', $zip->getNameIndex(1), 'README file name'); $fileData = $zip->getFromName($dataFileName); $this->assertEquals($testData, $fileData, 'Data file contents'); $zip->close();