src/Controller/AdminBundle/CRONController.php line 154

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by PhpStorm.
  4.  * User: grego
  5.  * Date: 07/11/2022
  6.  * Time: 12:25
  7.  */
  8. namespace App\Controller\AdminBundle;
  9. use App\Entity\Badge;
  10. use App\Entity\BatchFeedbackEmail;
  11. use App\Entity\Recipient;
  12. use App\Entity\RequestLog;
  13. use App\Entity\Skill;
  14. use App\Entity\User;
  15. use App\Manager\CossManager;
  16. use App\Manager\GamificationManager;
  17. use App\Manager\MailerManager;
  18. use App\Manager\MistralManager;
  19. use App\Manager\PeopleDataLabsManager;
  20. use App\Manager\UserManager;
  21. use App\Repository\BatchFeedbackEmailRepository;
  22. use App\Repository\RecipientRepository;
  23. use DateTime;
  24. use Doctrine\ORM\EntityManagerInterface;
  25. use Exception;
  26. use Sonata\MediaBundle\Provider\Pool;
  27. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  28. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  29. use Symfony\Component\HttpFoundation\Request;
  30. use Symfony\Component\HttpFoundation\Response;
  31. use Symfony\Component\HttpFoundation\StreamedResponse;
  32. use Symfony\Component\Routing\Annotation\Route;
  33. use Symfony\Contracts\Translation\TranslatorInterface;
  34. class CRONController extends AbstractController
  35. {
  36.     private $CRON_TOKEN "ffd6600b2594eafae3b2f0528a4cb51a";
  37.     /**
  38.      * @Route("/cron/sendFeedbackRecap/{type}/{token}")
  39.      */
  40.     public function sendFeedbackRecapAction(Request $request$type$tokenEntityManagerInterface $entityManagerMailerManager $mailerManager)
  41.     {
  42.         if($token == $this->CRON_TOKEN) {
  43.             set_time_limit(0);
  44.             ini_set('max_execution_time'3600); //3600 seconds = 1 heur
  45.             $twoDays = new DateTime();
  46.             $twoDays->modify('-2 days');
  47.             $userRepository $entityManager->getRepository(User::class);
  48.             $users $userRepository->createQueryBuilder('u')
  49.                 ->select('distinct u')
  50.                 ->leftJoin('u.recipients',  'r')
  51.                 ->where("u.enabled = false or u.lastLogin is NULL or u.platform = 'browser'")
  52.                 ->andWhere('r.lastRecallDate <= :twoDays or r.lastRecallDate is NULL');
  53.             $users->setParameter('twoDays'$twoDays);
  54.             $users->orderBy('u.id');
  55.             $users $users->getQuery()->getResult();
  56.             dump($users);
  57.             foreach ($users as $user) {
  58.                 if($user->getLocale()){
  59.                     $request->setLocale($user->getLocale());
  60.                 } else {
  61.                     $request->setLocale('fr');
  62.                 }
  63.                 $mailerManager->sendFeedbackRecap($user$type);
  64.             }
  65.             return New Response(""200);
  66.         } else {
  67.             return New Response("access denied"401);
  68.         }
  69.     }
  70.     /**
  71.      * @Route("/cron/debug/quality/{token}")
  72.      */
  73.     public function debugQuality($tokenEntityManagerInterface $entityManagerMailerManager $mailerManagerUserManager $userManagerCossManager $cossManagerGamificationManager $gamificationManagerPeopleDataLabsManager $peopleDataLabsManagerMistralManager $mistralManagerTranslatorInterface $translatorParameterBagInterface $parameterBag){
  74.         set_time_limit(0);
  75.         ini_set('max_execution_time'3600); //3600 seconds = 1 heure
  76.         ini_set('memory_limit''-1');
  77.         $user $entityManager->getRepository(User::class)->find(145);
  78.         return New Response("OK"200);
  79.     }
  80.     /**
  81.      * @Route("/cron/export/connections/{token}/{start}/{end}")
  82.      */
  83.     public function exportConnections($token$start$endEntityManagerInterface $entityManager)
  84.     {
  85.         if($token == $this->CRON_TOKEN) {
  86.             $startDate DateTime::createFromFormat('d-m-Y'$start);
  87.             $endDate DateTime::createFromFormat('d-m-Y'$end);
  88.             if($startDate && $endDate){
  89.                 $response = new StreamedResponse();
  90.                 $response->setCallback(function() use ($entityManager$startDate$endDate){
  91.                     $handle fopen('php://output''w+');
  92.                     fwrite($handleimplode(';',
  93.                             [
  94.                                 '"Id utilisateur"',
  95.                                 '"Prénom utilisateur"',
  96.                                 '"Nom utilisateur"',
  97.                                 '"Email utilisateur"',
  98.                                 '"Société utilisateur"',
  99.                                 '"Fonction utilisateur"',
  100.                                 '"Niveau hiérarchique utilisateur"',
  101.                                 '"Date connexion"',
  102.                                 '"Heure connexion"',
  103.                                 '"Date création"',
  104.                                 '"Date suppression"'
  105.                             ]) . PHP_EOL);
  106.                     $connexions $entityManager->getRepository(RequestLog::class)->getLogsBetweenDates($startDate$endDate);
  107.                     foreach ($connexions as $connexion){
  108.                         fwrite($handleimplode(';',
  109.                                 [
  110.                                     $connexion->getUser()->getId(),
  111.                                     $connexion->getUser()->getFirstname(),
  112.                                     $connexion->getUser()->getLastname(),
  113.                                     $connexion->getUser()->getEmail(),
  114.                                     $connexion->getUser()->getCompany(),
  115.                                     $connexion->getUser()->getJobTitle(),
  116.                                     $connexion->getUser()->getHierarchicalLevel(),
  117.                                     $connexion->getCreatedAt()->format("d/m/Y"),
  118.                                     $connexion->getCreatedAt()->format("H:i:s"),
  119.                                     $connexion->getUser()->getCreatedAt() ? $connexion->getUser()->getCreatedAt()->format('d/m/Y'): "",
  120.                                     $connexion->getUser()->getDeletedAt() ? $connexion->getUser()->getDeletedAt()->format('d/m/Y') : ""
  121.                                 ]) . PHP_EOL);
  122.                     }
  123.                     fclose($handle);
  124.                 });
  125.                 $date = new \DateTime();
  126.                 $now $date->format('d_m_Y_H_i_s');
  127.                 $filename "coss_b2c_connections_export".$now.".csv";
  128.                 $response->setStatusCode(200);
  129.                 $response->headers->set('Content-Type''text/csv; charset=utf-8');
  130.                 $response->headers->set('Content-Disposition','attachment; filename='.$filename.'');
  131.                 return $response;
  132.             } else {
  133.                 return New Response("wrong dates param"401);
  134.             }
  135.         } else {
  136.             return New Response("access denied"401);
  137.         }
  138.     }
  139.     /**
  140.      * @Route("/cron/send/batch/feedback/email/{token}")
  141.      */
  142.     public function sendBatchFeedbackEmail($tokenRequest $requestEntityManagerInterface $entityManagerMailerManager $mailerManagerPool $poolTranslatorInterface $translator)
  143.     {
  144.         if ($token == $this->CRON_TOKEN) {
  145.             $batchFeedbacks $entityManager->getRepository(BatchFeedbackEmail::class)->getPendingBatchFeedbacksPastFiveMinuts();
  146.             $groupedFeedbacks = array();
  147.             foreach ($batchFeedbacks as $batchFeedback) {
  148.                 $feedback $batchFeedback->getFeedback();
  149.                 $request->setLocale($feedback->getSender()->getLocale());
  150.                 $senderRecipient $feedback->getSender()->getId() . '-' $feedback->getRecipient()->getId();
  151.                 // Get sender's photo url and name
  152.                 $featured $feedback->getSender()->getImage();
  153.                 if ($featured) {
  154.                     $provider $pool->getProvider($featured->getProviderName());
  155.                     $format $provider->getFormatName($featured"reference");
  156.                     $senderImage $request->getSchemeAndHttpHost()."/uploads/media/".$provider->generatePrivateUrl($featured$format);
  157.                 } else {
  158.                     $senderImage null;
  159.                 }
  160.                 $senderName $feedback->getSender()->getFirstname()." ".$feedback->getSender()->getLastname();
  161.                 if($feedback->getSender()->getCompany() != null){
  162.                     $senderCompany $feedback->getSender()->getCompany();
  163.                 } else {
  164.                     $senderCompany $translator->trans(
  165.                         "Pas de société", array(), 'mail'
  166.                     );
  167.                 }
  168.                 if (isset($groupedFeedbacks[$senderRecipient])) {
  169.                     $groupedFeedbacks[$senderRecipient]["feedbacks"][] = $feedback;
  170.                     $groupedFeedbacks[$senderRecipient]["batchFeedbacks"][] = $batchFeedback;
  171.                 } else {
  172.                     $groupedFeedbacks[$senderRecipient]["name"] = $senderName;
  173.                     $groupedFeedbacks[$senderRecipient]["company"] = $senderCompany;
  174.                     $groupedFeedbacks[$senderRecipient]["photo"] = $senderImage;
  175.                     $groupedFeedbacks[$senderRecipient]["feedbacks"] = array($feedback);
  176.                     $groupedFeedbacks[$senderRecipient]["batchFeedbacks"] = array($batchFeedback);
  177.                 }
  178.             }
  179.             $mailerManager->sendBatchFeedbackEmail($groupedFeedbacks);
  180.             foreach ($groupedFeedbacks as $groupedFeedback){
  181.                 foreach ($groupedFeedback['batchFeedbacks'] as $batchFeedback){
  182.                     $batchFeedback->setStatus(BatchFeedbackEmailRepository::STATUS_TREATED);
  183.                     $entityManager->persist($batchFeedback);
  184.                 }
  185.             }
  186.             $entityManager->flush();
  187.             return New Response(""200);
  188.         } else {
  189.             return New Response("access denied"401);
  190.         }
  191.     }
  192.     /**
  193.      * @Route("/cron/disable/licences/badge/{token}")
  194.      */
  195.     public function checkLicencesBadgesAccess($tokenEntityManagerInterface $entityManager)
  196.     {
  197.         if($token == $this->CRON_TOKEN) {
  198.             $users $entityManager->getRepository(User::class)->findAll();
  199.             foreach($users as $user){
  200.                 $badgesAccessExpirationDate $user->getLicenceEndDate();
  201.                 if($badgesAccessExpirationDate){
  202.                     $badgesAccessExpirationDate->modify('+3 months');
  203.                     $today = new DateTime();
  204.                     if ($badgesAccessExpirationDate >= $today) {
  205.                         $user->setBadgesAccess(false);
  206.                         $entityManager->persist($user);
  207.                     }
  208.                 } else {
  209.                     $user->setBadgesAccess(false);
  210.                     $entityManager->persist($user);
  211.                 }
  212.             }
  213.             $entityManager->flush();
  214.             return New Response(""200);
  215.         } else {
  216.             return New Response("access denied"401);
  217.         }
  218.     }
  219.     /**
  220.      * @Route("/cron/analyse/recipients/{token}")
  221.      */
  222.     public function analyseRecipients($tokenEntityManagerInterface $entityManagerPeopleDataLabsManager $peopleDataLabsManagerMistralManager $mistralManager){
  223.         if($token == $this->CRON_TOKEN) {
  224.             set_time_limit(0);
  225.             ini_set('max_execution_time'600); //600 seconds = 10min
  226.             $pendingRecipients $entityManager->getRepository(Recipient::class)->findBy(array('status' => RecipientRepository::STATUS_PENDING'analysisStatus' => RecipientRepository::ANALYSIS_PENDING));
  227.             foreach ($pendingRecipients as $recipient) {
  228.                 try {
  229.                     $user $recipient->getAppUser();
  230.                     if(!$user->getValidator()){ // Analysis only for 5Feedback validation
  231.                         $userData $peopleDataLabsManager->getUserCareer($user);
  232.                         if ($userData['found'] == true) {
  233.                             $senderData = array(
  234.                                 "firstname" => $user->getFirstname(),
  235.                                 "lastname" => $user->getLastname(),
  236.                                 "email" => $user->getEmail(),
  237.                                 "career" => $userData['data']
  238.                             );
  239.                         } else {
  240.                             $senderData = array(
  241.                                 "firstname" => $user->getFirstname(),
  242.                                 "lastname" => $user->getLastname(),
  243.                                 "email" => $user->getEmail(),
  244.                                 "career" => array(
  245.                                     "company" => $user->getCompany(),
  246.                                     "job_title" => $user->getJobTitle(),
  247.                                 )
  248.                             );
  249.                         }
  250.                         $status "Réseau professionnel";
  251.                         switch ($recipient->getStatus()) {
  252.                             case RecipientRepository::SUPERIOR_RECIPIENT:
  253.                                 $status "Manager";
  254.                                 break;
  255.                             case RecipientRepository::PAIR_RECIPIENT:
  256.                                 $status "Collègue";
  257.                                 break;
  258.                             case RecipientRepository::GUEST_RECIPIENT:
  259.                                 $status "Réseau professionnel";
  260.                                 break;
  261.                         }
  262.                         $recipientData = array(
  263.                             "status" => $status,
  264.                             "firstname" => $recipient->getUser()->getFirstname(),
  265.                             "lastname" => $recipient->getUser()->getLastname(),
  266.                             "email" => $recipient->getUser()->getEmail(),
  267.                             "company" => $recipient->getCompany(),
  268.                             "job_title" => $recipient->getTitle()
  269.                         );
  270.                         $response $mistralManager->validateRecipient($senderData$recipientData);
  271.                         if ($response['status'] == true) {
  272.                             if (isset($response['data']['result'])) {
  273.                                 $recipient->setAnalysisData($response['data']['result']);
  274.                                 $recipient->setAnalysisStatus(RecipientRepository::ANALYSIS_DONE);
  275.                                 $entityManager->persist($recipient);
  276.                                 $entityManager->flush();
  277.                             }
  278.                         } else {
  279.                             $iterations $recipient->getAnalysisIteration();
  280.                             $iterations++;
  281.                             if ($iterations >= 5) {
  282.                                 $recipient->setAnalysisStatus(RecipientRepository::ANALYSIS_EXPIRED);
  283.                             } else {
  284.                                 $recipient->setAnalysisIteration($iterations);
  285.                             }
  286.                             $entityManager->persist($recipient);
  287.                             $entityManager->flush();
  288.                             continue;
  289.                         }
  290.                     }
  291.                 } catch (Exception $exception) {
  292.                     $iterations $recipient->getAnalysisIteration();
  293.                     $iterations++;
  294.                     if ($iterations >= 5) {
  295.                         $recipient->setAnalysisStatus(RecipientRepository::ANALYSIS_EXPIRED);
  296.                     } else {
  297.                         $recipient->setAnalysisIteration($iterations);
  298.                     }
  299.                     $entityManager->persist($recipient);
  300.                     $entityManager->flush();
  301.                     continue;
  302.                 }
  303.             }
  304.             return New Response(""200);
  305.         } else {
  306.             return New Response("access denied"401);
  307.         }
  308.     }
  309. }