|
- <?php
-
- namespace Lc\ShopBundle\Services;
-
- use Cocur\Slugify\Slugify;
- use Doctrine\ORM\EntityManagerInterface;
- use EasyCorp\Bundle\EasyAdminBundle\Configuration\ConfigManager;
- use Lc\ShopBundle\Context\MerchantUtilsInterface;
- use Lc\ShopBundle\Context\PageInterface;
- use Lc\ShopBundle\Context\PointSaleInterface;
- use Lc\ShopBundle\Context\ReminderInterface;
- use Lc\ShopBundle\Context\TaxRateInterface;
- use Lc\ShopBundle\Context\UnitInterface;
- use Lc\ShopBundle\Context\UserInterface;
- use Lc\ShopBundle\Context\UserPointSaleInterface;
- use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
- use Symfony\Component\HttpFoundation\ParameterBag;
- use Symfony\Component\HttpFoundation\Session\SessionInterface;
- use Symfony\Component\HttpFoundation\StreamedResponse;
- use Symfony\Contracts\Translation\TranslatorInterface;
-
- class CsvGenerator
- {
-
- protected $arrayToExport;
- 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) {
- 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->row($columns);
- }
-
- public function cell($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();
- }else{
- 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 () {
- $this->createCsv('php://output');
- });
-
- $response->headers->set('Content-Type', 'application/force-download');
- $response->headers->set('Content-Disposition', 'attachment; filename="'.$this->titleDocument.'.csv"');
- return $response;
- }
- private function formatTitle($str) {
- $str = str_replace("-", ' ', $str);
- $str = preg_replace('/\s+/', '_',$str);;
- //$str = str_replace(" ", '_', $str);
- $str = iconv('UTF-8', 'ASCII//TRANSLIT', $str);
-
- return $str;
- }
-
-
-
-
-
-
- }
|