src/Controller/DefaultController.php line 39

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\Badge;
  10. use App\Entity\Feedback;
  11. use App\Entity\HierarchicalList;
  12. use App\Entity\SharedFeedback;
  13. use App\Entity\Skill;
  14. use App\Entity\User;
  15. use App\Manager\ImportExportManager;
  16. use App\Manager\MailerManager;
  17. use App\Manager\UserManager;
  18. use App\Repository\FeedbackRepository;
  19. use App\Repository\HierarchicalListRepository;
  20. use Doctrine\ORM\EntityManagerInterface;
  21. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  22. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  23. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  24. use Symfony\Component\Form\Extension\Core\Type\TextType;
  25. use Symfony\Component\HttpFoundation\JsonResponse;
  26. use Symfony\Component\HttpFoundation\Request;
  27. use Symfony\Component\HttpFoundation\Response;
  28. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  29. use Symfony\Component\Routing\Annotation\Route;
  30. use Symfony\Contracts\Translation\TranslatorInterface;
  31. class DefaultController extends AbstractController
  32. {
  33.     /**
  34.      * @Route("/", name="app_home")
  35.      */
  36.     public function indexAction(Request $requestTranslatorInterface $translator)
  37.     {
  38.         $user $this->getUser();
  39.         if($user && (in_array('ROLE_SUPER_ADMIN'$user->getRoles())
  40.                 || in_array('ROLE_ADMIN'$user->getRoles())
  41.                 || in_array('ROLE_BUSINESS_ADMIN'$user->getRoles())
  42.                 || in_array('ROLE_TECHNICAL_ADMIN'$user->getRoles())
  43.                 || in_array('ROLE_SBM'$user->getRoles())
  44.                 || in_array('ROLE_ADMIN_COMPANY_ACCESS'$user->getRoles())
  45.                 || in_array('ROLE_AMBASSADEUR'$user->getRoles())
  46.                 ||in_array('ROLE_MANAGER'$user->getRoles()) )) {
  47.             return $this->redirectToRoute('client_user_list');
  48.         } else {
  49.             // Remove access to admin client
  50.             /*
  51.             if ($user) {
  52.                 $msg = $translator->trans(
  53.                     "Vous n'avez pas accès à l'interface Client",
  54.                     array(), 'client_bo'
  55.                 );
  56.                 $this->addFlash("error", $msg);
  57.             }
  58.             return $this->redirectToRoute("login");
  59.             */
  60.             return $this->render('ClientBOBundle/Common/forbidden_access.html.twig');
  61.         }
  62.     }
  63.     /**
  64.      * @Route("/shared-feedback/{token}/{status}")
  65.      */
  66.     public function sharedFeedbackAction(Request $requestEntityManagerInterface $entityManager$token$status=false)
  67.     {
  68.         $shared $entityManager->getRepository(SharedFeedback::class)->findOneByToken($token);
  69.         if($shared){
  70.             $canAccessFeedback false;
  71.             $errorMessage "";
  72.             switch($shared->getType()) {
  73.                 case 'email':
  74.                     $canAccessFeedback $shared->getAnswers() < 25//Si moins de 25 personnes ont répondu
  75.                     $errorMessage "Nombre de réponses maximal atteint.";
  76.                     break;
  77.                 case 'gmail':
  78.                     $canAccessFeedback $shared->getAnswers() < 25//Si moins de 25 personnes ont répondu
  79.                     $errorMessage "Nombre de réponses maximal atteint.";
  80.                     break;
  81.                 case 'sms':
  82.                     $canAccessFeedback $shared->getAnswers() < 25//Si moins de 25 personnes ont répondu
  83.                     $errorMessage "Nombre de réponses maximal atteint.";
  84.                     break;
  85.                 case 'link':
  86.                     $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
  87.                     $errorMessage "Délai maximal de réponse dépassé.";
  88.                     break;
  89.             }
  90.             if($canAccessFeedback){
  91.                 $feedback = new Feedback();
  92.                 $feedback->setSkill($shared->getSkill());
  93.                 $feedback->setSender($shared->getSender());
  94.                 $feedback->setStatus(FeedbackRepository::STATUS_PENDING);
  95.                 if($shared->getEventTitle()){
  96.                     $feedback->setEventTitle($shared->getEventTitle());
  97.                 }
  98.                 $entityManager->persist($feedback);
  99.                 $entityManager->flush();
  100.                 $shared->setAnswers$shared->getAnswers() + 1);
  101.                 $entityManager->persist($shared);
  102.                 $entityManager->flush();
  103.             } else {
  104.                 return new Response($errorMessage401);
  105.             }
  106.         }else{
  107.             if(!$status){
  108.                 return $this->redirect("https://manager.globalcoss.com/shared-feedback/".$token."/true");
  109.             } else {
  110.                 return $this->redirect("https://www.5feedback.com/feedback/?code=invalid");
  111.             }
  112.         }
  113.         switch($shared->getType()) {
  114.             case 'sms':
  115.                 return $this->redirect($feedback->getGuestUrl());
  116.                 break;
  117.             case 'email':
  118.                 return $this->redirect($feedback->getGuestUrl());
  119.                 break;
  120.             case 'gmail':
  121.                 return $this->redirect($feedback->getGuestUrl());
  122.                 break;
  123.             case 'link':
  124.                 return $this->redirect($feedback->getGuestUrl()."?guest=true");
  125.                 break;
  126.             default:
  127.                 return new Response($errorMessage401);
  128.                 break;
  129.         }
  130.     }
  131.     /**
  132.      * @Route("/badges/{token}", name="badges_detail")
  133.      */
  134.     public function detailAction(Request $request$tokenEntityManagerInterface $entityManagerUserManager $userManager){
  135.         $badges $entityManager->getRepository(Badge::class)->findBy(array('token' => $token));
  136.         if(!$badges){
  137.             return $this->render('AdminBundle/Badge/error.html.twig');
  138.         } else {
  139.             $badges $badges[0];
  140.         }
  141.         //$request->setLocale($badges->getLocale());
  142.         $skillStats = array();
  143.         foreach ($badges->getSkillIds() as $skillId){
  144.             $skill $entityManager->getRepository(Skill::class)->find($skillId);
  145.             $firstFeedback $entityManager->getRepository(Feedback::class)->getFirstFeedbackOnSkill($badges->getUser(), $skill$badges->getCreatedAt());
  146.             $lastFeedback $entityManager->getRepository(Feedback::class)->getLastFeedbackOnSkill($badges->getUser(), $skill$badges->getCreatedAt());
  147.             $skillStats[] = $userManager->getSkillStatisticsByDate($badges->getUser(), $skillId$firstFeedback->getCreatedAt(), $lastFeedback->getAnsweredAt(), $request->getLocale());
  148.         }
  149.         foreach ($skillStats as &$skillStat){
  150.             usort($skillStat['strengths'], function($a$b)
  151.             {
  152.                 return ($a['count'] <= $b['count']);
  153.             });
  154.         }
  155.         if($badges->getUser()->getCompany() && $badges->getUser()->getCompany()->getBadgesActive()
  156.             && $badges->getUser()->getHierarchicalList() &&
  157.             ($badges->getUser()->getHierarchicalList()->getStatus() == HierarchicalListRepository::STATUS_VALIDATED
  158.                 || $badges->getUser()->getHierarchicalList()->getStatus() == HierarchicalListRepository::STATUS_MODIFIED_WAITING_APPROVAL )){
  159.             $badgesActive true;
  160.         } else {
  161.             $badgesActive false;
  162.         }
  163.         return $this->render('AdminBundle/Badge/detail.html.twig', array(
  164.             'user' => $badges->getUser(),
  165.             'badgesActive' => $badgesActive,
  166.             'badges' => $badges,
  167.             'stats' => $skillStats,
  168.         ));
  169.     }
  170.     /**
  171.      * @Route("/hierarchical/{token}/{id}", name="hierarchical_list_validation")
  172.      */
  173.     public function hierarchicalListAction(Request $request$token$idEntityManagerInterface $entityManagerMailerManager $mailerManager)
  174.     {
  175.         $hierarchicalList $entityManager->getRepository(HierarchicalList::class)->find($id);
  176.         if($hierarchicalList->getGuestToken() == $token || $hierarchicalList->getNoManagerToken() == $token) {
  177.             $superiorUsers $entityManager->getRepository(User::class)->findBy(array('id' => $hierarchicalList->getSuperiorUsers(), 'deletedAt' => null));
  178.             $equalUsers $entityManager->getRepository(User::class)->findBy(array('id' => $hierarchicalList->getEqualUsers(), 'deletedAt' => null));
  179.             $lowerUsers $entityManager->getRepository(User::class)->findBy(array('id' => $hierarchicalList->getLowerUsers(), 'deletedAt' => null));
  180.             $coworkerUsers $entityManager->getRepository(User::class)->findBy(array('id' => $hierarchicalList->getCoworkerUsers(), 'deletedAt' => null));
  181.             $outsideUsers $entityManager->getRepository(User::class)->findBy(array('id' => $hierarchicalList->getOutsideUsers(), 'deletedAt' => null));
  182.             $allCompanyUsers $entityManager->getRepository(User::class)->findBy(array("company" => $hierarchicalList->getUser()->getCompany(), "deletedAt" => NULL));
  183.             foreach($superiorUsers as $u){
  184.                 if(in_array($u$allCompanyUsers)) {
  185.                     //exists
  186.                 } else {
  187.                     $allCompanyUsers[] = $u;
  188.                 }
  189.             }
  190.             foreach($equalUsers as $u){
  191.                 if(in_array($u$allCompanyUsers)) {
  192.                     //exists
  193.                 } else {
  194.                     $allCompanyUsers[] = $u;
  195.                 }
  196.             }
  197.             foreach($lowerUsers as $u){
  198.                 if(in_array($u$allCompanyUsers)) {
  199.                     //exists
  200.                 } else {
  201.                     $allCompanyUsers[] = $u;
  202.                 }
  203.             }
  204.             foreach($coworkerUsers as $u){
  205.                 if(in_array($u$allCompanyUsers)) {
  206.                     //exists
  207.                 } else {
  208.                     $allCompanyUsers[] = $u;
  209.                 }
  210.             }
  211.             foreach($outsideUsers as $u){
  212.                 if(in_array($u$allCompanyUsers)) {
  213.                     //exists
  214.                 } else {
  215.                     $allCompanyUsers[] = $u;
  216.                 }
  217.             }
  218.             $hierarchicalListForm $this->createFormBuilder()
  219.                 ->add('superiorIds'TextType::class, array('label' => false'mapped' => false))
  220.                 ->add('equalIds'TextType::class, array('label' => false'mapped' => false))
  221.                 ->add('lowerIds'TextType::class, array('label' => false'mapped' => false))
  222.                 ->add('coworkerIds'TextType::class, array('label' => false'mapped' => false))
  223.                 ->add('outsideIds'TextType::class, array('label' => false'mapped' => false))
  224.                 ->add('save'SubmitType::class, array('label' => false))
  225.                 ->getForm();
  226.             $hierarchicalListForm->handleRequest($request);
  227.             if ($hierarchicalListForm->isSubmitted() && $hierarchicalListForm->isValid()) {
  228.                 $superiorIds  $hierarchicalListForm->get('superiorIds')->getData();
  229.                 $equalIds  $hierarchicalListForm->get('equalIds')->getData();
  230.                 $lowerIds  $hierarchicalListForm->get('lowerIds')->getData();
  231.                 $coworkerIds  $hierarchicalListForm->get('coworkerIds')->getData();
  232.                 $outsideIds  $hierarchicalListForm->get('outsideIds')->getData();
  233.                 $superior explode(";"$superiorIds);
  234.                 $superiorArray = array();
  235.                 foreach ($superior as $uId){
  236.                     $superiorArray[] = $uId;
  237.                 }
  238.                 $equal explode(";"$equalIds);
  239.                 $equalArray = array();
  240.                 foreach ($equal as $uId){
  241.                     $equalArray[] = $uId;
  242.                 }
  243.                 $lower explode(";"$lowerIds);
  244.                 $lowerArray = array();
  245.                 foreach ($lower as $uId){
  246.                     $lowerArray[] = $uId;
  247.                 }
  248.                 $coworker explode(";"$coworkerIds);
  249.                 $coworkerArray = array();
  250.                 foreach ($coworker as $uId){
  251.                     $coworkerArray[] = $uId;
  252.                 }
  253.                 $outside explode(";"$outsideIds);
  254.                 $outsideArray = array();
  255.                 foreach ($outside as $uId){
  256.                     $outsideArray[] = $uId;
  257.                 }
  258.                 $hierarchicalList->setSuperiorUsers($superiorArray);
  259.                 $hierarchicalList->setEqualUsers($equalArray);
  260.                 $hierarchicalList->setLowerUsers($lowerArray);
  261.                 $hierarchicalList->setCoworkerUsers($coworkerArray);
  262.                 $hierarchicalList->setOutsideUsers($outsideArray);
  263.                 $hierarchicalList->setStatus(HierarchicalListRepository::STATUS_VALIDATED);
  264.                 $entityManager->persist($hierarchicalList);
  265.                 $entityManager->flush();
  266.                 if($hierarchicalList->getUser()->getLastLogin() == NULL || $hierarchicalList->getUser()->getPlatform() == 'browser'){
  267.                     $mailerManager->sendHierarchicalListValidated($hierarchicalList->getUser());
  268.                 } else {
  269.                     $mailerManager->sendHierarchicalListValidated($hierarchicalList->getUser());
  270.                 }
  271.                 return $this->render('AdminBundle/Hierarchical/success.html.twig');
  272.             }
  273.             $allCompanyUsersArray = array();
  274.             $formattedUsersIds = array();
  275.             $formattedUsersFirstname = array();
  276.             $formattedUsersLastname = array();
  277.             foreach ($allCompanyUsers as $u){
  278.                 $allCompanyUsersArray[] = $u->getEmail();
  279.                 $formattedUsersIds[$u->getEmail()] = $u->getId();
  280.                 $formattedUsersFirstname[$u->getEmail()] = $u->getFirstname();
  281.                 $formattedUsersLastname[$u->getEmail()] = $u->getLastname();
  282.             }
  283.             $superiorUsersArray = array();
  284.             foreach($superiorUsers as $u){
  285.                 $superiorUsersArray[] = $u->getEmail();
  286.             }
  287.             $equalUsersArray = array();
  288.             foreach($equalUsers as $u){
  289.                 $equalUsersArray[] = $u->getEmail();
  290.             }
  291.             $lowerUsersArray = array();
  292.             foreach($lowerUsers as $u){
  293.                 $lowerUsersArray[] = $u->getEmail();
  294.             }
  295.             $coworkerUsersArray = array();
  296.             foreach($coworkerUsers as $u){
  297.                 $coworkerUsersArray[] = $u->getEmail();
  298.             }
  299.             $outsideUsersArray = array();
  300.             foreach($outsideUsers as $u){
  301.                 $outsideUsersArray[] = $u->getEmail();
  302.             }
  303.             return $this->render('AdminBundle/Hierarchical/index.html.twig', array(
  304.                 'hierarchicalList' => $hierarchicalList,
  305.                 'superiorUsers' => $superiorUsers,
  306.                 'equalUsers' => $equalUsers,
  307.                 'lowerUsers' => $lowerUsers,
  308.                 'coworkerUsers' => $coworkerUsers,
  309.                 'outsideUsers' => $outsideUsers,
  310.                 'allCompanyUsersArray' => $allCompanyUsersArray,
  311.                 'superiorUsersArray' => $superiorUsersArray,
  312.                 'equalUsersArray' => $equalUsersArray,
  313.                 'lowerUsersArray' => $lowerUsersArray,
  314.                 'coworkerUsersArray' => $coworkerUsersArray,
  315.                 'outsideUsersArray' => $outsideUsersArray,
  316.                 'formattedUsersIds' => $formattedUsersIds,
  317.                 'formattedUsersFirstname' => $formattedUsersFirstname,
  318.                 'formattedUsersLastname' => $formattedUsersLastname,
  319.                 'form' => $hierarchicalListForm->createView(),
  320.                 'token' => $token,
  321.                 'list_id' => $id
  322.             ));
  323.         } else {
  324.             return $this->render('AdminBundle/Hierarchical/error.html.twig');
  325.         }
  326.     }
  327.     /**
  328.      * @Route("client/hierarchical/{token}/{id}", name="client_hierarchical_list_validation")
  329.      */
  330.     public function clientHierarchicalListAction (Request $request$token$idEntityManagerInterface $entityManagerMailerManager $mailerManager)
  331.     {
  332.         $hierarchicalList $entityManager->getRepository(HierarchicalList::class)->find($id);
  333.         if($hierarchicalList->getGuestToken() == $token || $hierarchicalList->getNoManagerToken() == $token) {
  334.             if(!$hierarchicalList->getManagerUser()){
  335.                 return $this->redirectToRoute('client_hierarchical_list_add_manager', array('token' => $token'id' => $id));
  336.             }
  337.             $superiorUsers $entityManager->getRepository(User::class)->findBy(array('id' => $hierarchicalList->getSuperiorUsers(), 'deletedAt' => null));
  338.             $equalUsers $entityManager->getRepository(User::class)->findBy(array('id' => $hierarchicalList->getEqualUsers(), 'deletedAt' => null));
  339.             $lowerUsers $entityManager->getRepository(User::class)->findBy(array('id' => $hierarchicalList->getLowerUsers(), 'deletedAt' => null));
  340.             $coworkerUsers $entityManager->getRepository(User::class)->findBy(array('id' => $hierarchicalList->getCoworkerUsers(), 'deletedAt' => null));
  341.             $outsideUsers $entityManager->getRepository(User::class)->findBy(array('id' => $hierarchicalList->getOutsideUsers(), 'deletedAt' => null));
  342.             $allCompanyUsers $entityManager->getRepository(User::class)->findBy(array("company" => $hierarchicalList->getUser()->getCompany(), "deletedAt" => NULL));
  343.             foreach($superiorUsers as $u){
  344.                 if(in_array($u$allCompanyUsers)) {
  345.                     //exists
  346.                 } else {
  347.                     $allCompanyUsers[] = $u;
  348.                 }
  349.             }
  350.             foreach($equalUsers as $u){
  351.                 if(in_array($u$allCompanyUsers)) {
  352.                     //exists
  353.                 } else {
  354.                     $allCompanyUsers[] = $u;
  355.                 }
  356.             }
  357.             foreach($lowerUsers as $u){
  358.                 if(in_array($u$allCompanyUsers)) {
  359.                     //exists
  360.                 } else {
  361.                     $allCompanyUsers[] = $u;
  362.                 }
  363.             }
  364.             foreach($coworkerUsers as $u){
  365.                 if(in_array($u$allCompanyUsers)) {
  366.                     //exists
  367.                 } else {
  368.                     $allCompanyUsers[] = $u;
  369.                 }
  370.             }
  371.             foreach($outsideUsers as $u){
  372.                 if(in_array($u$allCompanyUsers)) {
  373.                     //exists
  374.                 } else {
  375.                     $allCompanyUsers[] = $u;
  376.                 }
  377.             }
  378.             $hierarchicalListForm $this->createFormBuilder()
  379.                 ->add('superiorIds'TextType::class, array('label' => false'mapped' => false))
  380.                 ->add('equalIds'TextType::class, array('label' => false'mapped' => false))
  381.                 ->add('lowerIds'TextType::class, array('label' => false'mapped' => false))
  382.                 ->add('coworkerIds'TextType::class, array('label' => false'mapped' => false))
  383.                 ->add('outsideIds'TextType::class, array('label' => false'mapped' => false))
  384.                 ->add('save'SubmitType::class, array('label' => false))
  385.                 ->getForm();
  386.             $hierarchicalListForm->handleRequest($request);
  387.             if ($hierarchicalListForm->isSubmitted() && $hierarchicalListForm->isValid()) {
  388.                 $superiorIds  $hierarchicalListForm->get('superiorIds')->getData();
  389.                 $equalIds  $hierarchicalListForm->get('equalIds')->getData();
  390.                 $lowerIds  $hierarchicalListForm->get('lowerIds')->getData();
  391.                 $coworkerIds  $hierarchicalListForm->get('coworkerIds')->getData();
  392.                 $outsideIds  $hierarchicalListForm->get('outsideIds')->getData();
  393.                 $superior explode(";"$superiorIds);
  394.                 $superiorArray = array();
  395.                 foreach ($superior as $uId){
  396.                     $superiorArray[] = $uId;
  397.                 }
  398.                 $equal explode(";"$equalIds);
  399.                 $equalArray = array();
  400.                 foreach ($equal as $uId){
  401.                     $equalArray[] = $uId;
  402.                 }
  403.                 $lower explode(";"$lowerIds);
  404.                 $lowerArray = array();
  405.                 foreach ($lower as $uId){
  406.                     $lowerArray[] = $uId;
  407.                 }
  408.                 $coworker explode(";"$coworkerIds);
  409.                 $coworkerArray = array();
  410.                 foreach ($coworker as $uId){
  411.                     $coworkerArray[] = $uId;
  412.                 }
  413.                 $outside explode(";"$outsideIds);
  414.                 $outsideArray = array();
  415.                 foreach ($outside as $uId){
  416.                     $outsideArray[] = $uId;
  417.                 }
  418.                 $hierarchicalList->setSuperiorUsers($superiorArray);
  419.                 $hierarchicalList->setEqualUsers($equalArray);
  420.                 $hierarchicalList->setLowerUsers($lowerArray);
  421.                 $hierarchicalList->setCoworkerUsers($coworkerArray);
  422.                 $hierarchicalList->setOutsideUsers($outsideArray);
  423.                 $oldStatus $hierarchicalList->getStatus();
  424.                 if($oldStatus == HierarchicalListRepository::STATUS_TODO || $oldStatus == HierarchicalListRepository::STATUS_WAITING_APPROVAL){
  425.                     $hierarchicalList->setStatus(HierarchicalListRepository::STATUS_WAITING_APPROVAL);
  426.                 }
  427.                 if($oldStatus == HierarchicalListRepository::STATUS_MODIFIED_WAITING_APPROVAL || $oldStatus == HierarchicalListRepository::STATUS_VALIDATED){
  428.                     $hierarchicalList->setStatus(HierarchicalListRepository::STATUS_MODIFIED_WAITING_APPROVAL);
  429.                 }
  430.                 $entityManager->persist($hierarchicalList);
  431.                 $entityManager->flush();
  432.                 if($oldStatus == HierarchicalListRepository::STATUS_TODO){
  433.                     $mailerManager->sendHierarchicalListManagerNew($hierarchicalList);
  434.                 } elseif ($oldStatus == HierarchicalListRepository::STATUS_WAITING_APPROVAL){
  435.                     // Nothing to do
  436.                 } elseif ($oldStatus == HierarchicalListRepository::STATUS_MODIFIED_WAITING_APPROVAL) {
  437.                     // Nothing to do
  438.                 } elseif ($oldStatus == HierarchicalListRepository::STATUS_VALIDATED){
  439.                     $mailerManager->sendHierarchicalListManagerModified($hierarchicalList);
  440.                 }
  441.                 return $this->render('AdminBundle/Hierarchical/client_success.html.twig');
  442.             }
  443.             $allCompanyUsersArray = array();
  444.             $formattedUsersIds = array();
  445.             $formattedUsersFirstname = array();
  446.             $formattedUsersLastname = array();
  447.             foreach ($allCompanyUsers as $u){
  448.                 $allCompanyUsersArray[] = $u->getEmail();
  449.                 $formattedUsersIds[$u->getEmail()] = $u->getId();
  450.                 $formattedUsersFirstname[$u->getEmail()] = $u->getFirstname();
  451.                 $formattedUsersLastname[$u->getEmail()] = $u->getLastname();
  452.             }
  453.             $superiorUsersArray = array();
  454.             foreach($superiorUsers as $u){
  455.                 $superiorUsersArray[] = $u->getEmail();
  456.             }
  457.             $equalUsersArray = array();
  458.             foreach($equalUsers as $u){
  459.                 $equalUsersArray[] = $u->getEmail();
  460.             }
  461.             $lowerUsersArray = array();
  462.             foreach($lowerUsers as $u){
  463.                 $lowerUsersArray[] = $u->getEmail();
  464.             }
  465.             $coworkerUsersArray = array();
  466.             foreach($coworkerUsers as $u){
  467.                 $coworkerUsersArray[] = $u->getEmail();
  468.             }
  469.             $outsideUsersArray = array();
  470.             foreach($outsideUsers as $u){
  471.                 $outsideUsersArray[] = $u->getEmail();
  472.             }
  473.             return $this->render('AdminBundle/Hierarchical/client_index.html.twig', array(
  474.                 'hierarchicalList' => $hierarchicalList,
  475.                 'superiorUsers' => $superiorUsers,
  476.                 'equalUsers' => $equalUsers,
  477.                 'lowerUsers' => $lowerUsers,
  478.                 'coworkerUsers' => $coworkerUsers,
  479.                 'outsideUsers' => $outsideUsers,
  480.                 'allCompanyUsersArray' => $allCompanyUsersArray,
  481.                 'superiorUsersArray' => $superiorUsersArray,
  482.                 'equalUsersArray' => $equalUsersArray,
  483.                 'lowerUsersArray' => $lowerUsersArray,
  484.                 'coworkerUsersArray' => $coworkerUsersArray,
  485.                 'outsideUsersArray' => $outsideUsersArray,
  486.                 'formattedUsersIds' => $formattedUsersIds,
  487.                 'formattedUsersFirstname' => $formattedUsersFirstname,
  488.                 'formattedUsersLastname' => $formattedUsersLastname,
  489.                 'form' => $hierarchicalListForm->createView(),
  490.                 'token' => $token,
  491.                 'list_id' => $id,
  492.                 'hierarchicalListStatus' => $hierarchicalList->getStatus()
  493.             ));
  494.         } else {
  495.             return $this->render('AdminBundle/Hierarchical/client_error.html.twig');
  496.         }
  497.     }
  498.     /**
  499.      * @Route("client/hierarchical/manager/{token}/{id}", name="client_hierarchical_list_add_manager")
  500.      */
  501.     public function clientHierarchicalListAddManagerAction (Request $request$token$idEntityManagerInterface $entityManagerImportExportManager $importExportManagerTranslatorInterface $translator)
  502.     {
  503.         $hierarchicalList $entityManager->getRepository(HierarchicalList::class)->find($id);
  504.         if($hierarchicalList->getGuestToken() == $token || $hierarchicalList->getNoManagerToken() == $token) {
  505.             if(!$hierarchicalList->getManagerUser()){
  506.                 $managerForm $this->createFormBuilder()
  507.                     ->add('firstname'TextType::class, array('label' => false'mapped' => false'required' => true))
  508.                     ->add('lastname'TextType::class, array('label' => false'mapped' => false'required' => true))
  509.                     ->add('email'EmailType::class, array('label' => false'mapped' => false'required' => true))
  510.                     ->add('save'SubmitType::class, array('label' => false))
  511.                     ->getForm();
  512.                 $managerForm->handleRequest($request);
  513.                 if ($managerForm->isSubmitted() && $managerForm->isValid()) {
  514.                     $firstname  $managerForm->get('firstname')->getData();
  515.                     $lastname  $managerForm->get('lastname')->getData();
  516.                     $email  $managerForm->get('email')->getData();
  517.                     if(!filter_var($emailFILTER_VALIDATE_EMAIL)){
  518.                         $msg $translator->trans(
  519.                             "Merci de saisir un email valide.",
  520.                             array(), 'client_bo'
  521.                         );
  522.                         $this->addFlash("error"$msg);
  523.                         return $this->redirectToRoute('client_hierarchical_list_add_manager', array('token' => $token'id' => $id));
  524.                     } else {
  525.                         if($email && is_string($email) && $firstname && is_string($firstname) && $lastname && is_string($lastname)){
  526.                             $manager $entityManager->getRepository(User::class)->findOneBy(array('email'=>$email));
  527.                             if(!$manager){
  528.                                 // if the manager does not exist, we create it
  529.                                 $manager = new User();
  530.                                 $passwords $importExportManager->generatePassword($manager);
  531.                                 $manager->setPassword($passwords['password']);
  532.                                 $manager->setEnabled(true);
  533.                                 $manager->setLastname($lastname);
  534.                                 $manager->setFirstname($firstname);
  535.                                 $manager->setEmail($email);
  536.                                 $manager->setLocale($hierarchicalList->getUser()->getLocale());
  537.                                 $manager->setCompany($hierarchicalList->getUser()->getCompany());
  538.                                 $manager->setUsername($email);
  539.                                 if($importExportManager->checkUserValid($manager)){
  540.                                     $entityManager->persist($manager);
  541.                                     $entityManager->flush();
  542.                                 } else{
  543.                                     $msg $translator->trans(
  544.                                         "Merci de saisir des données valides.",
  545.                                         array(), 'client_bo'
  546.                                     );
  547.                                     $this->addFlash("error"$msg);
  548.                                     return $this->redirectToRoute('client_hierarchical_list_add_manager', array('token' => $token'id' => $id));
  549.                                 }
  550.                             }
  551.                             $hierarchicalList->setManagerUser($manager);
  552.                             $hierarchicalList->setSuperiorUsers([$manager->getId()]);
  553.                             $entityManager->persist($manager);
  554.                             $entityManager->persist($hierarchicalList);
  555.                             $entityManager->flush();
  556.                             $msg $translator->trans(
  557.                                 "Votre manager a bien été ajouté, vous pouvez désormais saisir votre liste",
  558.                                 array(), 'client_bo'
  559.                             );
  560.                             $this->addFlash("success"$msg);
  561.                             return $this->redirectToRoute('client_hierarchical_list_validation', array('token' => $token'id' => $id));
  562.                         } else {
  563.                             $msg $translator->trans(
  564.                                 "Merci de saisir des données valides.",
  565.                                 array(), 'client_bo'
  566.                             );
  567.                             $this->addFlash("error"$msg);
  568.                             return $this->redirectToRoute('client_hierarchical_list_add_manager', array('token' => $token'id' => $id));
  569.                         }
  570.                     }
  571.                 }
  572.                 return $this->render('AdminBundle/Hierarchical/client_add_manager.html.twig', array(
  573.                     'hierarchicalList' => $hierarchicalList,
  574.                     'managerForm' => $managerForm->createView(),
  575.                 ));
  576.             } else {
  577.                 return $this->render('AdminBundle/Hierarchical/manager_already_added.html.twig', array('token' => $token'id' => $id));
  578.             }
  579.         } else {
  580.             return $this->render('AdminBundle/Hierarchical/client_error.html.twig');
  581.         }
  582.     }
  583.     /**
  584.      * @Route("/hierarchical/add-user/{token}/{id}", name="hierarchical_list_add_user_validation")
  585.      */
  586.     public function hierarchicalListAddUserAction(Request $request$token$idEntityManagerInterface $entityManagerUserManager $userManagerUserPasswordHasherInterface $passwordHasher)
  587.     {
  588.         if ($request->isXmlHttpRequest()) {
  589.             $hierarchicalList $entityManager->getRepository(HierarchicalList::class)->find($id);
  590.             if($hierarchicalList->getGuestToken() == $token || $hierarchicalList->getNoManagerToken() == $token) {
  591.                 $lastname $request->get('lastname');
  592.                 $firstname $request->get('firstname');
  593.                 $email $request->get('email');
  594.                 $u $entityManager->getRepository(User::class)->findOneBy(array('email' => $email));
  595.                 if (!$u) {
  596.                     $u = new User();
  597.                     $u->setFirstname($firstname);
  598.                     $u->setLastname($lastname);
  599.                     $u->setEmail($email);
  600.                     $u->setUsername($email);
  601.                     $u->setLocale($request->getLocale());
  602.                     $plainpassword substr(str_shuffle(str_repeat($x='0123456789abcdefghjklmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ'ceil(12/strlen($x)) )),1,12);
  603.                     $password $passwordHasher->hashPassword(
  604.                         $u,
  605.                         $plainpassword
  606.                     );
  607.                     $u->setPassword($password);
  608.                     $entityManager->persist($u);
  609.                     $entityManager->flush();
  610.                     $userManager->createHierarchicalList($u);
  611.                     return new JsonResponse(array('status' => 'ok''user' => array('id' => $u->getId(), 'firstname' => $firstname'lastname' => $lastname'email' => $email)));
  612.                 } else {
  613.                     return new JsonResponse(array('status' => 'ok''user' => array('id' => $u->getId(), 'firstname' => $firstname'lastname' => $lastname'email' => $email)));
  614.                 }
  615.             } else {
  616.                 return new JsonResponse(array('status' => 'error'));
  617.             }
  618.         } else {
  619.             return New Response(""401);
  620.         }
  621.     }
  622. }