src/Library/Subscribers/StatisticSubscriber.php line 58

Open in your IDE?
  1. <?php
  2. namespace App\Library\Subscribers;
  3. use App\Library\Database;
  4. use App\Library\Event\GrapperProcessEvent;
  5. use App\Library\Event\statisticEvent;
  6. use App\Library\Mailer as MailHandler;
  7. use App\models\acount;
  8. use App\models\grapperStatistik;
  9. use DateInterval;
  10. use DateTime;
  11. use Doctrine\DBAL\Exception;
  12. use Exception as CoreException;
  13. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  14. use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
  15. use Symfony\Component\Mime\Email;
  16. use Twig\Environment;
  17. use Twig\Error\LoaderError;
  18. use Twig\Error\RuntimeError;
  19. use Twig\Error\SyntaxError;
  20. use Twig\Loader\ArrayLoader;
  21. class StatisticSubscriber implements EventSubscriberInterface
  22. {
  23.     const STATISTICS_TEMPLATE __DIR__ '/../../templates/statistics.html.twig';
  24.     /**
  25.      * @return array[]
  26.      */
  27.     public static function getSubscribedEvents():array
  28.     {
  29.         return [
  30.             statisticEvent::EVENT=>[
  31.                 ['runStatistics',1000],
  32.             ],
  33.             GrapperProcessEvent::EVENT_STATISTIC=>[
  34.                 ['createStatistic'1000],
  35.             ]
  36.         ];
  37.     }
  38.     /**
  39.      * @param Database $database
  40.      * @param MailHandler $mailer
  41.      */
  42.     public function __construct(
  43.         private readonly Database $database,
  44.         private readonly MailHandler $mailer
  45.     ){
  46.     }
  47.     /**
  48.      * @param GrapperProcessEvent $event
  49.      * @return void
  50.      */
  51.     public function createStatistic(GrapperProcessEvent $event):void
  52.     {
  53.         $statistics = new grapperStatistik(null$event->getCustomerId(), $event->getAddressId());
  54.         $this->database->insert(grapperStatistik::CREATE_STATISTIC,$statistics->toInserArray());
  55.     }
  56.     /**
  57.      * @throws TransportExceptionInterface
  58.      * @throws RuntimeError
  59.      * @throws LoaderError
  60.      * @throws SyntaxError
  61.      * @throws Exception
  62.      * @throws CoreException
  63.      */
  64.     public function runStatistics(statisticEvent $event):void{
  65.         $this->mailer->initFree($_ENV['MAILER_DSN']);
  66.         $stmt $this->database->getConnection()->prepare(acount::GET_ALL_GRAPPER_CUSTOMERS);
  67.         $resultSet $stmt->executeQuery();
  68.         $loader = new ArrayLoader(
  69.             [
  70.                 'html.twig'=>file_get_contents(self::STATISTICS_TEMPLATE)
  71.             ]
  72.         );
  73.         $twig = new Environment($loader, [
  74.             'cache'=>__DIR__.'/../../var/twig',
  75.         ]);
  76.         $now = new DateTime();
  77.         $delta = new DateInterval('P7D');
  78.         $now->sub($delta);
  79.         while($row $resultSet->fetchAssociative()){
  80.             $stmt $this->database->getConnection()->prepare(grapperStatistik::FETCH_STATISTICS);
  81.             $stmt->bindValue(1$now->format('Y-m-d H:i:s'));
  82.             $stmt->bindValue(2$row['ID']);
  83.             $rowResultSet $stmt->executeQuery();
  84.             $dataArray = [];
  85.             while($arrayResult $rowResultSet->fetchAssociative()){
  86.                 $date = new DateTime($arrayResult['created']);
  87.                 $dateString $date->format('d.m.Y');
  88.                 if(!array_key_exists($dateString$dataArray)){
  89.                     $dataArray[$dateString] = [
  90.                         'events'=>0,
  91.                         'calls'=>0,
  92.                         'mailsSent'=>0,
  93.                     ];
  94.                 }
  95.                 $dataArray[$dateString]['events'] += (int)$arrayResult['event_count'];
  96.                 $dataArray[$dateString]['calls'] += (int)$arrayResult['meldemodul_call'];
  97.                 $dataArray[$dateString]['mailsSent']++;
  98.             }
  99.             $templateData = [
  100.                 'Name'=>$row['Name'],
  101.                 'Vorname'=>$row['Vorname'],
  102.                 'Firma'=>$row['Firma'],
  103.                 'Strasse'=>$row['Strasse'],
  104.                 'Plz'=>$row['Plz'],
  105.                 'Ort'=>$row['Ort'],
  106.                 'Land'=>$row['Land'],
  107.                 'Statistics'=>$dataArray
  108.             ];
  109.             $mail $twig->render('html.twig'$templateData);
  110.             $email = new Email();
  111.             $email->to(MailHandler::TEAM_ADDRESS);
  112.             //$email->to($row['EMail']);
  113.             $email->subject('Event Scout Übersicht der letzten Woche');
  114.             $email->html($mail);
  115.             $email->from(MailHandler::NO_REPLY);
  116.             $email->addReplyTo(MailHandler::SUPPORT);
  117.             $this->mailer->getMailer()->send($email);
  118.         }
  119.     }
  120. }