src/Controller/DefaultController.php line 26

Open in your IDE?
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: grego
  5. * Date: 31/05/2022
  6. * Time: 16:00
  7. */
  8. namespace App\Controller;
  9. use App\Entity\Feedback;
  10. use App\Entity\SharedFeedback;
  11. use App\Repository\FeedbackRepository;
  12. use Doctrine\ORM\EntityManagerInterface;
  13. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\Routing\Annotation\Route;
  17. use Symfony\Contracts\Translation\TranslatorInterface;
  18. class DefaultController extends AbstractController
  19. {
  20. /**
  21. * @Route("/", name="coss_dashboard")
  22. */
  23. public function indexAction(TranslatorInterface $translator)
  24. {
  25. $user = $this->getUser();
  26. if($user && in_array('ROLE_COSS_TUTOR', $user->getRoles())) {
  27. return $this->redirectToRoute('list_learning_period_recipients');
  28. } elseif ($user && in_array('ROLE_COSS_SCHOOL_ADMIN', $user->getRoles())){
  29. return $this->redirectToRoute('school_admin_list_students');
  30. } elseif ($user && in_array('ROLE_COSS_SCHOOL_REFERENT', $user->getRoles())){
  31. return $this->redirectToRoute('school_referent_list_students');
  32. } elseif ($user && in_array('ROLE_COSS_OPCO', $user->getRoles())){
  33. return $this->redirectToRoute('opco_dashboard');
  34. } elseif ($user && in_array('ROLE_SUPER_ADMIN', $user->getRoles())){
  35. return $this->redirectToRoute('mistral_agents_list');
  36. } else {
  37. if ($user) {
  38. $msg = $translator->trans(
  39. "Vous n'avez pas accès à l'interface COSS",
  40. array(), 'coss'
  41. );
  42. $this->addFlash("error", $msg);
  43. }
  44. return $this->redirectToRoute("login");
  45. }
  46. }
  47. /**
  48. * @Route("/shared-feedback/{token}/{status}")
  49. */
  50. public function sharedFeedbackAction(Request $request, EntityManagerInterface $entityManager, $token, $status=false)
  51. {
  52. $shared = $entityManager->getRepository(SharedFeedback::class)->findOneByToken($token);
  53. if($shared){
  54. $canAccessFeedback = false;
  55. $errorMessage = "";
  56. switch($shared->getType()) {
  57. case 'email':
  58. $canAccessFeedback = $shared->getAnswers() < 10; //Si moins de 10 personnes ont répondu
  59. $errorMessage = "Nombre de réponses maximal atteint.";
  60. break;
  61. case 'gmail':
  62. $canAccessFeedback = $shared->getAnswers() < 10; //Si moins de 10 personnes ont répondu
  63. $errorMessage = "Nombre de réponses maximal atteint.";
  64. break;
  65. case 'sms':
  66. $canAccessFeedback = $shared->getAnswers() < 10; //Si moins de 10 personnes ont répondu
  67. $errorMessage = "Nombre de réponses maximal atteint.";
  68. break;
  69. case 'link':
  70. $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
  71. $errorMessage = "Délai maximal de réponse dépassé.";
  72. break;
  73. }
  74. if($canAccessFeedback){
  75. $feedback = new Feedback();
  76. $feedback->setSkill($shared->getSkill());
  77. $feedback->setSender($shared->getSender());
  78. $feedback->setStatus(FeedbackRepository::STATUS_PENDING);
  79. if($shared->getEventTitle()){
  80. $feedback->setEventTitle($shared->getEventTitle());
  81. }
  82. $entityManager->persist($feedback);
  83. $entityManager->flush();
  84. $shared->setAnswers( $shared->getAnswers() + 1);
  85. $entityManager->persist($shared);
  86. $entityManager->flush();
  87. } else {
  88. return new Response($errorMessage, 401);
  89. }
  90. }else{
  91. if(!$status){
  92. return $this->redirect("https://manager.globalcosspro.com/shared-feedback/".$token."/true");
  93. } else {
  94. return $this->redirect("https://www.globalcoss.com/event/?code=invalid");
  95. }
  96. }
  97. switch($shared->getType()) {
  98. case 'sms':
  99. return $this->redirect($feedback->getGuestUrl());
  100. break;
  101. case 'email':
  102. return $this->redirect($feedback->getGuestUrl());
  103. break;
  104. case 'gmail':
  105. return $this->redirect($feedback->getGuestUrl());
  106. break;
  107. case 'link':
  108. return $this->redirect($feedback->getGuestUrl()."?guest=true");
  109. break;
  110. default:
  111. return new Response($errorMessage, 401);
  112. break;
  113. }
  114. }
  115. }