<?php
/**
* Created by PhpStorm.
* User: Slim Sayari
* Date: 10/07/2019
* Time: 13:43
*/
namespace App\Controller\Front;
use App\Services\CartService;
use App\Services\NbDesigner;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Twig\Environment;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use App\Services\Users;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
class NbDesignerController extends AbstractController
{
private $twig;
private $router;
private $users_service;
private $nbDesigner;
private $params;
private $cart_service;
public function __construct(Environment $twig, UrlGeneratorInterface $router, ParameterBagInterface $params, Users $users_service, NbDesigner $nbDesigner,CartService $cart_service)
{
$this->twig = $twig;
$this->router = $router;
$this->users_service = $users_service;
$this->nbDesigner = $nbDesigner;
$this->params = $params;
$this->cart_service = $cart_service;
}
/**
* @Route("/nb-designer/create/{token}", name="nb_designer",options={"expose"=true})
*/
public function index(Request $request,$token = null) : Response
{
$data = $this->nbDesigner->init($request,$token);
$response = $this->twig->render('nb_designer/index.html.twig', $data);
$response = new Response($response);
$response->headers->set('Access-Control-Allow-Origin', '*');
return $response;
}
/**
* @Route("/nb-designer/get-template-ajax", name="nb_designer_tempalte_ajax",options={"expose"=true})
*/
public function getTemplate(Request $request) : Response
{
$data = $this->nbDesigner->getTemplateAjax($request);
$response = $this->twig->render('nb_designer/template.html.twig', $data);
$response = new Response($response);
return $response;
}
/**
* @Route("/nb-designer/get-template-quantity", name="nb_designer_tempalte_quantity_ajax",options={"expose"=true})
*/
public function getQty(Request $request) : Response
{
$data = $this->nbDesigner->getQtyFlyerCarte($request);
$response = $this->twig->render('nb_designer/getPriceByQty.html.twig', $data);
$response = new Response($response);
return $response;
}
/**
* @Route("/nb-designer/get-template-grammage", name="nb_designer_tempalte_gramage_ajax",options={"expose"=true})
*/
public function getGramageByTypeImpression(Request $request) : Response
{
$data = $this->nbDesigner->getGrammageAffichage($request);
$response = $this->twig->render('nb_designer/getGramageInput.html.twig', $data);
$response = new Response($response);
return $response;
}
/**
* @Route("/nb-designer/import-textes", name="nb_designer_import_textes")
*/
public function importTextes() : Response
{
$this->nbDesigner->importTextes();
return new Response('DONE');
}
/**
* @Route("/nb-designer/import-elements", name="nb_designer_import_elements")
*/
public function importElements() : Response
{
$this->nbDesigner->importElements();
return new Response('DONE');
}
/**
* @Route("/nb-designer/import-templates", name="nb_designer_import_templates")
*/
public function importTemplates(Request $request) : Response
{
$this->nbDesigner->importTemplates($request,'cv_carre'); // carte visite carre
$this->nbDesigner->importTemplates($request,'cv_classique'); // carte visite classique
$this->nbDesigner->importTemplates($request,'flyer_a5'); // flyer a5
$this->nbDesigner->importTemplates($request,'flyer_a6'); // flyer a6
return new Response('DONE');
}
/**
* @Route("/nb-designer/import-templates-image", name="nb_designer_import_templates_image")
*/
public function importTemplatesImage(Request $request) : Response
{
$this->nbDesigner->importDossierImage();
return new Response('DONE');
}
/**
* @Route("/nb-designer/import-dossier-template-custom", name="nb_designer_import_dossier_templates_custom")
*/
public function importDossierTemplatesa(Request $request) : Response
{
$this->nbDesigner->importTemplatesCustome($request,'flyer_a5','37729301579182017');
return new Response('DONE');
}
/**
* @Route("/nb-designer/import-dossier-template", name="nb_designer_import_dossier_templates")
*/
public function importDossierTemplates(Request $request) : Response
{
$this->nbDesigner->getListDirectoriesToImport();
return new Response('DONE');
}
/**
* @Route("/nb-designer/import-dossier-template-nbd", name="nb_designer_import_dossier_templates_nbd")
*/
public function importDossierTemplatesNBD(Request $request) : Response
{
if($request->getMethod() == 'POST'){
$json = $request->request->get('jsonTemplate');
$typeTemplate = $request->request->get('typeTemplate');
$scale = $request->request->get('scale');
$isCopees = rand(10000000,99999999);
$this->nbDesigner->importDossierByNBD($request,$typeTemplate,$json,$isCopees,$scale);
return new Response('DONE');
}
$response = $this->twig->render('nb_designer/importTemplate.html.twig');
$response = new Response($response);
return $response;
}
/**
* @Route("/nb-designer/import-text-previews", name="nb_designer_import_text_previews")
*/
public function importTextPreviews(Request $request) : Response
{
$this->nbDesigner->importTextesPreviews();
return new Response('DONE');
}
/**
* @Route("/nb-designer/update-size-template", name="nb_designer_update_size_template")
*/
public function updateSizeTemplate(Request $request) : Response
{
$this->nbDesigner->updateScale();
return new Response('DONE');
}
/**
* @Route("/nb-designer/load-user-template", name="nb_designer_load_user_template",options={"expose"=true})
*/
public function loadUserTemplate(Request $request) : Response
{
$data = $this->nbDesigner->loadUserTemplate($request);
return new JsonResponse($data);
}
/**
* @Route("/nb-designer/update-user-template", name="nb_designer_update_user_template",options={"expose"=true})
*/
public function updateUserTemplate(Request $request) : Response
{
$data = $this->nbDesigner->updateUserTemplate($request);
return new JsonResponse($data);
}
/**
* @Route("/nb-designer/update-elements-user-template", name="nb_designer_update_elements_user_template",options={"expose"=true})
*/
public function updateElementsUserTemplate(Request $request) : Response
{
$data = $this->nbDesigner->updateElementsUserTemplate($request);
return new JsonResponse($data);
}
/**
* @Route("/nb-designer/load-user-template-layers", name="nb_designer_load_user_template_layers",options={"expose"=true})
*/
public function loadUserTemplateLayers(Request $request) : Response
{
$data = $this->nbDesigner->loadUserTemplateLayers($request);
$content = $this->twig->render('nb_designer/getLayers.html.twig', $data);
$response = new Response($content);
return $response;
}
/**
* @Route("/nb-designer/update-selectable-user-template-layers", name="nb_designer_update_selectable_user_template_layers",options={"expose"=true})
*/
public function updateSelectableUserTemplateLayers(Request $request) : Response
{
$this->nbDesigner->updateSelectableUserTemplateLayers($request);
return new Response('DONE');
}
/**
* @Route("/nb-designer/update-user-template-options", name="nb_designer_update_user_template_options",options={"expose"=true})
*/
public function updateUserTemplateOptions(Request $request) : Response
{
$this->nbDesigner->updateUserTemplateOptions($request);
return new Response('DONE');
}
/**
* @Route("/nb-designer/download-pdf", name="nb_designer_download_pdf",options={"expose"=true})
*/
public function downloadPdf(Request $request) : Response
{
$pdf = $this->nbDesigner->generatePdf($request);
// Generate response
$response = new Response($pdf);
$baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
$path_pdf = $this->params->get('uploads_directory').'/tmp/'.$pdf;
$url = $baseurl.'/uploads/tmp/'.$pdf;
// Set headers
$response->headers->set('Cache-Control', 'private');
$response->headers->set('Content-type', mime_content_type($path_pdf));
$response->headers->set('Content-Disposition', 'attachment; filename="' . basename($path_pdf) . '";');
$response->headers->set('Content-length', filesize($path_pdf));
// Send headers before outputting anything
$response->sendHeaders();
$response->setContent(file_get_contents($url));
return $response;
}
/**
* @Route("/nb-designer/download-pdf-and-get-first-image", name="nb_designer_download_pdf_and_get_first_image",options={"expose"=true})
*/
public function downloadPdfAndGetFirstImage(Request $request) : Response
{
$pdf = $this->nbDesigner->generatePdf($request);
$images = $this->nbDesigner->getImageRectoVerso($request);
$response = new Response($pdf);
$response->setContent(json_encode($images));
return $response;
}
/**
* @Route("/nb-designer/save-crea", name="nb_designer_save_crea",options={"expose"=true})
*/
public function saveCrea(Request $request) : Response
{
$data = $this->nbDesigner->generateZip($request);
$response = new Response();
$response->setContent($data);
return $response;
}
/**
* @Route("/nb-designer/save-template-abonnement", name="nb_designer_save_template_abonnement",options={"expose"=true})
*/
public function saveTemplateAbonnement(Request $request) : Response
{
$data = $this->nbDesigner->saveTemplateAbonnement($request,$this->getUser());
if($data != 0){
$response = $this->twig->render('nb_designer/getMyDesign.html.twig', $data);
$response = new Response($response);
return $response;
}else{
$response = new Response();
$response->setContent(1);
return $response;
}
}
/**
* @Route("/nb-designer/save-template-user", name="nb_designer_save_template_user",options={"expose"=true})
*/
public function saveTemplateUser(Request $request) : Response
{
$cart = $this->cart_service->createCart(true);
$price = $this->nbDesigner->updateUserTemplateGetPrice($request,$cart,$this->getUser());
$templates = $this->nbDesigner->saveDesignImg($request,$this->getUser(),$cart);
if($templates != 0){
$response = $this->twig->render('nb_designer/getMyDesign.html.twig', $templates);
$response = new Response($response);
return $response;
}else{
$response = new Response();
$response->setContent(1);
return $response;
}
}
/**
* @Route("/nb-designer/get-css-file", name="nb_designer_get_css_file",options={"expose"=true})
*/
public function getCssFile(Request $request) : Response
{
$fonts = $this->nbDesigner->getCssFonts($request);
$content = $this->twig->render('nb_designer/css.html.twig', ['fonts' => $fonts]);
$response = new Response($content);
$response->headers->set('Content-Type', 'text/css');
return $response;
}
/**
* @Route("/nb-designer/add-to-cart", name="nb_designer_add_to_cart")
*/
public function addToCart(Request $request) : Response
{
$this->nbDesigner->addToCart($request,$this->getUser());
return $this->redirectToRoute('checkout');
}
/**
* @Route("/nb-designer/add-to-cart-distribution-flayer", name="nb_designer_add_to_cart_distribution_flyer")
*/
public function addToCartDistributionFlyer(Request $request) : Response
{
$this->nbDesigner->addToCart($request,$this->getUser());
return $this->redirectToRoute('distribution_calcule');
}
/**
* @Route("/nb-designer/get-price", name="nb_designer_get_price",options={"expose"=true})
*/
public function getPrice(Request $request) : Response
{
$cart = $this->cart_service->createCart(true);
$price = $this->nbDesigner->updateUserTemplateGetPrice($request,$cart,$this->getUser());
$content = $this->twig->render('nb_designer/getPrice.html.twig', $price);
$response = new Response($content);
return $response;
}
/**
* @Route("/nb-designer/add-to-cart-redirect-to-acueil", name="nb_designer_add_to_cart_redirect_to_acueil")
*/
public function addToCartRedirectToAcueil(Request $request) : Response
{
$arrayRedirect = $this->nbDesigner->addToCart($request,$this->getUser());
return $this->redirectToRoute('accueil',$arrayRedirect);
}
/**
* @Route("/nb-designer/get-template-search", name="nb_designer_get_template_search_ajax",options={"expose"=true})
*/
public function getTemplateFromTags(Request $request) : Response
{
$data = $this->nbDesigner->getTemplateAjax($request);
$data['tags'] = $request->get('searchTag');
$response = $this->twig->render('nb_designer/template.html.twig', $data);
$response = new Response($response);
return $response;
}
}