<?php
/**
* Created by PhpStorm.
* User: grego
* Date: 31/05/2022
* Time: 16:00
*/
namespace App\Controller;
use App\Entity\Feedback;
use App\Entity\SharedFeedback;
use App\Repository\FeedbackRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Contracts\Translation\TranslatorInterface;
class DefaultController extends AbstractController
{
/**
* @Route("/", name="coss_dashboard")
*/
public function indexAction(TranslatorInterface $translator)
{
$user = $this->getUser();
if($user && in_array('ROLE_COSS_TUTOR', $user->getRoles())) {
return $this->redirectToRoute('list_learning_period_recipients');
} elseif ($user && in_array('ROLE_COSS_SCHOOL_ADMIN', $user->getRoles())){
return $this->redirectToRoute('school_admin_list_students');
} elseif ($user && in_array('ROLE_COSS_SCHOOL_REFERENT', $user->getRoles())){
return $this->redirectToRoute('school_referent_list_students');
} elseif ($user && in_array('ROLE_COSS_OPCO', $user->getRoles())){
return $this->redirectToRoute('opco_dashboard');
} elseif ($user && in_array('ROLE_SUPER_ADMIN', $user->getRoles())){
return $this->redirectToRoute('mistral_agents_list');
} else {
if ($user) {
$msg = $translator->trans(
"Vous n'avez pas accès à l'interface COSS",
array(), 'coss'
);
$this->addFlash("error", $msg);
}
return $this->redirectToRoute("login");
}
}
/**
* @Route("/shared-feedback/{token}/{status}")
*/
public function sharedFeedbackAction(Request $request, EntityManagerInterface $entityManager, $token, $status=false)
{
$shared = $entityManager->getRepository(SharedFeedback::class)->findOneByToken($token);
if($shared){
$canAccessFeedback = false;
$errorMessage = "";
switch($shared->getType()) {
case 'email':
$canAccessFeedback = $shared->getAnswers() < 10; //Si moins de 10 personnes ont répondu
$errorMessage = "Nombre de réponses maximal atteint.";
break;
case 'gmail':
$canAccessFeedback = $shared->getAnswers() < 10; //Si moins de 10 personnes ont répondu
$errorMessage = "Nombre de réponses maximal atteint.";
break;
case 'sms':
$canAccessFeedback = $shared->getAnswers() < 10; //Si moins de 10 personnes ont répondu
$errorMessage = "Nombre de réponses maximal atteint.";
break;
case 'link':
$canAccessFeedback = (strtotime($shared->getCreatedAt()->format("Y-m-d H:i:s")) > time() - 604800) && $shared->getAnswers() < 100; //Si la date de création du feedback est supérieure à il y a 7j et qu'il y a moins de 100 réponses
$errorMessage = "Délai maximal de réponse dépassé.";
break;
}
if($canAccessFeedback){
$feedback = new Feedback();
$feedback->setSkill($shared->getSkill());
$feedback->setSender($shared->getSender());
$feedback->setStatus(FeedbackRepository::STATUS_PENDING);
if($shared->getEventTitle()){
$feedback->setEventTitle($shared->getEventTitle());
}
$entityManager->persist($feedback);
$entityManager->flush();
$shared->setAnswers( $shared->getAnswers() + 1);
$entityManager->persist($shared);
$entityManager->flush();
} else {
return new Response($errorMessage, 401);
}
}else{
if(!$status){
return $this->redirect("https://manager.globalcosspro.com/shared-feedback/".$token."/true");
} else {
return $this->redirect("https://www.globalcoss.com/event/?code=invalid");
}
}
switch($shared->getType()) {
case 'sms':
return $this->redirect($feedback->getGuestUrl());
break;
case 'email':
return $this->redirect($feedback->getGuestUrl());
break;
case 'gmail':
return $this->redirect($feedback->getGuestUrl());
break;
case 'link':
return $this->redirect($feedback->getGuestUrl()."?guest=true");
break;
default:
return new Response($errorMessage, 401);
break;
}
}
}