From 5ce6d37a69474f68833dfe7882263a67ae8aedf7 Mon Sep 17 00:00:00 2001 From: Marc Ducobu Date: Thu, 12 Aug 2021 12:27:13 +0200 Subject: [PATCH] Controller to generate a doc --- .../Controller/DocGeneratorController.php | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/src/Bundle/ChillDocGeneratorBundle/Controller/DocGeneratorController.php b/src/Bundle/ChillDocGeneratorBundle/Controller/DocGeneratorController.php index 25b03ecc7..f67e3bbe0 100644 --- a/src/Bundle/ChillDocGeneratorBundle/Controller/DocGeneratorController.php +++ b/src/Bundle/ChillDocGeneratorBundle/Controller/DocGeneratorController.php @@ -5,7 +5,10 @@ namespace Chill\DocGeneratorBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\HeaderUtils; use Symfony\Component\Routing\Annotation\Route; +use ChampsLibres\AsyncUploaderBundle\TempUrl\TempUrlOpenstackGenerator; +use PhpOffice\PhpWord\TemplateProcessor; /** * Class DocGeneratorController @@ -28,4 +31,46 @@ class DocGeneratorController extends AbstractController return (new Response()) ->setContent('Test'); } + + /** + * @Route( + * "{_locale}/doc/gen/test", + * name="chill_docgenerator_test" + * ) + * + * @param Request $request + * @return \Symfony\Component\HttpFoundation\Response + */ + public function getDoc(Request $request, TempUrlOpenstackGenerator $tempUrlGenerator) + { + $p = $tempUrlGenerator->generate( + 'GET', + 'FORMULAIRE_AEB.docx', + $request->query->has('expires_delay') ? $request->query->getInt('expires_delay', 0) : null + ); + + $tmpfname = tempnam(sys_get_temp_dir(), 'DOC_TEMPLATE'); + file_put_contents($tmpfname, file_get_contents($p->{"url"})); + + $templateProcessor = new TemplateProcessor($tmpfname); + $templateProcessor->setValues(array('firstname' => 'John', 'lastname' => 'Doe')); + + $tmpfname2 = tempnam(sys_get_temp_dir(), 'DOC_GENERATED'); + $templateProcessor->saveAs($tmpfname2); + + unlink($tmpfname); + + $fileContent = fopen($tmpfname2, 'r'); // the generated file content + $response = new Response(fread($fileContent, filesize($tmpfname2))); + + $disposition = HeaderUtils::makeDisposition( + HeaderUtils::DISPOSITION_ATTACHMENT, + 'foo.docx' + ); + + $response->headers->set('Content-Disposition', $disposition); + unlink($tmpfname2); + + return $response; + } }