<?php
namespace App\Controller\Marketplace;
use App\Entity\MarketplaceCategory;
use App\Entity\Seo;
use App\Entity\Workshop;
use App\Form\Marketplace\SearchCategoryType;
use App\Form\Marketplace\SearchType;
use Doctrine\ORM\EntityManagerInterface;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\String\Slugger\SluggerInterface;
class CollectiveEventsController extends AbstractController
{
/**
* @var EntityManagerInterface
*/
private $em;
public function __construct(EntityManagerInterface $em)
{
$this->em = $em;
}
/**
* @Route("/", name="app_home")
*/
public function index(): Response
{
return $this->redirectToRoute('marketplace_app_collective_events');
}
/**
* @Route("/atelier-collectifs", name="app_collective_events")
*/
public function collectiveEvents(Request $request): Response
{
$form = $this->createForm(SearchType::class, null, [
'action' => $this->generateUrl('marketplace_app_collective_events_category'),
'method' => 'GET',
'locationSearch' => true
]
);
$form->handleRequest($request);
return $this->render('marketplace/collective_events/index.html.twig', [
'searchForm' => $form->createView()
]);
}
/**
* @Route("/atelier-collectifs/categories", name="app_collective_events_category")
*/
public function collectiveEventsFromCategory(Request $request): Response
{
$marketplaceCategs = [];
$data = $request->query->get('search');
// $marketplaceCategs = $this->em->getRepository(MarketplaceCategory::class)->findBy([
// 'family' => $data['family']
// ]);
$town = $data['town'];
$form = $this->createForm(SearchType::class, $data, ['categorySearch' => true, 'locationSearch' => true, 'method' => 'GET']);
$form->handleRequest($request);
$marketplaceCategs = [];
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$family = $data['family'];
$marketplaceCategs = $this->em->getRepository(MarketplaceCategory::class)->findCollectiveCategories($family);
}
return $this->render('marketplace/collective_events/category_search_result.html.twig', [
'categories' => $marketplaceCategs,
'searchForm' => $form->createView(),
'town' => $town
]);
}
/**
* @Route("/atelier-collectifs/{marketplaceCategoryName}",
* name="app_collective_events_category_list",
* requirements={
* "marketplaceCategoryName"="[^\/]+",
* })
*/
public function collectiveEventsListFromCategory(Request $request, PaginatorInterface $paginator, SluggerInterface $slugger): Response
{
if (!empty($request->query->get('mc'))) {
$category = $this->em->getRepository(MarketplaceCategory::class)->find((int)$request->query->get('mc')) ;
if (!$category) {
throw new NotFoundHttpException("Not found");
}
$data= [
'marketplaceCategory' => $category->getId(),
'marketplaceFamily' => $category->getFamily(),
'town' => $request->query->get('t')
];
}elseif (!empty($request->query->get('search_category'))) {
$category = $this->em->getRepository(MarketplaceCategory::class)->find((int)$request->query->get('search_category')['marketplaceCategory']) ;
if (!$category) {
throw new NotFoundHttpException("Not found");
}
$data= [
'marketplaceCategory' => $category->getId(),
'marketplaceFamily' => $category->getFamily()
];
}
$form = $this->createForm(SearchCategoryType::class, $data, [
'locationSearch' => true,
'method' => 'GET',
]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$category = $this->em->getRepository(MarketplaceCategory::class)->find($data['marketplaceCategory']);
unset($data['marketplaceFamily']);
$slug = $slugger->slug($category->getName());
// $form->setAction($this->generateUrl('marketplace_app_collective_events_category_list', ['marketplaceCategoryName' => $category->getName()] ));
return $this->redirectToRoute('marketplace_app_collective_events_category_list', ['marketplaceCategoryName' => strtolower($slug), 'search_category' => $data]);
}
try {
// $workshops = $this->em->getRepository(Workshop::class)->findBy([
// 'marketplaceCategory' => $category,
// 'isVirtual' => false,
// ]) ?? [];
;
$params = [
'marketplaceIsDisplay' => true,
'isVirtual' => false,
'marketplaceCategory' => $data['marketplaceCategory']
];
$qb = $this->em->getRepository(Workshop::class)->findMarketplaceWorkshopsQuery($params);
$pagination = $paginator->paginate(
$qb->getQuery(),
$request->query->getInt('page', 1),
$request->query->getInt('count', 10)
);
} catch (\Throwable $th) {
//throw $th;
}
return $this->render('marketplace/collective_events/list_search_result.html.twig', [
'searchForm' => $form->createView(),
'category' => $category,
'workshops' => $pagination,
]);
}
}