1: <?php
2: 3: 4: 5:
6:
7: namespace Peg\Lib\Signals;
8:
9: 10: 11: 12:
13: class SignalHandler
14: {
15:
16: 17: 18:
19: private static $listeners = array();
20:
21: 22: 23:
24: private function __construct(){}
25:
26: 27: 28: 29: 30: 31:
32: public static function Send($signal_type, \Peg\Lib\Signals\SignalData &$signal_data = null)
33: {
34: if(!isset(self::$listeners[$signal_type]))
35: return;
36:
37: foreach(self::$listeners[$signal_type] as $callback_data)
38: {
39: $callback = $callback_data['callback'];
40:
41: if(is_object($signal_data))
42: $callback($signal_data);
43: else
44: $callback();
45: }
46: }
47:
48: 49: 50: 51: 52: 53:
54: public static function Listen($signal_type, $callback, $priority = 10)
55: {
56: if(!isset(self::$listeners[$signal_type]))
57: self::$listeners[$signal_type] = array();
58:
59: self::$listeners[$signal_type][] = array(
60: 'callback' => $callback,
61: 'priority' => $priority
62: );
63:
64: self::$listeners[$signal_type] = self::Sort(
65: self::$listeners[$signal_type], 'priority'
66: );
67: }
68:
69: 70: 71: 72: 73:
74: public static function Unlisten($signal_type, $callback)
75: {
76: if(!isset(self::$listeners[$signal_type]))
77: return;
78:
79: if(is_array(self::$listeners[$signal_type]))
80: {
81: foreach(self::$listeners[$signal_type] as $position => $callback_data)
82: {
83: $stored_callback = $callback_data['callback'];
84:
85: if($callback == $stored_callback)
86: {
87: unset(self::$listeners[$signal_type][$position]);
88: break;
89: }
90: }
91: }
92:
93: if(count(self::$listeners[$signal_type]) <= 0)
94: unset(self::$listeners[$signal_type]);
95: }
96:
97: 98: 99: 100: 101: 102: 103: 104: 105:
106: public static function Sort($data_array, $field_name, $sort_method = SORT_ASC)
107: {
108: $sorted_array = array();
109:
110: if(is_array($data_array))
111: {
112: $field_to_sort_by = array();
113: $new_id_position = array();
114:
115: foreach($data_array as $key=>$fields)
116: {
117: $field_to_sort_by[$key] = $fields[$field_name];
118: $new_id_position[$key] = $key;
119: }
120:
121: array_multisort($field_to_sort_by, $sort_method, $new_id_position, $sort_method);
122:
123: foreach($new_id_position as $id)
124: {
125: $sorted_array[$id] = $data_array[$id];
126: }
127: }
128:
129: return $sorted_array;
130: }
131:
132: }