<?php
namespace App\Controller;
use App\Entity\Forms;
use App\Entity\Bedroom;
use App\Entity\Bathroom;
use App\Form\FormsType;
use App\Repository\FormsRepository;
use App\Repository\BedroomRepository;
use App\Repository\BathroomRepository;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Annotation\Route;
use Intervention\Image\ImageManagerStatic as Image;
use Intervention\Image\Size;
use Ramsey\Uuid\Uuid;
use Symfony\Component\Serializer\SerializerInterface;
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
// use Symfony\Component\Serializer\Normalizer\ArrayDenormalizer;
// use Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer;
use Symfony\Component\Serializer\Serializer;
/**
* @Route("/forms")
*/
class FormsController extends AbstractController
{
/**
* @Route("/", name="forms_index", methods={"GET"})
*/
public function index(Request $request, FormsRepository $formsRepository): Response
{
// Get count of all forms
// $forms = $formsRepository->getAllForms();
// $totalResults = count($forms);
// print $totalResults;
// $page = max( 1, $request->query->getInt('page', 1) );
// $paginator = $formsRepository->getFormsPaginator( $page );
// print $paginator->getIterator()->count();
// exit;
return $this->render('forms/index.html.twig', [
// 'forms' => $paginator,
// 'totalResults' => $totalResults,
// 'currentPage' => $page,
// 'perPage' => $formsRepository::PAGINATOR_PER_PAGE,
// 'routeName' => 'forms_index',
]);
}
/**
* @Route("/api/list", name="forms_api_list", methods={"GET"})
*/
public function api_list(Request $request, FormsRepository $formsRepository)
{
if( $this->getUser() === null ) {
$forms = $this->get('serializer')->serialize([], 'json');
$response = new Response();
$response->setContent($forms);
$response->headers->set('Content-Type', 'application/json');
return $response;
}
// Get count of all forms
$forms = $formsRepository->getAllForms();
$totalResults = count($forms);
// print $totalResults;
// $page = max( 1, $request->query->getInt('page', 1) );
// $forms = $formsRepository->getFormsAsArray( $page, $request->query->get('brand') );
$page = max( 1, $request->query->getInt('page', 1) );
$paginator = $formsRepository->getFormsPaginator( $page,
$request->query->get('brand'),
$request->query->get('filter', '') );
// print $paginator->getIterator()->count();
$forms = $paginator;
// exit;
// $forms2 = [];
// foreach( $forms as $i => $form ) {
// $forms2[$i]['forms'] = $form;
// }
$encoder = new JsonEncoder();
$defaultContext = [
AbstractNormalizer::CIRCULAR_REFERENCE_HANDLER => function ($object, $format, $context) {
return $object->getUuid();
},
];
$normalizer = new ObjectNormalizer(null, null, null, null, null, null, $defaultContext);
$serializer = new Serializer([$normalizer], [$encoder]);
$forms = $serializer->serialize($forms, 'json');
$response = new Response();
$response->setContent($forms);
$response->headers->set('Content-Type', 'application/json');
return $response;
}
/**
* @Route("/api/get/{uuid}", name="forms_api_get", methods={"GET"})
*/
public function api_get($uuid, Request $request, FormsRepository $formsRepository)
{
// Get count of all forms
$form = $formsRepository->getFormFromUuid( $uuid );
if( $form == null ) {
return new Response('Error', 404);
}
$encoder = new JsonEncoder();
$defaultContext = [
AbstractNormalizer::CIRCULAR_REFERENCE_HANDLER => function ($object, $format, $context) {
return $object->getUuid();
},
];
$normalizer = new ObjectNormalizer(null, null, null, null, null, null, $defaultContext);
$serializer = new Serializer([$normalizer], [$encoder]);
$form = $serializer->serialize($form, 'json');
// $form = $this->createForm(FormsType::class, $form);
// $form = $this->get('serializer')->serialize($form, 'json');
$response = new Response();
$response->setContent($form);
$response->headers->set('Content-Type', 'application/json');
return $response;
}
/**
* @Route("/api/loggedin", name="forms_api_loggedin", methods={"GET"})
*/
public function api_loggedin(
SerializerInterface $serializer,
Request $request,
LoggerInterface $logger
)
{
if( $this->getUser() === null ) {
$auth = [
'status' => 'error',
'message' => 'Not logged in'
];
$auth = $this->get('serializer')->serialize($auth, 'json');
$response = new Response($auth, 200);
$response->headers->set('Content-Type', 'application/json');
} else {
$logger->debug(
sprintf(
"%s by %s",
$request->attributes->get('_route'),
$this->getUser()->getUsername()
)
);
$auth = [
'status' => 'ok',
'user' => $this->getUser()
];
$auth = $this->get('serializer')->serialize($auth, 'json');
$response = new Response($auth, 200);
$response->headers->set('Content-Type', 'application/json');
}
return $response;
}
/**
* @Route("/new", name="forms_new", methods={"GET","POST"})
*/
public function new(Request $request): Response
{
$f = new Forms();
$form = $this->createForm(FormsType::class, $f, [
'csrf_protection' => false,
]);
// $form->handleRequest($request);
$form->submit( $request->request->all() );
// var_dump( $request->request->all() );
// var_dump( $form->isSubmitted() );
// exit;
if ($form->isSubmitted() && $form->isValid()) {
$f = $this->handleUploads( $form, $f );
// Calculate total scores
$f = $this->calculateScores( $f );
$f->setUuid( Uuid::uuid4() );
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($f);
$entityManager->flush();
return $this->redirectToRoute('forms_index');
}
return $this->render('forms/new.html.twig', [
'f' => $f,
'form' => $form->createView(),
]);
}
/**
* @Route("/api/fix", name="forms_api_fix", methods={"GET"})
*/
public function api_fix(Request $request, FormsRepository $formsRepository, BedroomRepository $bedRepository, BathroomRepository $bathRepository, LoggerInterface $logger): Response
{
// $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"}';
$_POST = json_decode($postjson, JSON_OBJECT_AS_ARRAY);
// print "<pre>";
// print_r( $_POST );
// print_r( $request->request->all() );
// print "uuid: " . $request->request->get( 'uuid' );
// print "</pre>";
// exit;
$entityManager = $this->getDoctrine()->getManager();
$f = $formsRepository->getFormFromUuid( $_POST[ 'uuid' ] );
if( $f == null ) {
$f = new Forms();
} else {
$f->getBedroom()->clear();
$f->getBathroom()->clear();
// $entityManager->persist($f);
// $entityManager->flush();
}
// var_dump( $f->getPropname() );
// return new JsonResponse([], 401);
$all = $_POST;
$bedrooms = isset( $all['bedroom'] ) ? $all['bedroom'] : [];
unset( $all['bedroom'] );
$bathrooms = isset( $all['bathroom'] ) ? $all['bathroom'] : [];
unset( $all['bathroom'] );
unset( $all['date'] );
$encoder = new JsonEncoder();
$defaultContext = [
AbstractNormalizer::CIRCULAR_REFERENCE_HANDLER => function ($object, $format, $context) {
return $object->getUuid();
},
];
$normalizer = new ObjectNormalizer(null, null, null, null, null, null, $defaultContext);
$serializer = new Serializer([$normalizer], [$encoder]);
// $f2 = $serializer->serialize($f, 'json');
// var_dump( $entityManager->getClassMetadata(get_class($f))->getName() );
// var_dump( $f->getDate() );
// $f2 = $serializer->serialize($f, 'json');
// return new Response($f2, 401);
$form = $this->createForm(FormsType::class, $f, [
'csrf_protection' => false,
'allow_extra_fields' => true,
'data_class' => Forms::class,
// 'data_class' => null,
]);
$form->submit( $all );
// if( empty( $f->getDate() ) ) {
// $f->setDate( new \DateTime() );
// }
if ($form->isSubmitted() && $form->isValid()) {
$f->setUuid( $_POST['uuid'] );
$f = $this->handleUploads( $form, $f );
// Calculate total scores
// $f = $this->calculateScores( $f );
$dateImmutable = \DateTime::createFromFormat('Y-m-d', $_POST['date'] );
$f->setDate( $dateImmutable );
$f->setBrand( $_POST['brand'] );
if( $this->getUser() ) {
$f->setUserId( $this->getUser()->getId() );
} else {
$f->setUserId( 1 );
}
$f->setVersion( $f->getVersion() + 1 );
$f->setExteriorTotal( $_POST['exteriorTotal'] );
$f->setBedroomScore( $_POST['bedroomScore'] );
$f->setBathroomScore( $_POST['bathroomScore'] );
$f->setKitchenScore( $_POST['kitchenScore'] );
$f->setCleanlinessScore( $_POST['cleanlinessScore'] );
$f->setManagementEfficiencyScore( $_POST['managementEfficiencyScore'] );
$f->setPublicAreaScore( $_POST['publicAreaScore'] );
$f->setTotalScore( $_POST['totalScore'] );
$f->setStars( $_POST['stars'] );
$beds = $bedRepository->findByFormId( $f->getId() );
foreach( $beds as $bed ) {
$entityManager->remove($bed);
$entityManager->flush();
}
foreach( $bedrooms as $b ) {
if( $b['name'] != '' ) {
$bedroom = new Bedroom();
$bedroom->setName($b['name']);
$bedroom->setBeddecor($b['beddecor']);
$bedroom->setBedfurniture($b['bedfurniture']);
$bedroom->setBedflooring($b['bedflooring']);
$bedroom->setBedlight($b['bedlight']);
$bedroom->setBedbeds($b['bedbeds']);
$bedroom->setBedbedding($b['bedbedding']);
$bedroom->setBediflooring($b['bediflooring']);
$bedroom->setBedcurtain($b['bedcurtain']);
$bedroom->setBedheadboard($b['bedheadboard']);
$bedroom->setBedmatress($b['bedmatress']);
$bedroom->setBedmatressp($b['bedmatressp']);
$bedroom->setBedduvet($b['bedduvet']);
$bedroom->setBedvalances($b['bedvalances']);
$bedroom->setBedpillow($b['bedpillow']);
$bedroom->setBedpillowslips($b['bedpillowslips']);
$bedroom->setBedbstable($b['bedbstable']);
$bedroom->setBedhanger($b['bedhanger']);
$bedroom->setBedmirror($b['bedmirror']);
$bedroom->setBedwardrobe($b['bedwardrobe']);
$bedroom->setBedbin($b['bedbin']);
$bedroom->setBednotes($b['bednotes']);
// $bedroom->setForms($forms);
$f->addBedroom( $bedroom );
$entityManager->persist($bedroom);
}
}
$baths = $bathRepository->findByFormId( $f->getId() );
foreach( $baths as $bath ) {
$entityManager->remove($bath);
$entityManager->flush();
}
foreach( $bathrooms as $b ) {
if( $b['name'] != '' ) {
$bathroom = new Bathroom();
$bathroom->setName($b['name']);
$bathroom->setBathdecor($b['bathdecor']);
$bathroom->setBathfurniture($b['bathfurniture']);
$bathroom->setBathflooring($b['bathflooring']);
$bathroom->setBathlighting($b['bathlighting']);
$bathroom->setBathbrush($b['bathbrush']);
$bathroom->setBathmirror($b['bathmirror']);
$bathroom->setBathshave($b['bathshave']);
$bathroom->setBathmat($b['bathmat']);
$bathroom->setBathbin($b['bathbin']);
$bathroom->setBathtowelrack($b['bathtowelrack']);
$bathroom->setBathnotes($b['bathnotes']);
if( isset($b['fsvi']) ) {
$bathroom->setFsvi($b['fsvi']);
}
if( isset($b['fscoment']) ) {
$bathroom->setFscoment($b['fscoment']);
}
$f->addBathroom( $bathroom );
$entityManager->persist($bathroom);
}
}
$f->setIsDeleted( false );
$entityManager->persist($f);
$entityManager->flush();
$forms = $serializer->serialize($f, 'json');
$response = new Response();
$response->setContent($forms);
$response->headers->set('Content-Type', 'application/json');
return $response;
// $f = $this->get('serializer')->serialize($f, 'json');
// // $response = new Response($f, 401);
// $response = new Response($f, 200);
// $response->headers->set('Content-Type', 'application/json');
// return $response;
}
$errors = array();
foreach ($form->getErrors(true) as $key => $error) {
$template = $error->getMessageTemplate();
$parameters = $error->getMessageParameters();
foreach ($parameters as $var => $value) {
$template = str_replace($var, $value, $template);
}
$errors[] = $template;
}
// var_dump( $errors );
// var_dump( (string)$form->getErrors(true) );
return new JsonResponse($errors, 401);
}
/**
* @Route("/api/post", name="forms_api_post", methods={"POST"})
*/
public function api_post(Request $request, FormsRepository $formsRepository, BedroomRepository $bedRepository, BathroomRepository $bathRepository, LoggerInterface $logger): Response
{
$logger->debug( 'API POST', $_POST );
$logger->debug( 'API FILES', $_FILES );
// print_r( $_FILES ); exit;
// print_r( $_POST );
// return new JsonResponse([], 401);
if( !isset( $_POST['stars'] ) ) {
$msg = [ "error" => "Stars parameter not set. Probably missing some data."];
return new JsonResponse($msg, 401);
}
$entityManager = $this->getDoctrine()->getManager();
$f = $formsRepository->getFormFromUuid( $request->request->get( 'uuid' ) );
if( $f == null ) {
$f = new Forms();
} else {
$f->getBedroom()->clear();
$f->getBathroom()->clear();
// $entityManager->persist($f);
// $entityManager->flush();
}
// var_dump( $f->getPropname() );
// return new JsonResponse([], 401);
$all = $request->request->all();
$bedrooms = isset( $all['bedroom'] ) ? $all['bedroom'] : [];
unset( $all['bedroom'] );
$bathrooms = isset( $all['bathroom'] ) ? $all['bathroom'] : [];
unset( $all['bathroom'] );
unset( $all['date'] );
$encoder = new JsonEncoder();
$defaultContext = [
AbstractNormalizer::CIRCULAR_REFERENCE_HANDLER => function ($object, $format, $context) {
return $object->getUuid();
},
];
$normalizer = new ObjectNormalizer(null, null, null, null, null, null, $defaultContext);
$serializer = new Serializer([$normalizer], [$encoder]);
// $f2 = $serializer->serialize($f, 'json');
// var_dump( $entityManager->getClassMetadata(get_class($f))->getName() );
// var_dump( $f->getDate() );
// $f2 = $serializer->serialize($f, 'json');
// return new Response($f2, 401);
$form = $this->createForm(FormsType::class, $f, [
'csrf_protection' => false,
'allow_extra_fields' => true,
'data_class' => Forms::class,
// 'data_class' => null,
]);
$form->submit( $all );
// if( empty( $f->getDate() ) ) {
// $f->setDate( new \DateTime() );
// }
if ($form->isSubmitted() && $form->isValid()) {
$f->setUuid( $request->request->get('uuid') );
$f = $this->handleUploads( $form, $f );
// Calculate total scores
// $f = $this->calculateScores( $f );
$dateImmutable = \DateTime::createFromFormat('Y-m-d', $request->request->get('date') );
$f->setDate( $dateImmutable );
$f->setBrand( $request->request->get('brand') );
if( $this->getUser() ) {
$f->setUserId( $this->getUser()->getId() );
} else {
$f->setUserId( 1 );
}
$f->setVersion( $f->getVersion() + 1 );
$f->setExteriorTotal( $request->request->get('exteriorTotal') );
$f->setBedroomScore( $request->request->get('bedroomScore') );
$f->setBathroomScore( $request->request->get('bathroomScore') );
$f->setKitchenScore( $request->request->get('kitchenScore') );
$f->setCleanlinessScore( $request->request->get('cleanlinessScore') );
$f->setManagementEfficiencyScore( $request->request->get('managementEfficiencyScore') );
$f->setPublicAreaScore( $request->request->get('publicAreaScore') );
$f->setTotalScore( $request->request->get('totalScore') );
$f->setStars( $request->request->get('stars') );
$beds = $bedRepository->findByFormId( $f->getId() );
foreach( $beds as $bed ) {
$entityManager->remove($bed);
$entityManager->flush();
}
foreach( $bedrooms as $b ) {
if( $b['name'] != '' ) {
$bedroom = new Bedroom();
$bedroom->setName($b['name']);
$bedroom->setBeddecor($b['beddecor']);
$bedroom->setBedfurniture($b['bedfurniture']);
$bedroom->setBedflooring($b['bedflooring']);
$bedroom->setBedlight($b['bedlight']);
$bedroom->setBedbeds($b['bedbeds']);
$bedroom->setBedbedding($b['bedbedding']);
$bedroom->setBediflooring($b['bediflooring']);
$bedroom->setBedcurtain($b['bedcurtain']);
$bedroom->setBedheadboard($b['bedheadboard']);
$bedroom->setBedmatress($b['bedmatress']);
$bedroom->setBedmatressp($b['bedmatressp']);
$bedroom->setBedduvet($b['bedduvet']);
$bedroom->setBedvalances($b['bedvalances']);
$bedroom->setBedpillow($b['bedpillow']);
$bedroom->setBedpillowslips($b['bedpillowslips']);
$bedroom->setBedbstable($b['bedbstable']);
$bedroom->setBedhanger($b['bedhanger']);
$bedroom->setBedmirror($b['bedmirror']);
$bedroom->setBedwardrobe($b['bedwardrobe']);
$bedroom->setBedbin($b['bedbin']);
$bedroom->setBednotes($b['bednotes']);
// $bedroom->setForms($forms);
$f->addBedroom( $bedroom );
$entityManager->persist($bedroom);
}
}
$baths = $bathRepository->findByFormId( $f->getId() );
foreach( $baths as $bath ) {
$entityManager->remove($bath);
$entityManager->flush();
}
foreach( $bathrooms as $b ) {
if( $b['name'] != '' ) {
$bathroom = new Bathroom();
$bathroom->setName($b['name']);
$bathroom->setBathdecor($b['bathdecor']);
$bathroom->setBathfurniture($b['bathfurniture']);
$bathroom->setBathflooring($b['bathflooring']);
$bathroom->setBathlighting($b['bathlighting']);
$bathroom->setBathbrush($b['bathbrush']);
$bathroom->setBathmirror($b['bathmirror']);
$bathroom->setBathshave($b['bathshave']);
$bathroom->setBathmat($b['bathmat']);
$bathroom->setBathbin($b['bathbin']);
$bathroom->setBathtowelrack($b['bathtowelrack']);
$bathroom->setBathnotes($b['bathnotes']);
if( isset($b['fsvi']) ) {
$bathroom->setFsvi($b['fsvi']);
}
if( isset($b['fscoment']) ) {
$bathroom->setFscoment($b['fscoment']);
}
$f->addBathroom( $bathroom );
$entityManager->persist($bathroom);
}
}
$f->setIsDeleted( false );
$entityManager->persist($f);
$entityManager->flush();
$forms = $serializer->serialize($f, 'json');
$response = new Response();
$response->setContent($forms);
$response->headers->set('Content-Type', 'application/json');
return $response;
// $f = $this->get('serializer')->serialize($f, 'json');
// // $response = new Response($f, 401);
// $response = new Response($f, 200);
// $response->headers->set('Content-Type', 'application/json');
// return $response;
}
$errors = array();
foreach ($form->getErrors(true) as $key => $error) {
$template = $error->getMessageTemplate();
$parameters = $error->getMessageParameters();
foreach ($parameters as $var => $value) {
$template = str_replace($var, $value, $template);
}
$errors[] = $template;
}
// var_dump( $errors );
// var_dump( (string)$form->getErrors(true) );
return new JsonResponse($errors, 401);
}
/**
* @Route("/show/{uuid}", name="forms_show", methods={"GET"})
*/
public function show($uuid, FormsRepository $formsRepository): Response
{
// Get count of all forms
$form = $formsRepository->getFormFromUuid( $uuid );
if( $form == null ) {
return new Response('Error', 404);
}
return $this->render('forms/show.html.twig', [
'f' => $form,
]);
}
/**
* @Route("/{id}/edit", name="forms_edit", methods={"GET","POST"})
*/
public function edit(Request $request, Forms $f): Response
{
if( empty( $f->getDate() ) ) {
$f->setDate( new \DateTime() );
}
$form = $this->createForm(FormsType::class, $f);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// Make sure a uuid is set
if( empty( $f->getUuid() ) ) {
$f->setUuid( Uuid::uuid4() );
}
// Handle image uploads
$f = $this->handleUploads( $form, $f );
// Calculate total scores
$f = $this->calculateScores( $f );
$this->getDoctrine()->getManager()->flush();
return $this->redirectToRoute('forms_index');
}
return $this->render('forms/edit.html.twig', [
'f' => $f,
'form' => $form->createView(),
]);
}
/**
* @Route("/form/{uuid}", name="forms_form", defaults={"uuid"=""}, methods={"GET"})
*/
public function form()
{
$f = new Forms();
$form = $this->createForm(FormsType::class, $f);
return $this->render('forms/new.html.twig', [
'f' => $f,
'form' => $form->createView(),
]);
}
/**
* @Route("/delete/{uuid}", name="forms_delete", defaults={"uuid"=""}, methods={"GET"})
*/
public function form_delete($uuid, Request $request, FormsRepository $formsRepository)
{
$f = $formsRepository->getFormFromUuid( $uuid );
if( ! $f ) {
$f = new Forms();
$f->setUuid($uuid);
}
return $this->render('forms/delete.html.twig', [
"f" => $f
]);
}
/**
* @Route("/delete/confirm", name="forms_delete_confirm", methods={"POST"})
*/
public function form_delete_confirm(Request $request, FormsRepository $formsRepository)
{
if ($this->isCsrfTokenValid('delete', $request->request->get('_token'))) {
// Remove server copy
$f = $formsRepository->getFormFromUuid( $request->request->get('uuid') );
if( $f ) {
$entityManager = $this->getDoctrine()->getManager();
// $entityManager->remove($f);
$f->setIsDeleted(true);
$entityManager->flush();
}
}
return $this->redirectToRoute('forms_index');
}
public function handleUploads( $form, $f ) {
// return $f;
// print "<pre>"; print_r( $_FILES ); print_r( $_POST );
foreach( $_FILES as $fieldname => $file ) {
$fileName = $file['name'];
$fileSize = $file['size'];
$fileTmpName = $file['tmp_name'];
$fileType = $file['type'];
$fileExtension = pathinfo($fileName, PATHINFO_EXTENSION);
$filename = pathinfo($fileName, PATHINFO_FILENAME);
// $filename = $filename.'-'.uniqid().'.'.$fileExtension;
$filename = $filename.'.'.$fileExtension;
$uploadPath = $this->getParameter('upload_directory') . '/' . $f->getUuid() . '/' . $filename;
// print $uploadPath; exit;
if( !is_dir( $this->getParameter('upload_directory') . '/' . $f->getUuid() ) ) {
mkdir( $this->getParameter('upload_directory') . '/' . $f->getUuid() );
}
if( !is_dir( $this->getParameter('upload_directory') . '/' . $f->getUuid() . '/_thumb/' ) ) {
mkdir( $this->getParameter('upload_directory') . '/' . $f->getUuid() . '/_thumb/' );
}
if( !is_dir( $this->getParameter('upload_directory') . '/' . $f->getUuid() . '/_medium/' ) ) {
mkdir( $this->getParameter('upload_directory') . '/' . $f->getUuid() . '/_medium/' );
}
move_uploaded_file($fileTmpName, $uploadPath);
if( file_exists( $uploadPath ) ) {
$allowed = array('gif', 'png', 'jpg', 'jpeg');
if (in_array( strtolower($fileExtension), $allowed) ) {
$img = Image::make( $this->getParameter('upload_directory') . '/' . $f->getUuid() .'/' . $filename )->orientate();
$img->resize(800, 800, function ($constraint) {
$constraint->aspectRatio();
$constraint->upsize();
});
// $img->fit(200, 200);
$img->save( $this->getParameter('upload_directory') . '/' . $f->getUuid() . '/_medium/' . $filename );
// $img = Image::make( $this->getParameter('upload_directory') . '/' . $f->getUuid() .'/' . $filename );
$img->fit(75, 75);
$img->save( $this->getParameter('upload_directory') . '/' . $f->getUuid() . '/_thumb/' . $filename );
$img->destroy();
}
// Add to entity
$f->{'set'.$fieldname}($filename);
}
}
// Look for empty image fields and remove them from database
$imageFields = [
'extpic1', 'extpic2', 'extpic3', 'extpic4',
'bedpic1', 'bedpic2', 'bedpic3', 'bedpic4',
'bathpic1', 'bathpic2', 'bathpic3', 'bathpic4',
'kitpic1', 'kitpci2', 'kitpic3', 'kitpic4',
'ppic1', 'ppic2', 'ppic3', 'ppic4',
'mpic1', 'mpic2', 'mpic3', 'mpic4',
'cpic1', 'cpic2', 'cpic3', 'cpic4',
'miscpic1', 'miscpic2', 'miscpic3', 'miscpic4',
];
foreach( $imageFields as $fieldname ) {
$image = $form[$fieldname]->getData();
if( isset($_POST[$fieldname]) && $_POST[$fieldname] === 'null' ) {
$f->{'set'.$fieldname}(null);
}
}
return $f;
}
public function calculateScores( $f )
{
$f->setExteriorTotal( 100.0 / 15.0 * ( (float)$f->getExtbuildappear() + (float)$f->getExtparkfacility() + (float)$f->getExtsiding() ) );
$f->setBedroomScore( 100.0 / 30.0 * ( (float)$f->getBeddecor() + (float)$f->getBedfurniture() + (float)$f->getBedflooring() + (float)$f->getBedlight() + (float)$f->getBedbeds() + (float)$f->getBedbedding() ) );
$f->setBathroomScore( 100.0 / 20.0 * ( (float)$f->getBathdecor() + (float)$f->getBathfurniture() + (float)$f->getBathflooring() + (float)$f->getBathlighting() ) );
$f->setKitchenScore( 100.0 / 35.0 * ( (float)$f->getKitdecor() + (float)$f->getKitfurniture() + (float)$f->getKitflooring() + (float)$f->getKitlighting() + (float)$f->getKitgas() + (float)$f->getKitequipment() + (float)$f->getKitutensils() ) );
$f->setCleanlinessScore( 100.0 / 20.0 * ( (float)$f->getCbath() + (float)$f->getCkit() + (float)$f->getCbed() + (float)$f->getCliving()) );
$f->setManagementEfficiencyScore( 100.0 / 30.0 * ( (float)$f->getMinfo() + (float)$f->getMwelcome() + (float)$f->getMarrival() + (float)$f->getMwifi() + (float)$f->getMaccessories() + (float)$f->getMspace() ) );
$f->setPublicAreaScore( 100.0 / 20.0 * ( (float)$f->getPdecor() + (float)$f->getPfurniture() + (float)$f->getPflooring() + (float)$f->getPlighting() ) );
$f->setTotalScore( 100.0 / 700.0 * ( (float)$f->getExteriorTotal() + (float)$f->getBedroomScore() + (float)$f->getBathroomScore() + (float)$f->getKitchenScore() + (float)$f->getCleanlinessScore() + (float)$f->getManagementEfficiencyScore() + $f->getPublicAreaScore() ) );
$f->setStars( $this->getStarRating( $f->getTotalScore() ) );
return $f;
}
public function getStarRating($totalScore)
{
$stars = 0;
if( $totalScore >= 34 && $totalScore < 48 ) {
$stars = 1;
}
elseif( $totalScore >= 48 && $totalScore < 60 ) {
$stars = 2;
}
elseif( $totalScore >= 60 && $totalScore < 68 ) {
$stars = 3;
}
elseif( $totalScore >= 68 && $totalScore < 75 ) {
$stars = 3.5;
}
elseif( $totalScore >= 75 && $totalScore < 84 ) {
$stars = 4;
}
elseif( $totalScore >= 84 && $totalScore < 91 ) {
$stars = 4.5;
}
elseif( $totalScore >= 91 ) {
$stars = 5;
}
return $stars;
}
}