|
|
|
@ -20,19 +20,22 @@ class OC_Hook{ |
|
|
|
* TODO: write example |
|
|
|
*/ |
|
|
|
static public function connect( $signalclass, $signalname, $slotclass, $slotname ) { |
|
|
|
// Create the data structure
|
|
|
|
// If we're trying to connect to an emitting class that isn't
|
|
|
|
// yet registered, register it
|
|
|
|
if( !array_key_exists( $signalclass, self::$registered )) { |
|
|
|
self::$registered[$signalclass] = array(); |
|
|
|
} |
|
|
|
if( !array_key_exists( $signalname, self::$registered[$signalclass] )) { |
|
|
|
// If we're trying to connect to an emitting method that isn't
|
|
|
|
// yet registered, register it with the emitting class
|
|
|
|
if( !array_key_exists( $signalname, self::$registered[$signalclass] )) { |
|
|
|
self::$registered[$signalclass][$signalname] = array(); |
|
|
|
} |
|
|
|
|
|
|
|
// register hook
|
|
|
|
|
|
|
|
// Connect the hook handler to the requested emitter
|
|
|
|
self::$registered[$signalclass][$signalname][] = array( |
|
|
|
"class" => $slotclass, |
|
|
|
"name" => $slotname ); |
|
|
|
|
|
|
|
|
|
|
|
// No chance for failure ;-)
|
|
|
|
return true; |
|
|
|
} |
|
|
|
@ -49,14 +52,19 @@ class OC_Hook{ |
|
|
|
* TODO: write example |
|
|
|
*/ |
|
|
|
static public function emit( $signalclass, $signalname, $params = array()) { |
|
|
|
// Return false if there are no slots
|
|
|
|
|
|
|
|
// Return false if no hook handlers are listening to this
|
|
|
|
// emitting class
|
|
|
|
if( !array_key_exists( $signalclass, self::$registered )) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
// Return false if no hook handlers are listening to this
|
|
|
|
// emitting method
|
|
|
|
if( !array_key_exists( $signalname, self::$registered[$signalclass] )) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Call all slots
|
|
|
|
foreach( self::$registered[$signalclass][$signalname] as $i ) { |
|
|
|
try { |
|
|
|
|