<?php
namespace App\Controller;
use App\Entity\Game\Blocks;
use App\Entity\Game\Campaign;
use App\Entity\Game\LogUser;
use App\Entity\Game\MemoryCard;
use App\Entity\Game\Project;
use App\Entity\Game\Rewards;
use App\Entity\Game\User;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
class MainController extends AbstractController
{
private $session;
private $dates;
public function __construct(SessionInterface $session)
{
$this->session = $session;
$this->dates = array(
"2024-04-15" => "lacoste",
"2024-04-16" => "lacoste",
"2024-04-17" => "lacoste",
"2024-04-18" => "lacoste",
"2024-04-19" => "lacoste",
"2024-04-20" => "lacoste",
"2024-04-21" => "lacoste",
"2024-04-22" => "lacoste",
"2024-04-23" => "lacoste",
"2024-04-24" => "lacoste",
"2024-04-25" => "lacoste",
"2024-04-26" => "lacoste",
"2024-04-27" => "lacoste",
"2024-04-28" => "lacoste",
"2024-04-29" => "lacoste",
"2024-04-30" => "lacoste",
"2024-05-01" => "lacoste",
"2024-05-02" => "lacoste",
"2024-05-03" => "lacoste",
"2024-05-04" => "lacoste",
"2024-05-05" => "lacoste",
// "2024-05-14" => "lacoste",
);
}
/**
* @Route("/", name="main_page", methods={"GET"})
*
*/
public function mainPage(Request $request): Response
{
$now = new \DateTime('now', new \DateTimeZone('Europe/Madrid'));
// [inici]S'HA DE BORRAR
// if($request->get("date")){
// $date = $request->get("date");
// $now = new \DateTime($date);
// }
// $block_name = $request->get("block");
// if( substr($block_name, 0, 4) == '2022' ) {
// $explode_block_name = explode('@',$block_name);
// $date = $explode_block_name[0];
// $block_name = $explode_block_name[1];
// $now = new \DateTime($date);
// }
// [fi]S'HA DE BORRAR
$now = $now->format("Y-m-d");
$hash = $request->get("hash");
if ( !empty($hash) ) {
if(isset($this->dates[$now])){
// dd("entra2");
$project = $this->dates[$now];
switch ($project) {
case "lacoste":
return $this->game($request);
break;
}
}
}
return $this->render('main/mainTemplate.html.twig');
}
/**
* @Route("/game", name="get_game", methods={"GET"})
*
*/
public function game(Request $request): Response
{
$this->session->clear();
$this->session->remove('playerHash');
$this->session->remove('quizHash');
$this->session->remove('campaignHash');
$this->session->set('gameUser', false);
$em = $this->getDoctrine()->getManager();
$mail = $request->get("mail");
$hash = $request->get("hash");
$block_name = $request->get("block");
$ProjectRepository = $em->getRepository(Project::class);
$campaignRepository = $em->getRepository(Campaign::class);
$memoryCardRepository = $em->getRepository(MemoryCard::class);
$LogUserRepository = $em->getRepository(LogUser::class);
$BlocksRepository = $em->getRepository(Blocks::class);
$UsersRepository = $em->getRepository(User::class);
$project = $ProjectRepository->findAll()[0];
$now = new \DateTime('now', new \DateTimeZone('Europe/Madrid'));
// dd($project);
$status = $project->getStatus();
if($project && $status != 0 && $project->getDate() <= $now){
$user = $UsersRepository->findOneBy(array("email" => $mail));
$formSubmited = false;
// if($user){
// $formSubmited = true;
// } else{
// $logUser = $LogUserRepository->findBy(array("hash" => $hash));
// foreach($logUser as $lu){
// if($lu->getUser()){
// $formSubmited = true;
// $user = $lu->getUser();
// }
// }
// }
// if($user && (date_format($user->getDateRewardCollected(), "Y-m-d") != date_format($now, "Y-m-d"))){
// $formSubmited = false;
// }
if($hash && $block_name){
$url = "https://smart-adest.adestexperience.com/nfc/validate/hash?hash=".$hash;
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => $url, //(*)
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET'
));
$response = curl_exec($curl);
curl_close($curl);
$response = json_decode($response);
if($response == 1){
$this->session->set('gameHash', $hash);
$block = $BlocksRepository->findOneBy(array("name" => $block_name));
try{
$now = new \DateTime('now', new \DateTimeZone('Europe/Madrid'));
$logUser = new LogUser();
$logUser->setHash($hash);
$logUser->setBlock($block);
if($user) $logUser->setUser($user);
$logUser->setDateCreated($now);
$em->persist($logUser);
$em->flush();
} catch(\Exception $e){
if ( $_SERVER['APP_DEBUG'] ) {
$return['message_explain'] = $e->getMessage();
dd($return);
}
}
}
}
$campaigns = $campaignRepository->findAll();
// $activeCampaign = $campaignRepository->find(1);
$activeCampaign = null;
foreach($campaigns as $campaign){
// dd($now, new \DateTime(date_format($campaign->getStartDate(), "Y-m-d H:i:s"), new \DateTimeZone('Europe/Madrid')));
if($now >= new \DateTime(date_format($campaign->getStartDate(), "Y-m-d H:i:s"), new \DateTimeZone('Europe/Madrid')) && $now <= new \DateTime(date_format($campaign->getEndDate(), "Y-m-d H:i:s"), new \DateTimeZone('Europe/Madrid'))){
$activeCampaign = $campaign;
break;
}
}
if($activeCampaign){
$this->session->set('campaignHash', $activeCampaign->getHash());
$memoryCardsRes = [];
$memoryCardsRes[0] = [
"img" => $activeCampaign->getMemoryGame()->getBackCardImg()
];
$memoryCards = $memoryCardRepository->findBy(["memory_game" => $activeCampaign->getMemoryGame()]);
foreach ($memoryCards as $key => $card) {
array_push($memoryCardsRes, [
"id" => $card->getId(),
"name" => $card->getName(),
"img" => $card->getImg()
]);
}
return $this->render('game/index.html.twig', [
'activeCampaign' => $activeCampaign,
'memoryCards' => $memoryCardsRes,
'mail' => $mail,
'status' => $status,
'formSubmited' => $formSubmited
]);
}else{
$status = -1;
if($now < new \DateTime(date_format($campaign->getStartDate(), "Y-m-d H:i:s"), new \DateTimeZone('Europe/Madrid')) ){
$status = 0;
}
// $rewardRepo = $em->getRepository(Rewards::class);
// try{
// $rewards = $rewardRepo->updateNextDayReward();
// // dd($rewards);
// $columns = array_column($rewards, "id");
// // dd($columns);
// $allRewards = $rewardRepo->findAll();
// foreach($rewards as $reward){
// in_array($columns,[1, 2, 3]);
// // $reward["id"];
// $r = $rewardRepo->findOneBy(["id" => $reward["id"]]);
// $r->setMax($r->getHash() - $reward["cantity"]);
// $em->persist($r);
// }
// foreach($allRewards as $rew){
// if(!in_array($rew->getId(), $columns)){
// $r = $rewardRepo->findOneBy(["id" => $rew->getId()]);
// $r->setMax($r->getHash());
// $em->persist($r);
// }
// }
// $em->flush();
// $return = [
// "status" => "success",
// "message" => "Cantidad repartida"
// ];
// }catch(\Exception $e){
// $return = [
// "status" => "error",
// "message" => "incorrect data"
// ];
// }
}
}
return $this->render('game/index.html.twig', [
'status' => $status,
]);
}
}