src/Controller/ProjectController.php line 93

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\Routing\Annotation\Route;
  6. use App\Repository\ProjectRepository;
  7. use App\Manager\ProjectManager;
  8. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  9. use Symfony\Component\HttpFoundation\JsonResponse;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use App\Service\PdfService;
  12. use App\Service\MailService;
  13. use App\Manager\MediumManager;
  14. use App\Repository\AddressRepository;
  15. use Knp\Snappy\Pdf;
  16. use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;
  17. /**
  18.  * @Route("/api/project")
  19.  */
  20. class ProjectController extends AbstractController
  21. {
  22.     /**
  23.      * @var ProjectRepository
  24.      */
  25.     private $projectRepository;
  26.     
  27.     /**
  28.      * @var AddressRepository
  29.      */
  30.     private $addressRepository;
  31.     /**
  32.      * @var ProjectManager
  33.      */
  34.     private $projectManager;
  35.     /**
  36.      * @var ParameterBagInterface
  37.      */
  38.     private $params;
  39.     
  40.     /**
  41.      * @var PdfService
  42.      */
  43.     private $pdfService;    
  44.     /**
  45.      * @var MailService
  46.      */
  47.     private $mailService;
  48.     public function __construct(ProjectRepository $projectRepositoryAddressRepository $addressRepositoryProjectManager $projectManagerParameterBagInterface $paramsPdfService $pdfServiceMailService $mailServicePdf $knpSnappyPdfMediumManager $mediumManager)
  49.     {
  50.         $this->projectRepository $projectRepository;
  51.         $this->addressRepository $addressRepository;
  52.         $this->projectManager $projectManager;
  53.         $this->params $params;
  54.         $this->pdfService $pdfService;
  55.         $this->mailService $mailService;
  56.         $this->knpSnappyPdf $knpSnappyPdf;
  57.         $this->mediumManager $mediumManager;
  58.     }
  59.     /**
  60.      * @Route("/list/my", name="hbk_api_project_list_my", methods={"GET"})
  61.      */
  62.     public function projectListMy(Request $request): Response
  63.     {   
  64.         $admin_token = isset($parameters["_admin_token"]) ? $parameters["_admin_token"] : $request->query->get('_admin_token');
  65.         $is_admin $admin_token == $this->params->get('adminToken');
  66.         if($request->query->get('_admin_token') == $this->params->get('adminToken')) {
  67.             $projects $this->projectRepository->getMyProjects();
  68.         } else {
  69.             if($this->getUser() != null) {
  70.                 $projects $this->projectRepository->getMyProjects($this->getUser());
  71.             } else {
  72.                 $response = new Response();
  73.                 $response->setStatusCode(Response::HTTP_FORBIDDEN);
  74.                 return $response;
  75.             }
  76.         }
  77.         $projects['is_admin'] = $is_admin;
  78.         return $this->json($projects);
  79.     }
  80.     /**
  81.      * @Route("/list/{category}/{campaign}", name="hbk_api_project_list")
  82.      * @Route("/list//{campaign}", name="hbk_api_project_list_no_category")
  83.      */
  84.     public function projectList(string $category nullstring $campaign null): Response
  85.     {
  86.         $projects $this->projectRepository->getProjects($category$campaign);
  87.         return new JsonResponse($projects);
  88.     }
  89.     /**
  90.      * @Route("/location/list/{category}/{campaign}", name="hbk_api_project_location_list")
  91.      * @Route("/location/list//{campaign}", name="hbk_api_project_location_list_no_category")
  92.      */
  93.     public function projectLocationList(string $category nullstring $campaign null): Response
  94.     {
  95.         $projects $this->projectRepository->getProjectLocations($category$campaign);
  96.         return new JsonResponse($projects);
  97.     }
  98.     /**
  99.      * @Route("/new", name="hbk_api_project_new", methods={"POST"})
  100.      * @Route("/edit/{id}", name="hbk_api_project_edit", methods={"PUT"})
  101.      */
  102.     public function projectCreate($id nullRequest $request): Response
  103.     {
  104.         $parameters json_decode($request->getContent(), true);
  105.         $response = new JsonResponse();        
  106.         if((isset($parameters["_admin_token"]) && $parameters["_admin_token"] == $this->params->get('adminToken')) || ($this->getUser() != null && $this->getUser()->getId() == $parameters['submitter'])) {
  107.             if($id == null) {
  108.                 $id $this->projectManager->createProject($parameters);
  109.                 $response->setStatusCode(Response::HTTP_CREATED);
  110.                 if (isset($parameters['submission']) && $parameters['submission'] == 'submitted') {
  111.                     $address $this->addressRepository->find($parameters['submitter']);
  112.                     $this->mailService->sendMailTemplate(
  113.                         $this->params->get('sendMailTo'),
  114.                         'Neue Projekteinreichung',
  115.                         "mail/new_project.html.twig",
  116.                         [
  117.                             "parameters" => $parameters,
  118.                             "address" => $address
  119.                         ]
  120.                     );
  121.                 }
  122.                 if((isset($parameters["_admin_token"]) && $parameters["_admin_token"] == $this->params->get('adminToken'))) {
  123.                     //Redirect to wp admin edit page
  124.                     
  125.                     $response->setContent(json_encode([
  126.                         "redirect_url" => 'admin.php?page=api-project-form-page&submission='.$id
  127.                     ]));
  128.                 } else if (($this->getUser() != null && $this->getUser()->getId() == $parameters['submitter'])) {
  129.                     //Redirect to public user page
  130.                     $response->setContent(json_encode([
  131.                         "redirect_url" => 'projekt-formular/?submission='.$id
  132.                     ]));
  133.                 }
  134.             } else {
  135.                 if (isset($parameters['submission']) && $parameters['submission'] == 'submitted') {
  136.                     $address $this->addressRepository->find($parameters['submitter']);
  137.                     $this->mailService->sendMailTemplate(
  138.                         $this->params->get('sendMailTo'),
  139.                         'Neue Projekteinreichung',
  140.                         "mail/new_project.html.twig",
  141.                         [
  142.                             "parameters" => $parameters,
  143.                             "address" => $address
  144.                         ]
  145.                     );
  146.                 } else if (isset($parameters['submission']) && $parameters['submission'] == 'rejected') {
  147.                     $address $this->addressRepository->find($parameters['submitter']);
  148.                     $mail $address->getEmail();
  149.                     if($mail != null && $mail != "") {
  150.                         $this->mailService->sendMailTemplate(
  151.                             $mail,
  152.                             'Ihr Projekt wurde abgelehnt',
  153.                             "mail/rejected_project.html.twig",
  154.                             [
  155.                                 "id" => $id,
  156.                                 "parameters" => $parameters,
  157.                                 "address" => $address
  158.                             ]
  159.                         );
  160.                     }
  161.                 }
  162.                 $this->projectManager->editProject($id$parameters);
  163.                 $response->setStatusCode(Response::HTTP_OK);
  164.             }
  165.         } else {
  166.             $response->setStatusCode(Response::HTTP_FORBIDDEN);
  167.         }
  168.         
  169.         return $response;
  170.     }
  171.     /**
  172.      * @Route("/edit/{id}", name="hbk_api_project_edit_info", methods={"GET"})
  173.      */
  174.     public function projectEditInfo($idRequest $request): Response
  175.     {
  176.         $project $this->projectManager->getProjectEditInfo($id);
  177.         if(($request->query->get('_admin_token') == $this->params->get('adminToken')) || $this->getUser()->getId() == $project['submitter']['id']) {
  178.             return $this->json($project);
  179.         }
  180.         $response = new Response();
  181.         $response->setStatusCode(Response::HTTP_FORBIDDEN);
  182.         
  183.         return $response;
  184.     }
  185.     /**
  186.      * @Route("/delete/{id}", name="hbk_api_project_delete", methods={"DELETE"})
  187.      */
  188.     public function projectDelete(int $idRequest $request): Response
  189.     {
  190.         $parameters $request->request->all();
  191.         $response = new Response();
  192.         $submitter $this->projectManager->getProjectSubmitter($id);
  193.         if((isset($parameters["_admin_token"]) && $parameters["_admin_token"] == $this->params->get('adminToken')) || $this->getUser() == $submitter) {
  194.             $this->projectManager->deleteProject($id);
  195.             $response->setStatusCode(Response::HTTP_OK);
  196.         } else {
  197.             $response->setStatusCode(Response::HTTP_FORBIDDEN);
  198.         }
  199.         return $response;
  200.     }
  201.     /**
  202.      * @Route("/{id}", name="hbk_api_project")
  203.      */
  204.     public function project(int $id): Response
  205.     {
  206.         $project $this->projectRepository->getProject($id);
  207.         $project["similar_projects"] = $this->projectRepository->findSimilarProjects($id);
  208.         return $this->json($project);
  209.     }
  210.        /**
  211.      * @Route("/slug/{slug}", name="hbk_api_project_slug")
  212.      */
  213.     public function projectSlug(string $slug): Response
  214.     {
  215.         $project $this->projectRepository->getProject(0$slug);
  216.         $project["similar_projects"] = $this->projectRepository->findSimilarProjects($project['id']);
  217.         return $this->json($project);
  218.     }
  219.       /**
  220.      * @Route("/pdf/{id}", name="hbk_api_project_pdf")
  221.      */
  222.     public function projectPdfExport(int $id): Response
  223.     {
  224.         $project $this->projectRepository->find($id);
  225.         $pdf $this->pdfService->Create($project);
  226.         
  227.         return $pdf->Output('Projekt '.$project->getName().'.pdf''I');
  228.     }
  229.     
  230.     /**
  231.      * @Route("/pdf_new/{id}", name="hbk_api_project_pdf_new")
  232.      */
  233.     public function projectPdfExportNew(int $id): Response
  234.     {
  235.         $project $this->projectRepository->find($id);
  236.         $images = [];
  237.         foreach ($project->getProjectMedia() as $key => $value) {
  238.             if ($value->getIsActive()) {
  239.                 $images[$value->getSort()] = [
  240.                     'id' => $value->getMedium()->getId(),
  241.                     'label' => $value->getLabel(),
  242.                     'url' => $this->mediumManager->getFilePath($value->getMedium()->getId(), 'ORIGINAL'),
  243.                 ];
  244.             }
  245.         }
  246.         foreach ($project->getProjectAttachments() as $key => $value) {
  247.             if ($value->getIsActive()) {
  248.                 $images[$value->getSort()] = [
  249.                     'id' => $value->getMedium()->getId(),
  250.                     'label' => $value->getLabel(),
  251.                     'url' => $value->getMedium()->getUrl() . '.jpg',
  252.                 ];
  253.             }
  254.         }
  255.         $this->knpSnappyPdf
  256.             ->setOption('page-size''A0')
  257.             ->setOption('margin-bottom''0mm')
  258.             ->setOption('margin-top''0mm')
  259.             ->setOption('margin-right''0mm')
  260.             ->setOption('margin-left''0mm')
  261.             ->setOption('dpi''300');
  262.         $html $this->renderView('pdf/project_pdf.html.twig', [
  263.             'project' => $project,
  264.             'images' => $images,
  265.             'category' => $project->getMainCategory()->getName()
  266.         ]);
  267.         return new PdfResponse(
  268.             $this->knpSnappyPdf->getOutputFromHtml($html),
  269.             iconv("UTF-8""ASCII//IGNORE"uniqid()).'.pdf'
  270.         );
  271.     }
  272.     /**
  273.      * @Route("/pdf_certificate/{id}", name="hbk_api_project_pdf_certificate")
  274.      */
  275.     public function projectPdfExportCertificate(int $id): Response
  276.     {
  277.         $project $this->projectRepository->find($id);
  278.         $images = [];
  279.         foreach ($project->getProjectCertificates() as $project_certificate) {
  280.             $proof_files $project_certificate->getProofFiles();
  281.             if(sizeof($proof_files) > 0) {
  282.                 foreach ($proof_files as $file) {
  283.                     $images[$project_certificate->getId()][] = [
  284.                         'id' => $file->getMedium()->getId(),
  285.                         'url' => $file->getMedium()->getType() == "application/pdf" $file->getMedium()->getUrl().'.jpg' $this->mediumManager->getFilePath($file->getMedium()->getId(), 'ORIGINAL'),
  286.                     ];
  287.                 }
  288.             }
  289.         }
  290.         $this->knpSnappyPdf
  291.             ->setOption('page-size''A4')
  292.             ->setOption('margin-bottom''0mm')
  293.             ->setOption('margin-top''0mm')
  294.             ->setOption('margin-right''0mm')
  295.             ->setOption('margin-left''0mm')
  296.             ->setOption('dpi''300');
  297.         $html $this->renderView('pdf/project_certificate.html.twig', [
  298.             'project' => $project,
  299.             'images' => $images,
  300.             'category' => $project->getMainCategory()->getName()
  301.         ]);
  302.         return new PdfResponse(
  303.             $this->knpSnappyPdf->getOutputFromHtml($html),
  304.             iconv("UTF-8""ASCII//IGNORE"uniqid()).' - Sonderpreis Info.pdf'
  305.         );
  306.     }
  307.     /**
  308.      * @Route("/pdf/data/{id}", name="hbk_api_project_pdf_data")
  309.      */
  310.     public function projectPdfDataExport(int $id): Response
  311.     {
  312.         $project $this->projectRepository->find($id);
  313.         
  314.         $pdf $this->pdfService->generateDetailPDF($project);
  315.         
  316.         return $pdf->Output('Projekt '.$project->getName().'.pdf''I');
  317.     }
  318. }