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 }