<?php
namespace App\Controller;
use App\Entity\Consultings;
use App\Entity\Products;
use App\Repository\CategoriesRepository;
use App\Repository\ConsultingsRepository;
use App\Repository\ProductsRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Routing\Annotation\Route;
/**
* Class HomeController
*
* @package App\Controller\Website
*
* @Route("", name="website.")
*/
class HomeController extends AbstractController
{
/**
* @param ProductsRepository $repository
*
* @Route("", name="home")
*
* @return Response
*/
public function home(ProductsRepository $repository): Response
{
$portfolios = [];
foreach ($repository->findAll() as $portfolio) {
$portfolios[] = [
'id' => $portfolio->getId(),
'slug' => $portfolio->getSlug(),
'name' => $portfolio->getName(),
'image' => $portfolio->getImage(),
'image_alt' => $portfolio->getImageAlt(),
'category' => $portfolio->getCategory()->getName(),
];
}
shuffle($portfolios);
return $this->render('website/pages/home.html.twig', [
'portfolios' => $portfolios
]);
}
/**
* @param ProductsRepository $repository
* @param CategoriesRepository $categoriesRepository
*
* @Route("/portfolio", name="portfolio")
*
* @return Response
*/
public function portfolio(ProductsRepository $repository, CategoriesRepository $categoriesRepository): Response
{
$portfolios = [];
$categories = [];
$total = 0;
foreach ($repository->findBy([
'do_not_show' => null
]) as $portfo) {
$portfolios[] = [
'id' => $portfo->getId(),
'name' => $portfo->getName(),
'alt' => $portfo->getImageAlt(),
'image' => $portfo->getImage(),
'cat_name' => $portfo->getCategory()->getName(),
'cat_id' => $portfo->getCategory()->getId(),
'slug' => $portfo->getSlug(),
];
}
foreach ($categoriesRepository->findAll() as $category) {
$cnt = count($category->getProducts());
$categories[] = [
'id' => $category->getId(),
'count' => $cnt,
'name' => $category->getName(),
];
$total += $cnt;
}
return $this->render('website/pages/portfolio.html.twig', [
'portfolios' => $portfolios,
'categories' => $categories,
'total' => $total,
]);
}
/**
* @param string $slug
* @param ProductsRepository $repository
*
* @Route("/portfolio/view/{slug}", name="portfolio_detail")
*
* @return Response
*/
public function portfolioDetail(string $slug, ProductsRepository $repository): Response
{
$images = [];
$portfolioVideo = null;
$portfolio = $repository->findOneBy([
'slug' => $slug
]);
if (!$portfolio instanceof Products) {
return $this->redirectToRoute('website.portfolio');
}
foreach ($portfolio->getProductMedias() as $media) {
if (str_contains($media->getAddress(), '.webm')) {
$portfolioVideo = $media->getAddress();
} else {
$images[] = [
'address' => $media->getAddress()
];
}
}
return $this->render('website/pages/portfolio_detail.html.twig', [
'portfolio' => $portfolio,
'portfolioImages' => $images,
'portfolioVideo' => $portfolioVideo,
]);
}
/**
* @param Request $request
*
* @Route("/contact", name="contact")
*
* @return Response
*/
public function contact(Request $request): Response
{
$data = null;
if($request->get('status'))
{
$data = [
'status' => $request->get('status'),
'text' => $request->get('status') == 1 ? 'Thank you for your message! I\'ll get back to you asap!' : 'Error in submitting the request, Please contact me via email.'
];
}
return $this->render('website/pages/contact.html.twig', [
'message' => $data
]);
}
/**
* @Route("/about-us", name="about")
*
* @return Response
*/
public function about(): Response
{
return $this->render('website/pages/home.html.twig');
}
/**
* @param Request $request
* @param ConsultingsRepository $repository
*
* @Route("/consult/new", name="consult.new")
*
* @return Response
*/
public function consult(Request $request, ConsultingsRepository $repository): Response
{
if ($request->isMethod('POST')) {
try {
$consult = new Consultings();
$consult
->setCreateDate(new \DateTime())
->setFullName($request->request->get('fullname'))
->setDescription($request->request->get('description'))
->setEmail($request->request->get('email'));
$repository->add($consult);
$data = [
'status' => 1
];
} catch (\Exception $exception) {
$data = [
'status' => 2
];
}
}
return $this->redirectToRoute('website.contact', [
'status' => $data['status']
]);
}
/**
* @param string $service
* @param CategoriesRepository $repository
*
* @Route("/service/{service}", name="service")
*
* @return Response
*/
public function service(string $service, CategoriesRepository $repository): Response
{
$cnt = 6;
$portfos = [];
$category = $repository->findOneBy(['slug' => $service]);
/**
* @var Products $portfo
*/
foreach ($category->getProducts() as $portfo) {
if ($cnt == 0) {
break;
}
$portfos[] = [
'id' => $portfo->getId(),
'name' => $portfo->getName(),
'slug' => $portfo->getSlug(),
'image' => $portfo->getImage(),
'category' => $portfo->getCategory()->getName(),
];
$cnt--;
}
return $this->render("website/pages/services/{$service}.html.twig", [
'portfos' => $portfos
]);
}
}