<?php
namespace App\Controller\Front;
use App\Entity\Annonce;
use App\Entity\Product;
use App\Form\AnnonceType;
use App\Repository\AvisRepository;
use App\Repository\PackRepository;
use App\Repository\UserRepository;
use App\Repository\SliderRepository;
use App\Repository\AnnonceRepository;
use App\Repository\ArticleRepository;
use App\Repository\CommandRepository;
use App\Repository\ProductRepository;
use App\Repository\CategoryRepository;
use App\Repository\PageHomeRepository;
use App\Repository\DepartmentRepository;
use Doctrine\ORM\EntityManagerInterface;
use App\Repository\SubCategoryRepository;
use App\Repository\AnnonceCompanyRepository;
use App\Services\Filter;
use FontLib\Table\Type\name;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
class HomeController extends AbstractController
{
/**
* @Route("/", name="front_home")
*/
public function home(
AvisRepository $avisRepository,
ProductRepository $productRepository,
CommandRepository $commandRepository,
ArticleRepository $articleRepository,
AnnonceRepository $annonceRepository,
DepartmentRepository $departmentRepository,
EntityManagerInterface $em,
PageHomeRepository $pageHomeRepository,
PackRepository $packRepository,
CategoryRepository $categoryRepository,
SliderRepository $sliderRepository,
SubCategoryRepository $subCategoryRepository,
UserRepository $userRepository,
AnnonceCompanyRepository $annnonceCompanyRepo,
Request $request,
Filter $filter
) {
// $filter->retour_caution();
$annoncestous = $annonceRepository->findAll();
$annonces = $annonceRepository->findAllAnnonceaccuil();
$annonceprest = $annnonceCompanyRepo->findAllPrestAnnonceaccuil();
$annoncepresttous = $annnonceCompanyRepo->findAll();
$products = $productRepository->findAllProducts();
$arrayDepartments = 0;
$usercon = null;
$annonce = new Annonce();
// $productss = $em->getRepository(Product::class)->findAll();
$productss = $productRepository->findBy([], ['id' => 'DESC'], 6);
if ($this->getUser()) {
$connUser = $this->getUser()->getEmail();
$usercon = $userRepository->findOneBy(['email' => $connUser]);
}
foreach ($products as $product) {
$arrayDepartments = $arrayDepartments + count($product->getDepartments());
}
$lastAvis = $avisRepository->getLastAvis();
$slider = $sliderRepository->find(1);
$imagesSlider = [];
if ($slider) {
if ($slider->getImage1()) {
$imagesSlider[] = $slider->getImage1();
}
if ($slider->getImage2()) {
$imagesSlider[] = $slider->getImage2();
}
if ($slider->getImage3()) {
$imagesSlider[] = $slider->getImage3();
}
}
$categories = $categoryRepository->findBy([], ['id' => 'DESC']);
$categoriesData = [];
foreach ($categories as $category) {
$categoryData = [
'categories' => $category,
'subCategoriesData' => [],
];
$subCategories = $category->getSubCategories();
foreach ($subCategories as $subCategory) {
$productsCount = $subCategory->getProducts()->filter(function($product) {
return !$product->getIsDesactivatedByAdmin();
})->count();
$categoryData['subCategoriesData'][] = [
'subCategories' => $subCategory,
'productsCount' => $productsCount,
];
}
$categoriesData[] = $categoryData;
}
$form = $this->createForm(AnnonceType::class, $annonce);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$annonce->setTitre($annonce->getTitre());
$annonce->setCategorys($annonce->getCategorys());
$annonce->setDescription($annonce->getDescription());
$annonce->setUsers($usercon);
$annonce->setCreatedAt(new \DateTime());
$em->persist($annonce);
$em->flush();
}
$subCategories = $subCategoryRepository->findAll();
return $this->render('front/index.html.twig', [
'productsCount' => count($products),
'commandsCount' => $commandRepository->count([]),
'departmentsCount' => $arrayDepartments,
'products' => $products,
'articles' => $articleRepository->getLastArticles(),
'departments' => $departmentRepository->getDepartmentsIfProduct(),
'lastAvis' => $lastAvis,
'pagesHome' => $pageHomeRepository->findAll(),
'packsFormule' => $packRepository->findBy(['isActivate' => true, 'category' => 'Formule'], ['id' => 'DESC']),
'packsLuneMiel' => $packRepository->findBy(['isActivate' => true, 'category' => 'Lune de miel'], ['id' => 'DESC']),
'categoriesData' => $categoriesData,
'categories' => $categoryRepository->findBy([], ['id' => 'DESC']),
'subCategories' => $subCategories,
'sliders' => $imagesSlider,
'connectedUser' => $usercon,
'formAnnonce' => $form->createView(),
'annonces' => $annonces,
'annonce_prests' => $annonceprest,
'clients' => $annoncestous,
'prestataires' => $annoncepresttous,
'productss' => $productss
]);
}
/**
* @Route("/change-search-category", name="front_search_category")
*/
public function changeCategory(Request $request, SubCategoryRepository $subCategoryRepository, CategoryRepository $categoryRepository)
{
if ($request->get('data')) {
$data = json_decode($request->get('data'));
$category = $categoryRepository->find($data->idCategory);
if ($category) {
$subCategories = $subCategoryRepository->findByCategory($category);
} else {
$subCategories = $subCategoryRepository->findAll();
}
return $this->json([
'response' => 'ok',
'categories' => $this->render('front/html/selectSearch.html.twig', ['categories' => $subCategories])
]);
}
}
}