eventName !== null ? get_class($this) : $this->eventName; } final public function setPrioritySlot($slot){ $this->prioritySlot = (int) $slot; } final public function getPrioritySlot(){ return (int) $this->prioritySlot; } public function isAllowed(){ return ($this->status & 0x7FFFFFFF) === BaseEvent::ALLOW; } public function setAllowed($forceAllow = false){ $this->status = BaseEvent::ALLOW & ($forceAllow === true ? BaseEvent::FORCE : 0); } public function isCancelled(){ return ($this->status & 0x7FFFFFFF) === BaseEvent::DENY; } public function setCancelled($forceCancel = false){ if($this instanceof CancellableEvent){ $this->status = BaseEvent::DENY & ($forceCancel === true ? BaseEvent::FORCE : 0); } return false; } public function isNormal(){ return $this->status === BaseEvent::NORMAL; } public function setNormal(){ $this->status = BaseEvent::NORMAL; } public function isForced(){ return ($this->status & BaseEvent::FORCE) > 0; } public static function getHandlerList(){ return static::$handlers; } public static function getPriorityList(){ return static::$handlerPriority; } public static function unregisterAll(){ static::$handlers = array(); static::$handlerPriority = array(); } public function register(callable $handler, $priority = EventPriority::NORMAL){ if($priority < EventPriority::MONITOR or $priority > EventPriority::LOWEST){ return false; } $identifier = Utils::getCallableIdentifier($handler); if(isset(static::$handlers[$identifier])){ //Already registered return false; }else{ static::$handlers[$identifier] = $handler; if(!isset(static::$handlerPriority[(int) $priority])){ static::$handlerPriority[(int) $priority] = array(); } static::$handlerPriority[(int) $priority][$identifier] = $handler; return true; } } public function unregister(callable $handler, $priority = EventPriority::NORMAL){ $identifier = Utils::getCallableIdentifier($handler); if(isset(static::$handlers[$identifier])){ if(isset(static::$handlerPriority[(int) $priority][$identifier])){ unset(static::$handlerPriority[(int) $priority][$identifier]); }else{ for($priority = EventPriority::MONITOR; $priority <= EventPriority::LOWEST; ++$priority){ unset(static::$handlerPriority[$priority][$identifier]); if(count(static::$handlerPriority[$priority]) === 0){ unset(static::$handlerPriority[$priority]); } } } unset(static::$handlers[$identifier]); return true; }else{ return false; } } }