00001 <?php
00024 require CORE_PATH . 'extensions/event/hook.php';
00025
00034 class Event
00035 {
00041 public static $data = null;
00047 protected static $_events = array();
00054 public static function has_handler($event)
00055 {
00056 return isset(self::$_events[$event]) && count(self::$_events[$event]);
00057 }
00064 public static function bind($event, $handler)
00065 {
00066 if(!isset(self::$_events[$event])) {
00067 self::$_events[$event] = array();
00068 }
00069 self::$_events[$event][] = $handler;
00070 }
00078 public static function before($event, $handler1, $handler2)
00079 {
00080 if(!isset(self::$_events[$event])) {
00081 self::$_events[$event] = array();
00082 }
00083 $i = array_search($handler, self::$_events[$event]);
00084 if($i===false) {
00085 self::$_events[$event][] = $handler2;
00086 } else {
00087 Util::array_insert(self::$_events[$event], $i, $handler2);
00088 }
00089 }
00097 public static function after($event, $handler1, $handler2)
00098 {
00099 if(!isset(self::$_events[$event])) {
00100 self::$_events[$event] = array();
00101 }
00102 $i = array_search($handler, self::$_events[$event]);
00103 if($i===false) {
00104 self::$_events[$event][] = $handler2;
00105 } else {
00106 Util::array_insert(self::$_events[$event], $i+1, $handler2);
00107 }
00108 }
00115 public static function unbind($event, $handler=false)
00116 {
00117 if($handler && isset(self::$_events[$event])) {
00118 $i = array_search($handler, self::$_events[$event]);
00119 if($i!==false)
00120 unset(self::$_events[$event][$i]);
00121 } else {
00122 self::$_events[$event] = array();
00123 }
00124 }
00132 public static function replace($event, $handler1, $handler2)
00133 {
00134 if(isset(self::$_events[$event])) {
00135 $i = array_search($handler1, self::$_events[$event]);
00136 if($i!==false) {
00137 self::$_events[$event][$i] = $handler2;
00138 return true;
00139 }
00140 }
00141 return false;
00142 }
00150 public static function trigger($event, $args = array())
00151 {
00152 $value = false;
00153 if(isset(self::$_events[$event])) {
00154 foreach(self::$_events[$event] as $handler) {
00155 $value = call_user_func_array($handler, $args);
00156 }
00157 }
00158
00159 self::$data = null;
00160 return $value;
00161 }
00162 }