This commit is contained in:
James Cole 2018-03-19 09:09:02 +01:00
parent e06361d5d7
commit 082b5ba895
No known key found for this signature in database
GPG Key ID: C16961E655E74B5E
2 changed files with 19 additions and 10 deletions

View File

@ -28,8 +28,8 @@ use FireflyIII\Import\Specifics\SpecificInterface;
use FireflyIII\Models\ImportJob; use FireflyIII\Models\ImportJob;
use FireflyIII\Repositories\ImportJob\ImportJobRepositoryInterface; use FireflyIII\Repositories\ImportJob\ImportJobRepositoryInterface;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use Iterator;
use League\Csv\Reader; use League\Csv\Reader;
use League\Csv\Statement;
use Log; use Log;
/** /**
@ -200,29 +200,35 @@ class CsvProcessor implements FileProcessorInterface
} }
/** /**
* @return Iterator * @return array
* *
* @throws \League\Csv\Exception * @throws \League\Csv\Exception
* @throws \League\Csv\Exception * @throws \League\Csv\Exception
*/ */
private function getImportArray(): Iterator private function getImportArray(): array
{ {
$content = $this->repository->uploadFileContents($this->job); $content = $this->repository->uploadFileContents($this->job);
$config = $this->getConfig(); $config = $this->getConfig();
$reader = Reader::createFromString($content); $reader = Reader::createFromString($content);
$delimiter = $config['delimiter'] ?? ','; $delimiter = $config['delimiter'] ?? ',';
$hasHeaders = isset($config['has-headers']) ? $config['has-headers'] : false; $hasHeaders = isset($config['has-headers']) ? $config['has-headers'] : false;
$offset = 0;
if ('tab' === $delimiter) { if ('tab' === $delimiter) {
$delimiter = "\t"; // @codeCoverageIgnore $delimiter = "\t"; // @codeCoverageIgnore
} }
$reader->setDelimiter($delimiter); $reader->setDelimiter($delimiter);
if ($hasHeaders) { 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.'); Log::debug('Created a CSV reader.');
return $results; return $return;
} }
/** /**

View File

@ -58,19 +58,22 @@ class Roles implements ConfigurationInterface
$content = $this->repository->uploadFileContents($this->job); $content = $this->repository->uploadFileContents($this->job);
$config = $this->getConfig(); $config = $this->getConfig();
$headers = []; $headers = [];
$offset = 0;
// create CSV reader. // create CSV reader.
$reader = Reader::createFromString($content); $reader = Reader::createFromString($content);
$reader->setDelimiter($config['delimiter']); $reader->setDelimiter($config['delimiter']);
// CSV headers. Ignore reader. Simply get the first row.
if ($config['has-headers']) { if ($config['has-headers']) {
// get headers: $offset = 1;
$reader->setHeaderOffset(0); $stmt = (new Statement)->limit(1)->offset(0);
$headers = $reader->getHeader(); $records = $stmt->process($reader);
$headers = $records->fetchOne(0);
} }
// example rows: // 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: // set data:
$roles = $this->getRoles(); $roles = $this->getRoles();
asort($roles); asort($roles);