Seditio Source
Root |
./othercms/xenForo 2.2.8/src/vendor/league/event/src/PriorityEmitter.php
<?php

namespace League\Event;

class
PriorityEmitter extends Emitter
{
   
/**
     * High priority.
     *
     * @var int
     */
   
const P_HIGH = 100;

   
/**
     * Normal priority.
     *
     * @var int
     */
   
const P_NORMAL = 0;

   
/**
     * Low priority.
     *
     * @var int
     */
   
const P_LOW = -100;

   
/**
     * Add a listener for an event.
     *
     * The first parameter should be the event name, and the second should be
     * the event listener. It may implement the League\Event\ListenerInterface
     * or simply be "callable". In this case, the priority emitter also accepts
     * an optional third parameter specifying the priority as an integer. You
     * may use one of our predefined constants here if you want.
     *
     * @param string                     $event
     * @param ListenerInterface|callable $listener
     * @param int                        $priority
     *
     * @return $this
     */
   
public function addListener($event, $listener, $priority = self::P_NORMAL)
    {
       
$listener = $this->ensureListener($listener);

        if ( ! isset(
$this->listeners[$event])) {
           
$this->listeners[$event] = [];
        }

       
$this->listeners[$event][] = [$listener, $priority];

        return
$this;
    }

   
/**
     * {@inheritdoc}
     */
   
public function removeListener($event, $listener)
    {
       
$listeners = [];

        if (
$this->hasListeners($event)) {
           
$listeners = $this->listeners[$event];
        }

       
$filter = function ($registered) use ($listener) {
            return !
$registered[0]->isListener($listener);
        };

       
$this->listeners[$event] = array_filter($listeners, $filter);

        return
$this;
    }

   
/**
     * {@inheritdoc}
     */
   
public function getListeners($event)
    {
        if ( !
$this->hasListeners($event)) {
            return [];
        }

       
$listeners = $this->listeners[$event];

       
usort($listeners, function ($a, $b) {
            return
$b[1] - $a[1];
        });

        return
array_map(function ($listener) {
            return
$listener[0];
        },
$listeners);
    }
}