Verzeichnisstruktur phpBB-3.2.0


Veröffentlicht
06.01.2017

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

(Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

Emitter.php

Zuletzt modifiziert: 09.10.2024, 12:57 - Dateigröße: 4.46 KiB


001  <?php
002  namespace GuzzleHttp\Event;
003   
004  /**
005   * Guzzle event emitter.
006   *
007   * Some of this class is based on the Symfony EventDispatcher component, which
008   * ships with the following license:
009   *
010   *     This file is part of the Symfony package.
011   *
012   *     (c) Fabien Potencier <fabien@symfony.com>
013   *
014   *     For the full copyright and license information, please view the LICENSE
015   *     file that was distributed with this source code.
016   *
017   * @link https://github.com/symfony/symfony/tree/master/src/Symfony/Component/EventDispatcher
018   */
019  class Emitter implements EmitterInterface
020  {
021      /** @var array */
022      private $listeners = [];
023   
024      /** @var array */
025      private $sorted = [];
026   
027      public function on($eventName, callable $listener, $priority = 0)
028      {
029          if ($priority === 'first') {
030              $priority = isset($this->listeners[$eventName])
031                  ? max(array_keys($this->listeners[$eventName])) + 1
032                  : 1;
033          } elseif ($priority === 'last') {
034              $priority = isset($this->listeners[$eventName])
035                  ? min(array_keys($this->listeners[$eventName])) - 1
036                  : -1;
037          }
038   
039          $this->listeners[$eventName][$priority][] = $listener;
040          unset($this->sorted[$eventName]);
041      }
042   
043      public function once($eventName, callable $listener, $priority = 0)
044      {
045          $onceListener = function (
046              EventInterface $event
047          ) use (&$onceListener, $eventName, $listener, $priority) {
048              $this->removeListener($eventName, $onceListener);
049              $listener($event, $eventName);
050          };
051   
052          $this->on($eventName, $onceListener, $priority);
053      }
054   
055      public function removeListener($eventName, callable $listener)
056      {
057          if (empty($this->listeners[$eventName])) {
058              return;
059          }
060   
061          foreach ($this->listeners[$eventName] as $priority => $listeners) {
062              if (false !== ($key = array_search($listener, $listeners, true))) {
063                  unset(
064                      $this->listeners[$eventName][$priority][$key],
065                      $this->sorted[$eventName]
066                  );
067              }
068          }
069      }
070   
071      public function listeners($eventName = null)
072      {
073          // Return all events in a sorted priority order
074          if ($eventName === null) {
075              foreach (array_keys($this->listeners) as $eventName) {
076                  if (empty($this->sorted[$eventName])) {
077                      $this->listeners($eventName);
078                  }
079              }
080              return $this->sorted;
081          }
082   
083          // Return the listeners for a specific event, sorted in priority order
084          if (empty($this->sorted[$eventName])) {
085              $this->sorted[$eventName] = [];
086              if (isset($this->listeners[$eventName])) {
087                  krsort($this->listeners[$eventName], SORT_NUMERIC);
088                  foreach ($this->listeners[$eventName] as $listeners) {
089                      foreach ($listeners as $listener) {
090                          $this->sorted[$eventName][] = $listener;
091                      }
092                  }
093              }
094          }
095   
096          return $this->sorted[$eventName];
097      }
098   
099      public function hasListeners($eventName)
100      {
101          return !empty($this->listeners[$eventName]);
102      }
103   
104      public function emit($eventName, EventInterface $event)
105      {
106          if (isset($this->listeners[$eventName])) {
107              foreach ($this->listeners($eventName) as $listener) {
108                  $listener($event, $eventName);
109                  if ($event->isPropagationStopped()) {
110                      break;
111                  }
112              }
113          }
114   
115          return $event;
116      }
117   
118      public function attach(SubscriberInterface $subscriber)
119      {
120          foreach ($subscriber->getEvents() as $eventName => $listeners) {
121              if (is_array($listeners[0])) {
122                  foreach ($listeners as $listener) {
123                      $this->on(
124                          $eventName,
125                          [$subscriber, $listener[0]],
126                          isset($listener[1]) ? $listener[1] : 0
127                      );
128                  }
129              } else {
130                  $this->on(
131                      $eventName,
132                      [$subscriber, $listeners[0]],
133                      isset($listeners[1]) ? $listeners[1] : 0
134                  );
135              }
136          }
137      }
138   
139      public function detach(SubscriberInterface $subscriber)
140      {
141          foreach ($subscriber->getEvents() as $eventName => $listener) {
142              $this->removeListener($eventName, [$subscriber, $listener[0]]);
143          }
144      }
145  }
146