src/Controller/AddressesController.php line 133

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\AddressRepository;
  7. use App\Entity\Address;
  8. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\JsonResponse;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. /**
  13.  * @Route("/api/address")
  14.  */
  15. class AddressesController extends AbstractController
  16. {
  17.     /**
  18.      * @var AddressRepository
  19.      */
  20.     private $addressRepository;
  21.     /**
  22.      * @var ParameterBagInterface
  23.      */
  24.     private $params
  25.     public function __construct(AddressRepository $addressRepository,  ParameterBagInterface $paramsEntityManagerInterface $em)
  26.     {
  27.         $this->addressRepository $addressRepository;
  28.         $this->params $params;
  29.         $this->em $em;
  30.     }
  31.     /**
  32.      * @Route("/new", name="hbk_api_address_new", methods={"POST"})
  33.      * @Route("/edit/{id}", name="hbk_api_address_edit", methods={"PUT"})
  34.      */
  35.     public function addressCreate(int $id nullRequest $request): Response
  36.     {
  37.         $parameters json_decode($request->getContent(), true);
  38.         $response = new JsonResponse();
  39.         if($id == null) {
  40.             if(isset($parameters["_admin_token"]) && $parameters["_admin_token"] == $this->params->get('adminToken')) {
  41.                 $id $this->addressRepository->createAddress($parameters);
  42.                 $response->setStatusCode(Response::HTTP_CREATED);
  43.                 $response->setContent(json_encode([
  44.                     "redirect_url" => 'admin.php?page=api-address-form-page&address='.$id
  45.                 ]));
  46.             } else if($this->getUser() != null) {
  47.                 $params = [];
  48.                 // $params['email'] = $parameters['email'];
  49.                 $params['location'] = $parameters['location'];
  50.                 $params['member_group'] = $parameters['member_group'];
  51.                 $params['name'] = $parameters['name'];
  52.                 $params['street'] = $parameters['street'];
  53.                 $params['web'] = $parameters['web'];
  54.                 $id $this->addressRepository->createAddress($params);
  55.                 $response->setStatusCode(Response::HTTP_CREATED);
  56.                 $response->setContent(json_encode([
  57.                     "redirect_url" => 'admin.php?page=api-address-form-page&address='.$id
  58.                 ]));
  59.             }
  60.             else {
  61.                 $response->setStatusCode(Response::HTTP_FORBIDDEN);
  62.             }
  63.         } else {
  64.             if((isset($parameters["_admin_token"]) && $parameters["_admin_token"] == $this->params->get('adminToken')) || ($this->getUser() != null && $this->getUser()->getId() == $id)) {
  65.                 $this->addressRepository->editAddress($id$parameters);
  66.                 $response->setStatusCode(Response::HTTP_OK);
  67.             } else {
  68.                 $response->setStatusCode(Response::HTTP_FORBIDDEN);
  69.             }
  70.         }
  71.         return $response;
  72.     }
  73.     /**
  74.      * @Route("/delete/{id}", name="hbk_api_address_delete", methods={"POST"})
  75.      */
  76.     public function addressDelete(int $idRequest $request): Response
  77.     {
  78.         $parameters $request->request->all();
  79.         $response = new JsonResponse();
  80.         if((isset($parameters["_admin_token"]) && $parameters["_admin_token"] == $this->params->get('adminToken')) || ($this->getUser() != null && $this->getUser()->getId() == $id)) {
  81.             $address $this->addressRepository->find($id);
  82.             if (isset($parameters["descendant"]) && $parameters["descendant"] != null) {
  83.                 $descendant $this->addressRepository->find($parameters["descendant"]);
  84.                 foreach($address->getProjectTasks() as $task){
  85.                     $descendant->addProjectTask($task);
  86.                     $address->removeProjectTask($task);
  87.                 }
  88.                 foreach($address->getProjectArchitects() as $ar){
  89.                     $descendant->addProjectArchitect($ar);
  90.                     $address->removeProjectArchitect($ar);
  91.                 }
  92.                 foreach($address->getProjectCarpenters() as $cp){
  93.                     $descendant->addProjectCarpenter($cp);
  94.                     $address->removeProjectCarpenter($cp);
  95.                 }
  96.                 foreach($address->getProjects() as $pj) {
  97.                     $descendant->addProject($pj);
  98.                     $address->removeProject($pj);
  99.                 }
  100.                 $address->setDescendant($descendant);
  101.                 $this->em->persist($descendant);
  102.             }
  103.             if ($address != null) {
  104.                 $address->setDeleted(true);
  105.                 $this->em->persist($address);
  106.                 $this->em->flush();
  107.             }
  108.             $response->setStatusCode(Response::HTTP_OK);
  109.         } else {
  110.             $response->setStatusCode(Response::HTTP_FORBIDDEN);
  111.         }   
  112.         return $response;
  113.     }
  114.     /**
  115.      * @Route("/categories", name="hbk_api_address_category_list")
  116.      */
  117.     public function addressCategoryList(): Response
  118.     {
  119.         $categories $this->addressRepository->getAddressCategories();
  120.         return $this->json($categories);
  121.     }
  122.     /**
  123.      * @Route("/search-detail", name="hbk_api_address_search_detail")
  124.      */
  125.     public function addressSearchDetail(Request $request): Response
  126.     {
  127.         $parameters = [
  128.             "name" => $request->query->get('name'),
  129.             "location" => $request->query->get('location'),
  130.             "email" => $request->query->get('email'),
  131.         ];
  132.         $addresses $this->addressRepository->searchAddressesDetail($parameters);
  133.         return $this->json($addresses);
  134.     }
  135.     /**
  136.      * @Route("/search/{search}/{category}", name="hbk_api_address_search")
  137.      * @Route("/search//{category}", name="hbk_api_address_search_no_search")
  138.      */
  139.     public function addressSearch(string $search nullstring $category null): Response
  140.     {
  141.         $addresses $this->addressRepository->searchAddresses($search$category);
  142.         return $this->json($addresses);
  143.     }
  144.     
  145.     /**
  146.      * @Route("/paginated/{max_results}/{offset}", name="hbk_api_address_paginated")
  147.      * @Route("/paginated/{max_results}/{offset}/{search}/{category}", name="hbk_api_address_paginated_search")
  148.      * @Route("/paginated/{max_results}/{offset}//{category}", name="hbk_api_address_paginated_category")
  149.      */
  150.     public function paginatedAddresses(string $max_results nullstring $offset nullstring $search nullstring $category null): Response
  151.     {
  152.         $addresses $this->addressRepository->paginatedAddresses($search$category$max_results$offset);
  153.         return $this->json($addresses);
  154.     }
  155.     /**
  156.      * @Route("/{category}", name="hbk_api_address_list")
  157.      */
  158.     public function addressList(string $category ''): Response
  159.     {
  160.         $addresses $this->addressRepository->getAddresses($category);
  161.         return $this->json($addresses);
  162.     }
  163.     /**
  164.      * @Route("/manage/new", name="hbk_api_address_form_new")
  165.      * @Route("/manage/edit/{id}", name="hbk_api_address_form")
  166.      */
  167.     public function editForm(int $id nullRequest $request): Response
  168.     {
  169.         $parameters json_decode($request->getContent(), true);
  170.         $admin_token = isset($parameters["_admin_token"]) ? $parameters["_admin_token"] : $request->query->get('_admin_token');
  171.         $is_admin $admin_token == $this->params->get('adminToken');
  172.         $user $this->getUser();
  173.         if($id === null) {
  174.             if($user != null) {
  175.                 $address $user;
  176.             } else {
  177.                 $address = new Address();
  178.             }
  179.         } else {
  180.             $address $this->addressRepository->find($id);
  181.         }
  182.         $can_access $is_admin || ($user && $address && $user->getId() === $address->getId());
  183.         if (!$can_access) {
  184.             $response = new Response();
  185.             $response->setStatusCode(Response::HTTP_FORBIDDEN);
  186.             return $response;
  187.         }
  188.         $addressJson $address->jsonSerialize();
  189.         $addressJson["logo"] = $address->getLogo(); // Pass in a Medium object to template.
  190.         $address_categories $this->addressRepository->getAddressCategories();
  191.         return $this->render('address/ajax.html.twig', [
  192.             'user' => $user,
  193.             'is_admin' => $is_admin,
  194.             'admin_token' => $admin_token,
  195.             'address' => $addressJson,
  196.             'address_categories' => $address_categories,
  197.         ]);
  198.     }
  199.     /**
  200.      * @Route("/manage/overview/{page}", name="hbk_api_address_overview")
  201.      * @Route("/manage/overview/{category}/{page}", name="hbk_api_address_overview_category")
  202.      */
  203.     public function overview(string $category ''int $page 1Request $request): Response
  204.     {
  205.         $parameters json_decode($request->getContent(), true);
  206.         $admin_token = isset($parameters["_admin_token"]) ? $parameters["_admin_token"] : $request->query->get('admin_token');
  207.         $is_admin $admin_token == $this->params->get('adminToken');
  208.         $can_access $is_admin;
  209.         if (!$can_access) {
  210.             $response = new Response();
  211.             $response->setStatusCode(Response::HTTP_FORBIDDEN);
  212.             return $response;
  213.         }
  214.         $address_categories $this->addressRepository->getAddressCategories();
  215.         $allAddresses $this->addressRepository->getAddresses($category);
  216.         $itemsPerPage 100;
  217.         $pages ceil(floatval(count($allAddresses)) / floatval($itemsPerPage));
  218.         $addresses array_slice($allAddresses, ($page-1)*$itemsPerPage$itemsPerPage);
  219.         return $this->render('address/overview.html.twig', [
  220.             'token' => $admin_token,
  221.             'page' => $page,
  222.             'pages' => $pages,
  223.             'addresses' => $addresses,
  224.             'is_admin' => $is_admin,
  225.             'category' => $category,
  226.             'address_categories' => $address_categories,
  227.         ]);
  228.     }
  229. }