partkeepr

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

ExportController.php (1738B)


      1 <?php
      2 
      3 namespace PartKeepr\ExportBundle\Controller;
      4 
      5 use Exporter\Writer\CsvWriter;
      6 use Exporter\Writer\XmlExcelWriter;
      7 use FOS\RestBundle\Controller\Annotations\View;
      8 use FOS\RestBundle\Controller\FOSRestController;
      9 use Sensio\Bundle\FrameworkExtraBundle\Configuration as Routing;
     10 use Symfony\Component\HttpFoundation\Request;
     11 use Symfony\Component\HttpFoundation\Response;
     12 
     13 class ExportController extends FOSRestController
     14 {
     15     /**
     16      * Exports the given data to a given format.
     17      *
     18      * @Routing\Route("/api/export", defaults={"method" = "post","_format" = "json"})
     19      * @View()
     20      *
     21      * @return array
     22      */
     23     public function exportAction(Request $request)
     24     {
     25         $contentTypes = $request->getAcceptableContentTypes();
     26 
     27         $exporter = false;
     28         $file = tempnam(sys_get_temp_dir(), 'partkeepr_export');
     29         unlink($file);
     30 
     31         foreach ($contentTypes as $contentType) {
     32             switch ($contentType) {
     33                 case 'text/comma-separated-values':
     34                     $exporter = new CsvWriter($file, ',', '"', '\\', false);
     35                     break;
     36                 case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':
     37                     $exporter = new XmlExcelWriter($file, false);
     38                     break;
     39             }
     40         }
     41 
     42         if ($exporter === false) {
     43             throw new \Exception('No or invalid format specified');
     44         }
     45 
     46         $content = json_decode($request->getContent(), true);
     47 
     48         $exporter->open();
     49         foreach ($content as $item) {
     50             $exporter->write($item);
     51         }
     52 
     53         $exporter->close();
     54 
     55         $exportData = file_get_contents($file);
     56 
     57         return new Response($exportData, 200);
     58     }
     59 }