src/Controller/AdminBundle/CRONController.php line 166

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.             foreach ($users as $user) {
  57.                 if($user->getLocale()){
  58.                     $request->setLocale($user->getLocale());
  59.                 } else {
  60.                     $request->setLocale('fr');
  61.                 }
  62.                 \Sentry\withScope(function (\Sentry\State\Scope $scope) use ($user$mailerManager$type) {
  63.                     $scope->setUser([
  64.                         'id' => $user->getId(),
  65.                         'email' => $user->getEmail(),
  66.                     ]);
  67.                     $scope->setTag('type''email');
  68.                     try {
  69.                         $mailerManager->sendFeedbackRecap($user$type);
  70.                     } catch (\Throwable $e) {
  71.                         \Sentry\captureException($e);
  72.                     }
  73.                 });
  74.             }
  75.             return New Response(""200);
  76.         } else {
  77.             return New Response("access denied"401);
  78.         }
  79.     }
  80.     /**
  81.      * @Route("/cron/debug/quality/{token}")
  82.      */
  83.     public function debugQuality($tokenEntityManagerInterface $entityManagerMailerManager $mailerManagerUserManager $userManagerCossManager $cossManagerGamificationManager $gamificationManagerPeopleDataLabsManager $peopleDataLabsManagerMistralManager $mistralManagerTranslatorInterface $translatorParameterBagInterface $parameterBag){
  84.         set_time_limit(0);
  85.         ini_set('max_execution_time'3600); //3600 seconds = 1 heure
  86.         ini_set('memory_limit''-1');
  87.         $user $entityManager->getRepository(User::class)->find(145);
  88.         return New Response("OK"200);
  89.     }
  90.     /**
  91.      * @Route("/cron/export/connections/{token}/{start}/{end}")
  92.      */
  93.     public function exportConnections($token$start$endEntityManagerInterface $entityManager)
  94.     {
  95.         if($token == $this->CRON_TOKEN) {
  96.             $startDate DateTime::createFromFormat('d-m-Y'$start);
  97.             $endDate DateTime::createFromFormat('d-m-Y'$end);
  98.             if($startDate && $endDate){
  99.                 $response = new StreamedResponse();
  100.                 $response->setCallback(function() use ($entityManager$startDate$endDate){
  101.                     $handle fopen('php://output''w+');
  102.                     fwrite($handleimplode(';',
  103.                             [
  104.                                 '"Id utilisateur"',
  105.                                 '"Prénom utilisateur"',
  106.                                 '"Nom utilisateur"',
  107.                                 '"Email utilisateur"',
  108.                                 '"Société utilisateur"',
  109.                                 '"Fonction utilisateur"',
  110.                                 '"Niveau hiérarchique utilisateur"',
  111.                                 '"Date connexion"',
  112.                                 '"Heure connexion"',
  113.                                 '"Date création"',
  114.                                 '"Date suppression"'
  115.                             ]) . PHP_EOL);
  116.                     $connexions $entityManager->getRepository(RequestLog::class)->getLogsBetweenDates($startDate$endDate);
  117.                     foreach ($connexions as $connexion){
  118.                         fwrite($handleimplode(';',
  119.                                 [
  120.                                     $connexion->getUser()->getId(),
  121.                                     $connexion->getUser()->getFirstname(),
  122.                                     $connexion->getUser()->getLastname(),
  123.                                     $connexion->getUser()->getEmail(),
  124.                                     $connexion->getUser()->getCompany(),
  125.                                     $connexion->getUser()->getJobTitle(),
  126.                                     $connexion->getUser()->getHierarchicalLevel(),
  127.                                     $connexion->getCreatedAt()->format("d/m/Y"),
  128.                                     $connexion->getCreatedAt()->format("H:i:s"),
  129.                                     $connexion->getUser()->getCreatedAt() ? $connexion->getUser()->getCreatedAt()->format('d/m/Y'): "",
  130.                                     $connexion->getUser()->getDeletedAt() ? $connexion->getUser()->getDeletedAt()->format('d/m/Y') : ""
  131.                                 ]) . PHP_EOL);
  132.                     }
  133.                     fclose($handle);
  134.                 });
  135.                 $date = new \DateTime();
  136.                 $now $date->format('d_m_Y_H_i_s');
  137.                 $filename "coss_b2c_connections_export".$now.".csv";
  138.                 $response->setStatusCode(200);
  139.                 $response->headers->set('Content-Type''text/csv; charset=utf-8');
  140.                 $response->headers->set('Content-Disposition','attachment; filename='.$filename.'');
  141.                 return $response;
  142.             } else {
  143.                 return New Response("wrong dates param"401);
  144.             }
  145.         } else {
  146.             return New Response("access denied"401);
  147.         }
  148.     }
  149.     /**
  150.      * @Route("/cron/send/batch/feedback/email/{token}")
  151.      */
  152.     public function sendBatchFeedbackEmail($tokenRequest $requestEntityManagerInterface $entityManagerMailerManager $mailerManagerPool $poolTranslatorInterface $translator)
  153.     {
  154.         if ($token == $this->CRON_TOKEN) {
  155.             $batchFeedbacks $entityManager->getRepository(BatchFeedbackEmail::class)->getPendingBatchFeedbacksPastFiveMinuts();
  156.             $groupedFeedbacks = array();
  157.             foreach ($batchFeedbacks as $batchFeedback) {
  158.                 $feedback $batchFeedback->getFeedback();
  159.                 $request->setLocale($feedback->getSender()->getLocale());
  160.                 $senderRecipient $feedback->getSender()->getId() . '-' $feedback->getRecipient()->getId();
  161.                 // Get sender's photo url and name
  162.                 $featured $feedback->getSender()->getImage();
  163.                 if ($featured) {
  164.                     $provider $pool->getProvider($featured->getProviderName());
  165.                     $format $provider->getFormatName($featured"reference");
  166.                     $senderImage $request->getSchemeAndHttpHost()."/uploads/media/".$provider->generatePrivateUrl($featured$format);
  167.                 } else {
  168.                     $senderImage null;
  169.                 }
  170.                 $senderName $feedback->getSender()->getFirstname()." ".$feedback->getSender()->getLastname();
  171.                 if($feedback->getSender()->getCompany() != null){
  172.                     $senderCompany $feedback->getSender()->getCompany();
  173.                 } else {
  174.                     $senderCompany $translator->trans(
  175.                         "Pas de société", array(), 'mail'
  176.                     );
  177.                 }
  178.                 if (isset($groupedFeedbacks[$senderRecipient])) {
  179.                     $groupedFeedbacks[$senderRecipient]["feedbacks"][] = $feedback;
  180.                     $groupedFeedbacks[$senderRecipient]["batchFeedbacks"][] = $batchFeedback;
  181.                 } else {
  182.                     $groupedFeedbacks[$senderRecipient]["name"] = $senderName;
  183.                     $groupedFeedbacks[$senderRecipient]["company"] = $senderCompany;
  184.                     $groupedFeedbacks[$senderRecipient]["photo"] = $senderImage;
  185.                     $groupedFeedbacks[$senderRecipient]["feedbacks"] = array($feedback);
  186.                     $groupedFeedbacks[$senderRecipient]["batchFeedbacks"] = array($batchFeedback);
  187.                 }
  188.             }
  189.             $mailerManager->sendBatchFeedbackEmail($groupedFeedbacks);
  190.             foreach ($groupedFeedbacks as $groupedFeedback){
  191.                 foreach ($groupedFeedback['batchFeedbacks'] as $batchFeedback){
  192.                     $batchFeedback->setStatus(BatchFeedbackEmailRepository::STATUS_TREATED);
  193.                     $entityManager->persist($batchFeedback);
  194.                 }
  195.             }
  196.             $entityManager->flush();
  197.             return New Response(""200);
  198.         } else {
  199.             return New Response("access denied"401);
  200.         }
  201.     }
  202.     /**
  203.      * @Route("/cron/disable/licences/badge/{token}")
  204.      */
  205.     public function checkLicencesBadgesAccess($tokenEntityManagerInterface $entityManager)
  206.     {
  207.         if($token == $this->CRON_TOKEN) {
  208.             $users $entityManager->getRepository(User::class)->findAll();
  209.             foreach($users as $user){
  210.                 $badgesAccessExpirationDate $user->getLicenceEndDate();
  211.                 if($badgesAccessExpirationDate){
  212.                     $badgesAccessExpirationDate->modify('+3 months');
  213.                     $today = new DateTime();
  214.                     if ($badgesAccessExpirationDate >= $today) {
  215.                         $user->setBadgesAccess(false);
  216.                         $entityManager->persist($user);
  217.                     }
  218.                 } else {
  219.                     $user->setBadgesAccess(false);
  220.                     $entityManager->persist($user);
  221.                 }
  222.             }
  223.             $entityManager->flush();
  224.             return New Response(""200);
  225.         } else {
  226.             return New Response("access denied"401);
  227.         }
  228.     }
  229.     /**
  230.      * @Route("/cron/analyse/recipients/{token}")
  231.      */
  232.     public function analyseRecipients($tokenEntityManagerInterface $entityManagerPeopleDataLabsManager $peopleDataLabsManagerMistralManager $mistralManager){
  233.         if($token == $this->CRON_TOKEN) {
  234.             set_time_limit(0);
  235.             ini_set('max_execution_time'600); //600 seconds = 10min
  236.             $pendingRecipients $entityManager->getRepository(Recipient::class)->findBy(array('status' => RecipientRepository::STATUS_PENDING'analysisStatus' => RecipientRepository::ANALYSIS_PENDING));
  237.             foreach ($pendingRecipients as $recipient) {
  238.                 try {
  239.                     $user $recipient->getAppUser();
  240.                     if(!$user->getValidator()){ // Analysis only for 5Feedback validation
  241.                         dump($user);
  242.                         $userData $peopleDataLabsManager->getUserCareer($user);
  243.                         dump($userData);
  244.                         if ($userData['found'] == true) {
  245.                             $senderData = array(
  246.                                 "firstname" => $user->getFirstname(),
  247.                                 "lastname" => $user->getLastname(),
  248.                                 "email" => $user->getEmail(),
  249.                                 "career" => $userData['data']
  250.                             );
  251.                         } else {
  252.                             $senderData = array(
  253.                                 "firstname" => $user->getFirstname(),
  254.                                 "lastname" => $user->getLastname(),
  255.                                 "email" => $user->getEmail(),
  256.                                 "career" => array(
  257.                                     "company" => $user->getCompany(),
  258.                                     "job_title" => $user->getJobTitle(),
  259.                                 )
  260.                             );
  261.                         }
  262.                         $status "Réseau professionnel";
  263.                         switch ($recipient->getStatus()) {
  264.                             case RecipientRepository::SUPERIOR_RECIPIENT:
  265.                                 $status "Manager";
  266.                                 break;
  267.                             case RecipientRepository::PAIR_RECIPIENT:
  268.                                 $status "Collègue";
  269.                                 break;
  270.                             case RecipientRepository::GUEST_RECIPIENT:
  271.                                 $status "Réseau professionnel";
  272.                                 break;
  273.                         }
  274.                         $recipientData = array(
  275.                             "status" => $status,
  276.                             "firstname" => $recipient->getUser()->getFirstname(),
  277.                             "lastname" => $recipient->getUser()->getLastname(),
  278.                             "email" => $recipient->getUser()->getEmail(),
  279.                             "company" => $recipient->getCompany(),
  280.                             "job_title" => $recipient->getTitle()
  281.                         );
  282.                         dump($senderData);
  283.                         dump($recipientData);
  284.                         $response $mistralManager->validateRecipient($senderData$recipientData);
  285.                         dump($response);
  286.                         die();
  287.                         if ($response['status'] == true) {
  288.                             if (isset($response['data']['result'])) {
  289.                                 $recipient->setAnalysisData($response['data']['result']);
  290.                                 $recipient->setAnalysisStatus(RecipientRepository::ANALYSIS_DONE);
  291.                                 $entityManager->persist($recipient);
  292.                                 $entityManager->flush();
  293.                             }
  294.                         } else {
  295.                             $iterations $recipient->getAnalysisIteration();
  296.                             $iterations++;
  297.                             if ($iterations >= 5) {
  298.                                 $recipient->setAnalysisStatus(RecipientRepository::ANALYSIS_EXPIRED);
  299.                             } else {
  300.                                 $recipient->setAnalysisIteration($iterations);
  301.                             }
  302.                             $entityManager->persist($recipient);
  303.                             $entityManager->flush();
  304.                             continue;
  305.                         }
  306.                     }
  307.                 } catch (Exception $exception) {
  308.                     $iterations $recipient->getAnalysisIteration();
  309.                     $iterations++;
  310.                     if ($iterations >= 5) {
  311.                         $recipient->setAnalysisStatus(RecipientRepository::ANALYSIS_EXPIRED);
  312.                     } else {
  313.                         $recipient->setAnalysisIteration($iterations);
  314.                     }
  315.                     $entityManager->persist($recipient);
  316.                     $entityManager->flush();
  317.                     continue;
  318.                 }
  319.             }
  320.             return New Response(""200);
  321.         } else {
  322.             return New Response("access denied"401);
  323.         }
  324.     }
  325. }