From 082b5ba895f7326657f7adb4e03555fd3ab94e1d Mon Sep 17 00:00:00 2001 From: James Cole Date: Mon, 19 Mar 2018 09:09:02 +0100 Subject: [PATCH] Fix #1262 --- app/Import/FileProcessor/CsvProcessor.php | 18 ++++++++++++------ .../Import/Configuration/File/Roles.php | 11 +++++++---- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/app/Import/FileProcessor/CsvProcessor.php b/app/Import/FileProcessor/CsvProcessor.php index d3f15ed9b7..fa4605e1db 100644 --- a/app/Import/FileProcessor/CsvProcessor.php +++ b/app/Import/FileProcessor/CsvProcessor.php @@ -28,8 +28,8 @@ use FireflyIII\Import\Specifics\SpecificInterface; use FireflyIII\Models\ImportJob; use FireflyIII\Repositories\ImportJob\ImportJobRepositoryInterface; use Illuminate\Support\Collection; -use Iterator; use League\Csv\Reader; +use League\Csv\Statement; use Log; /** @@ -200,29 +200,35 @@ class CsvProcessor implements FileProcessorInterface } /** - * @return Iterator + * @return array * * @throws \League\Csv\Exception * @throws \League\Csv\Exception */ - private function getImportArray(): Iterator + private function getImportArray(): array { $content = $this->repository->uploadFileContents($this->job); $config = $this->getConfig(); $reader = Reader::createFromString($content); $delimiter = $config['delimiter'] ?? ','; $hasHeaders = isset($config['has-headers']) ? $config['has-headers'] : false; + $offset = 0; if ('tab' === $delimiter) { $delimiter = "\t"; // @codeCoverageIgnore } $reader->setDelimiter($delimiter); if ($hasHeaders) { - $reader->setHeaderOffset(0); // @codeCoverageIgnore + $offset = 1; + } + $stmt = (new Statement)->offset($offset); + $records = $stmt->process($reader); + $return = []; + foreach ($records as $record) { + $return[] = $record; } - $results = $reader->getRecords(); Log::debug('Created a CSV reader.'); - return $results; + return $return; } /** diff --git a/app/Support/Import/Configuration/File/Roles.php b/app/Support/Import/Configuration/File/Roles.php index aa111c41b7..c5be1c3a6e 100644 --- a/app/Support/Import/Configuration/File/Roles.php +++ b/app/Support/Import/Configuration/File/Roles.php @@ -58,19 +58,22 @@ class Roles implements ConfigurationInterface $content = $this->repository->uploadFileContents($this->job); $config = $this->getConfig(); $headers = []; + $offset = 0; // create CSV reader. $reader = Reader::createFromString($content); $reader->setDelimiter($config['delimiter']); + // CSV headers. Ignore reader. Simply get the first row. if ($config['has-headers']) { - // get headers: - $reader->setHeaderOffset(0); - $headers = $reader->getHeader(); + $offset = 1; + $stmt = (new Statement)->limit(1)->offset(0); + $records = $stmt->process($reader); + $headers = $records->fetchOne(0); } // example rows: - $stmt = (new Statement)->limit(intval(config('csv.example_rows', 5)))->offset(0); + $stmt = (new Statement)->limit(intval(config('csv.example_rows', 5)))->offset($offset); // set data: $roles = $this->getRoles(); asort($roles);