<?php
namespace App\Controller\Frontend;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Config\FileLocator;
use Doctrine\Persistence\ManagerRegistry;
use Detection\MobileDetect;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use App\Entity\GameInfo;
use App\Entity\Video;
use App\Entity\InGamePrize;
use App\Entity\Soccer;
#[Route('/{language}/game', requirements: ['language' => 'zh_MO'], defaults: ['language' => 'zh_MO'])]
class DefaultController extends AbstractController
{
private $em;
private $params;
public function __construct(ManagerRegistry $doctrine, ParameterBagInterface $params)
{
$this->em = $doctrine->getManager();
$this->params = $params;
}
#[Route('/termscondition', name: 'game_activity_rule')]
public function termsConditionAction(Request $request): Response
{
$gameInfo = $this->em->getRepository(GameInfo::class)->findOneBy([
'name' => $this->getParameter('info_name')
]);
$tandc = null;
$language = $request->getLocale();
if ($gameInfo) {
$tandc = ($language == 'zh_CN') ? $gameInfo->getTandcCN() : $gameInfo->getTandc();
}
return $this->render('frontend/default/rule.html.twig', [
"tandc" => $tandc,
'language' => $language
]);
}
#[Route('/', name: 'game_pre_checkAgent')]
public function checkAgentAction(Request $request)
{
$language = $request->getLocale();
$detect = new MobileDetect;
if (!$detect->isMobile() && !$detect->isTablet()) {
return $this->render('frontend/iframe/index.html.twig', [
'language' => $language
]);
}
return $this->redirectToRoute('game_pre_index', ['language' => $language]);
}
#[Route('/index', name: 'game_pre_index')]
public function indexAction(Request $request)
{
$userAgent = $_SERVER['HTTP_USER_AGENT'];
//Block IE AGENT
if (preg_match('/MSIE/i', $userAgent) || preg_match("/Trident\/7.0;(.*)rv:11.0/", $userAgent) || preg_match('/Edge/i', $userAgent)) {
} else {
$gameInfo = $this->em->getRepository(GameInfo::class)->findOneBy([
'name' => $this->getParameter('info_name')
]);
if ($gameInfo) {
$current = new \DateTime(date('Y-m-d H:i:s'));
$startDate = $gameInfo->getStartDate();
$endDate = $gameInfo->getEndDate();
$prizeEndDate = $gameInfo->getPrizeRedeemEndDate();
$language = $request->getLocale();
if ($current < $startDate) {
return $this->render('frontend/error/blankpage.html.twig', [
"message" => ($language == 'zh_MO') ? $gameInfo->getNotStarted() : $gameInfo->getNotStartedCN(),
"language" => $language
]);
} else if ($current > $endDate && $current > $prizeEndDate) {
return $this->render('frontend/error/blankpage.html.twig', [
"message" => ($language == 'zh_MO') ? $gameInfo->getPrizeRedeemEnd() : $gameInfo->getPrizeRedeemEndCN(),
"language" => $language
]);
} else if ($current > $endDate) {
return $this->render('frontend/error/blankpage.twig', [
"message" => ($language == 'zh_MO') ? $gameInfo->getGameEnd() : $gameInfo->getGameEndCN(),
"language" => $language,
]);
} else {
//get video
$video0 = $this->em->getRepository(Video::class)->findBy(array('pool' => 0, 'enable' => true));
shuffle($video0);
$file = $video0[0]->getFiles();
// video 1
$video1 = $this->em->getRepository(Video::class)->findBy(array('pool' => 1, 'enable' => true));
shuffle($video1);
$file1 = $video1[0]->getFiles();
// video 2
$video2 = $this->em->getRepository(Video::class)->findBy([
'pool' => 2,
'enable' => true
]);
shuffle($video2);
$file2 = $video2[0]->getFiles();
$today = new \DateTime('today');
$now = new \DateTime(date('Y-m-d H:i:s'));
$random = hash("sha256", $now->getTimestamp());
// get 3 prizes for showcase
$now = new \DateTime();
$prizes = $this->em->getRepository(InGamePrize::class)->findBy([
'enable' => true
]);
shuffle($prizes);
$prizes = array_slice($prizes, 0, 3);
// get 2 football match for showcase
$repo = $this->em->getRepository(Soccer::class);
$soccer = $repo->createQueryBuilder('s')
->select('s')
->andWhere('s.enable = :isEnable')
->setParameter('isEnable', true)
->orderBy('s.date', 'asc')
->setMaxResults(2)
->getQuery()
->getResult();
// link
$ai = $gameInfo->getStartGameLink();
$intro = $gameInfo->getReserveLink();
// banner
$configDirectories = [$this->params->get('kernel.project_dir') . '/assets/json/'];
$file_locator = new FileLocator($configDirectories);
$path = $file_locator->locate("banner.json");
$content = file_get_contents($path);
$banners = json_decode($content, true);
return $this->render('frontend/default/index.html.twig', [
"language" => $language,
// video
'video_random' => $random,
'video_id' => $video0[0]->getId(),
'video_time' => $video0[0]->getTime(),
'video_link' => $file,
'video1_id' => $video1[0]->getId(),
'video1_time' => $video1[0]->getTime(),
'video1_link' => $file1,
'video2_id' => $video2[0]->getId(),
'video2_time' => $video2[0]->getTime(),
'video2_link' => $file2,
// prize
"prizes" => $prizes,
// soccer
"soccer" => $soccer,
// link
"ai" => $ai,
"intro" => $intro,
// banner
"banners" => $banners,
]);
}
} else {
$language = $request->getLocale();
return $this->render('frontend/error/blankpage.html.twig', [
"message" => "System Error",
"language" => $language
]);
}
}
}
}