<?php
namespace App\Controller\Api;
use App\Entity\Category;
use App\Entity\Product;
use App\Repository\CategoryRepository;
use App\Service\Traduction;
use App\Service\TraduireContenu;
//use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Encoder\XmlEncoder;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Serializer;
use Symfony\Component\Serializer\SerializerInterface;
class CategoryController extends AbstractController
{
private CategoryRepository $categoryRepository;
private TraduireContenu $traduireContenu;
public function __construct(
CategoryRepository $categoryRepository
) {
$this->categoryRepository = $categoryRepository;
}
/**
* @Route("/{langue<en|fr|de|it|es>}/rest/category")
*/
public function getAll($langue, Traduction $trad, CategoryRepository $repository):Response
{
$categorys = $repository->findBy(['unicity' => 1]);
$categoryList = [];
foreach ($categorys as $category) {
$dataTrad = $trad->getTraduction($langue, $category);
$categoryData = [
"id"=>$dataTrad->getId(),
"name"=>$dataTrad->getName(),
"description"=>$dataTrad->getDescription(),
"image"=>$dataTrad->getImage(),
"slug"=>$dataTrad->getSlug()
];
$categoryList[] = $categoryData; }
return new JsonResponse($categoryList);
}
/**
* @Route("/rest/cat")
*/
public function getAllCatNoTranslation(Request $request, CategoryRepository $repository, SerializerInterface $serializer)
{
$session=$request->getSession();
$response = new Response();
$response->headers->set('Content-Type', 'application/json');
$response->headers->set('Access-Control-Allow-Origin', '*');
$categories = $repository->findBy(['unicity' => 1]);
$categories_array = [];
foreach($categories as $categorie_array){
$categorie_entity=$repository->find($categorie_array->getId());
$c = $categorie_entity;
array_push($categories_array,[
"id"=>$c->getId(),
"name"=>$c->getName(),
"description"=>$c->getDescription(),
"image"=>$c->getImage(),
"slug"=>$c->getSlug()
]);
}
$response->setContent($serializer->serialize($categories_array, 'json'));
return $response;
}
public function getAllCategories($langue){
//récupération de toutes les catégories en francais
$categories = $this->categoryRepository->findBy(["unicity"=>1]);
$tabtraduit = [];
foreach($categories as $category){
$trad = $category;
if($langue !="fr"){
$trad = $this->traduireContenu->retourTrad($category,$langue);
}
array_push($tabtraduit,$trad);
}
//dd($tabtraduit);
return $tabtraduit;
}
/**
* @Route("/rest/category/{id}")
*/
public function getOne($id, SerializerInterface $serializer)
{
$response = new Response();
$response->headers->set('Content-Type', 'application/json');
$response->headers->set('Access-Control-Allow-Origin', '*');
$category = $this->categoryRepository->find($id);
$response->setContent($serializer->serialize($category, 'json', ['groups'=>'category']));
return $response;
}
/**
* @Route("/{_locale<en|fr|de|it|es>}/api/categories", methods={"GET"})
*/
public function getCategoriesWithSubcategories()
{
// Categories with subcategories
$categories = $this->categoryRepository->findAllWithSubcategories();
// Response
$response = new Response();
$response->headers->set('Content-Type', 'application/json');
$response->headers->set('Access-Control-Allow-Origin', '*');
$response->setStatusCode(RESPONSE::HTTP_OK);
$response->setContent(json_encode($categories));
return $response;
}
/**
* @Route("/{_locale<en|fr|de|it|es>}/rest/productsByCategory/{cat}")
*/
public function getProductsByCategory($cat)
{
$response = new Response();
$response->headers->set('Content-Type', 'application/json');
$response->headers->set('Access-Control-Allow-Origin', '*');
$services = $this->getDoctrine()
->getRepository(Product::class)
->createQueryBuilder('p')
->select("p, c")
->leftJoin('p.category', 'c')
->where('p.category = :id')
->setParameter('id', $cat)
->getQuery()
->getArrayResult();
$response->setContent(json_encode($services));
return $response;
}
/**
* @Route("/rest/category/subcategory/{id}")
*/
public function getCategoryBySubcat($id)
{
$response = new Response();
$response->headers->set('Content-Type', 'application/json');
$response->headers->set('Access-Control-Allow-Origin', '*');
$category = $this->getDoctrine()
->getRepository(Category::class)
->createQueryBuilder('c')
->select("c")
->leftJoin('c.subcategories', 's')
->where('s.id = :id')
->setParameter('id', $id)
->getQuery()
->getArrayResult();
$response->setContent(json_encode($category));
return $response;
}
/**
* @Route("/{_locale<en|fr|de|it|es>}/rest/categoriesByCompany/{companyId}")
*/
public function getCategoriesByCompany($companyId)
{
$response = new Response();
$response->headers->set('Content-Type', 'application/json');
$response->headers->set('Access-Control-Allow-Origin', '*');
$categories = $this->getDoctrine()
->getRepository(Category::class)
->createQueryBuilder('c')
->leftJoin('c.companies', 'co')
->where('co.id = :id')
->setParameter('id', $companyId)
->getQuery()
->getArrayResult();
$response->setContent(json_encode($categories));
return $response;
}
}