src/Controller/PlantController.php line 50

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Symfony\Component\Routing\Annotation\Route;
  7. use Symfony\Component\HttpFoundation\BinaryFileResponse;
  8. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  9. use Symfony\Component\Filesystem\Exception\IOExceptionInterface;
  10. use Symfony\Component\Filesystem\Filesystem;
  11. use Symfony\Component\Filesystem\Path;
  12. use Symfony\Component\Serializer\SerializerInterface;
  13. use Symfony\Component\String\Slugger\AsciiSlugger;
  14. use Gotenberg\Gotenberg;
  15. class PlantController extends AbstractController
  16. {
  17.     /**
  18.      * @Route("/plant/lookup", name="app_plant_lookup")
  19.      */
  20.     public function lookup(Request $request): Response
  21.     {
  22.         $data = [];
  23.         $content json_decode($request->getContent(), true);
  24.         if(array_key_exists('lookup'$content))
  25.         {   
  26.             $pattern trim($content['lookup']) .'%';
  27.             // $result = \App\Api\Operations\PlantMoleculeLookup::execute($pattern)->data->molecule_plant_data;
  28.             $result = \App\Api\Operations\plantnameLookup::execute($pattern)->data->plant_view;
  29.             foreach($result as $item)
  30.             {
  31.                 $data[] = ['id' => $item->plantnameslug'name' => $item->plantname];
  32.             }
  33.         }
  34.         return $this->render('default/_lookup_items.html.twig', [
  35.             'data' => $data,
  36.         ]); 
  37.             
  38.     }
  39.     /**
  40.      * @Route("/plant/unitis-allergen", name="app_plant_unitis_allergen")
  41.      */
  42.     public function unitisAllergenList(): Response
  43.     {
  44.         $arr = [];
  45.         $result = \App\Api\Operations\UnitisAllergen::execute()->data->unitis_allergen;
  46.         foreach($result as $item)
  47.         {
  48.             if(!isset($arr[$item->plantname]))
  49.             {
  50.                 $arr[$item->plantname] = [];
  51.             }
  52.             $arr[$item->plantname][] = $item;
  53.         }
  54.         return $this->render('default/unitis_allergen.html.twig', [
  55.             'result' => $arr,
  56.         ]);
  57.     }
  58.     /**
  59.      * @Route("/plant/molecule/{uuid}/export", name="app_plant_molecule_export")
  60.      */
  61.     public function export(string $uuid): Response
  62.     {  
  63.         try
  64.         {
  65.             $filesystem = new Filesystem();
  66.             $tmpName $filesystem->tempnam('tmp/''');
  67.             $url 'http://ncstox.com:9000' $this->generateUrl('app_plant_molecule_render_pdf', ['uuid' => $uuid]);
  68.             // dump($url);
  69.             $request Gotenberg::chromium('http://135.125.235.64:3000')
  70.                 ->outputFilename($uuid)
  71.                 ->url($url);
  72.             // dd($request);
  73.             $filename Gotenberg::save($request$tmpName);   
  74.             // dd($filename);
  75.         }catch(\Exception $e)
  76.         {
  77.             dd($e->getMessage());
  78.         }
  79.         return (new BinaryFileResponse($filenameResponse::HTTP_OK))
  80.             ->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENTsprintf('%s.pdf'$uuid));
  81. /*        $plantList = [];
  82.         $result = \App\Api\Operations\MoleculePlantsByPk::execute($uuid)->data->molecule_struct[0];
  83.         foreach($result->plants as $item)
  84.         {   
  85.             if(!isset($plantList[$item->plantname]))
  86.             {
  87.                 $plantList[$item->plantname] = $item->plantname;   
  88.             }
  89.         }
  90.         return $this->render('pdf/plant.html.twig', array(
  91.             'plantList' => $plantList,
  92.             'molname'   => $result->molname
  93.         ));*/
  94.     }
  95.     /**
  96.      * @Route("/plant/molecule/{uuid}/render_pdf", name="app_plant_molecule_render_pdf")
  97.      */
  98.     public function renderPdf(string $uuid): Response
  99.     {
  100.         $plantList = [];
  101.         $result = \App\Api\Operations\MoleculePlantsByPk::execute($uuid)->data->molecule_struct[0];
  102.         foreach($result->plants as $item)
  103.         {   
  104.             if(!isset($plantList[$item->plantname]))
  105.             {
  106.                 $plantList[$item->plantname] = $item->plantname;   
  107.             }
  108.         }
  109.         return $this->render('pdf/plant.html.twig', [
  110.             'plantList' => $plantList,
  111.             'molname'   => $result->molname
  112.         ]);
  113.     }
  114.     /**
  115.      * @Route("/plant/molecule/{uuid}/print", name="app_plant_molecule_print")
  116.      */
  117.     public function print(string $uuidSerializerInterface $serializer): Response
  118.     {
  119.         $arr = [];
  120.         $plantList = [];
  121.         $result = \App\Api\Operations\MoleculePlantsByPk::execute($uuid)->data->molecule_struct[0];
  122.         // dd($result->molecule_plants);
  123.         if(!empty($result->molecule_plants))
  124.         {
  125.             foreach($result->molecule_plants as $plant)
  126.             {
  127.                 $arr[$plant->plant_name] = $plant->plant_name;
  128.             }
  129.             foreach($arr as $key => $value)
  130.             {
  131.                 $plantList[] = ['plants' => $value];
  132.             }
  133.             $slugger = new AsciiSlugger();
  134.             $slug $slugger->slug($result->molname);
  135.             // decoding CSV contents
  136.             $data $serializer->encode($plantList'csv');
  137.             $response = new Response();
  138.             $response->headers->set('Content-type''text/csv');
  139.             $response->headers->set('Cache-Control''private');
  140.             $response->headers->set('Content-length'strlen($data));
  141.             $response->headers->set('Content-Disposition''attachment; filename="'$slug .'.csv";');
  142.             $response->sendHeaders();
  143.             $response->setContent($data);
  144.             return $response;
  145.         }
  146.         return new Response();
  147.     }
  148. }