Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / web / modules / contrib / devel / webprofiler / src / DataCollector / EventsDataCollector.php
1 <?php
2
3 namespace Drupal\webprofiler\DataCollector;
4
5 use Drupal\Core\StringTranslation\StringTranslationTrait;
6 use Drupal\webprofiler\DrupalDataCollectorInterface;
7 use Drupal\webprofiler\EventDispatcher\EventDispatcherTraceableInterface;
8 use Symfony\Component\EventDispatcher\EventDispatcherInterface;
9 use Symfony\Component\HttpFoundation\Request;
10 use Symfony\Component\HttpFoundation\Response;
11 use Symfony\Component\HttpKernel\DataCollector\DataCollector;
12 use Symfony\Component\HttpKernel\DataCollector\LateDataCollectorInterface;
13
14 /**
15  * Class EventsDataCollector
16  */
17 class EventsDataCollector extends DataCollector implements DrupalDataCollectorInterface, LateDataCollectorInterface {
18
19   use StringTranslationTrait, DrupalDataCollectorTrait;
20
21   /**
22    * @var \Symfony\Component\EventDispatcher\EventDispatcherInterface
23    */
24   private $eventDispatcher;
25
26   /**
27    * EventsDataCollector constructor.
28    *
29    * @param \Symfony\Component\EventDispatcher\EventDispatcherInterface $event_dispatcher
30    */
31   public function __construct(EventDispatcherInterface $event_dispatcher) {
32     $this->eventDispatcher = $event_dispatcher;
33   }
34
35   /**
36    * {@inheritdoc}
37    */
38   public function collect(Request $request, Response $response, \Exception $exception = NULL) {
39     $this->data = [
40       'called_listeners' => [],
41       'called_listeners_count' => 0,
42       'not_called_listeners' => [],
43       'not_called_listeners_count' => 0,
44     ];
45   }
46
47   /**
48    * {@inheritdoc}
49    */
50   public function lateCollect() {
51     if ($this->eventDispatcher instanceof EventDispatcherTraceableInterface) {
52       $countCalled = 0;
53       $calledListeners = $this->eventDispatcher->getCalledListeners();
54       foreach ($calledListeners as &$events) {
55         foreach ($events as &$priority) {
56           foreach ($priority as &$listener) {
57             $countCalled++;
58             $listener['clazz'] = $this->getMethodData($listener['class'], $listener['method']);
59           }
60         }
61       }
62
63       $countNotCalled = 0;
64       $notCalledListeners = $this->eventDispatcher->getNotCalledListeners();
65       foreach ($notCalledListeners as $events) {
66         foreach ($events as $priority) {
67           foreach ($priority as $listener) {
68             $countNotCalled++;
69           }
70         }
71       }
72
73       $this->data = [
74         'called_listeners' => $calledListeners,
75         'called_listeners_count' => $countCalled,
76         'not_called_listeners' => $notCalledListeners,
77         'not_called_listeners_count' => $countNotCalled,
78       ];
79     }
80   }
81
82   /**
83    * @return array
84    */
85   public function getCalledListeners() {
86     return $this->data['called_listeners'];
87   }
88
89   /**
90    * @return array
91    */
92   public function getNotCalledListeners() {
93     return $this->data['not_called_listeners'];
94   }
95
96   /**
97    * @return int
98    */
99   public function getCalledListenersCount() {
100     return $this->data['called_listeners_count'];
101   }
102
103   /**
104    * @return int
105    */
106   public function getNotCalledListenersCount() {
107     return $this->data['not_called_listeners_count'];
108   }
109
110   /**
111    * {@inheritdoc}
112    */
113   public function getName() {
114     return 'events';
115   }
116
117   /**
118    * @return mixed
119    */
120   public function getData() {
121     return $this->data;
122   }
123
124   /**
125    * {@inheritdoc}
126    */
127   public function getTitle() {
128     return $this->t('Events');
129   }
130
131   /**
132    * {@inheritdoc}
133    */
134   public function getPanelSummary() {
135     return $this->t('Called listeners: @listeners', ['@listeners' => $this->getCalledListenersCount()]);
136   }
137
138   /**
139    * {@inheritdoc}
140    */
141   public function getIcon() {
142     return 'iVBORw0KGgoAAAANSUhEUgAAABUAAAAcCAYAAACOGPReAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABFJJREFUeNrkVVlIY2cY/RMTE81NMkkajUs1OBqkiVsjjAtStGrtSGyFjOjAQNVCKRb66ot9KrjgQx+FUgTBKkURbIfighWl4r6h44pajcZEo3ESTeKS9PzB2AyNZaD1qRcOem+S83/f+c53Lsvj8ZD/+mKTB7gehJTj+2d9fZ1MTk6S0NBQSW9vb97e3t7jmpqaXzIzM185HA7vd4KDg8nGxoaysbGxVCwWm/V6/aDL5TKlpKSQpKSkv5NyuVxyc3Mj7e7u/jw2NjYxJyfnMDIykmGz2UQgEBAWi0XcbjeRSqWhZWVl4v39fXVXV5cqNzf3exxmCNj+9fU1MzQ09JVWq32sUqmMu7u7QhwiDwoKIoeHh2R7e5twOByCwcrQhUShUJjz8vJkw8PDX5+fn8sDkvb3938YHR39rlAoNBoMBgGqtWxubnJRKbu9vZ20trZSQoJnvKioKMvZ2Rn/6urKmpqayvT19ekCks7NzaUnJyeboK0kPj7+cGZmJprH4zGnp6duEBFUTg4ODqjmIfPz87GQxoRnori4ODOKUPuTsnw+RRvPGIYJMZvNDNplYmJiLvPz839oamoSj4yMfAJNuRqN5mV9ff0fOPDF1NSUAt85lclkDkjnys7O/vGOlZLeQgjIgUggnmqHqmMqKip+z8jI8MAFnpKSkpXZ2dn38JkIUAFRQNjt/R2Xv09twBFwAGwClunp6efLy8tZdFgUW1tbiaOjo1/is9fUhcA+YL69fzvzSyQSEQZHfBJBT4J2Bf9qo9Rq9bxcLndeXl4STJrA8B4Mc/atN4pesAk5OTkh1PB0exYXF/kWi4UTFhZG+Hw+wZQJ5BDR7fEPIroYASu9uLggJpOJYO2I0+kkqI47Njb2MdzAKS4uXisvL5/FurIGBgaeYoDS1dVVsrKyQpaWlghsF7hS2IJERER4T4U/qckT4ccP6BYplco+rOcxqn0fZFqj0fgkLS3tV18m0EICktJV9F101xcWFj5Cu+HQ1YGNoeSXWGErpv8IwVOSlZXVh7xw0zy4V1MY3/uXWgetMzB8EZUHw7lKSEjgQ0MONLei2kcTExN5R0dHMehshw7x3umLRKI7YDhaDOSJ18hstq2qquobLMG30DKYkuzs7KggTa5Pf4p/rJReSCud1WplEBYuSMGrra39FG1ywsPDgwsLC+0YFoMAKi0qKupA5c57K0V1XjsdHx+/g6mXUksVFBS8wmF23FeMj48/w7PXiLsxePcG65qPDNCsra15XRCQFNP1AgRPMaA4aOvp6OjQ2O12cVtb20vE389YAHFLS0sO2vbYbLYQHKRHShEEy5ul+kIAe02Q5vy6urouTNyDV8VNT0/PBGzzxW1wRIHsM7T+W3V1tROvEE9lZeUCKlVgSfyD6S9SGsKdnZ1pOp3OkJ6efj04OPgTnmsAlv8PACXa/Q4L4UByuZqbm/UNDQ1vkLL+3+/9ByH9U4ABADscgvUMKuLiAAAAAElFTkSuQmCC';
143   }
144 }