Browse Source

[Backend] Export bons de commande : correctif encodage

master
Guillaume 4 years ago
parent
commit
72eae7d293
2 changed files with 59 additions and 12 deletions
  1. +1
    -1
      ShopBundle/Resources/views/backend/default/list.html.twig
  2. +58
    -11
      ShopBundle/Services/CsvGenerator.php

+ 1
- 1
ShopBundle/Resources/views/backend/default/list.html.twig View File

{% endif %} {% endif %}


{% if _entity_config['list']['btn_download_purchase_order_archive'] is defined %} {% if _entity_config['list']['btn_download_purchase_order_archive'] is defined %}
<a class="float-right btn-sm btn-success action-confirm"
<a class="float-right btn-sm btn-success"
href="{{ path('easyadmin', { entity: 'Supplier', action: 'exportOrderPurchasesAsArchive' }) }}"> href="{{ path('easyadmin', { entity: 'Supplier', action: 'exportOrderPurchasesAsArchive' }) }}">
<i class="fa fa-download"></i> Télécharger tous les bons de commande <i class="fa fa-download"></i> Télécharger tous les bons de commande
</a> </a>

+ 58
- 11
ShopBundle/Services/CsvGenerator.php View File

protected $columns; protected $columns;
protected $titleDocument; protected $titleDocument;


protected $convertEncoding ;
protected $fromEncoding ;
protected $toEncoding ;



public function __construct() public function __construct()
{ {
$this->arrayToExport = array(); $this->arrayToExport = array();
$this->titleDocument = 'csv_file'; $this->titleDocument = 'csv_file';
$this->convertEncoding = false ;
$this->fromEncoding = 'UTF-8' ;
$this->toEncoding = 'ISO-8859-1' ;
}

public function enableConvertEncoding($toEncoding, $fromEncoding = null)
{
$this->convertEncoding = true ;
$this->toEncoding = $toEncoding ;

if(!is_null($fromEncoding)) {
$this->fromEncoding = $fromEncoding ;
}
}

public function encode($value)
{
if($this->convertEncoding) {
return mb_convert_encoding($value, $this->toEncoding, $this->fromEncoding) ;
}

return $value ;
}

public function encodeArray($array)
{
return array_map(function($value) {
return $this->encode($value) ;
}, $array) ;
} }


public function setTitle($title, $displayHeader = false){ public function setTitle($title, $displayHeader = false){


$this->titleDocument = $this->formatTitle($title); $this->titleDocument = $this->formatTitle($title);


if($displayHeader){
if($displayHeader) {
array_unshift($this->arrayToExport, array('')); array_unshift($this->arrayToExport, array(''));
array_unshift($this->arrayToExport, array($title)); array_unshift($this->arrayToExport, array($title));
} }
} }


public function setColumns($columns, $displayLegend = true){
$this->columns =array_fill_keys(array_keys($columns), null);;
if($displayLegend)$this->arrayToExport[] = $columns;
public function setColumns($columns, $displayLegend = true) {
$this->columns = array_fill_keys(array_keys($columns), null);
if($displayLegend) $this->row($columns);
} }


public function cell($column, $value){ public function cell($column, $value){
$this->arrayToExport[] = array_merge($this->columns, array($column =>$value));
$this->arrayToExport[] = array_merge(
$this->columns,
array($column => $this->encode($value))
);
} }


public function row($values = null, $row = false){ public function row($values = null, $row = false){


$values = $this->encodeArray($values) ;

if(!$row){ if(!$row){
if($values)$this->arrayToExport[] = array_merge($this->columns, $values); if($values)$this->arrayToExport[] = array_merge($this->columns, $values);
else $this->arrayToExport[] = array(); else $this->arrayToExport[] = array();
if($values)$this->arrayToExport[$row] = array_merge($this->columns, $values); if($values)$this->arrayToExport[$row] = array_merge($this->columns, $values);
else $this->arrayToExport[$row] = array(); else $this->arrayToExport[$row] = array();
} }
}


public function emptyRow()
{
$this->row([]) ;
} }


public function dump(){ public function dump(){
dump($this->arrayToExport); dump($this->arrayToExport);
} }


public function createCsv($path)
{
$handle = fopen($path, 'w+');

foreach ($this->arrayToExport as $line) {
fputcsv($handle, $line, ';', ' ');
}
fclose($handle);
}

public function getReponse(){ public function getReponse(){
$response = new StreamedResponse(function () { $response = new StreamedResponse(function () {
$handle = fopen('php://output', 'r+');

foreach ($this->arrayToExport as $line) {
fputcsv($handle, $line, ';', ' ');
}
fclose($handle);
$this->createCsv('php://output');
}); });


$response->headers->set('Content-Type', 'application/force-download'); $response->headers->set('Content-Type', 'application/force-download');

Loading…
Cancel
Save