partkeepr

fork of partkeepr
git clone https://git.e1e0.net/partkeepr.git
Log | Files | Refs | Submodules | README | LICENSE

ImportController.php (2963B)


      1 <?php
      2 
      3 namespace PartKeepr\ImportBundle\Controller;
      4 
      5 use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
      6 use Symfony\Bundle\FrameworkBundle\Controller\Controller;
      7 use Symfony\Component\HttpFoundation\JsonResponse;
      8 use Symfony\Component\HttpFoundation\Request;
      9 use Symfony\Component\Routing\Annotation\Route;
     10 
     11 class ImportController extends Controller
     12 {
     13     protected function detectFileFormat()
     14     {
     15     }
     16 
     17     /**
     18      * @Route("/getSource/")
     19      *
     20      * @return JsonResponse
     21      */
     22     public function getSourceAction(Request $request)
     23     {
     24         $tempFileIri = $request->get("file");
     25 
     26         return new JsonResponse($this->extractCSVData($tempFileIri));
     27     }
     28 
     29     /**
     30      * @Route("/getPreview/")
     31      * @Method({"POST"})
     32      *
     33      * @return JsonResponse
     34      */
     35     public function getPreviewAction(Request $request)
     36     {
     37         $tempFileIri = $request->get("file");
     38 
     39         $configuration = json_decode($request->get("configuration"));
     40         $baseEntity = $request->get("baseEntity");
     41 
     42         $data = $this->extractCSVData($tempFileIri, false);
     43         $importService = $this->get("importer_service");
     44         $importService->setBaseEntity($baseEntity);
     45         $importService->setImportConfiguration($configuration);
     46         $importService->setImportData($data);
     47 
     48         try {
     49             list($entities, $logs) = $importService->import(true);
     50         } catch (\Exception $e) {
     51             $logs = [$e->getMessage()];
     52         }
     53 
     54         return new JsonResponse(["logs" => $logs]);
     55     }
     56 
     57     /**
     58      * @Route("/executeImport/")
     59      * @Method({"POST"})
     60      *
     61      * @return JsonResponse
     62      */
     63     public function importAction(Request $request)
     64     {
     65         $tempFileIri = $request->get("file");
     66 
     67         $configuration = json_decode($request->get("configuration"));
     68         $baseEntity = $request->get("baseEntity");
     69 
     70         $data = $this->extractCSVData($tempFileIri, false);
     71         $importService = $this->get("importer_service");
     72         $importService->setBaseEntity($baseEntity);
     73         $importService->setImportConfiguration($configuration);
     74         $importService->setImportData($data);
     75         list($entities, $logs) = $importService->import();
     76 
     77         return new JsonResponse(["logs" => $logs]);
     78     }
     79 
     80     protected function extractCSVData($tempFileIRI, $includeHeaders = true)
     81     {
     82         $tempUploadedFile = $this->get("api.iri_converter")->getItemFromIri($tempFileIRI);
     83         $fileContents = $this->get('partkeepr_uploadedfile_service')->getStorage($tempUploadedFile)->read($tempUploadedFile->getFullFilename());
     84 
     85         $tempFile = tempnam(sys_get_temp_dir(), "import");
     86 
     87         file_put_contents($tempFile, $fileContents);
     88 
     89         $fp = fopen($tempFile, "r");
     90 
     91         $data = [];
     92 
     93         if (!$includeHeaders) {
     94             fgetcsv($fp);
     95         }
     96 
     97         while (($row = fgetcsv($fp)) !== false) {
     98             $data[] = $row;
     99         }
    100 
    101         unlink($tempFile);
    102 
    103         return $data;
    104     }
    105 }