src/Controller/Frontend/DefaultController.php line 53

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Frontend;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Symfony\Component\Routing\Annotation\Route;
  7. use Symfony\Component\Config\FileLocator;
  8. use Doctrine\Persistence\ManagerRegistry;
  9. use Detection\MobileDetect;
  10. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  11. use App\Entity\GameInfo;
  12. use App\Entity\Video;
  13. use App\Entity\InGamePrize;
  14. use App\Entity\Soccer;
  15. #[Route('/{language}/game', requirements: ['language' => 'zh_MO'], defaults: ['language' => 'zh_MO'])]
  16. class DefaultController extends AbstractController
  17. {
  18. private $em;
  19. private $params;
  20. public function __construct(ManagerRegistry $doctrine, ParameterBagInterface $params)
  21. {
  22. $this->em = $doctrine->getManager();
  23. $this->params = $params;
  24. }
  25. #[Route('/termscondition', name: 'game_activity_rule')]
  26. public function termsConditionAction(Request $request): Response
  27. {
  28. $gameInfo = $this->em->getRepository(GameInfo::class)->findOneBy([
  29. 'name' => $this->getParameter('info_name')
  30. ]);
  31. $tandc = null;
  32. $language = $request->getLocale();
  33. if ($gameInfo) {
  34. $tandc = ($language == 'zh_CN') ? $gameInfo->getTandcCN() : $gameInfo->getTandc();
  35. }
  36. return $this->render('frontend/default/rule.html.twig', [
  37. "tandc" => $tandc,
  38. 'language' => $language
  39. ]);
  40. }
  41. #[Route('/', name: 'game_pre_checkAgent')]
  42. public function checkAgentAction(Request $request)
  43. {
  44. $language = $request->getLocale();
  45. $detect = new MobileDetect;
  46. if (!$detect->isMobile() && !$detect->isTablet()) {
  47. return $this->render('frontend/iframe/index.html.twig', [
  48. 'language' => $language
  49. ]);
  50. }
  51. return $this->redirectToRoute('game_pre_index', ['language' => $language]);
  52. }
  53. #[Route('/index', name: 'game_pre_index')]
  54. public function indexAction(Request $request)
  55. {
  56. $userAgent = $_SERVER['HTTP_USER_AGENT'];
  57. //Block IE AGENT
  58. if (preg_match('/MSIE/i', $userAgent) || preg_match("/Trident\/7.0;(.*)rv:11.0/", $userAgent) || preg_match('/Edge/i', $userAgent)) {
  59. } else {
  60. $gameInfo = $this->em->getRepository(GameInfo::class)->findOneBy([
  61. 'name' => $this->getParameter('info_name')
  62. ]);
  63. if ($gameInfo) {
  64. $current = new \DateTime(date('Y-m-d H:i:s'));
  65. $startDate = $gameInfo->getStartDate();
  66. $endDate = $gameInfo->getEndDate();
  67. $prizeEndDate = $gameInfo->getPrizeRedeemEndDate();
  68. $language = $request->getLocale();
  69. if ($current < $startDate) {
  70. return $this->render('frontend/error/blankpage.html.twig', [
  71. "message" => ($language == 'zh_MO') ? $gameInfo->getNotStarted() : $gameInfo->getNotStartedCN(),
  72. "language" => $language
  73. ]);
  74. } else if ($current > $endDate && $current > $prizeEndDate) {
  75. return $this->render('frontend/error/blankpage.html.twig', [
  76. "message" => ($language == 'zh_MO') ? $gameInfo->getPrizeRedeemEnd() : $gameInfo->getPrizeRedeemEndCN(),
  77. "language" => $language
  78. ]);
  79. } else if ($current > $endDate) {
  80. return $this->render('frontend/error/blankpage.twig', [
  81. "message" => ($language == 'zh_MO') ? $gameInfo->getGameEnd() : $gameInfo->getGameEndCN(),
  82. "language" => $language,
  83. ]);
  84. } else {
  85. //get video
  86. $video0 = $this->em->getRepository(Video::class)->findBy(array('pool' => 0, 'enable' => true));
  87. shuffle($video0);
  88. $file = $video0[0]->getFiles();
  89. // video 1
  90. $video1 = $this->em->getRepository(Video::class)->findBy(array('pool' => 1, 'enable' => true));
  91. shuffle($video1);
  92. $file1 = $video1[0]->getFiles();
  93. // video 2
  94. $video2 = $this->em->getRepository(Video::class)->findBy([
  95. 'pool' => 2,
  96. 'enable' => true
  97. ]);
  98. shuffle($video2);
  99. $file2 = $video2[0]->getFiles();
  100. $today = new \DateTime('today');
  101. $now = new \DateTime(date('Y-m-d H:i:s'));
  102. $random = hash("sha256", $now->getTimestamp());
  103. // get 3 prizes for showcase
  104. $now = new \DateTime();
  105. $prizes = $this->em->getRepository(InGamePrize::class)->findBy([
  106. 'enable' => true
  107. ]);
  108. shuffle($prizes);
  109. $prizes = array_slice($prizes, 0, 3);
  110. // get 2 football match for showcase
  111. $repo = $this->em->getRepository(Soccer::class);
  112. $soccer = $repo->createQueryBuilder('s')
  113. ->select('s')
  114. ->andWhere('s.enable = :isEnable')
  115. ->setParameter('isEnable', true)
  116. ->orderBy('s.date', 'asc')
  117. ->setMaxResults(2)
  118. ->getQuery()
  119. ->getResult();
  120. // link
  121. $ai = $gameInfo->getStartGameLink();
  122. $intro = $gameInfo->getReserveLink();
  123. // banner
  124. $configDirectories = [$this->params->get('kernel.project_dir') . '/assets/json/'];
  125. $file_locator = new FileLocator($configDirectories);
  126. $path = $file_locator->locate("banner.json");
  127. $content = file_get_contents($path);
  128. $banners = json_decode($content, true);
  129. return $this->render('frontend/default/index.html.twig', [
  130. "language" => $language,
  131. // video
  132. 'video_random' => $random,
  133. 'video_id' => $video0[0]->getId(),
  134. 'video_time' => $video0[0]->getTime(),
  135. 'video_link' => $file,
  136. 'video1_id' => $video1[0]->getId(),
  137. 'video1_time' => $video1[0]->getTime(),
  138. 'video1_link' => $file1,
  139. 'video2_id' => $video2[0]->getId(),
  140. 'video2_time' => $video2[0]->getTime(),
  141. 'video2_link' => $file2,
  142. // prize
  143. "prizes" => $prizes,
  144. // soccer
  145. "soccer" => $soccer,
  146. // link
  147. "ai" => $ai,
  148. "intro" => $intro,
  149. // banner
  150. "banners" => $banners,
  151. ]);
  152. }
  153. } else {
  154. $language = $request->getLocale();
  155. return $this->render('frontend/error/blankpage.html.twig', [
  156. "message" => "System Error",
  157. "language" => $language
  158. ]);
  159. }
  160. }
  161. }
  162. }