config = $config; $this->reportValidator = $reportValidator; $this->providerFactory = $providerFactory; } /** * {@inheritdoc} */ public function write(WriteInterface $directory, $path) { $errorsList = []; foreach ($this->config->get() as $file) { $provider = reset($file['providers']); if (isset($provider['parameters']['name'])) { $error = $this->reportValidator->validate($provider['parameters']['name']); if ($error) { $errorsList[] = $error; continue; } } /** @var $providerObject */ $providerObject = $this->providerFactory->create($provider['class']); $fileName = $provider['parameters'] ? $provider['parameters']['name'] : $provider['name']; $fileFullPath = $path . $fileName . '.csv'; $fileData = $providerObject->getReport(...array_values($provider['parameters'])); $stream = $directory->openFile($fileFullPath, 'w+'); $stream->lock(); $headers = []; foreach ($fileData as $row) { if (!$headers) { $headers = array_keys($row); $stream->writeCsv($headers); } $stream->writeCsv($row); } $stream->unlock(); $stream->close(); } if ($errorsList) { $errorStream = $directory->openFile($path . $this->errorsFileName, 'w+'); foreach ($errorsList as $error) { $errorStream->lock(); $errorStream->writeCsv($error); $errorStream->unlock(); } $errorStream->close(); } return true; } }