Przeglądaj źródła

[Backend] Export bons de commande : correctif encodage

master
Guillaume 4 lat temu
rodzic
commit
72eae7d293
2 zmienionych plików z 59 dodań i 12 usunięć
  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 Wyświetl plik

@@ -142,7 +142,7 @@
{% endif %}

{% 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' }) }}">
<i class="fa fa-download"></i> Télécharger tous les bons de commande
</a>

+ 58
- 11
ShopBundle/Services/CsvGenerator.php Wyświetl plik

@@ -26,34 +26,72 @@ class CsvGenerator
protected $columns;
protected $titleDocument;

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


public function __construct()
{
$this->arrayToExport = array();
$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){

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

if($displayHeader){
if($displayHeader) {
array_unshift($this->arrayToExport, array(''));
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){
$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){

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

if(!$row){
if($values)$this->arrayToExport[] = array_merge($this->columns, $values);
else $this->arrayToExport[] = array();
@@ -61,21 +99,30 @@ class CsvGenerator
if($values)$this->arrayToExport[$row] = array_merge($this->columns, $values);
else $this->arrayToExport[$row] = array();
}
}

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

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

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

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

public function getReponse(){
$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');

Ładowanie…
Anuluj
Zapisz