src/EventListener/ActivityListener.php line 90

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Entity\Activity;
  4. use App\Entity\Member;
  5. use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
  6. use Symfony\Component\HttpKernel\HttpKernel;
  7. class ActivityListener
  8. {
  9.     public $em$token$router$security;
  10.     public function __construct($em null$token null$router null$security null)
  11.     {
  12.         $this->em $em;
  13.         $this->token $token;
  14.         $this->router $router;
  15.         $this->security $security;
  16.     }
  17.     /**
  18.      * Update the user "lastActivity" on each request
  19.      * @param FilterControllerEvent $event
  20.      */
  21.     public function onCoreController(FilterControllerEvent $event)
  22.     {
  23.         // Here we are checking that the current request is a 'MASTER_REQUEST', and ignore any subrequest in the process (for example when doing a render() in a twig template)
  24.         if ($event->getRequestType() !== HttpKernel::MASTER_REQUEST) {
  25.             return;
  26.         }
  27.         if ($this->token->getToken()) {
  28.             $member $this->token->getToken()->getUser();
  29.             $date = new \DateTime('now');
  30.             if (($member instanceof Member) && !($member->isActiveNow())) {
  31.                 $member->setLastActivity($date->getTimestamp());
  32.                 $this->em->flush($member);
  33.             }
  34.             if (($member instanceof Member) && !$member->canBeLogged() && !$this->security->isGranted('ROLE_PREVIOUS_ADMIN')) {
  35.                 // new RedirectResponse($this->router->generate('app_frontend_member_logout'));
  36.                 $locale $event->getRequest()->attributes->all()['_locale'];
  37.                 header('Location: /'.$locale.'/logout');
  38.                 die();
  39.             }
  40.         }
  41.         // Registrar la ruta
  42.         $route $event->getRequest()->attributes->all()['_route'];
  43.         $activitiesJson file_get_contents('route.json');
  44.         $activities json_decode($activitiesJsontrue);
  45.         foreach ($activities as $key => $value) {
  46.             if ($key != 'NotController') {
  47.                 for ($a 0$a count($value); $a++) {
  48.                     if ($value[$a]['route'] == $route) {
  49.                         $activity = new Activity();
  50.                         if ($member instanceof Member) {
  51.                             $activity->setIdMember($member->getIdMember());
  52.                         }
  53.                         $activity->setRoute($route);
  54.                         $activity->setDate($date->getTimestamp());
  55.                         if (isset($event->getRequest()->attributes->all()['_locale'])) {
  56.                             $activity->setLocale($event->getRequest()->attributes->all()['_locale']);
  57.                         }
  58.                         $activity->setParams(json_encode($event->getRequest()->attributes->all()['_route_params'], JSON_FORCE_OBJECT JSON_NUMERIC_CHECK));
  59.                         $activity->setRequest(json_encode($event->getRequest()->request->all(), JSON_FORCE_OBJECT JSON_NUMERIC_CHECK));
  60.                         // Añadimos el campo comodín si es que existe
  61.                         if (isset($value[$a]['wildcard'])) {
  62.                             if (isset($event->getRequest()->request->all()[$value[$a]['wildcard']])) {
  63.                                 $activity->setWildcard($event->getRequest()->request->all()[$value[$a]['wildcard']]);
  64.                             } else if (isset($event->getRequest()->attributes->all()[$value[$a]['wildcard']])) {
  65.                                 $activity->setWildcard($event->getRequest()->attributes->all()[$value[$a]['wildcard']]);
  66.                             }
  67.                         }
  68.                         $this->em->persist($activity);
  69.                         $this->em->flush();
  70.                     }
  71.                 }
  72.             }
  73.         }
  74.     }
  75.     /**
  76.      * Check if user is on mobile device
  77.      */
  78.     public function onMobileDevice(FilterControllerEvent $event)
  79.     {
  80.         $session $event->getRequest()->getSession();
  81.         $test  is_numeric(strpos(strtolower($_SERVER['HTTP_USER_AGENT']), "mobile"));
  82.         $session->set('mobile'$test);
  83.     }
  84. }