src/Controller/AdminBundle/CRONController.php line 153

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