src/Controller/Front/Index/IndexController.php line 29

Open in your IDE?
  1. <?php
  2. /**
  3.  * @author Yenier Jimenez <yjmorales86@gmail.com>
  4.  */
  5. namespace App\Controller\Front\Index;
  6. use App\Controller\Core\BaseController;
  7. use App\Entity\AboutUs;
  8. use App\Entity\Quote;
  9. use App\Entity\QuoteUsage;
  10. use App\Entity\TeamMember;
  11. use DateTime;
  12. use Doctrine\Persistence\ManagerRegistry;
  13. use Illuminate\Support\Arr;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. /**
  17.  * Controller for the index page.
  18.  */
  19. class IndexController extends BaseController
  20. {
  21.     /**
  22.      * Renders the index page.
  23.      *
  24.      * @Route("/", name="index")
  25.      */
  26.     public function index(): Response
  27.     {
  28.         return $this->redirectToRoute('bo_dashboard');
  29.     }
  30.     /**
  31.      * Use this function to load the quote to show to users.
  32.      * This function picks a random quote from database and hold it for 24 hr in order to show it to the user.
  33.      *
  34.      * @param ManagerRegistry $registry
  35.      *
  36.      * @return Quote|null
  37.      */
  38.     private function loadQuote(ManagerRegistry $registry): ?Quote
  39.     {
  40.         /** @var QuoteUsage $quoteUsage */
  41.         $quoteUsage Arr::first($this->repository($registryQuoteUsage::class)->findAll());
  42.         $now = new DateTime();
  43.         if ($quoteUsage) {
  44.             $usageDateInHrs $quoteUsage->getUsageDate()->diff($now)->h;
  45.             if ($usageDateInHrs 24) {
  46.                 return $quoteUsage->getQuote();
  47.             }
  48.             $this->em($registry)->remove($quoteUsage);
  49.             $this->em($registry)->flush();
  50.         }
  51.         $quote $this->pickRandomQuote($registry);
  52.         if ($quote) {
  53.             $this->createQuoteUsage($registry$quote$now);
  54.         }
  55.         return $quote;
  56.     }
  57.     /**
  58.      * This uses a quote for 24 hrs.
  59.      *
  60.      * @param ManagerRegistry $registry
  61.      * @param Quote           $quote
  62.      * @param DateTime        $usageDate
  63.      *
  64.      * @return void
  65.      */
  66.     private function createQuoteUsage(ManagerRegistry $registryQuote $quoteDateTime $usageDate): void
  67.     {
  68.         $quoteUsage = new QuoteUsage();
  69.         $quoteUsage->setQuote($quote);
  70.         $quoteUsage->setUsageDate($usageDate);
  71.         $this->em($registry)->persist($quoteUsage);
  72.         $this->em($registry)->flush();
  73.     }
  74.     /**
  75.      * This picks a random quote from the database.
  76.      *
  77.      * @param ManagerRegistry $registry
  78.      *
  79.      * @return Quote|null
  80.      */
  81.     private function pickRandomQuote(ManagerRegistry $registry): ?Quote
  82.     {
  83.         $quotes $this->repository($registryQuote::class)->findAll();
  84.         return count($quotes) ? Arr::random($quotes) : null;
  85.     }
  86. }