src/Controller/FormsController.php line 120

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Forms;
  4. use App\Entity\Bedroom;
  5. use App\Entity\Bathroom;
  6. use App\Form\FormsType;
  7. use App\Repository\FormsRepository;
  8. use App\Repository\BedroomRepository;
  9. use App\Repository\BathroomRepository;
  10. use Psr\Log\LoggerInterface;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\HttpFoundation\JsonResponse;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. use Intervention\Image\ImageManagerStatic as Image;
  17. use Intervention\Image\Size;
  18. use Ramsey\Uuid\Uuid;
  19. use Symfony\Component\Serializer\SerializerInterface;
  20. use Symfony\Component\Serializer\Encoder\JsonEncoder;
  21. use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
  22. use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
  23. // use Symfony\Component\Serializer\Normalizer\ArrayDenormalizer;
  24. // use Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer;
  25. use Symfony\Component\Serializer\Serializer;
  26. /**
  27.  * @Route("/forms")
  28.  */
  29. class FormsController extends AbstractController
  30. {
  31.     /**
  32.      * @Route("/", name="forms_index", methods={"GET"})
  33.      */
  34.     public function index(Request $requestFormsRepository $formsRepository): Response
  35.     {
  36.         // Get count of all forms
  37.         // $forms = $formsRepository->getAllForms();
  38.         // $totalResults = count($forms);
  39.         // print $totalResults;
  40.         // $page = max( 1, $request->query->getInt('page', 1) );
  41.         // $paginator = $formsRepository->getFormsPaginator( $page );
  42.         // print $paginator->getIterator()->count();
  43.         // exit;
  44.         return $this->render('forms/index.html.twig', [
  45.             // 'forms' => $paginator,
  46.             // 'totalResults' => $totalResults,
  47.             // 'currentPage' => $page,
  48.             // 'perPage' => $formsRepository::PAGINATOR_PER_PAGE,
  49.             // 'routeName' => 'forms_index',
  50.         ]);
  51.     }
  52.     /**
  53.      * @Route("/api/list", name="forms_api_list", methods={"GET"})
  54.      */
  55.     public function api_list(Request $requestFormsRepository $formsRepository)
  56.     {
  57.         if( $this->getUser() === null ) {
  58.             $forms $this->get('serializer')->serialize([], 'json');
  59.             $response = new Response();
  60.             $response->setContent($forms);
  61.             $response->headers->set('Content-Type''application/json');
  62.     
  63.             return $response;    
  64.         }
  65.         // Get count of all forms
  66.         $forms $formsRepository->getAllForms();
  67.         $totalResults count($forms);
  68.         // print $totalResults;
  69. //        $page = max( 1, $request->query->getInt('page', 1) );
  70. //        $forms = $formsRepository->getFormsAsArray( $page, $request->query->get('brand') );
  71.          $page max1$request->query->getInt('page'1) );
  72.          $paginator $formsRepository->getFormsPaginator$page,
  73.              $request->query->get('brand'),
  74.              $request->query->get('filter''') );
  75. //        print $paginator->getIterator()->count();
  76.          $forms $paginator;
  77. //         exit;
  78.         // $forms2 = [];
  79.         // foreach( $forms as $i => $form ) {
  80.         //     $forms2[$i]['forms'] = $form;
  81.         // }
  82.         $encoder = new JsonEncoder();
  83.         $defaultContext = [
  84.             AbstractNormalizer::CIRCULAR_REFERENCE_HANDLER => function ($object$format$context) {
  85.                 return $object->getUuid();
  86.             },
  87.         ];
  88.         $normalizer = new ObjectNormalizer(nullnullnullnullnullnull$defaultContext);
  89.         $serializer = new Serializer([$normalizer], [$encoder]);
  90.         $forms $serializer->serialize($forms'json');
  91.         $response = new Response();
  92.         $response->setContent($forms);
  93.         $response->headers->set('Content-Type''application/json');
  94.         return $response;
  95.     }
  96.     /**
  97.      * @Route("/api/get/{uuid}", name="forms_api_get", methods={"GET"})
  98.      */
  99.     public function api_get($uuidRequest $requestFormsRepository $formsRepository)
  100.     {
  101.         // Get count of all forms
  102.         $form $formsRepository->getFormFromUuid$uuid );
  103.         
  104.         if( $form == null ) {
  105.             return new Response('Error'404);
  106.         }
  107.         $encoder = new JsonEncoder();
  108.         $defaultContext = [
  109.             AbstractNormalizer::CIRCULAR_REFERENCE_HANDLER => function ($object$format$context) {
  110.                 return $object->getUuid();
  111.             },
  112.         ];
  113.         $normalizer = new ObjectNormalizer(nullnullnullnullnullnull$defaultContext);
  114.         $serializer = new Serializer([$normalizer], [$encoder]);
  115.         $form $serializer->serialize($form'json');
  116.         // $form = $this->createForm(FormsType::class, $form);
  117.         // $form = $this->get('serializer')->serialize($form, 'json');
  118.         $response = new Response();
  119.         $response->setContent($form);
  120.         $response->headers->set('Content-Type''application/json');
  121.         return $response;
  122.     }
  123.     /**
  124.      * @Route("/api/loggedin", name="forms_api_loggedin", methods={"GET"})
  125.      */
  126.     public function api_loggedin(
  127.         SerializerInterface $serializer,
  128.         Request $request,
  129.         LoggerInterface $logger
  130.     )
  131.     {
  132.         if( $this->getUser() === null ) {
  133.             $auth = [
  134.                 'status' => 'error',
  135.                 'message' => 'Not logged in'
  136.             ];
  137.             $auth $this->get('serializer')->serialize($auth'json');
  138.             $response = new Response($auth200);
  139.             $response->headers->set('Content-Type''application/json');
  140.     
  141.         } else {
  142.             $logger->debug(
  143.                 sprintf(
  144.                     "%s by %s",
  145.                     $request->attributes->get('_route'),
  146.                     $this->getUser()->getUsername()
  147.                 )
  148.             );
  149.             $auth = [
  150.                 'status' => 'ok',
  151.                 'user' => $this->getUser()
  152.             ];
  153.             $auth $this->get('serializer')->serialize($auth'json');
  154.             $response = new Response($auth200);
  155.             $response->headers->set('Content-Type''application/json');
  156.         }
  157.         return $response;
  158.     }
  159.     /**
  160.      * @Route("/new", name="forms_new", methods={"GET","POST"})
  161.      */
  162.     public function new(Request $request): Response
  163.     {
  164.         $f = new Forms();
  165.         $form $this->createForm(FormsType::class, $f, [
  166.             'csrf_protection' => false,
  167.         ]);
  168.         // $form->handleRequest($request);
  169.         $form->submit$request->request->all() );
  170.         // var_dump( $request->request->all() );
  171.         // var_dump( $form->isSubmitted() ); 
  172.         // exit;
  173.         if ($form->isSubmitted() && $form->isValid()) {
  174.             $f $this->handleUploads$form$f );
  175.             // Calculate total scores
  176.             $f $this->calculateScores$f );
  177.             $f->setUuidUuid::uuid4() );
  178.             $entityManager $this->getDoctrine()->getManager();
  179.             $entityManager->persist($f);
  180.             $entityManager->flush();
  181.             return $this->redirectToRoute('forms_index');
  182.         }
  183.         return $this->render('forms/new.html.twig', [
  184.             'f' => $f,
  185.             'form' => $form->createView(),
  186.         ]);
  187.     }
  188.     /**
  189.      * @Route("/api/fix", name="forms_api_fix", methods={"GET"})
  190.      */
  191.     public function api_fix(Request $requestFormsRepository $formsRepositoryBedroomRepository $bedRepositoryBathroomRepository $bathRepositoryLoggerInterface $logger): Response
  192.     {
  193.         // $postjson = '{"date":"2022-11-29","propname":"Cliff View, Seaton","uuid":"9e2e433b-88f9-44e8-9005-735caff08821","brand":"THC","version":"8","extbuildappear":"3","extparkfacility":"3.5","extsiding":"3.5","exteriorTotal":"66","extwall":"Good","extbarbecus":"","extgarfurniture":"Good","extgates":"","extdogs":"","extnotes":"Windows to rear of building in dreadful condition, advise contacting the management company\r\nFurniture outside will likely require some TLC to the wood soon","extpic1":"null","extpic2":"null","extpic3":"null","extpic4":"null","minfo":"4","mwelcome":"4","marrival":"4","mwifi":"4.5","maccessories":"4","mspace":"4","managementEfficiencyScore":"81","mfirerisk":"Yes","mfra":"No","mboiler":"","mpat":"Yes","melectrictest":"Yes","mlegionela":"Yes","minsurrance":"Yes","meblindcord":"Yes","mcot":"Yes","mcotprop":"Yes","mhighchair":"Yes","mhighchairprop":"Yes","mstairgate":"","mstairgateprop":"","faplace":"Yes","fadesign":"Yes","favi":"Yes","facoment":"","fcloc":"","fcdesign":"","fcvi":"","fccoment":"","ffeachfloor":"Yes","ffpressure":"Yes","ffvi":"Yes","ffdate":"","ffcoment":"Date of manufacture 2020","fbtab":"","fbvi":"","fbcoment":"","fevi":"Yes","fecoment":"Communal hallway in a block should have emergency lighting backup","fwtemp":"Not tested","fwcoment":"","chimney":"","chimneydate":"","mnotes":"communal hallway in poor condition throughout. carpet in dreadful condition leading to apartment Gf is very dark and lights did not appear to come on as i entered lobby area. Poor management company may be to blame for lack of upkeep.","mpic1":"null","mpic2":"null","mpic3":"null","mpic4":"null","cliving":"4","cbed":"4","cbath":"4","ckit":"4","cleanlinessScore":"80","cnotes":"some areas of shower will require a deep scrub before next season, please","cpic1":"null","cpic2":"null","cpic3":"null","cpic4":"null","pdecor":"4","pfurniture":"3.5","pflooring":"4","plighting":"4","publicAreaScore":"77","piflooring":"Very Good","pseating":"Good to Very Good","pcurtain":"Good","pcoffeetable":"Very Good","plamp":"Good","pdintable":"Very Good","ptablemat":"Very Good","pbin":"","pvaccum":"","pnotes":"","ppic1":"null","ppic2":"null","ppic3":"null","ppic4":"null","kitdecor":"3.5","kitfurniture":"3","kitflooring":"4","kitlighting":"2","kitgas":"3","kitequipment":"3.5","kitutensils":"4","kitchenScore":"65","kiticooker":"","kitifreezer":"","kitwashmachine":"","kitdryer":"","kitiron":"","kitwasher":"","kitmicrowave":"","kitkettle":"","kittoaster":"","kitsaucepan":"","kitfrypan":"","kitiutensils":"","ktcookware":"","kitcutlery":"","kitcrockery":"","kitglasses":"","kitsaltandpepper":"","kitwup":"","kitclean":"","kitnotes":"Please repair plinth \r\nPlease Improve lighting\r\nOwner replacing oven, hob and worktop to improve kitchen \r\nHandles looked worn out ","kitpic1":"WIN_20221129_15_07_36_Pro.jpg","kitpci2":"WIN_20221129_15_07_39_Pro.jpg","kitpic3":"null","kitpic4":"null","bedroom":[{"name":"Bedroom 1","beddecor":"3.5","bedfurniture":"3.5","bedflooring":"4","bedlight":"4","bedbeds":"4","bedbedding":"3.5","bediflooring":"Very Good","bedcurtain":"Very Good","bedheadboard":"Quite Good","bedmatress":"Very Good","bedmatressp":"Very Good","bedduvet":"Very Good","bedvalances":"","bedpillow":"Very Good","bedpillowslips":"Very Good","bedbstable":"Good to Very Good","bedwardrobe":"Very Good to Excellent","bedhanger":"Good to Very Good","bedmirror":"Good to Very Good","bedbin":"Good to Very Good","bednotes":"Sash windows will likely need some attention by next winter\r\nThere is a cross on the ceiling which requires painting in the twin room, please \r\nProblem with window ?- see photo \r\nAccess to beds in twin room is difficult and could be improved if they were L-shape"}],"bedroomScore":"75","bedpic1":"WIN_20221129_14_54_02_Pro (2).jpg","bedpic2":"null","bedpic3":"null","bedpic4":"null","bathroom":[{"name":"Bathroom 1","bathdecor":"3.5","bathfurniture":"3.5","bathflooring":"3","bathlighting":"3.5","bathbrush":"Quite Good","bathmirror":"Good to Very Good","bathshave":"Very Good","bathmat":"Very Good","bathbin":"Good to Very Good","bathtowelrack":"Good","fsvi":"","fscoment":"please descale or replace","bathnotes":"shower ceiling requires decorating, please - paint flaking \r\nRecommend a much bigger heated towel rail. Rather small at present \r\nThe tiles are moving in the shower room and require attention, as you enter they are not fixed."}],"bathroomScore":"67","bathpic1":"WIN_20221129_15_23_41_Pro.jpg","bathpic2":"null","bathpic3":"null","bathpic4":"null","summary":"A popular apartment, surprisingly larger than expected due to the split level and sea view.  Some improvements in the kitchen area will help maintain its standard and rating going forwards ","miscpic1":"null","miscpic2":"null","miscpic3":"null","miscpic4":"null","totalScore":"73","stars":"3.5","lastUpdate":"2022-11-29"}';
  194.         $_POST json_decode($postjsonJSON_OBJECT_AS_ARRAY);
  195.         //        print "<pre>";
  196.         //        print_r( $_POST );
  197.         //        print_r( $request->request->all() );
  198.         //        print "uuid: " . $request->request->get( 'uuid' );
  199.         //        print "</pre>";
  200.         //        exit;
  201.         $entityManager $this->getDoctrine()->getManager();
  202.         $f $formsRepository->getFormFromUuid$_POST'uuid' ] );
  203.         if( $f == null ) {
  204.             $f = new Forms();
  205.         } else {
  206.             $f->getBedroom()->clear();
  207.             $f->getBathroom()->clear();
  208.             // $entityManager->persist($f);
  209.             // $entityManager->flush();
  210.         }
  211.         // var_dump( $f->getPropname() );
  212.         // return new JsonResponse([], 401);
  213.         $all $_POST;
  214.         $bedrooms = isset( $all['bedroom'] ) ? $all['bedroom'] : [];
  215.         unset( $all['bedroom'] );
  216.         $bathrooms = isset( $all['bathroom'] ) ? $all['bathroom'] : [];
  217.         unset( $all['bathroom'] );
  218.         unset( $all['date'] );
  219.         $encoder = new JsonEncoder();
  220.         $defaultContext = [
  221.             AbstractNormalizer::CIRCULAR_REFERENCE_HANDLER => function ($object$format$context) {
  222.                 return $object->getUuid();
  223.             },
  224.         ];
  225.         $normalizer = new ObjectNormalizer(nullnullnullnullnullnull$defaultContext);
  226.         $serializer = new Serializer([$normalizer], [$encoder]);
  227.         // $f2 = $serializer->serialize($f, 'json');
  228.         // var_dump( $entityManager->getClassMetadata(get_class($f))->getName() );
  229.         // var_dump( $f->getDate() );
  230.         // $f2 = $serializer->serialize($f, 'json');
  231.         // return new Response($f2, 401);
  232.         $form $this->createForm(FormsType::class, $f, [
  233.             'csrf_protection' => false,
  234.             'allow_extra_fields' => true,
  235.             'data_class' => Forms::class,
  236.             // 'data_class' => null,
  237.         ]);
  238.         $form->submit$all );
  239.         // if( empty( $f->getDate() ) ) {
  240.         //     $f->setDate( new \DateTime() );
  241.         // }
  242.         if ($form->isSubmitted() && $form->isValid()) {
  243.             $f->setUuid$_POST['uuid'] );
  244.             $f $this->handleUploads$form$f );
  245.             // Calculate total scores
  246.             // $f = $this->calculateScores( $f );
  247.             $dateImmutable = \DateTime::createFromFormat('Y-m-d'$_POST['date'] );
  248.             $f->setDate$dateImmutable );
  249.             $f->setBrand$_POST['brand'] );
  250.             if( $this->getUser() ) {
  251.                 $f->setUserId$this->getUser()->getId() );
  252.             } else {
  253.                 $f->setUserId);
  254.             }
  255.             $f->setVersion$f->getVersion() + );
  256.             $f->setExteriorTotal$_POST['exteriorTotal'] );
  257.             $f->setBedroomScore$_POST['bedroomScore'] );
  258.             $f->setBathroomScore$_POST['bathroomScore'] );
  259.             $f->setKitchenScore$_POST['kitchenScore'] );
  260.             $f->setCleanlinessScore$_POST['cleanlinessScore'] );
  261.             $f->setManagementEfficiencyScore$_POST['managementEfficiencyScore'] );
  262.             $f->setPublicAreaScore$_POST['publicAreaScore'] );
  263.             $f->setTotalScore$_POST['totalScore'] );
  264.             $f->setStars$_POST['stars'] );
  265.             $beds $bedRepository->findByFormId$f->getId() );
  266.             foreach( $beds as $bed ) {
  267.                 $entityManager->remove($bed);
  268.                 $entityManager->flush();
  269.             }
  270.             foreach( $bedrooms as $b ) {
  271.                 if( $b['name'] != '' ) {
  272.                     $bedroom = new Bedroom();
  273.                     $bedroom->setName($b['name']);
  274.                     $bedroom->setBeddecor($b['beddecor']);
  275.                     $bedroom->setBedfurniture($b['bedfurniture']);
  276.                     $bedroom->setBedflooring($b['bedflooring']);
  277.                     $bedroom->setBedlight($b['bedlight']);
  278.                     $bedroom->setBedbeds($b['bedbeds']);
  279.                     $bedroom->setBedbedding($b['bedbedding']);
  280.                     $bedroom->setBediflooring($b['bediflooring']);
  281.                     $bedroom->setBedcurtain($b['bedcurtain']);
  282.                     $bedroom->setBedheadboard($b['bedheadboard']);
  283.                     $bedroom->setBedmatress($b['bedmatress']);
  284.                     $bedroom->setBedmatressp($b['bedmatressp']);
  285.                     $bedroom->setBedduvet($b['bedduvet']);
  286.                     $bedroom->setBedvalances($b['bedvalances']);
  287.                     $bedroom->setBedpillow($b['bedpillow']);
  288.                     $bedroom->setBedpillowslips($b['bedpillowslips']);
  289.                     $bedroom->setBedbstable($b['bedbstable']);
  290.                     $bedroom->setBedhanger($b['bedhanger']);
  291.                     $bedroom->setBedmirror($b['bedmirror']);
  292.                     $bedroom->setBedwardrobe($b['bedwardrobe']);
  293.                     $bedroom->setBedbin($b['bedbin']);
  294.                     $bedroom->setBednotes($b['bednotes']);
  295.                     // $bedroom->setForms($forms);
  296.                     $f->addBedroom$bedroom );
  297.                     $entityManager->persist($bedroom);
  298.                 }
  299.             }
  300.             $baths $bathRepository->findByFormId$f->getId() );
  301.             foreach( $baths as $bath ) {
  302.                 $entityManager->remove($bath);
  303.                 $entityManager->flush();
  304.             }
  305.             foreach( $bathrooms as $b ) {
  306.                 if( $b['name'] != '' ) {
  307.                     $bathroom = new Bathroom();
  308.                     $bathroom->setName($b['name']);
  309.                     $bathroom->setBathdecor($b['bathdecor']);
  310.                     $bathroom->setBathfurniture($b['bathfurniture']);
  311.                     $bathroom->setBathflooring($b['bathflooring']);
  312.                     $bathroom->setBathlighting($b['bathlighting']);
  313.                     $bathroom->setBathbrush($b['bathbrush']);
  314.                     $bathroom->setBathmirror($b['bathmirror']);
  315.                     $bathroom->setBathshave($b['bathshave']);
  316.                     $bathroom->setBathmat($b['bathmat']);
  317.                     $bathroom->setBathbin($b['bathbin']);
  318.                     $bathroom->setBathtowelrack($b['bathtowelrack']);
  319.                     $bathroom->setBathnotes($b['bathnotes']);
  320.                     if( isset($b['fsvi']) ) {
  321.                         $bathroom->setFsvi($b['fsvi']);
  322.                     }
  323.                     if( isset($b['fscoment']) ) {
  324.                         $bathroom->setFscoment($b['fscoment']);
  325.                     }
  326.                     $f->addBathroom$bathroom );
  327.                     $entityManager->persist($bathroom);
  328.                 }
  329.             }
  330.             $f->setIsDeletedfalse );
  331.             $entityManager->persist($f);
  332.             $entityManager->flush();
  333.             $forms $serializer->serialize($f'json');
  334.             $response = new Response();
  335.             $response->setContent($forms);
  336.             $response->headers->set('Content-Type''application/json');
  337.             return $response;
  338.             // $f = $this->get('serializer')->serialize($f, 'json');
  339.             // // $response = new Response($f, 401);
  340.             // $response = new Response($f, 200);
  341.             // $response->headers->set('Content-Type', 'application/json');
  342.             // return $response;
  343.         }
  344.         $errors = array();
  345.         foreach ($form->getErrors(true) as $key => $error) {
  346.             $template $error->getMessageTemplate();
  347.             $parameters $error->getMessageParameters();
  348.             foreach ($parameters as $var => $value) {
  349.                 $template str_replace($var$value$template);
  350.             }
  351.             $errors[] = $template;
  352.         }
  353.         // var_dump( $errors );
  354.         // var_dump( (string)$form->getErrors(true) );
  355.         return new JsonResponse($errors401);
  356.     }
  357.     /**
  358.      * @Route("/api/post", name="forms_api_post", methods={"POST"})
  359.      */
  360.     public function api_post(Request $requestFormsRepository $formsRepositoryBedroomRepository $bedRepositoryBathroomRepository $bathRepositoryLoggerInterface $logger): Response
  361.     {
  362.     $logger->debug'API POST'$_POST );
  363.         $logger->debug'API FILES'$_FILES );
  364.         // print_r( $_FILES ); exit;
  365.         // print_r( $_POST );
  366.     // return new JsonResponse([], 401);
  367.     
  368.     if( !isset( $_POST['stars'] ) ) {
  369.             $msg = [ "error" => "Stars parameter not set. Probably missing some data."];
  370.             return new JsonResponse($msg401);
  371.         }
  372.         $entityManager $this->getDoctrine()->getManager();
  373.         $f $formsRepository->getFormFromUuid$request->request->get'uuid' ) );
  374.         if( $f == null ) {
  375.             $f = new Forms();
  376.         } else {
  377.             $f->getBedroom()->clear();
  378.             $f->getBathroom()->clear();
  379.             // $entityManager->persist($f);
  380.             // $entityManager->flush();
  381.         }
  382.         // var_dump( $f->getPropname() );
  383.         // return new JsonResponse([], 401);
  384.         $all $request->request->all();
  385.         $bedrooms = isset( $all['bedroom'] ) ? $all['bedroom'] : [];
  386.         unset( $all['bedroom'] );
  387.         $bathrooms = isset( $all['bathroom'] ) ? $all['bathroom'] : [];
  388.         unset( $all['bathroom'] );
  389.         unset( $all['date'] );
  390.         $encoder = new JsonEncoder();
  391.         $defaultContext = [
  392.             AbstractNormalizer::CIRCULAR_REFERENCE_HANDLER => function ($object$format$context) {
  393.                 return $object->getUuid();
  394.             },
  395.         ];
  396.         $normalizer = new ObjectNormalizer(nullnullnullnullnullnull$defaultContext);
  397.         $serializer = new Serializer([$normalizer], [$encoder]);
  398.         // $f2 = $serializer->serialize($f, 'json');
  399.         // var_dump( $entityManager->getClassMetadata(get_class($f))->getName() );
  400.         // var_dump( $f->getDate() );
  401.         // $f2 = $serializer->serialize($f, 'json');
  402.         // return new Response($f2, 401);
  403.         $form $this->createForm(FormsType::class, $f, [
  404.             'csrf_protection' => false,
  405.             'allow_extra_fields' => true,
  406.             'data_class' => Forms::class,
  407.             // 'data_class' => null,
  408.         ]);
  409.         $form->submit$all );
  410.         // if( empty( $f->getDate() ) ) {
  411.         //     $f->setDate( new \DateTime() );
  412.         // }
  413.         if ($form->isSubmitted() && $form->isValid()) {
  414.             $f->setUuid$request->request->get('uuid') );
  415.             $f $this->handleUploads$form$f );
  416.             // Calculate total scores
  417.             // $f = $this->calculateScores( $f );
  418.             $dateImmutable = \DateTime::createFromFormat('Y-m-d'$request->request->get('date') );
  419.             $f->setDate$dateImmutable );
  420.             $f->setBrand$request->request->get('brand') );
  421.         if( $this->getUser() ) {
  422.         $f->setUserId$this->getUser()->getId() );
  423.         } else {
  424.             $f->setUserId);
  425.         }
  426.         $f->setVersion$f->getVersion() + );
  427.             $f->setExteriorTotal$request->request->get('exteriorTotal') );
  428.             $f->setBedroomScore$request->request->get('bedroomScore') );
  429.             $f->setBathroomScore$request->request->get('bathroomScore') );
  430.             $f->setKitchenScore$request->request->get('kitchenScore') );
  431.             $f->setCleanlinessScore$request->request->get('cleanlinessScore') );
  432.             $f->setManagementEfficiencyScore$request->request->get('managementEfficiencyScore') );
  433.             $f->setPublicAreaScore$request->request->get('publicAreaScore') );
  434.             $f->setTotalScore$request->request->get('totalScore') );
  435.             $f->setStars$request->request->get('stars') );
  436.             $beds $bedRepository->findByFormId$f->getId() );
  437.             foreach( $beds as $bed ) {
  438.                 $entityManager->remove($bed);
  439.                 $entityManager->flush();
  440.             }
  441.             foreach( $bedrooms as $b ) {
  442.                 if( $b['name'] != '' ) {
  443.                     $bedroom = new Bedroom();
  444.                     $bedroom->setName($b['name']);
  445.                     $bedroom->setBeddecor($b['beddecor']);
  446.                     $bedroom->setBedfurniture($b['bedfurniture']);
  447.                     $bedroom->setBedflooring($b['bedflooring']);
  448.                     $bedroom->setBedlight($b['bedlight']);
  449.                     $bedroom->setBedbeds($b['bedbeds']);
  450.                     $bedroom->setBedbedding($b['bedbedding']);
  451.                     $bedroom->setBediflooring($b['bediflooring']);
  452.                     $bedroom->setBedcurtain($b['bedcurtain']);
  453.                     $bedroom->setBedheadboard($b['bedheadboard']);
  454.                     $bedroom->setBedmatress($b['bedmatress']);
  455.                     $bedroom->setBedmatressp($b['bedmatressp']);
  456.                     $bedroom->setBedduvet($b['bedduvet']);
  457.                     $bedroom->setBedvalances($b['bedvalances']);
  458.                     $bedroom->setBedpillow($b['bedpillow']);
  459.                     $bedroom->setBedpillowslips($b['bedpillowslips']);
  460.                     $bedroom->setBedbstable($b['bedbstable']);
  461.                     $bedroom->setBedhanger($b['bedhanger']);
  462.                     $bedroom->setBedmirror($b['bedmirror']);
  463.                     $bedroom->setBedwardrobe($b['bedwardrobe']);
  464.                     $bedroom->setBedbin($b['bedbin']);
  465.                     $bedroom->setBednotes($b['bednotes']);
  466.                     // $bedroom->setForms($forms);
  467.                     $f->addBedroom$bedroom );
  468.                     $entityManager->persist($bedroom);
  469.                 }
  470.             }
  471.             $baths $bathRepository->findByFormId$f->getId() );
  472.             foreach( $baths as $bath ) {
  473.                 $entityManager->remove($bath);
  474.                 $entityManager->flush();
  475.             }
  476.             foreach( $bathrooms as $b ) {
  477.                 if( $b['name'] != '' ) {
  478.                     $bathroom = new Bathroom();
  479.                     $bathroom->setName($b['name']);
  480.                     $bathroom->setBathdecor($b['bathdecor']);
  481.                     $bathroom->setBathfurniture($b['bathfurniture']);
  482.                     $bathroom->setBathflooring($b['bathflooring']);
  483.                     $bathroom->setBathlighting($b['bathlighting']);
  484.                     $bathroom->setBathbrush($b['bathbrush']);
  485.                     $bathroom->setBathmirror($b['bathmirror']);
  486.                     $bathroom->setBathshave($b['bathshave']);
  487.                     $bathroom->setBathmat($b['bathmat']);
  488.                     $bathroom->setBathbin($b['bathbin']);
  489.                     $bathroom->setBathtowelrack($b['bathtowelrack']);
  490.             $bathroom->setBathnotes($b['bathnotes']);
  491.             if( isset($b['fsvi']) ) {
  492.                 $bathroom->setFsvi($b['fsvi']);
  493.             }
  494.             if( isset($b['fscoment']) ) {
  495.                         $bathroom->setFscoment($b['fscoment']);
  496.                     }
  497.                     $f->addBathroom$bathroom );
  498.                     $entityManager->persist($bathroom);
  499.                 }
  500.             }
  501.             $f->setIsDeletedfalse );
  502.             $entityManager->persist($f);
  503.             $entityManager->flush();
  504.     
  505.             $forms $serializer->serialize($f'json');
  506.     
  507.             $response = new Response();
  508.             $response->setContent($forms);
  509.             $response->headers->set('Content-Type''application/json');
  510.     
  511.             return $response;
  512.             // $f = $this->get('serializer')->serialize($f, 'json');
  513.             // // $response = new Response($f, 401);
  514.             // $response = new Response($f, 200);
  515.             // $response->headers->set('Content-Type', 'application/json');
  516.             // return $response;
  517.         }
  518.         $errors = array();
  519.         foreach ($form->getErrors(true) as $key => $error) {
  520.             $template $error->getMessageTemplate();
  521.             $parameters $error->getMessageParameters();
  522.             foreach ($parameters as $var => $value) {
  523.                 $template str_replace($var$value$template);
  524.             }
  525.             $errors[] = $template;
  526.         }
  527.         // var_dump( $errors );
  528.         // var_dump( (string)$form->getErrors(true) );
  529.         return new JsonResponse($errors401);
  530.     }
  531.     /**
  532.      * @Route("/show/{uuid}", name="forms_show", methods={"GET"})
  533.      */
  534.     public function show($uuidFormsRepository $formsRepository): Response
  535.     {
  536.         // Get count of all forms
  537.         $form $formsRepository->getFormFromUuid$uuid );
  538.         if( $form == null ) {
  539.             return new Response('Error'404);
  540.         }
  541.         
  542.         return $this->render('forms/show.html.twig', [
  543.             'f' => $form,
  544.         ]);
  545.     }
  546.     /**
  547.      * @Route("/{id}/edit", name="forms_edit", methods={"GET","POST"})
  548.      */
  549.     public function edit(Request $requestForms $f): Response
  550.     {
  551.         if( empty( $f->getDate() ) ) {
  552.             $f->setDate( new \DateTime() );
  553.         }
  554.         $form $this->createForm(FormsType::class, $f);
  555.         $form->handleRequest($request);
  556.         if ($form->isSubmitted() && $form->isValid()) {
  557.             // Make sure a uuid is set
  558.             if( empty( $f->getUuid() ) ) {
  559.                 $f->setUuidUuid::uuid4() );
  560.             }
  561.             // Handle image uploads
  562.             $f $this->handleUploads$form$f );
  563.             // Calculate total scores
  564.             $f $this->calculateScores$f );
  565.             $this->getDoctrine()->getManager()->flush();
  566.             return $this->redirectToRoute('forms_index');
  567.         }
  568.         return $this->render('forms/edit.html.twig', [
  569.             'f' => $f,
  570.             'form' => $form->createView(),
  571.         ]);
  572.     }
  573.     
  574.     /**
  575.      * @Route("/form/{uuid}", name="forms_form", defaults={"uuid"=""}, methods={"GET"})
  576.      */
  577.     public function form()
  578.     {
  579.         $f = new Forms();
  580.         $form $this->createForm(FormsType::class, $f);
  581.         return $this->render('forms/new.html.twig', [
  582.             'f' => $f,
  583.             'form' => $form->createView(),
  584.         ]);
  585.     }
  586.     /**
  587.      * @Route("/delete/{uuid}", name="forms_delete", defaults={"uuid"=""}, methods={"GET"})
  588.      */
  589.     public function form_delete($uuidRequest $requestFormsRepository $formsRepository)
  590.     {
  591.         $f $formsRepository->getFormFromUuid$uuid );
  592.         if( ! $f ) {
  593.             $f = new Forms();
  594.             $f->setUuid($uuid);
  595.         }
  596.         return $this->render('forms/delete.html.twig', [
  597.             "f" => $f
  598.         ]);
  599.     }
  600.     /**
  601.      * @Route("/delete/confirm", name="forms_delete_confirm", methods={"POST"})
  602.      */
  603.     public function form_delete_confirm(Request $requestFormsRepository $formsRepository)
  604.     {
  605.         if ($this->isCsrfTokenValid('delete'$request->request->get('_token'))) {
  606.             // Remove server copy
  607.             $f $formsRepository->getFormFromUuid$request->request->get('uuid') );
  608.             if( $f ) {
  609.                 $entityManager $this->getDoctrine()->getManager();
  610.                 // $entityManager->remove($f);
  611.                 $f->setIsDeleted(true);
  612.                 $entityManager->flush();
  613.             }
  614.         }
  615.         return $this->redirectToRoute('forms_index');
  616.     }
  617.     public function handleUploads$form$f ) {
  618.         // return $f;
  619.         // print "<pre>"; print_r( $_FILES ); print_r( $_POST );
  620.         foreach( $_FILES as $fieldname => $file ) {
  621.             $fileName $file['name'];
  622.             $fileSize $file['size'];
  623.             $fileTmpName  $file['tmp_name'];
  624.             $fileType $file['type'];
  625.             $fileExtension pathinfo($fileNamePATHINFO_EXTENSION);
  626.             $filename pathinfo($fileNamePATHINFO_FILENAME);
  627.             // $filename = $filename.'-'.uniqid().'.'.$fileExtension;
  628.             $filename $filename.'.'.$fileExtension;
  629.             $uploadPath $this->getParameter('upload_directory') . '/' $f->getUuid() . '/' $filename;
  630.             // print $uploadPath; exit;
  631.             if( !is_dir$this->getParameter('upload_directory') . '/' $f->getUuid() ) ) {
  632.                 mkdir$this->getParameter('upload_directory') . '/' $f->getUuid() );
  633.             }
  634.             if( !is_dir$this->getParameter('upload_directory') . '/' $f->getUuid() . '/_thumb/' ) ) {
  635.                 mkdir$this->getParameter('upload_directory') . '/' $f->getUuid() . '/_thumb/' );
  636.             }
  637.             if( !is_dir$this->getParameter('upload_directory') . '/' $f->getUuid() . '/_medium/' ) ) {
  638.                 mkdir$this->getParameter('upload_directory') . '/' $f->getUuid() . '/_medium/' );
  639.             }
  640.             move_uploaded_file($fileTmpName$uploadPath);
  641.             if( file_exists$uploadPath ) ) {
  642.                 $allowed = array('gif''png''jpg''jpeg');
  643.                 if (in_arraystrtolower($fileExtension), $allowed) ) {
  644.                     $img Image::make$this->getParameter('upload_directory') . '/' $f->getUuid() .'/' $filename )->orientate();
  645.                     $img->resize(800800, function ($constraint) {
  646.                         $constraint->aspectRatio();
  647.                         $constraint->upsize();
  648.                     });
  649.                     // $img->fit(200, 200);
  650.                     $img->save$this->getParameter('upload_directory') . '/' $f->getUuid() . '/_medium/' $filename );
  651.                     // $img = Image::make( $this->getParameter('upload_directory') . '/' . $f->getUuid() .'/' . $filename );
  652.                     $img->fit(7575);
  653.                     $img->save$this->getParameter('upload_directory') . '/' $f->getUuid() . '/_thumb/' $filename );
  654.                     $img->destroy();
  655.                 }
  656.                 // Add to entity
  657.                 $f->{'set'.$fieldname}($filename);
  658.             }
  659.         }
  660.         // Look for empty image fields and remove them from database
  661.         $imageFields = [
  662.             'extpic1''extpic2''extpic3''extpic4',
  663.             'bedpic1''bedpic2''bedpic3''bedpic4',
  664.             'bathpic1''bathpic2''bathpic3''bathpic4',
  665.             'kitpic1''kitpci2''kitpic3''kitpic4',
  666.             'ppic1''ppic2''ppic3''ppic4',
  667.             'mpic1''mpic2''mpic3''mpic4',
  668.             'cpic1''cpic2''cpic3''cpic4',
  669.             'miscpic1''miscpic2''miscpic3''miscpic4',
  670.         ];
  671.         foreach( $imageFields as $fieldname ) {
  672.             $image $form[$fieldname]->getData();
  673.             if( isset($_POST[$fieldname]) && $_POST[$fieldname] === 'null' ) {
  674.                 $f->{'set'.$fieldname}(null);
  675.             }
  676.         }
  677.         return $f;
  678.     }
  679.     public function calculateScores$f 
  680.     {
  681.         $f->setExteriorTotal100.0 15.0 * ( (float)$f->getExtbuildappear() + (float)$f->getExtparkfacility() + (float)$f->getExtsiding() ) );
  682.         $f->setBedroomScore100.0 30.0 * ( (float)$f->getBeddecor() + (float)$f->getBedfurniture() + (float)$f->getBedflooring() + (float)$f->getBedlight() + (float)$f->getBedbeds() + (float)$f->getBedbedding() ) );
  683.         $f->setBathroomScore100.0 20.0 * ( (float)$f->getBathdecor() + (float)$f->getBathfurniture() + (float)$f->getBathflooring() + (float)$f->getBathlighting() ) );
  684.         $f->setKitchenScore100.0 35.0 * ( (float)$f->getKitdecor() + (float)$f->getKitfurniture() + (float)$f->getKitflooring() + (float)$f->getKitlighting() + (float)$f->getKitgas() + (float)$f->getKitequipment() + (float)$f->getKitutensils() ) );
  685.         $f->setCleanlinessScore100.0 20.0 * ( (float)$f->getCbath() + (float)$f->getCkit() + (float)$f->getCbed() + (float)$f->getCliving()) );
  686.         $f->setManagementEfficiencyScore100.0 30.0 * ( (float)$f->getMinfo() + (float)$f->getMwelcome() + (float)$f->getMarrival() + (float)$f->getMwifi() + (float)$f->getMaccessories() + (float)$f->getMspace() ) );
  687.         $f->setPublicAreaScore100.0 20.0 * ( (float)$f->getPdecor() + (float)$f->getPfurniture() + (float)$f->getPflooring() + (float)$f->getPlighting() ) );
  688.         $f->setTotalScore100.0 700.0 * ( (float)$f->getExteriorTotal() + (float)$f->getBedroomScore() + (float)$f->getBathroomScore() + (float)$f->getKitchenScore() + (float)$f->getCleanlinessScore() + (float)$f->getManagementEfficiencyScore() + $f->getPublicAreaScore() ) );
  689.         $f->setStars$this->getStarRating$f->getTotalScore() ) );
  690.         return $f;
  691.     }
  692.     public function getStarRating($totalScore
  693.     {
  694.         $stars 0;
  695.         if( $totalScore >= 34 && $totalScore 48 ) {
  696.             $stars 1;
  697.         } 
  698.         elseif( $totalScore >= 48 && $totalScore 60 ) {
  699.             $stars 2;
  700.         } 
  701.         elseif( $totalScore >= 60 && $totalScore 68 ) {
  702.             $stars 3;
  703.         }
  704.         elseif( $totalScore >= 68 && $totalScore 75 ) {
  705.             $stars 3.5;
  706.         }
  707.         elseif( $totalScore >= 75 && $totalScore 84 ) {
  708.             $stars 4;
  709.         }
  710.         elseif( $totalScore >= 84 && $totalScore 91 ) {
  711.             $stars 4.5;
  712.         }
  713.         elseif( $totalScore >= 91 ) {
  714.             $stars 5;
  715.         }
  716.         return $stars;
  717.     }
  718. }