<?php
/**
* @author Yenier Jimenez <yjmorales86@gmail.com>
*/
namespace App\Controller\Front\Index;
use App\Controller\Core\BaseController;
use App\Entity\AboutUs;
use App\Entity\Quote;
use App\Entity\QuoteUsage;
use App\Entity\TeamMember;
use DateTime;
use Doctrine\Persistence\ManagerRegistry;
use Illuminate\Support\Arr;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
/**
* Controller for the index page.
*/
class IndexController extends BaseController
{
/**
* Renders the index page.
*
* @Route("/", name="index")
*/
public function index(): Response
{
return $this->redirectToRoute('bo_dashboard');
}
/**
* Use this function to load the quote to show to users.
* This function picks a random quote from database and hold it for 24 hr in order to show it to the user.
*
* @param ManagerRegistry $registry
*
* @return Quote|null
*/
private function loadQuote(ManagerRegistry $registry): ?Quote
{
/** @var QuoteUsage $quoteUsage */
$quoteUsage = Arr::first($this->repository($registry, QuoteUsage::class)->findAll());
$now = new DateTime();
if ($quoteUsage) {
$usageDateInHrs = $quoteUsage->getUsageDate()->diff($now)->h;
if ($usageDateInHrs < 24) {
return $quoteUsage->getQuote();
}
$this->em($registry)->remove($quoteUsage);
$this->em($registry)->flush();
}
$quote = $this->pickRandomQuote($registry);
if ($quote) {
$this->createQuoteUsage($registry, $quote, $now);
}
return $quote;
}
/**
* This uses a quote for 24 hrs.
*
* @param ManagerRegistry $registry
* @param Quote $quote
* @param DateTime $usageDate
*
* @return void
*/
private function createQuoteUsage(ManagerRegistry $registry, Quote $quote, DateTime $usageDate): void
{
$quoteUsage = new QuoteUsage();
$quoteUsage->setQuote($quote);
$quoteUsage->setUsageDate($usageDate);
$this->em($registry)->persist($quoteUsage);
$this->em($registry)->flush();
}
/**
* This picks a random quote from the database.
*
* @param ManagerRegistry $registry
*
* @return Quote|null
*/
private function pickRandomQuote(ManagerRegistry $registry): ?Quote
{
$quotes = $this->repository($registry, Quote::class)->findAll();
return count($quotes) ? Arr::random($quotes) : null;
}
}