<?php
namespace ImporterBundle\Controller\Yamaha;
use CoreBundle\Component\CoreFormFactory;
use CoreBundle\Factory\Vehicle;
use CoreBundle\Model\Vehicles\Repository;
use CoreBundle\Services\MediaExtensionVidi;
use Doctrine\ORM\EntityManagerInterface;
use ImporterBundle\Entity\MainSlider;
use ImporterBundle\Model\Post;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\RouterInterface;
use Twig\Environment;
class MainController extends BaseController
{
public function __construct(RequestStack $requestStack, EntityManagerInterface $em, CoreFormFactory $coreFormFactory, MediaExtensionVidi $mediaExtensionVidi, RouterInterface $router, Environment $twig)
{
parent::__construct($requestStack, $em, $coreFormFactory, $mediaExtensionVidi, $router, $twig);
}
public function redirectImporterYamaha(): RedirectResponse
{
return $this->redirectToRoute('yamaha_importer_homepage', [], Response::HTTP_MOVED_PERMANENTLY);
}
public function index(Request $request, Vehicle $vehicleFactory, Repository $repositoryModel): ?Response
{
$slides = $this->em->getRepository(MainSlider::class)
//TODO remove magic numbers
->findBy(['dealer' => $this->getDealer(), 'state' => 1], ['position' => 'ASC']);
$postRepo = $this->em->getRepository(\ImporterBundle\Entity\Post::class)
//TODO remove magic numbers
->findBy(['dealer' => $this->getDealer(), 'state' => 1], ['date_create' => 'DESC']);
$cars = $repositoryModel
->getNewByDealer($this->getDealer()->getBrand()->getDealer()->first());
$categories = [];
$bodies = [];
foreach ($cars as $crafted) {
$crafted = $vehicleFactory->createByEntity($crafted);
if (!$crafted) {
continue;
}
if (!$crafted->getBodyType()) {
continue;
}
$categoryId = $crafted->getCategory()->getId();
$categoryUrl = $crafted->getCategory()->getUrl();
$categoryName = $crafted->getCategory()->getTitle($request->getLocale());
$categoryImage = $crafted->getCategory()->getImage();
$bodyId = $crafted->getBodyType()->getId();
$bodies[$categoryUrl][$bodyId] = [
'id' => $bodyId,
'name' => $crafted->getBodyTypeName($request->getLocale()),
];
$categories[$categoryUrl] = [
'id' => $categoryId,
'name' => $categoryName,
'url' => $categoryUrl,
'image' => $categoryImage,
];
}
$posts = [];
$router = $this->router;
foreach ($postRepo as $post) {
$link = '';
if ($post->getPostType() == Post::POST_TYPE_NEWS) {
$link = $router->generate('yamaha_importer_about_news_single', ['url' => $post->getUrl()]);
$typeLink = $router->generate('yamaha_importer_about_news');
}
if ($post->getPostType() == Post::POST_TYPE_ACTIONS) {
$link = $router->generate('yamaha_importer_stocks_single', ['url' => $post->getUrl()]);
$typeLink = $router->generate('yamaha_importer_stocks');
}
$posts[$post->getPostType()]['types'] = [
'id' => $post->getPostType(),
'name' => $post->getTypeName($request->getLocale()),
'link' => $typeLink,
];
if (
isset($posts[$post->getPostType()]) &&
isset($posts[$post->getPostType()]['posts']) &&
//TODO remove magic numbers
count($posts[$post->getPostType()]['posts']) >= 3
) {
continue;
}
$posts[$post->getPostType()]['posts'][$post->getId()] = [
'id' => $post->getId(),
'title' => $post->getTitle($request->getLocale()),
'image' => $post->getImage($request->getLocale()),
'link' => $link,
'content' => $post->getContentByLocale($request->getLocale()),
'url' => $post->getUrl(),
'date' => $post->getDateCreate(),
];
}
return $this->baseImporterYamahaRender('@Importer/Yamaha/Main/index.html.twig', [
'categories' => $categories,
'bodies' => $bodies,
'slides' => $slides,
'cars' => $cars,
'posts' => $posts,
]);
}
public function footerMenuInit(Request $request, Repository $repositoryModel, Vehicle $vehicleFactory): JsonResponse
{
$vehicles = $repositoryModel->getNewByDealer($this->getDealer());
$bodies = [];
foreach ($vehicles as $vehicle) {
$crafted = $vehicleFactory->createByEntity($vehicle);
if (!$crafted) {
continue;
}
$bodyId = $crafted->getBodyType()->getId();
$bodyName = $crafted->getBodyTypeName($request->getLocale());
$bodies[$bodyId] = [
'id' => $bodyId,
'name' => $bodyName,
'link' => $this->router->generate('yamaha_catalog_all_groups_by_body', ['bodyId' => $bodyId]),
];
}
return $this->json(['success' => true, 'bodies' => $bodies]);
}
public function notFound(Request $request): ?Response
{
$Response = new Response();
$Response->setStatusCode(Response::HTTP_NOT_FOUND);
return $this->baseImporterYamahaRender('@Importer/Yamaha/404.html.twig', ['_locale' => $request->getLocale()], $Response);
}
public function testDrive(): ?Response
{
return $this->baseImporterYamahaRender('@Importer/Yamaha/test-drive.html.twig', [
'testDriveForm' => $this->CoreFormFactory()->subTestDriveForm()->createView(),
]);
}
public function conditionOfSales(): ?Response
{
return $this->baseImporterYamahaRender('@Importer/Yamaha/condition-of-sales.html.twig');
}
}