<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use Symfony\Component\Filesystem\Exception\IOExceptionInterface;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Filesystem\Path;
use Symfony\Component\Serializer\SerializerInterface;
use Symfony\Component\String\Slugger\AsciiSlugger;
use Gotenberg\Gotenberg;
class PlantController extends AbstractController
{
/**
* @Route("/plant/lookup", name="app_plant_lookup")
*/
public function lookup(Request $request): Response
{
$data = [];
$content = json_decode($request->getContent(), true);
if(array_key_exists('lookup', $content))
{
$pattern = trim($content['lookup']) .'%';
// $result = \App\Api\Operations\PlantMoleculeLookup::execute($pattern)->data->molecule_plant_data;
$result = \App\Api\Operations\plantnameLookup::execute($pattern)->data->plant_view;
foreach($result as $item)
{
$data[] = ['id' => $item->plantnameslug, 'name' => $item->plantname];
}
}
return $this->render('default/_lookup_items.html.twig', [
'data' => $data,
]);
}
/**
* @Route("/plant/unitis-allergen", name="app_plant_unitis_allergen")
*/
public function unitisAllergenList(): Response
{
$arr = [];
$result = \App\Api\Operations\UnitisAllergen::execute()->data->unitis_allergen;
foreach($result as $item)
{
if(!isset($arr[$item->plantname]))
{
$arr[$item->plantname] = [];
}
$arr[$item->plantname][] = $item;
}
return $this->render('default/unitis_allergen.html.twig', [
'result' => $arr,
]);
}
/**
* @Route("/plant/molecule/{uuid}/export", name="app_plant_molecule_export")
*/
public function export(string $uuid): Response
{
try
{
$filesystem = new Filesystem();
$tmpName = $filesystem->tempnam('tmp/', '');
$url = 'http://ncstox.com:9000' . $this->generateUrl('app_plant_molecule_render_pdf', ['uuid' => $uuid]);
// dump($url);
$request = Gotenberg::chromium('http://135.125.235.64:3000')
->outputFilename($uuid)
->url($url);
// dd($request);
$filename = Gotenberg::save($request, $tmpName);
// dd($filename);
}catch(\Exception $e)
{
dd($e->getMessage());
}
return (new BinaryFileResponse($filename, Response::HTTP_OK))
->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, sprintf('%s.pdf', $uuid));
/* $plantList = [];
$result = \App\Api\Operations\MoleculePlantsByPk::execute($uuid)->data->molecule_struct[0];
foreach($result->plants as $item)
{
if(!isset($plantList[$item->plantname]))
{
$plantList[$item->plantname] = $item->plantname;
}
}
return $this->render('pdf/plant.html.twig', array(
'plantList' => $plantList,
'molname' => $result->molname
));*/
}
/**
* @Route("/plant/molecule/{uuid}/render_pdf", name="app_plant_molecule_render_pdf")
*/
public function renderPdf(string $uuid): Response
{
$plantList = [];
$result = \App\Api\Operations\MoleculePlantsByPk::execute($uuid)->data->molecule_struct[0];
foreach($result->plants as $item)
{
if(!isset($plantList[$item->plantname]))
{
$plantList[$item->plantname] = $item->plantname;
}
}
return $this->render('pdf/plant.html.twig', [
'plantList' => $plantList,
'molname' => $result->molname
]);
}
/**
* @Route("/plant/molecule/{uuid}/print", name="app_plant_molecule_print")
*/
public function print(string $uuid, SerializerInterface $serializer): Response
{
$arr = [];
$plantList = [];
$result = \App\Api\Operations\MoleculePlantsByPk::execute($uuid)->data->molecule_struct[0];
// dd($result->molecule_plants);
if(!empty($result->molecule_plants))
{
foreach($result->molecule_plants as $plant)
{
$arr[$plant->plant_name] = $plant->plant_name;
}
foreach($arr as $key => $value)
{
$plantList[] = ['plants' => $value];
}
$slugger = new AsciiSlugger();
$slug = $slugger->slug($result->molname);
// decoding CSV contents
$data = $serializer->encode($plantList, 'csv');
$response = new Response();
$response->headers->set('Content-type', 'text/csv');
$response->headers->set('Cache-Control', 'private');
$response->headers->set('Content-length', strlen($data));
$response->headers->set('Content-Disposition', 'attachment; filename="'. $slug .'.csv";');
$response->sendHeaders();
$response->setContent($data);
return $response;
}
return new Response();
}
}