/** * Call all handlers for a given event * * Note: if a handler returns boolean false, any remaining handlers are skipped * @param sndsgd\Event|string $event An event, or a type/namespace combo * @param array.<string,mixed> $data Data to add to the event * @return boolean * @return boolean:false A handler returned false * @return boolean:true All handlers returned true or no handlers exist * @throws InvalidArgumentException If the event isn't a string */ public function fire($event, array $data = []) { if (is_string($event)) { $event = new Event($event); $event->setData($data); } else { if ($event instanceof Event) { if ($data) { $event->addData($data); } } else { throw new InvalidArgumentException("invalid value provided for 'event'; " . "expecting an event name as string"); } } $type = $event->getType(); $namespace = $event->getNamespace(); foreach ($this->eventHandlers as $handler) { if ($handler->canHandle($type, $namespace) && $handler->handle($event) === false) { return false; } } return true; }
/** * Set the verbosity for debug messages * * @param sndsgd\Event $ev An event fired when the field was parsed * @return void */ public static function setVerboseLevel(Event $ev) { $flag = $ev->getData('name'); $values = ['quiet' => Env::QUIET, 'verbose' => Env::V, 'v' => Env::V, 'vv' => Env::VV, 'vvv' => Env::VVV]; Env::setVerboseLevel($values[$flag]); }
/** * Create a new event handler * * @param string $event The type/namespace combo for an event */ public function __construct($event, callable $handler) { list($this->type, $this->namespace) = Event::split($event); $this->handler = $handler; }