<?php namespace App\Controller; use App\Entity\Import; use App\Form\Type\ImportFormType; use Doctrine\ORM\EntityManagerInterface; use FOS\UserBundle\Model\UserManagerInterface; use FOS\UserBundle\Util\UserManipulator; use Sonata\AdminBundle\Controller\CRUDController; use Symfony\Component\HttpFoundation\Response; class ImportController extends CRUDController { public function listAction() { $import = new Import(); $import->setUser($this->getUser()); $form = $this->createForm(ImportFormType::class, $import); $form->handleRequest($this->getRequest()); if ($form->isSubmitted() && $form->isValid()) { $import = $form->getData(); $media = $import->getMedia(); $provider = $this->getProvider($media); $this->em->persist($import); $this->em->flush(); // TODO : finir import data from file $data = $this->parseCSV($provider->generatePath($media), $media->getProviderReference()); $batchSize = 20; $cptLigne = 1; $errors = []; // Processing on each row of data foreach ($data as $row) { // @TODO } if (empty($errors)) { $import->setEnabled(true); $this->em->persist($import); $this->em->flush(); $this->addFlash( 'success', 'Import effectué avec succès !' ); $referer = $this->getRequest()->headers->get('referer'); if ($referer && !$this->getRequest()->isXmlHttpRequest()) { return $this->redirect($referer); } elseif (!$this->getRequest()->isXmlHttpRequest()) { return new Response('', Response::HTTP_BAD_REQUEST); } } else { $this->addFlash( 'error', 'Import effectué avec succès !' ); } } return $this->renderWithExtraParams('admin/import.html.twig', array( 'action' => 'list', 'form' => $form->createView() )); } private function parseCSV($filePath, $fileName, $ignoreFirstLine = false) { $finder = new Finder(); $finder->files() ->in($filePath) ->name($fileName) ; foreach ($finder as $file) { $csv = $file; } $rows = array(); if (($handle = fopen($csv->getRealPath(), "r")) !== FALSE) { $i = 0; while (($data = fgetcsv($handle, null, ";")) !== FALSE) { $i++; if ($ignoreFirstLine && $i == 1) { continue; } $rows[] = $data; } fclose($handle); } return $rows; } }