<?php
declare(strict_types=1);
namespace App\Controller;
use App\Cache\APCuCache;
use App\Doctrine\ORM\GoogleReviewRepository;
use App\Doctrine\ORM\TextWithIconsRepositoryInterface;
use BitBag\SyliusCmsPlugin\Repository\MediaRepositoryInterface;
use Doctrine\ORM\EntityManagerInterface;
use Odiseo\BlogBundle\Model\ArticleInterface;
use Sylius\Component\Locale\Context\LocaleContextInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
class PartialController extends AbstractController
{
public function __construct(
private EntityManagerInterface $entityManager,
private MediaRepositoryInterface $mediaRepository,
private TextWithIconsRepositoryInterface $textWithIconsRepository,
private LocaleContextInterface $localeContext,
private GoogleReviewRepository $googleReviewRepository,
private APCuCache $apcuCache,
) {
}
public function renderTextWithIcons(?bool $showText = false): Response
{
$items = $this->textWithIconsRepository->findBy(['enabled' => true], ['priority' => 'desc']);
$args = ['items' => $items];
if ($showText) {
$args['showText'] = true;
}
$response = $this->render('@SyliusShop/Partial/iconsWithText.html.twig', $args);
return $response;
$response->setPublic();
$response->setMaxAge(120);
return $response;
return $this->apcuCache->getCached('text-with-icons-2', function () {
$items = $this->textWithIconsRepository->findBy(['enabled' => true], ['priority' => 'desc']);
return $this->render('@SyliusShop/Partial/iconsWithText.html.twig', ['items' => $items]);
}, 60);
}
public function latestBlogPosts(): Response
{
/** @var ArticleInterface[] $posts */
$posts = $this->entityManager->createQuery("SELECT a FROM Odiseo\\BlogBundle\\Model\\ArticleInterface a order by a.createdAt DESC")
->setMaxResults(3)
->getResult();
return $this->render('@SyliusShop/Homepage/topPosts.html.twig', [
'posts' => $posts,
]);
}
public function reviews(): Response
{
$review = $this->googleReviewRepository->findLatestReview(substr($this->localeContext->getLocaleCode(), 0, 2));
if ($review === null) {
return new Response();
}
$reviewData = json_decode($review->getContent(), true);
//$media1 = $this->mediaRepository->findOneBy(['code' => 'trustpilot_1']);
//$media2 = $this->mediaRepository->findOneBy(['code' => 'trustpilot_2']);
return $this->render('@SyliusShop/Homepage/reviews.html.twig', [
'data' => $reviewData,
]);
}
public function reviewsLong(): Response
{
$media = $this->mediaRepository->findOneBy(['code' => 'trustpilot_3']);
return $this->render('@SyliusShop/Homepage/reviews_long.html.twig', [
'image' => $media,
]);
}
}