src/Controller/HomeController.php line 62

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Consultings;
  4. use App\Entity\Products;
  5. use App\Repository\CategoriesRepository;
  6. use App\Repository\ConsultingsRepository;
  7. use App\Repository\ProductsRepository;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\HttpFoundation\JsonResponse;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. /**
  15.  * Class HomeController
  16.  *
  17.  * @package App\Controller\Website
  18.  *
  19.  * @Route("", name="website.")
  20.  */
  21. class HomeController extends AbstractController
  22. {
  23.     /**
  24.      * @param ProductsRepository $repository
  25.      *
  26.      * @Route("", name="home")
  27.      *
  28.      * @return Response
  29.      */
  30.     public function home(ProductsRepository $repository): Response
  31.     {
  32.         $portfolios = [];
  33.         foreach ($repository->findAll() as $portfolio) {
  34.             $portfolios[] = [
  35.                 'id' => $portfolio->getId(),
  36.                 'slug' => $portfolio->getSlug(),
  37.                 'name' => $portfolio->getName(),
  38.                 'image' => $portfolio->getImage(),
  39.                 'image_alt' => $portfolio->getImageAlt(),
  40.                 'category' => $portfolio->getCategory()->getName(),
  41.             ];
  42.         }
  43.         shuffle($portfolios);
  44.         return $this->render('website/pages/home.html.twig', [
  45.             'portfolios' => $portfolios
  46.         ]);
  47.     }
  48.     /**
  49.      * @param ProductsRepository $repository
  50.      * @param CategoriesRepository $categoriesRepository
  51.      *
  52.      * @Route("/portfolio", name="portfolio")
  53.      *
  54.      * @return Response
  55.      */
  56.     public function portfolio(ProductsRepository $repositoryCategoriesRepository $categoriesRepository): Response
  57.     {
  58.         $portfolios = [];
  59.         $categories = [];
  60.         $total 0;
  61.         foreach ($repository->findBy([
  62.             'do_not_show' => null
  63.         ]) as $portfo) {
  64.             $portfolios[] = [
  65.                 'id' => $portfo->getId(),
  66.                 'name' => $portfo->getName(),
  67.                 'alt' => $portfo->getImageAlt(),
  68.                 'image' => $portfo->getImage(),
  69.                 'cat_name' => $portfo->getCategory()->getName(),
  70.                 'cat_id' => $portfo->getCategory()->getId(),
  71.                 'slug' => $portfo->getSlug(),
  72.             ];
  73.         }
  74.         foreach ($categoriesRepository->findAll() as $category) {
  75.             $cnt count($category->getProducts());
  76.             $categories[] = [
  77.                 'id' => $category->getId(),
  78.                 'count' => $cnt,
  79.                 'name' => $category->getName(),
  80.             ];
  81.             $total += $cnt;
  82.         }
  83.         return $this->render('website/pages/portfolio.html.twig', [
  84.             'portfolios' => $portfolios,
  85.             'categories' => $categories,
  86.             'total' => $total,
  87.         ]);
  88.     }
  89.     /**
  90.      * @param string $slug
  91.      * @param ProductsRepository $repository
  92.      *
  93.      * @Route("/portfolio/view/{slug}", name="portfolio_detail")
  94.      *
  95.      * @return Response
  96.      */
  97.     public function portfolioDetail(string $slugProductsRepository $repository): Response
  98.     {
  99.         $images = [];
  100.         $portfolioVideo null;
  101.         $portfolio $repository->findOneBy([
  102.             'slug' => $slug
  103.         ]);
  104.         if (!$portfolio instanceof Products) {
  105.             return $this->redirectToRoute('website.portfolio');
  106.         }
  107.         foreach ($portfolio->getProductMedias() as $media) {
  108.             if (str_contains($media->getAddress(), '.webm')) {
  109.                 $portfolioVideo $media->getAddress();
  110.             } else {
  111.                 $images[] = [
  112.                     'address' => $media->getAddress()
  113.                 ];
  114.             }
  115.         }
  116.         return $this->render('website/pages/portfolio_detail.html.twig', [
  117.             'portfolio' => $portfolio,
  118.             'portfolioImages' => $images,
  119.             'portfolioVideo' => $portfolioVideo,
  120.         ]);
  121.     }
  122.     /**
  123.      * @param Request $request
  124.      *
  125.      * @Route("/contact", name="contact")
  126.      *
  127.      * @return Response
  128.      */
  129.     public function contact(Request $request): Response
  130.     {
  131.         $data null;
  132.         if($request->get('status'))
  133.         {
  134.             $data = [
  135.                 'status' => $request->get('status'),
  136.                 'text' => $request->get('status') == 'Thank you for your message! I\'ll get back to you asap!' 'Error in submitting the request, Please contact me via email.'
  137.             ];
  138.         }
  139.         return $this->render('website/pages/contact.html.twig', [
  140.             'message' => $data
  141.         ]);
  142.     }
  143.     /**
  144.      * @Route("/about-us", name="about")
  145.      *
  146.      * @return Response
  147.      */
  148.     public function about(): Response
  149.     {
  150.         return $this->render('website/pages/home.html.twig');
  151.     }
  152.     /**
  153.      * @param Request $request
  154.      * @param ConsultingsRepository $repository
  155.      *
  156.      * @Route("/consult/new", name="consult.new")
  157.      *
  158.      * @return Response
  159.      */
  160.     public function consult(Request $requestConsultingsRepository $repository): Response
  161.     {
  162.         if ($request->isMethod('POST')) {
  163.             try {
  164.                 $consult = new Consultings();
  165.                 $consult
  166.                     ->setCreateDate(new \DateTime())
  167.                     ->setFullName($request->request->get('fullname'))
  168.                     ->setDescription($request->request->get('description'))
  169.                     ->setEmail($request->request->get('email'));
  170.                 $repository->add($consult);
  171.                 $data = [
  172.                     'status' => 1
  173.                 ];
  174.             } catch (\Exception $exception) {
  175.                 $data = [
  176.                     'status' => 2
  177.                 ];
  178.             }
  179.         }
  180.         return $this->redirectToRoute('website.contact', [
  181.             'status' => $data['status']
  182.         ]);
  183.     }
  184.     /**
  185.      * @param string $service
  186.      * @param CategoriesRepository $repository
  187.      *
  188.      * @Route("/service/{service}", name="service")
  189.      *
  190.      * @return Response
  191.      */
  192.     public function service(string $serviceCategoriesRepository $repository): Response
  193.     {
  194.         $cnt 6;
  195.         $portfos = [];
  196.         $category $repository->findOneBy(['slug' => $service]);
  197.         /**
  198.          * @var Products $portfo
  199.          */
  200.         foreach ($category->getProducts() as $portfo) {
  201.             if ($cnt == 0) {
  202.                 break;
  203.             }
  204.             $portfos[] = [
  205.                 'id' => $portfo->getId(),
  206.                 'name' => $portfo->getName(),
  207.                 'slug' => $portfo->getSlug(),
  208.                 'image' => $portfo->getImage(),
  209.                 'category' => $portfo->getCategory()->getName(),
  210.             ];
  211.             $cnt--;
  212.         }
  213.         return $this->render("website/pages/services/{$service}.html.twig", [
  214.             'portfos' => $portfos
  215.         ]);
  216.     }
  217. }