src/Controller/AdminBundle/CRONController.php line 157

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\RequestLog;
  12. use App\Entity\Skill;
  13. use App\Entity\User;
  14. use App\Manager\CossManager;
  15. use App\Manager\GamificationManager;
  16. use App\Manager\MailerManager;
  17. use App\Manager\UserManager;
  18. use App\Repository\BatchFeedbackEmailRepository;
  19. use DateTime;
  20. use Doctrine\ORM\EntityManagerInterface;
  21. use Exception;
  22. use Sonata\MediaBundle\Provider\Pool;
  23. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  24. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  25. use Symfony\Component\HttpFoundation\Request;
  26. use Symfony\Component\HttpFoundation\Response;
  27. use Symfony\Component\HttpFoundation\StreamedResponse;
  28. use Symfony\Component\Routing\Annotation\Route;
  29. use Symfony\Contracts\Translation\TranslatorInterface;
  30. class CRONController extends AbstractController
  31. {
  32.     private $CRON_TOKEN "ffd6600b2594eafae3b2f0528a4cb51a";
  33.     /**
  34.      * @Route("/cron/sendFeedbackRecap/{type}/{token}")
  35.      */
  36.     public function sendFeedbackRecapAction(Request $request$type$tokenEntityManagerInterface $entityManagerMailerManager $mailerManager)
  37.     {
  38.         if($token == $this->CRON_TOKEN) {
  39.             set_time_limit(0);
  40.             ini_set('max_execution_time'3600); //3600 seconds = 1 heur
  41.             $twoDays = new DateTime();
  42.             $twoDays->modify('-2 days');
  43.             $userRepository $entityManager->getRepository(User::class);
  44.             $users $userRepository->createQueryBuilder('u')
  45.                 ->select('distinct u')
  46.                 ->leftJoin('u.recipients',  'r')
  47.                 ->where("u.enabled = false or u.lastLogin is NULL or u.platform = 'browser'")
  48.                 ->andWhere('r.lastRecallDate <= :twoDays');
  49.             $users->setParameter('twoDays'$twoDays);
  50.             $users->orderBy('u.id');
  51.             $users $users->getQuery()->getResult();
  52.             foreach ($users as $user) {
  53.                 if($user->getLocale()){
  54.                     $request->setLocale($user->getLocale());
  55.                 } else {
  56.                     $request->setLocale('fr');
  57.                 }
  58.                 $mailerManager->sendFeedbackRecap($user$type);
  59.             }
  60.             return New Response(""200);
  61.         } else {
  62.             return New Response("access denied"401);
  63.         }
  64.     }
  65.     /**
  66.      * @Route("/cron/debug/quality/{token}")
  67.      */
  68.     public function debugQuality($tokenEntityManagerInterface $entityManagerMailerManager $mailerManagerUserManager $userManagerCossManager $cossManagerGamificationManager $gamificationManagerTranslatorInterface $translatorParameterBagInterface $parameterBag){
  69.         set_time_limit(0);
  70.         ini_set('max_execution_time'3600); //3600 seconds = 1 heure
  71.         ini_set('memory_limit''-1');
  72.         $user $entityManager->getRepository(User::class)->find(94);
  73.         $skill $entityManager->getRepository(Skill::class)->find(1);
  74.         $qualityIndex $gamificationManager->getCOSSQualityIndex($user$skill);
  75.         dump($qualityIndex);
  76.         $badgeUnlocked $entityManager->getRepository(Badge::class)->checkBadgeUnlockedOnSkill($user$skill);
  77.         dump($badgeUnlocked);
  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.             dump($batchFeedbacks);
  147.             $groupedFeedbacks = array();
  148.             foreach ($batchFeedbacks as $batchFeedback) {
  149.                 $feedback $batchFeedback->getFeedback();
  150.                 $request->setLocale($feedback->getSender()->getLocale());
  151.                 $senderRecipient $feedback->getSender()->getId() . '-' $feedback->getRecipient()->getId();
  152.                 // Get sender's photo url and name
  153.                 $featured $feedback->getSender()->getImage();
  154.                 if ($featured) {
  155.                     $provider $pool->getProvider($featured->getProviderName());
  156.                     $format $provider->getFormatName($featured"reference");
  157.                     $senderImage $request->getSchemeAndHttpHost()."/uploads/media/".$provider->generatePrivateUrl($featured$format);
  158.                 } else {
  159.                     $senderImage null;
  160.                 }
  161.                 $senderName $feedback->getSender()->getFirstname()." ".$feedback->getSender()->getLastname();
  162.                 if($feedback->getSender()->getCompany() != null){
  163.                     $senderCompany $feedback->getSender()->getCompany();
  164.                 } else {
  165.                     $senderCompany $translator->trans(
  166.                         "Pas de société", array(), 'mail'
  167.                     );
  168.                 }
  169.                 if (isset($groupedFeedbacks[$senderRecipient])) {
  170.                     $groupedFeedbacks[$senderRecipient]["feedbacks"][] = $feedback;
  171.                     $groupedFeedbacks[$senderRecipient]["batchFeedbacks"][] = $batchFeedback;
  172.                 } else {
  173.                     $groupedFeedbacks[$senderRecipient]["name"] = $senderName;
  174.                     $groupedFeedbacks[$senderRecipient]["company"] = $senderCompany;
  175.                     $groupedFeedbacks[$senderRecipient]["photo"] = $senderImage;
  176.                     $groupedFeedbacks[$senderRecipient]["feedbacks"] = array($feedback);
  177.                     $groupedFeedbacks[$senderRecipient]["batchFeedbacks"] = array($batchFeedback);
  178.                 }
  179.             }
  180.             $mailerManager->sendBatchFeedbackEmail($groupedFeedbacks);
  181.             foreach ($groupedFeedbacks as $groupedFeedback){
  182.                 foreach ($groupedFeedback['batchFeedbacks'] as $batchFeedback){
  183.                     $batchFeedback->setStatus(BatchFeedbackEmailRepository::STATUS_TREATED);
  184.                     $entityManager->persist($batchFeedback);
  185.                 }
  186.             }
  187.             $entityManager->flush();
  188.             return New Response(""200);
  189.         } else {
  190.             return New Response("access denied"401);
  191.         }
  192.     }
  193.     /**
  194.      * @Route("/cron/disable/licences/badge/{token}")
  195.      */
  196.     public function checkLicencesBadgesAccess($tokenEntityManagerInterface $entityManager)
  197.     {
  198.         if($token == $this->CRON_TOKEN) {
  199.             $users $entityManager->getRepository(User::class)->findAll();
  200.             foreach($users as $user){
  201.                 $badgesAccessExpirationDate $user->getLicenceEndDate();
  202.                 if($badgesAccessExpirationDate){
  203.                     $badgesAccessExpirationDate->modify('+3 months');
  204.                     $today = new DateTime();
  205.                     if ($badgesAccessExpirationDate >= $today) {
  206.                         $user->setBadgesAccess(false);
  207.                         $entityManager->persist($user);
  208.                     }
  209.                 } else {
  210.                     $user->setBadgesAccess(false);
  211.                     $entityManager->persist($user);
  212.                 }
  213.             }
  214.             $entityManager->flush();
  215.             return New Response(""200);
  216.         } else {
  217.             return New Response("access denied"401);
  218.         }
  219.     }
  220. }