Skip to content

Commit

Permalink
Make csv options configurable via $options (#145)
Browse files Browse the repository at this point in the history
* Make csv options configurable via $options

* Add automatic backwards compatible versions of fputcsv and fgetcsv
  • Loading branch information
Zae authored and oscarotero committed May 9, 2017
1 parent aa8bc70 commit 9454424
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 3 deletions.
24 changes: 23 additions & 1 deletion src/Extractors/Csv.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,24 @@ class Csv extends Extractor implements ExtractorInterface
{
use HeadersExtractorTrait;

public static $options = [
'delimiter' => ",",
'enclosure' => '"',
'escape_char' => "\\"
];

/**
* {@inheritdoc}
*/
public static function fromString($string, Translations $translations, array $options = [])
{
$options += static::$options;
$handle = fopen('php://memory', 'w');

fputs($handle, $string);
rewind($handle);

while ($row = fgetcsv($handle)) {
while ($row = self::getcsv($handle, $options)) {
$context = array_shift($row);
$original = array_shift($row);

Expand All @@ -41,4 +48,19 @@ public static function fromString($string, Translations $translations, array $op

fclose($handle);
}

/**
* @param resource $handle
* @param array $options
*
* @return array
*/
private static function getcsv($handle, $options)
{
if (version_compare(PHP_VERSION, '5.3.0') >= 0) { // >= 5.3
return fgetcsv($handle, null, $options['delimiter'], $options['enclosure'], $options['escape_char']);
}

return fgetcsv($handle, null, $options['delimiter'], $options['enclosure']);
}
}
23 changes: 21 additions & 2 deletions src/Generators/Csv.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ class Csv extends Generator implements GeneratorInterface

public static $options = [
'includeHeaders' => false,
'delimiter' => ",",
'enclosure' => '"',
'escape_char' => "\\"
];

/**
Expand All @@ -25,7 +28,7 @@ public static function toString(Translations $translations, array $options = [])
$handle = fopen('php://memory', 'w');

if ($options['includeHeaders']) {
fputcsv($handle, ['', '', self::generateHeaders($translations)]);
self::fputcsv($handle, ['', '', self::generateHeaders($translations)], $options);
}

foreach ($translations as $translation) {
Expand All @@ -35,7 +38,7 @@ public static function toString(Translations $translations, array $options = [])
$line = array_merge($line, $translation->getPluralTranslations());
}

fputcsv($handle, $line);
self::fputcsv($handle, $line, $options);
}

rewind($handle);
Expand All @@ -44,4 +47,20 @@ public static function toString(Translations $translations, array $options = [])

return $csv;
}

/**
* @param resource $handle
* @param array $fields
* @param array $options
*
* @return bool|int
*/
private static function fputcsv($handle, $fields, $options)
{
if (version_compare(PHP_VERSION, '5.5.4') >= 0) { // >= 5.5.4
return fputcsv($handle, $fields, $options['delimiter'], $options['enclosure'], $options['escape_char']);
}

return fputcsv($handle, $fields, $options['delimiter'], $options['enclosure']);
}
}

0 comments on commit 9454424

Please sign in to comment.