src/Controller/RecipeController.php line 141

  1. <?php
  2. namespace App\Controller;
  3. use App\Controller\Traits\HreflangsControllerTrait;
  4. use App\Controller\Traits\MetatagsControllerTrait;
  5. use App\Controller\Traits\StaticPageHelperTrait;
  6. use App\Entity\OpenPosition;
  7. use App\Entity\Product;
  8. use App\Entity\ProductLine;
  9. use App\Entity\ProductType;
  10. use App\Entity\RecipeType;
  11. use App\Form\CustomerServiceType;
  12. use App\Form\WorkWithUsType;
  13. use App\Repository\ProductRepository;
  14. use App\Repository\ProductLineRepository;
  15. use App\Repository\OpenPositionRepository;
  16. use App\Repository\ProductTypeRepository;
  17. use App\Repository\RecipeRepository;
  18. use App\Repository\RecipeTypeRepository;
  19. use Doctrine\ORM\EntityManagerInterface;
  20. use Exception;
  21. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  22. use Symfony\Component\HttpFoundation\JsonResponse;
  23. use Symfony\Component\HttpFoundation\Request;
  24. use Symfony\Component\HttpFoundation\RequestStack;
  25. use Symfony\Component\HttpFoundation\Response;
  26. use Symfony\Component\Routing\Annotation\Route;
  27. use Symfony\Component\HttpFoundation\RedirectResponse;
  28. use Symfony\Contracts\Translation\TranslatorInterface;
  29. use App\Entity\Recipe;
  30. class RecipeController extends AbstractController
  31. {
  32.     use MetatagsControllerTraitHreflangsControllerTraitStaticPageHelperTrait;
  33.     private $em;
  34.     private $transalor;
  35.     private $request;
  36.     public function __construct(EntityManagerInterface $emTranslatorInterface $translatorRequestStack $requestStack){
  37.         $this->em $em;
  38.         $this->transalor $translator;
  39.         $this->request $requestStack->getCurrentRequest();
  40.     }
  41.     #[Route(path: [ 'it' => '/ricette',
  42.                      'en' => '/en/recipes',
  43.                      'es' => '/es/recetas'
  44.                 ], name'app_recipes')]
  45.     public function recipeIndex(Request $requestEntityManagerInterface $em)
  46.     {
  47.         list ($metatags$hreflangs) = $this->getStaticPageMetatagsAndHreflangs($request$em, ['it']);
  48.         $page_n 1;
  49.         if ($request->get('page')){
  50.             $page_n $request->get('page');
  51.         }
  52.         /**
  53.          * @var RecipeRepository $recipeRepository
  54.          */
  55.         $recipeRepository $this->em->getRepository(Recipe::class);
  56.         $recipes $recipeRepository->findByFilters($page_nnullnullnullnullnull$request->getLocale());
  57.         
  58.         $recipesNumber $recipeRepository->findAllByFilters($request->get('page'), $request->get('product'), $request->get('type'), $request->get('difficulty'), $request->get('time'), $request->get('people'), $request->getLocale());
  59.         $pagesNumber ceil(count($recipesNumber) / 9);
  60.         
  61.         $seasonalRecipe $recipeRepository->findOneBy([
  62.             'seasonalRecipe' => 1,
  63.             'isEnabled' => 1,
  64.             'locale' => $request->getLocale()
  65.         ]);
  66.         /**
  67.          * @var ProductRepository $productRepository
  68.          */
  69.         $productRepository $this->em->getRepository(Product::class);
  70.         $product $productRepository->findBy([
  71.             'isEnabled' => true,
  72.             'locale' => $request->getLocale()
  73.         ]);
  74.         $products = [];
  75.         foreach ($product as $p) {
  76.             if ($p->getRecipes()->count() > 0) {
  77.                 $products[$p->getId()] =  $p->getName();
  78.             }
  79.         }
  80.         /**
  81.          * @var RecipeTypeRepository $recipeTypeRepository
  82.          */
  83.         $recipeTypeRepository $this->em->getRepository(RecipeType::class);
  84.         $recipeTypesTMP $recipeTypeRepository->findAll();
  85.         $recipesTypes = [];
  86.         foreach ($recipeTypesTMP as $r){
  87.             $recipesTypes[$r->getId()] = $r->getName();
  88.         }
  89.         // dump($recipesTypes);die;
  90.         return $this->render('ricette/recipeIndex.html.twig', [
  91.             // 'form' => $form->createView(),
  92.             'recipes' => $recipes,
  93.             'products' => $products,
  94.             'recipesTypes' => $recipesTypes,
  95.             'pages' => $pagesNumber,
  96.             'seasonalRecipe' => $seasonalRecipe,
  97.             'metatags' => $metatags,
  98.             'hreflangs' => $hreflangs
  99.         ]);
  100.     }
  101.     #[Route(path: [ '/ricette/api/v1'
  102.                 ], name'app_recipes_api')]
  103.     public function recipeApiIndex(Request $request)
  104.     {
  105.         
  106.         if ($request->getMethod() == 'POST') {
  107.             /**
  108.              * @var RecipeRepository $recipeRepository
  109.              */
  110.             $recipeRepository $this->em->getRepository(Recipe::class);
  111.             $recipesNumber $recipeRepository->findAllByFilters($request->get('page'), $request->get('product'), $request->get('type'), $request->get('difficulty'), $request->get('time'), $request->get('people'), $request->getLocale());
  112.             $pagesNumber ceil(count($recipesNumber) / 9);
  113.             // dd(count($recipesNumber), $pagesNumber);
  114.             $recipes $recipeRepository->findByFilters($request->get('page'), $request->get('product'), $request->get('type'), $request->get('difficulty'), $request->get('time'), $request->get('people'), $request->getLocale());
  115.             $response['html'] = $this->renderView('ricette/_recipeApi.html.twig', [
  116.                 'recipes' => $recipes
  117.             ]);
  118.             $response['pages'] = $pagesNumber;
  119.             $response['current_page'] = $request->get('page');
  120.             return new JsonResponse($response);
  121.         }
  122.     }
  123.     #[Route(path: [ 'it' => '/ricette/{slug}',
  124.                      'en' => '/en/recipes/{slug}',
  125.                      'es' => '/es/recetas/{slug}'
  126.                 ], name'app_recipes_detail')]
  127.     public function recipeDetail(Request $request,string $slug)
  128.     {
  129.         /**
  130.          * @var RecipeRepository $recipeRepository
  131.          */
  132.         $recipeRepository $this->em->getRepository(Recipe::class);
  133.         $recipe $recipeRepository->findOneBy([
  134.             'isEnabled' => true,
  135.             'slug' => $slug
  136.         ]);
  137.         if (!$recipe) {
  138.             return $this->redirectToRoute('app_recipes');
  139.         }
  140.         // Ricerca di ricette correlate al prodotto da mostrare nella pagina
  141.         $recipesRelated $recipeRepository->findRelated($recipe->getId(), $recipe->getProduct()->getId(), $request->getLocale());
  142.         // se il prodotto non ha altre ricette correlate allora cerchiamo ricette per categoria
  143.         if(!$recipesRelated){
  144.             $product_type $recipe->getProduct()->getType();
  145.             $productsOfType $product_type->getProducts();
  146.             foreach($productsOfType as $pof){
  147.                 $recipesRelatedTMP $recipeRepository->findRelated($recipe->getId(), $pof->getId(), $request->getLocale());
  148.                 foreach($recipesRelatedTMP as $recipesTMP){
  149.                     array_push($recipesRelated$recipesTMP);
  150.                 }
  151.                 
  152.                 
  153.             }
  154.             
  155.         }
  156.         $metatags $this->getMetatags($recipe'title''method');
  157.         $hreflangs $this->getHreflangs($this->em$recipe);
  158.         foreach ($hreflangs as $k => $hreflang) {
  159.             $hreflangs[$k]['href'] = $this->generateUrl('app_recipes_detail', [
  160.                 '_locale' => $k,
  161.                 'slug' => $hreflang['entity']->getSlug()
  162.             ]);
  163.         }
  164.         return $this->render('ricette/recipeDetail.html.twig',[
  165.             'recipe' => $recipe,
  166.             'recipesRelated' => $recipesRelated,
  167.             'metatags' => $metatags,
  168.             'hreflangs' => $hreflangs,
  169.         ]);
  170.     }
  171. }