src/Controller/Frontend/AjaxController.php line 336
<?phpnamespace App\Controller\Frontend;use App\Lib\HolidayWrapper;use Webbamboo\SpinnerBundle\Entity\Zip;use Doctrine\ORM\EntityManagerInterface;use Webbamboo\SpinnersCommon\Entity\Company;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\Routing\Annotation\Route;use Symfony\Component\HttpFoundation\JsonResponse;use Webbamboo\SpinnersCommon\Entity\Presubmission;use Webbamboo\SpinnersCommon\Repository\ZipRepository;use Webbamboo\SpinnersCommon\Repository\CityRepository;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;class AjaxController extends AbstractController{protected EntityManagerInterface $em;protected CityRepository $cityRepository;public function __construct(EntityManagerInterface $em,CityRepository $cityRepository){$this->em = $em;$this->cityRepository = $cityRepository;}#[Route('/endpoints/presubmissions', name:"endpoints_presubmissions", methods:['GET'])]public function presubmissionsAction(Request $request){$remoteIP = '178.79.154.17';$remoteIP2 = '139.162.163.203';if($request->getClientIp() === $remoteIP ||$request->getClientIp() === '78.83.25.137' ||$request->getClientIp() === $remoteIP2){$first = $request->query->get('first');$presubmissions = $this->em->getRepository(Presubmission::class)->createQueryBuilder('p')->where('p.id > :id')->setParameter('id', $first)->orderBy('p.id', 'ASC')->getQuery()->getResult();$responseArray = [];foreach($presubmissions as $presubmission){$responseArray[] = ['remote_id' => $presubmission->getId(),'content' => $presubmission->getContent(),'date' => $presubmission->getCreated()->format("Y-m-d H:i:s"),'ip' => $presubmission->getIp(),'siteVersion' => $presubmission->getSiteVersion(),'site_id' => 'FSD','url' => $presubmission->getUrl()];}return new JsonResponse($responseArray);}else{return new JsonResponse(['error' => 'FORBIDDEN']);}}#[Route('/ajax/zip', name:"ajax_zip", methods:['GET'])]public function zipAction(Request $request, ZipRepository $zipRepository){$results = $zipRepository->findByQuery($request->query->get('q'));$formattedResults = function() use($results){$response = [];foreach($results as &$result){$response[] = ['zip' => $result->getZip(),'city' => $result->getCity(),'display' => $result->getZip().' '.$result->getCity()];}return $response;};return new JsonResponse($formattedResults());}#[Route('/ajax/presubmission', name:"spinner_ajax_presubmission", methods:['GET'])]public function createPresubmissionAction(Request $request){$postParameters = $request->query->all();$presubmission = new Presubmission();$presubmission->setContent(print_r($postParameters, true));$presubmission->setCreated(new \DateTime('now', new \DateTimeZone('Europe/Stockholm')));$presubmission->setIp($request->getClientIp());$presubmission->setUrl($request->query->get("url"));$presubmission->setSiteVersion(isset($postParameters['form']['siteVersion']) ? $postParameters['form']['siteVersion'] : '');$this->em->persist($presubmission);$this->em->flush();return new JsonResponse(['success' => true]);}/*Error codes:400 - Bad request*/public function sanitizepermalinkAction(Request $request){if ($request->getMethod() == 'POST') {$title = $request->request->get('title', '');$response = new Response(json_encode(array('sanitized' => $this->generatePermalink($title))));} else {$response = new Response(json_encode(array('error' => '400')));}$response->headers->set('Content-Type', 'application/json');return $response;}private function generatePermalink($text, $delimiter='-'){$t = strtolower($text);$url=array("%C3%A5","%C3%A5","%C3%A4","%C3%A4","%C3%B6","%C3%B6","%26","-","", "","%E9", "","", "");$char=array("Å","å","Ä","ä","Ö","ö","&",":",".", "'","é", ",","(", ")");$str = str_replace($char, $url, $t);//$clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $str);$clean = trim($str, '-');$clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean);return $clean;}#[Route('/ajax/querycity', name:"spinner_ajax_autocomplete", methods: ['GET'])]public function querycityAction(Request $request){$cityName = $this->mb_ucfirst($request->query->get('name'));if ($cityName && !empty($cityName)) {$response = array();$query = $this->cityRepository->createQueryBuilder('c')->where('c.name LIKE :name')->setParameter('name', $cityName.'%')->getQuery();$result = $query->getResult();$duplicates = $this->getDuplicates($result);foreach ($result as $city) {$data = array();$name = isset($duplicates[$city->getName()]) ? $this->mb_ucfirst($city->getName()).'( '.$city->getCounty()->getName().' län )' : $this->mb_ucfirst($city->getName());$data['name'] = $name;$data['id'] = $this->generateUrl('spinner_front_city', array('countypermalink' => $this->mb_ucfirst($city->getCounty()->getPermalinkP()), 'citypermalink' => $this->mb_ucfirst($city->getPermalinkP()) ), true);if ($city->getName() == $cityName) {array_unshift($response, $data);} else {$response[] = $data;}}return new JsonResponse($response);} else {return new JsonResponse(array('error' => 'Empty query...No funny business!'));}}#[Route('/ajax/querycitycreate', name:"spinner_ajax_autocomplete_create", methods:['GET'])]public function querycitycreateAction(Request $request){$cityName = $this->mb_ucfirst($request->query->get('name'));if ($cityName && !empty($cityName)) {$response = array();$query = $this->cityRepository->createQueryBuilder('c')->where('c.name LIKE :name')->setParameter('name', $cityName.'%')->getQuery();$result = $query->getResult();$duplicates = $this->getDuplicates($result);foreach ($result as $city) {$data = array();$name = isset($duplicates[$city->getName()]) ? $this->mb_ucfirst($city->getName()).'( '.$city->getCounty()->getName().' län )' : $this->mb_ucfirst($city->getName());$data['name'] = $name;$data['id'] = $city->getID();$data['longitude'] = $city->getLongitude();$data['latitude'] = $city->getLatitude();if ($city->getName() == $cityName) {array_unshift($response, $data);} else {$response[] = $data;}}return new JsonResponse($response);} else {return new JsonResponse(array('error' => 'Empty query...No funny business!'));}}private function getDuplicates($input){$registry = array();$duplicates = array();foreach ($input as $city) {if (isset($registry[$city->getName()])) {$duplicates[$city->getName()] = true;} else {$registry[$city->getName()] = true;}}return $duplicates;}#[Route('/ajax/querycitymanual', name:"spinner_ajax_autocomplete_backend", methods:['GET'])]public function querycitymanualAction(Request $request){$cityName = $this->mb_ucfirst($request->query->get('name'));if ($cityName && !empty($cityName)) {$response = array();$query = $this->cityRepository->createQueryBuilder('c')->where('c.name LIKE :name')->setParameter('name', $cityName.'%')->getQuery();$result = $query->getResult();$duplicates = $this->getDuplicates($result);foreach ($result as $city) {$data = array();$name = isset($duplicates[$city->getName()]) ? $this->mb_ucfirst($city->getName()).'( '.$city->getCounty()->getName().' län )' : $this->mb_ucfirst($city->getName());$data['name'] = $name;$data['id'] = $this->generateUrl('spinner_backend_citymanual', array( 'cityid' => $city->getId() ), true);if ($city->getName() == $cityName) {array_unshift($response, $data);} else {$response[] = $data;}}return new JsonResponse($response);}}#[Route('/ajax/querycompanymanual', name:"spinner_ajax_autocomplete_backend_company", methods:['GET'])]public function querycompanymanualAction(Request $request){$companyName = $this->mb_ucfirst($request->query->get('name'));if ($companyName && !empty($companyName)) {$repository = $this->em->getRepository(Company::class);$response = array();$query = $repository->createQueryBuilder('c')->where('c.name LIKE :name')->setParameter('name', $companyName.'%')->getQuery();$result = $query->getResult();//Preformatforeach ($result as $company) {$single = array();$single['id'] = $this->generateUrl('spinner_backend_companymanual', array( 'companyid' => $company->getId() ), true);$single['name'] = $company->getName();$response[] = $single;}//die();return new JsonResponse($response);} else {return new JsonResponse(array('error' => 'Empty query...No funny business!'));}}#[Route('/ajax/querycountymanual', name:"spinner_ajax_autocomplete_county_backend", methods:['GET'])]public function querycountymanualAction(Request $request){$countyName = $this->mb_ucfirst($request->query->get('name'));if ($countyName && !empty($countyName)) {$repository = $this->em->getRepository(Counties::class);$response = array();$query = $repository->createQueryBuilder('c')->where('c.name LIKE :name')->setParameter('name', $countyName.'%')->getQuery();$result = $query->getResult();//Preformatforeach ($result as $county) {$single = array();$single['id'] = $this->generateUrl('spinner_backend_countymanual', array( 'countyid' => $county->getId() ), true);$single['name'] = $county->getName();$response[] = $single;}//die();return new JsonResponse($response);} else {return new JsonResponse(array('error' => 'Empty query...No funny business!'));}}#[Route('/ajax/querycounty', name:"spinner_ajax_autocomplete_county", methods:['GET'])]public function querycountyAction(){$repository = $this->em->getRepository(Counties::class);//source: [{% for city in all_cities.get %}{"id":"{{ path('spinner_front_city', {'countypermalink': city.getCounty.getPermalinkP|capitalize, 'citypermalink': city.getPermalinkP|capitalize})|base64_encode}}","name":"{{city.getName|capitalize}}" }, {% endfor %}]//$this->generateUrl('spinner_front_city', array('countypermalink' => $city->getCounty()->getPermalinkP(), 'citypermalink' => $city->city.getPermalinkP()), true);//path('spinner_front_county', {'countypermalink': activecounty.getPermalinkP|capitalize})$result = $repository->findAll();foreach ($result as $county) {$single = array();$single['id'] = $this->generateUrl('spinner_front_county', array('countypermalink' => $this->mb_ucfirst($county->getPermalinkP()) ), true);$single['name'] = $this->mb_ucfirst($county->getName());$response[] = $single;}return new JsonResponse($response);}private function mb_ucfirst($str){$fc = mb_strtoupper(mb_substr($str, 0, 1, 'UTF-8'), 'UTF-8');return $fc.mb_substr($str, 1, mb_strlen($str), 'UTF-8');}#[Route("/ajax/holidays", name: 'spinner_ajax_holidays', methods: ['GET'])]public function holidaysajaxAction(){$wrapper = new HolidayWrapper();$response = new Response();$response->setContent($wrapper->getHolidaysJSON());$response->headers->set('Content-Type', 'application/json');return $response;}}