<?php
namespace App\Controller;
use App\Repository\CategoryRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\JsonResponse;
/**
* @Route("/api/category")
*/
class CategoriesController extends AbstractController
{
/**
* @var CategoryRepository
*/
private $categoryRepository;
/**
* @var ParameterBagInterface
*/
private $params;
public function __construct(CategoryRepository $categoryRepository, ParameterBagInterface $params)
{
$this->categoryRepository = $categoryRepository;
$this->params = $params;
}
/**
* @Route("/", name="hbk_api_categories_list")
*/
public function categoryList(): Response
{
$categories = $this->categoryRepository->findBy(["is_deleted" => false], []);
foreach ($categories as &$category) {
$category = $category->jsonSerialize();
}
return $this->json($categories);
}
/**
* @Route("/new", name="hbk_api_category_new", methods={"POST"})
* @Route("/edit/{id}", name="hbk_api_category_edit", methods={"PUT"})
*/
public function categoryCreate(int $id = null, Request $request): Response
{
$parameters = json_decode($request->getContent(), true);
$response = new JsonResponse();
if(isset($parameters["_admin_token"]) && $parameters["_admin_token"] == $this->params->get('adminToken')) {
if($id == null) {
$id = $this->categoryRepository->editCategory($parameters, $id);
$response->setStatusCode(Response::HTTP_CREATED);
$response->setContent(json_encode([
"redirect_url" => 'admin.php?page=api-category-form-page&category='.$id
]));
} else {
$this->categoryRepository->editCategory($parameters, $id);
$response->setStatusCode(Response::HTTP_OK);
}
} else {
$response->setStatusCode(Response::HTTP_FORBIDDEN);
}
return $response;
}
/**
* @Route("/manage/new", name="hbk_api_category_form_new")
* @Route("/manage/edit/{id}", name="hbk_api_category_form")
*/
public function editForm(int $id = null, Request $request): Response
{
$parameters = json_decode($request->getContent(), true);
$admin_token = isset($parameters["_admin_token"]) ? $parameters["_admin_token"] : $request->query->get('_admin_token');
$is_admin = $admin_token == $this->params->get('adminToken');
$category = $id === null ? new \App\Entity\Category() : $this->categoryRepository->find($id);
$can_access = $is_admin;
if (!$can_access) {
$response = new Response();
$response->setStatusCode(Response::HTTP_FORBIDDEN);
return $response;
}
return $this->render('category/ajax.html.twig', [
'token' => $admin_token,
'is_admin' => $is_admin,
'admin_token' => $admin_token,
'category' => $category->jsonSerialize()
]);
}
/**
* @Route("/delete/{id}", name="hbk_api_category_delete", methods={"DELETE"})
*/
public function categoryDelete(int $id, Request $request): Response
{
$parameters = $request->request->all();
$response = new Response();
if((isset($parameters["_admin_token"]) && $parameters["_admin_token"] == $this->params->get('adminToken'))) {
$this->categoryRepository->deleteCategory($id);
$response->setStatusCode(Response::HTTP_OK);
} else {
$response->setStatusCode(Response::HTTP_FORBIDDEN);
}
return $response;
}
}