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 }