Version 1
[yaffs-website] / web / modules / contrib / devel / webprofiler / src / DataCollector / EventsDataCollector.php
1 <?php
2
3 namespace Drupal\webprofiler\DataCollector;
4
5 use Drupal\webprofiler\DrupalDataCollectorInterface;
6 use Drupal\Core\StringTranslation\StringTranslationTrait;
7 use Symfony\Component\EventDispatcher\EventSubscriberInterface;
8 use Symfony\Component\HttpKernel\DataCollector\EventDataCollector as BaseEventDataCollector;
9
10 /**
11  * Class EventsDataCollector
12  */
13 class EventsDataCollector extends BaseEventDataCollector implements DrupalDataCollectorInterface {
14
15   use StringTranslationTrait, DrupalDataCollectorTrait;
16
17   /**
18    * @return int
19    */
20   public function getCalledListenersCount() {
21     return count($this->getCalledListeners());
22   }
23
24   /**
25    * @return int
26    */
27   public function getNotCalledListenersCount() {
28     return count($this->getNotCalledListeners());
29   }
30
31   /**
32    * {@inheritdoc}
33    */
34   public function setCalledListeners(array $listeners) {
35     $listeners = $this->computePriority($listeners);
36     $this->data['called_listeners'] = $listeners;
37   }
38
39   /**
40    * Adds the priority value to the $listeners array.
41    *
42    * @param array $listeners
43    * @return array
44    */
45   private function computePriority(array $listeners) {
46     foreach ($listeners as &$listener) {
47       if (is_subclass_of($listener['class'],  EventSubscriberInterface::class)) {
48         foreach ($listener['class']::getSubscribedEvents() as $event => $methods) {
49
50           if (is_string($methods)) {
51             $methods = [[$methods], 0];
52           }
53           else {
54             if (is_string($methods[0])) {
55               $methods = [$methods];
56             }
57           }
58
59           foreach ($methods as $method) {
60             if ($listener['event'] === $event) {
61               if ($listener['method'] === $method[0]) {
62                 $listener['priority'] = isset($method[1]) ? $method[1] : 0;
63               }
64             }
65           }
66         }
67       } else {
68         $listener['priority'] = isset($listener['priority']) ? $listener['priority'] : 0;
69       }
70     }
71
72     return $listeners;
73   }
74
75   /**
76    * {@inheritdoc}
77    */
78   public function getTitle() {
79     return $this->t('Events');
80   }
81
82   /**
83    * {@inheritdoc}
84    */
85   public function getPanelSummary() {
86     return $this->t('Called listeners: @listeners', ['@listeners' => count($this->getCalledListeners())]);
87   }
88
89   /**
90    * {@inheritdoc}
91    */
92   public function getIcon() {
93     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';
94   }
95 }